日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPL、MIT、Apache...开发者如何选择开源协议?一文讲清根本区别!

發布時間:2024/3/26 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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...开发者如何选择开源协议?一文讲清根本区别!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。