開源協(xié)議介紹

昨天和同事在討論Mongodb開源協(xié)議SSPL的時候,我在網(wǎng)上搜了一些資料,現(xiàn)在給大家做個簡單的介紹,讓大家對常見的開源協(xié)議有大概的了解,以后我們在做技術(shù)選型的時候也要注意一下,以免引起不必要的法律糾紛。

本次我們講講市場上比較常見的GPL, LGPL, AGPL和SSPL協(xié)議。

常見的開源協(xié)議

首先看下面這張圖(摘自網(wǎng)絡(luò))


image.png

其中右邊的3個協(xié)議對商業(yè)軟件是非常友好的。左邊的特別是GPL對商業(yè)不友好,具有很強的傳染性,即我們的軟件只要用了或修改了基于GPL協(xié)議的代碼,在分發(fā)軟件給到客戶的時候必須使用GPL協(xié)議,且要提供源碼或者讓客戶能自由地獲取到源碼。如我們使用的Linux內(nèi)核就是基于GPL發(fā)布,所以基于Linux內(nèi)核的發(fā)行版都是開源的。

GPL

GPL是一種帶有傳染性的開源協(xié)議,如果我們軟件中使用了帶GPL協(xié)議的代碼,我們在分發(fā)軟件的時候也必須以GPL的形式。
其實這里流下了一個法律上的漏洞,即什么是分發(fā)?在1989年發(fā)布GPL協(xié)議的時候,計算機和網(wǎng)絡(luò)還不發(fā)達,那時定義的分發(fā)是指通過網(wǎng)絡(luò)傳送或者通過CD等物理手段拷貝轉(zhuǎn)移等方式,隨著后來互聯(lián)網(wǎng)和saas服務(wù)的發(fā)展,網(wǎng)站運營者使用或修改了GPL代碼,但是他們只提供網(wǎng)絡(luò)計算服務(wù),這種情況并不算把軟件分發(fā)給終端客戶,所以他們的網(wǎng)站代碼也就不需要開源。

其實我們也經(jīng)常使用了基于GPL的庫和中間件,如OpenJDK和mysql jdbc驅(qū)動,這是不是出乎大家的意料,因為我們在分發(fā)系統(tǒng)的時候并沒有開源啊, 這里給大家詳細講一下,OpenJDK使用的開源協(xié)議是GPL with classpath exception,有了"with classpath exception" 這個小尾巴性質(zhì)就不一樣了,就是說我們在代碼中引用JDK相關(guān)類是合法的,不會把GPL傳染到我們的系統(tǒng),只要不改JDK源碼就行。

mysql-connector-java驅(qū)動采用了GPLv2協(xié)議,我們不能直接在系統(tǒng)中使用。

image.png

https://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.html
image.png

那有沒有辦法規(guī)避掉GPL的傳染性呢?方法是有的,目前有2種方法:

  1. 把GPL的庫封裝成一個獨立的進程執(zhí)行,我們的系統(tǒng)和這個進程通信,這樣只需要開源封裝程序的代碼就行了。
  2. 只給客戶提供saas服務(wù),不把系統(tǒng)代碼提供給客戶。系統(tǒng)代碼由于是部署在我們自己服務(wù)器上的,并不部署在客戶家,這樣就不算分發(fā)。其實這種做法是鉆了GPL的法律漏洞,但是合法。

LGPL

LGPL是一個寬松的GPL協(xié)議,它適用于我們軟件只是使用并不修改開源代碼,在這種情況下我們的軟件是不需要開放源碼的。如我們可以使用mariadb-java-client替換mysql-connector-java,因為mariadb-java-client是LGPL協(xié)議。因此LGPL也算是一種商業(yè)友好協(xié)議。

AGPL

前面說了,隨著云服務(wù)的興起,很多云提供商拿GPL協(xié)議的軟件去賣錢,而不回饋開源廠家,畢竟廠家也是要吃飯的,這時就出了AGPL協(xié)議,把saas服務(wù)或者通過網(wǎng)絡(luò)訪問也認為是分發(fā),堵住了GPL的漏洞。
針對AGPL網(wǎng)上也有爭論,因為在AGPL定義中提到是對"modified version"有限制,那我如果只是使用依賴不修改源碼呢?
https://www.gnu.org/licenses/agpl-3.0.en.html

image.png

而在術(shù)語中AGPL對“modified version”又是這么定義的
image.png

從條文上看,只有修改了代碼或則封裝了部分/全部代碼才要開源。不過網(wǎng)上人們普遍對AGPL是敬而遠之,Google就明確表示在其產(chǎn)品中不允許使用AGPL協(xié)議的代碼。
https://opensource.google/documentation/reference/using/agpl-policy
image.png

所以我們也盡量不使用帶AGPL協(xié)議的代碼。

SSPL

那么有沒有一種開源協(xié)議既能讓開源廠家有面子又不被云廠商白嫖呢?SSPL橫空出世!
https://www.mongodb.com/licensing/server-side-public-license/faq#consistency
SSPL協(xié)議由mongodb公司發(fā)布,基于GPLv3,在SSPL中明確表達了如果通過網(wǎng)絡(luò)提供服務(wù)你也必須開源。

image.png

那我們項目中還能使用mongodb嗎?答案是可以的,雖然mongodb server是SSPL,但是我們軟件只是把mongodb做為數(shù)據(jù)庫使用,并不對外提供mongodb網(wǎng)絡(luò)服務(wù)。另一方面我們軟件并不直接引用mongodb,而是通過mongodb-driver和mongdb打交道的,mongodb公司貼心的將driver設(shè)置成Apache開源協(xié)議,這樣就規(guī)避掉了GPLv3的傳染性。
https://www.mongodb.com/legal/licensing/community-edition
image.png

以上是我對開源協(xié)議的理解,由于我不是法律工作者,大家對開源協(xié)議有異議的地方還請咨詢相關(guān)法律工作者。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 網(wǎng)上看到一篇對開原協(xié)議講述的比較通俗易懂的文章,感謝原作者。世界上的開源許可證(Open Source Licen...
    小孩真笨閱讀 4,171評論 0 5
  • 世界上的開源許可證(Open Source License)大概有上百種,今天我們來介紹下幾種我們常見的開源協(xié)議。...
    Alfie20閱讀 265評論 0 0
  • 一、常用開源協(xié)議匯總圖 首先從一張圖開始,介紹幾種主流的開源協(xié)議,以及決定選用哪種框架的思路。使用哪種開源協(xié)議,決...
    悅凡閱讀 1,082評論 0 1
  • 現(xiàn)今存在的開源協(xié)議很多,而在Open Source Initiative(OSI)組織里面所列的開源協(xié)議超過百種(...
    allwit閱讀 1,039評論 0 1
  • 簡介 使用開源代碼可以幫助提高軟件開發(fā)效率并節(jié)省成本,但是如果不當使用開源代碼,也可能給個人及公司會帶來知識產(chǎn)權(quán)方...
    Lucas66閱讀 5,740評論 0 1

友情鏈接更多精彩內(nèi)容