昨天和同事在討論Mongodb開源協(xié)議SSPL的時候,我在網(wǎng)上搜了一些資料,現(xiàn)在給大家做個簡單的介紹,讓大家對常見的開源協(xié)議有大概的了解,以后我們在做技術(shù)選型的時候也要注意一下,以免引起不必要的法律糾紛。
本次我們講講市場上比較常見的GPL, LGPL, AGPL和SSPL協(xié)議。
常見的開源協(xié)議
首先看下面這張圖(摘自網(wǎng)絡(luò))

其中右邊的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)中使用。

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

那有沒有辦法規(guī)避掉GPL的傳染性呢?方法是有的,目前有2種方法:
- 把GPL的庫封裝成一個獨立的進程執(zhí)行,我們的系統(tǒng)和這個進程通信,這樣只需要開源封裝程序的代碼就行了。
- 只給客戶提供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

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

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

所以我們也盡量不使用帶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ù)你也必須開源。

那我們項目中還能使用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

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