MIT和GPL到底是怎么兼容的
開源許可證這事,說簡單也簡單,說復雜也復雜,有些細節問題,一不小心,就容易給繞進去。
前段時間我就遇到一個問題:說兩個許可證兼容,到底是在說什么?又如何評判?
比如兩個最常見的許可證:MIT和GPL-3.0,一個寬松,一個嚴格,它倆兼容嗎?
如果兼容,為什么說是兼容的?
想了半天,才給弄明白。
一、什么是許可證兼容?
所謂兼容,就是兩個東西放在一起會不會沖突,能不能放到一塊。
比如:
軟件A的許可證要求是:你用我的軟件,就得每天跑超過3公里;
軟件B的許可證要求是:你用我的軟件,每天跑步不能超過1公里。
這兩個軟件,就不能組合到一起發布,因為他們的許可證要求是沖突的。
如果B的許可證要求改為:
你用我的軟件,每天必須跑步超過5公里。
這就不沖突了,A和B就可以組合在一起,按照B的許可證發布了。
二、那么MIT和GPL兼容嗎?
現在我們回到正題:
比如A軟件是MIT的,B軟件是GPL-3.0的(以下簡稱GPL),能不能把這兩個軟件放在一起形成C,然后發布?
注意,A和B存在調用關系,并不是毫無關系地放在一起。
我想了3種可能:
C很大,主要成分是B,僅僅把A當作一個模塊用。
作者寫了一個很小的B,調用了很大的A。
作者直接在A里面改了一點東西,這點東西叫B。
這些情況雖然看上去很不一樣,但從許可證的角度看,本質上是一樣的,都是A+B=C。
那么,C用什么發布?也有3種可能:
C用GPL發布
C用MIT發布
C用其他協議發布,甚至放到公共空間。
哪種可以,哪種不行?我的解答是:
C可以用GPL發布,因為MIT允許這么干。
C不能用MIT發布,因為GPL不允許自己的衍生品用MIT發布。
想用其他許可證,要具體分析,用AGPL也許可以(這在GPL-3.0第13條有說),但別的大概都不行。
三、分析一下
首先要搞明白:
C既是A的衍生品,也是B的衍生品。
因為從A看,是A加了B形成C;從B看,則是B加上了A形成C。
雖然有時會覺得不合常理,比如B有1000行,A只有10行,把C說是A的衍生品會讓人直覺上感覺不對。
但從定義上講,就是這樣的,A完全可以認為自己從10行被改成了1010行。
既然C是衍生品,我們看看兩個許可證對衍生品的要求:
MIT對衍生品的要求是:把A的版權和MIT聲明體現出來。
GPL對衍生品的要求是:整個C要用GPL發布。
這兩個要求沖突嗎?
不沖突。你可以把C按照GPL發布,同時把A的版權和MIT聲明體現出來。
四、涉及哪些具體條文?
請仔細看MIT協議,里面說了它的要求:
來自:https://opensource.org/licenses/MIT
如果不想看英文,可以看我寫的中文版解讀:從MIT協議談契約精神
事實上,MIT就是要求顯示版權,顯示MIT協議(顯示MIT的鏈接也行)。
另外,注意MIT允許sublicense(分許可),這樣,C(包括里面的A)按照GPL發布就有合理依據了。
再仔細看GPL協議,按照第2條,GPL是不允許sublicense的,也即衍生品只能用GPL:
來自:https://spdx.org/licenses/GPL-3.0-only.html
按照第5條,衍生品的整體要按照GPL發布,這樣,C需要按照GPL發布,作為C里面的A,也是如此。
作為一種例外,第13條說,GPL可以和AGPL兼容,也即GPL-3.0的軟件和AGPL-3.0的軟件結合起來,整體可以按AGPL-3.0發布。
希望更深入了解的,可以看我寫的人話解讀GPLv3。
五、那么,我應該怎么做?
當你把A(使用MIT)和B(使用GPL)合并起來,形成C以后。
發布C時,你要顯著地在文檔或代碼里面體現以下內容。
1、說明C是用GPL授權的,比如用LICENSE或COPYING文件來聲明。
2、說明C用了A,說明A的版權,以及A是用MIT協議的。一方面要在文檔里面說,另一方面,在代碼里面也要保留A的版權和MIT協議。
這樣做,不違背MIT,也不違背GPL。別人看到了,如果想用C,就遵循GPL;如果只是想用A,遵循MIT就可以了。
六、實例
我在GitHub上找到一個叫netdata的軟件,就符合本文討論的情況。
該軟件的位置在:
https://github.com/netdata/netdata
它是用GPL發布的,但里面使用的一些第三方軟件是MIT的。
在該軟件倉庫的首頁上,以及根目錄的LICENSE文件中,說明了其許可證是GPL3。但同時提到該軟件用了一些第三方軟件。
打開上面寫的第三方許可(third party licenses),可以看到里面清晰注明了這些第三方軟件的出處、版權和許可信息:
上面是部分截圖,事實上一共有30多個軟件,大多數都是MIT的。
在代碼里面,netdata的作者也不敢馬虎,比如對d3pie這個軟件的引用,代碼頭部是這樣的:
這就不會有什么問題。
致謝:我的朋友孫振華對此文形成提供了很多幫助。
另:本文只是說明了MIT和GPL-3.0的兼容性,如果想了解更多許可證之間的兼容關系,回復“兼容”,獲取信通院牽頭編寫的“開源許可證兼容性指南”。
文|衛劍釩
總結
以上是生活随笔為你收集整理的MIT和GPL到底是怎么兼容的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Revit开发之快捷键相关类
- 下一篇: 教你知道FAT16和FAT32的区别?