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