GPL、MIT、Apache...开发者如何选择开源协议?一文讲清根本区别
個人開發(fā)者到底選擇GPL協(xié)議還是MIT協(xié)議?
為什么小米可以避開開源協(xié)議?
安卓是開源的,為什么華為還要自己造鴻蒙?
你知道史上最奇葩的開源協(xié)議嗎?
這些問題,都將在這篇文章中找到答案。
目錄
GPL-強制開源
LGPL-讓公司能夠白嫖代碼賣錢
MIT-受公司歡迎的寬松協(xié)議
BSD-別借我的名氣做宣傳!
Apache-避免法律糾紛
WTFPL-我不敢寫全稱的奇葩協(xié)議
開源,是很多個人開發(fā)者選擇的道路。
開源不僅能夠幫助整個生態(tài)共同進步,也能夠幫助個人開發(fā)者提升技術和名氣,這一點從vue就能看出來。
但是,開源的意思并不是沒有規(guī)則,全部無條件的免費提供給別人用,必須要遵循一定的規(guī)則,這個規(guī)則就是開源協(xié)議(Open Source License)。
世界上的開源協(xié)議大概有上百種,但是常用的只有5、6種,網(wǎng)絡上的很多文章只是籠統(tǒng)的介紹,并沒有說清楚這些協(xié)議的關鍵區(qū)別,以及每種協(xié)議對開發(fā)者的好處和限制。
為了幫助開發(fā)者區(qū)別這些協(xié)議,這篇文章對常見的幾種協(xié)議進行介紹,包括需要遵循的原則以及目前使用這些協(xié)議的代碼庫。
GPL-強制開源
GPL(GNU General Public License):GNU通用公共許可協(xié)議。
GPL協(xié)議的目的就是強制代碼開源和免費使用。
其最大的特點就是“開源的傳染性”。也就是說,假設某公司使用了具有GPL協(xié)議的代碼庫,那么他理論上也必須把自己的代碼庫開源。
注意,這里是理論上。
實際上,大公司可以有很多方法避開這個限制。
比如,2015年的時候,小米被指責違反了GPL協(xié)議,MIUI系統(tǒng)是基于Android開發(fā)的,而內(nèi)核Linux遵循的是GPL協(xié)議,那么小米也必須對自己的MIUI系統(tǒng)進行開源。
但是小米方面給出的答復是“很快就會開源”。這個很快,就慢慢拖著,反正我也不否認未來會開源。
另外,大公司還會選擇為自己維護一套閉源的商業(yè)代碼。
比如最著名的AOSP (Android Open-Source Project) 和Android。
AOSP是開源的安卓系統(tǒng),而Android這個詞已經(jīng)變成了谷歌的一個商標,以及附加了GMS等一些軟件的大系統(tǒng)。
什么意思呢,我們認為開源的那套系統(tǒng),實際上就像一個毛坯房,而真正附加了谷歌全家桶等軟件的Android,是精裝房,精裝的部分是不開源的。
所以華為一定要自己基于AOSP開發(fā)一套操作系統(tǒng),你要不這么干的話,只要谷歌禁止你使用Android,馬上就死。
說個笑話,GPL協(xié)議沒有限制你賣錢。
也就是說理論上,你可以把原汁原味的開源linux系統(tǒng)賣給別人,當然有沒有買家就另說了。
LGPL-讓公司能夠白嫖代碼賣錢
由于GPL協(xié)議的“開源傳染性”,一些公司肯定無法接受將自己的代碼開源出去,這還怎么賺錢呢?
于是出現(xiàn)了LGPL( GNU Lesser GPL),也就是限制更少(針對想閉源賣錢的公司)的GPL。
如果公司只是想白嫖某個LGPL協(xié)議的代碼庫,而不需要對其及進行修改,那就可以使用此協(xié)議。
具體來說就是。
如果使用動態(tài)鏈接LGPL代碼庫,則你不需要開源。
如果使用靜態(tài)鏈接,則你可以通過封裝一層的方式避免開源,可以簡單理解為只需要開源直接調(diào)用LGPL庫的那部分代碼就可以了。
是不是有些難以理解,沒關系,我們舉個例子。
假設有一個LGPL庫,名為LibA,現(xiàn)在你在源文件main.cpp中使用了此庫,如下:
int?main()?{LibA.init();LibA.DoSomething(); }按照LGPL協(xié)議,你的這個源文件必須要開源,因為它直接調(diào)用了LibA的代碼。
如何避免呢?封裝!
你再寫一個封裝文件wrapper.cpp,如下:
void?my_libA_init()?{LibA.init(); } void?my_libA_DoSomething()?{LibA.DoSomething(); }接下來,在你的main.cpp中調(diào)用你的封裝文件,相當于間接調(diào)用LibA:
int?main()?{my_libA_init();my_libA_DoSomething(); }那么,你只需要開源wrapper.cpp,而不需要開源main.cpp了,這樣就可以隱藏上層邏輯,也就能夠作為商業(yè)軟件賣錢了。
著名的GUI開發(fā)框架Qt使用了LGPL協(xié)議。
MIT-受公司歡迎的寬松協(xié)議
MIT(The Massachusetts Institute of TechnologyLicense,麻省理工學院許可協(xié)議)是眾多協(xié)議條款中,被廣泛使用的其中一種。與其他常見的軟件許可協(xié)議相比,MIT是相對寬松的軟件許可協(xié)議。
MIT協(xié)議允許你任意的使用、復制、修改原MIT代碼庫,隨便你賣錢還是開源,唯一需要遵循的原則就是在你的軟件中聲明你也使用的是MIT協(xié)議就行了。
而很多的公司企業(yè)在選用開源產(chǎn)品的時候都首選MIT協(xié)議,因為可以完全控制這些第三方的代碼,在必要的時候可以修改或者二次開發(fā)。
UI框架VUE、腳本語言Lua使用的就是MIT協(xié)議。
BSD-別借我的名氣做宣傳!
BSD協(xié)議幾經(jīng)變種,和MIT協(xié)議區(qū)別已經(jīng)不大,唯一的小區(qū)別是BSD要求開發(fā)者不能利用前人的名義做宣傳。比如我不能以某某升級版,某某加強版的名義來宣傳我的軟件。
Apache-避免法律糾紛
MIT和BSD協(xié)議有一個特點:簡潔。
這個特點具有兩面性。
一方面,作為個人開發(fā)者,可以放心的使用MIT或BSD協(xié)議而不太需要擔心背后的法律風險。
另一方面,大公司在開源自己軟件時,會擔心由于“過度寬松”導致產(chǎn)生一些法律糾紛。
因此,Apache協(xié)議出現(xiàn)了。
在保持較為寬松的開源基礎上,加上了一些避免法律沖突的限制。
比如,要求在每個許可文件中,必須保留再分發(fā)代碼中的任何原始著作權、專利、商標等。
因此,大公司往往傾向于使用Apache協(xié)議而不是稍微模糊的MIT協(xié)議。
百度的深度學習框架PaddlePaddle使用了Apache協(xié)議。
WTFPL-我不敢寫全稱的奇葩協(xié)議
如果你覺得上面的協(xié)議沒一個自由的,你崇尚絕對的自由開源,那么這條協(xié)議就太適合你了。
WTFPL協(xié)議是目前最奇葩的協(xié)議,奇葩在兩點。
第一點是,這個協(xié)議實際上沒有任何內(nèi)容,這里是這個協(xié)議的內(nèi)容。
鑒于這里面敏感詞太多我就不逐字翻譯了。
大致意思就是:你想干什么就干什么吧,你可以隨便改代碼,你也可以隨便改協(xié)議內(nèi)容,。
第二個奇葩點在于。
這個協(xié)議是已經(jīng)被認證了的協(xié)議......
你敢相信,這個奇葩協(xié)議是一個正兒八經(jīng)的正規(guī)軍。
現(xiàn)在,你搞清楚不同開源協(xié)議之間的區(qū)別了嗎?
總結
以上是生活随笔為你收集整理的GPL、MIT、Apache...开发者如何选择开源协议?一文讲清根本区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++ 中memset()
- 下一篇: 开源协议介绍(GPL,LGPL,BSD,