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