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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MIT和GPL到底是怎么兼容的

發(fā)布時間:2024/3/26 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MIT和GPL到底是怎么兼容的 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

開源許可證這事,說簡單也簡單,說復雜也復雜,有些細節(jié)問題,一不小心,就容易給繞進去。

前段時間我就遇到一個問題:說兩個許可證兼容,到底是在說什么?又如何評判?

比如兩個最常見的許可證:MIT和GPL-3.0,一個寬松,一個嚴格,它倆兼容嗎?

如果兼容,為什么說是兼容的?

想了半天,才給弄明白。

一、什么是許可證兼容?

所謂兼容,就是兩個東西放在一起會不會沖突,能不能放到一塊。

比如:

軟件A的許可證要求是:你用我的軟件,就得每天跑超過3公里;

軟件B的許可證要求是:你用我的軟件,每天跑步不能超過1公里。

這兩個軟件,就不能組合到一起發(fā)布,因為他們的許可證要求是沖突的。

如果B的許可證要求改為:

你用我的軟件,每天必須跑步超過5公里。

這就不沖突了,A和B就可以組合在一起,按照B的許可證發(fā)布了。

二、那么MIT和GPL兼容嗎?

現(xiàn)在我們回到正題:

比如A軟件是MIT的,B軟件是GPL-3.0的(以下簡稱GPL),能不能把這兩個軟件放在一起形成C,然后發(fā)布?

注意,A和B存在調(diào)用關(guān)系,并不是毫無關(guān)系地放在一起。

我想了3種可能:

  • C很大,主要成分是B,僅僅把A當作一個模塊用。

  • 作者寫了一個很小的B,調(diào)用了很大的A。

  • 作者直接在A里面改了一點東西,這點東西叫B。

  • 這些情況雖然看上去很不一樣,但從許可證的角度看,本質(zhì)上是一樣的,都是A+B=C。

    那么,C用什么發(fā)布?也有3種可能:

  • C用GPL發(fā)布

  • C用MIT發(fā)布

  • C用其他協(xié)議發(fā)布,甚至放到公共空間。

  • 哪種可以,哪種不行?我的解答是:

  • C可以用GPL發(fā)布,因為MIT允許這么干。

  • C不能用MIT發(fā)布,因為GPL不允許自己的衍生品用MIT發(fā)布。

  • 想用其他許可證,要具體分析,用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的版權(quán)和MIT聲明體現(xiàn)出來。

    GPL對衍生品的要求是:整個C要用GPL發(fā)布。

    這兩個要求沖突嗎?

    不沖突。你可以把C按照GPL發(fā)布,同時把A的版權(quán)和MIT聲明體現(xiàn)出來。

    四、涉及哪些具體條文?

    請仔細看MIT協(xié)議,里面說了它的要求:

    來自:https://opensource.org/licenses/MIT

    如果不想看英文,可以看我寫的中文版解讀:從MIT協(xié)議談契約精神

    事實上,MIT就是要求顯示版權(quán),顯示MIT協(xié)議(顯示MIT的鏈接也行)。

    另外,注意MIT允許sublicense(分許可),這樣,C(包括里面的A)按照GPL發(fā)布就有合理依據(jù)了。

    再仔細看GPL協(xié)議,按照第2條,GPL是不允許sublicense的,也即衍生品只能用GPL:

    來自:https://spdx.org/licenses/GPL-3.0-only.html

    按照第5條,衍生品的整體要按照GPL發(fā)布,這樣,C需要按照GPL發(fā)布,作為C里面的A,也是如此。

    作為一種例外,第13條說,GPL可以和AGPL兼容,也即GPL-3.0的軟件和AGPL-3.0的軟件結(jié)合起來,整體可以按AGPL-3.0發(fā)布。

    希望更深入了解的,可以看我寫的人話解讀GPLv3。

    五、那么,我應該怎么做?

    當你把A(使用MIT)和B(使用GPL)合并起來,形成C以后。

    發(fā)布C時,你要顯著地在文檔或代碼里面體現(xiàn)以下內(nèi)容。

    1、說明C是用GPL授權(quán)的,比如用LICENSE或COPYING文件來聲明。

    2、說明C用了A,說明A的版權(quán),以及A是用MIT協(xié)議的。一方面要在文檔里面說,另一方面,在代碼里面也要保留A的版權(quán)和MIT協(xié)議。

    這樣做,不違背MIT,也不違背GPL。別人看到了,如果想用C,就遵循GPL;如果只是想用A,遵循MIT就可以了。

    六、實例

    我在GitHub上找到一個叫netdata的軟件,就符合本文討論的情況。

    該軟件的位置在:

    https://github.com/netdata/netdata

    它是用GPL發(fā)布的,但里面使用的一些第三方軟件是MIT的。

    在該軟件倉庫的首頁上,以及根目錄的LICENSE文件中,說明了其許可證是GPL3。但同時提到該軟件用了一些第三方軟件。

    打開上面寫的第三方許可(third party licenses),可以看到里面清晰注明了這些第三方軟件的出處、版權(quán)和許可信息:

    上面是部分截圖,事實上一共有30多個軟件,大多數(shù)都是MIT的。

    在代碼里面,netdata的作者也不敢馬虎,比如對d3pie這個軟件的引用,代碼頭部是這樣的:

    這就不會有什么問題。

    致謝:我的朋友孫振華對此文形成提供了很多幫助。

    另:本文只是說明了MIT和GPL-3.0的兼容性,如果想了解更多許可證之間的兼容關(guān)系,回復“兼容”,獲取信通院牽頭編寫的“開源許可證兼容性指南”。

    文|衛(wèi)劍釩

    總結(jié)

    以上是生活随笔為你收集整理的MIT和GPL到底是怎么兼容的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。