開源許可協(xié)議比較及應(yīng)用實(shí)例

簡介

使用開源代碼可以幫助提高軟件開發(fā)效率并節(jié)省成本,但是如果不當(dāng)使用開源代碼,也可能給個人及公司會帶來知識產(chǎn)權(quán)方面的法律風(fēng)險(xiǎn),不僅要花費(fèi)大量的費(fèi)用,有時候甚至需要公開自有的商業(yè)代碼,“賠了夫人又折兵”,給個人和公司造成極大的損失,所以在商業(yè)軟件使用開源代碼前認(rèn)真評估開源代碼所攜帶的許可證顯得尤為重要。

截至2019年6月,國際開源組織OSI(Open Source Initiative)批準(zhǔn)的許可證超過80種,其中被廣泛使用的許可證包括以下8種:

根據(jù)使用條件的不同,開源許可證分為兩大類,即Permissive許可證和Copyleft許可證。

Permissive許可證

Permissive License(寬松式許可證)允許用戶不經(jīng)許可可以隨意復(fù)制、修改和發(fā)布,但是并不要求分發(fā)時必須使用相同的許可證,用戶可以在修改代碼后選擇閉源,常見的Apache、BSD、MIT屬于Permissive許可證。

BSD (Berkerley Software Distribution)

BSD許可證給予用戶在使用開源代碼方面很大的自由,分為2-Clause(兩條款)和3-Clause(三條款)兩類,需要遵守以下規(guī)則:

  1. 如果分發(fā)的軟件包含源代碼,則必須在源代碼中保留原始的BSD許可證聲明。
  2. 如果分發(fā)的軟件僅包含二進(jìn)制程序,則必須在文檔或版權(quán)說明中保留原始的BSD許可證聲明。
  3. 未經(jīng)許可,不得使用原始作者或機(jī)構(gòu)的名字為軟件做市場推廣。(僅3-Clause需要遵守)

使用BSD許可證的應(yīng)用案例包括:Chromium,Django,F(xiàn)reeBSD,Nginx等。

Apache-2.0

Apache Licence是著名的非盈利開源組織Apache采用的協(xié)議,需要遵守以下規(guī)則:

  1. 必須在源代碼中保留原始的Apache許可證聲明。
  2. 如果用戶修改了源代碼,需要在被修改的文件中說明。
  3. 在衍生產(chǎn)品中,必須保留原來代碼中的版權(quán)、專利、商標(biāo)及作者規(guī)定的其他需要包含的說明等信息。
  4. 如果在分發(fā)的軟件中包含Notice文件,則需要在Notice文件中包含Apache許可證聲明。

使用Apache 2.0許可證的應(yīng)用案例包括:Apache家族系列產(chǎn)品,如Hadoop, OpenOffice, Spark,SVN, 以及Swift、Kubernetes、Android Open Source Project (AOSP)等。

MIT (Massachusetts Institute of Technology)

BSD-2-Clause類似,即需要遵守以下規(guī)則:

  1. 如果分發(fā)的軟件包含源代碼,則必須在源代碼中保留原始的MIT許可證聲明。
  2. 如果分發(fā)的軟件僅包含二進(jìn)制程序,則必須在文檔或版權(quán)說明中保留原始的MIT許可證聲明。

使用MIT許可證的應(yīng)用案例包括:Bootstrap, jQuery, Node.js, Rails等。

Copyleft許可證

Copyright(版權(quán)) 的意思是未經(jīng)許可,用戶無權(quán)復(fù)制和使用。Copyleft License(反版權(quán)許可證) 作為Copyright的反義詞,意為未經(jīng)許可,用戶也可以隨意復(fù)制、修改和發(fā)布,但要求分發(fā)者必須使用相同的許可證發(fā)布修改后的衍生作品,以保證衍生作品也能被其他人自由使用,常見的AGPL, GPL, LGPL, MPL屬于Copyleft許可證。

GPL 2.0

只要軟件中引用及修改了GPL代碼或者鏈接了GPL類庫,整個軟件就就必須遵循GPL,不僅需要公開所有源碼,并且允許他人可以自由地復(fù)制和分發(fā)。

使用GPLv2許可證的應(yīng)用案例包括:Linux內(nèi)核、MySQL等。

GPL 3.0

GPLv3包含了明確的專利許可以及添加了對數(shù)字版權(quán)管理和加密簽名的限制,不僅要求用戶公開源碼,還要求公布相關(guān)硬件及必要的安裝信息。

GPLv3能與更多的許可證兼容,例如Apache 2.0,但這個兼容是單向的,即GPLv3許可證的項(xiàng)目中可以包含Apache 2.0的開源代碼,但是Apache許可證的項(xiàng)目不能包含GPLv3的開源代碼。值得注意的是,GPLv3與GPLv2卻并不兼容,即一個項(xiàng)目中不能同時包含GPLv2和GPLv3的代碼,但是,如果軟件以GPL “v2或更高版本”許可證發(fā)布,則與GPLv3兼容。

使用GPLv3許可證的應(yīng)用案例包括:GCC,Emacs等。

AGPL

AGPL是對GPL的補(bǔ)充,如果使用了AGPL代碼的軟件是一個網(wǎng)絡(luò)應(yīng)用,那么這個軟件的所有源碼和修改代碼也必須開源,除非購買了該AGPL代碼的商業(yè)授權(quán)。

使用AGPL許可證的應(yīng)用案例包括:BerkeleyDB,MongoDB (2018年10月前發(fā)布的版本),Wiki.js等。

LGPL

和GPL相比,LGPL限制更少,是一個主要為類庫使用設(shè)計(jì)的開源協(xié)議,需要遵守以下規(guī)則:

  1. 如果軟件通過動態(tài)鏈接的方式使用LGPL類庫,則該軟件不需要開源。
  2. 如果軟件通過靜態(tài)鏈接的方式使用LGPL類庫,則軟件作者必須提供程序的二進(jìn)制目標(biāo)文件(不需要提供源代碼),以便用戶有機(jī)會更新LGPL類庫并重新鏈接到該程序。
  3. 如果修改了LGPL的源碼或者衍生了新的代碼,則所有修改后及衍生的代碼也必須遵循LGPL許可證。

使用LGPL許可證的應(yīng)用案例包括:7-Zip,GLib,uClibc等。

MPL (Mozilla Public License)

MPL License由Mozilla基金會開發(fā)并維護(hù),介于BSD(衍生代碼可以閉源)和GPL(衍生代碼必須以GPL方式開源)之間,最新發(fā)布的2.0版以更簡潔和更好的兼容其他協(xié)議為目標(biāo),鼓勵企業(yè)和開源社區(qū)為開發(fā)核心軟件做更多貢獻(xiàn)。使用MPL源碼需要遵守以下規(guī)則:

  1. 如果修改了MPL的源碼或者衍生了新的代碼,并且以源代碼方式發(fā)布的文件,則所有修改后及衍生的代碼也必須遵循MPL許可證。
  2. 如果用戶自有的源碼通過專用接口訪問MPL的源碼及類庫,則包含專用接口的代碼必須遵循MPL許可證,用戶自有源碼不必遵循MPL許可證。
  3. 用戶獲得MPL代碼中的專利許可,但是不能使用其原始商標(biāo)。

使用MPL許可證的應(yīng)用案例包括:Mozilla Firefox, Mozilla Thunderbird, Apache Flex, LibreOffice等。

EPL (Eclipse Public License)

EPL License由Eclipse基金會開發(fā)并維護(hù),在CPL基礎(chǔ)上刪除了專利相關(guān)訴訟的限制條款。EPL比GPL許可證更為寬松,并且與GPL并不兼容。使用EPL源碼需要遵守以下規(guī)則:

  1. 如果修改了EPL的源碼或者衍生了新的代碼,并且以源代碼方式分發(fā),則所有修改后及衍生的代碼也必須遵循EPL許可證。
  2. 如果軟件以二進(jìn)制目標(biāo)文件的形式分發(fā),則需要聲明可以根據(jù)請求向其他用戶提供源代碼。
  3. 用戶獲得EPL代碼中的專利許可。

使用EPL許可證的應(yīng)用主要為Eclipse基金會名下的軟件,如著名的集成開發(fā)工具 - Eclipse。

應(yīng)用實(shí)例

MariaDB

MariaDB是目前最受關(guān)注的MySQL數(shù)據(jù)庫衍生版,由開源社區(qū)開發(fā)和維護(hù),誕生于Oracle收購MySQL后,目標(biāo)是成為MySQL的替代品。

MariaDB的服務(wù)端使用的是GPL v2許可證,如果軟件只是內(nèi)部使用,并且沒有被包含在對外發(fā)布的產(chǎn)品中,這種情況不被視為分發(fā),可以自由使用;如果軟件用于對外發(fā)布,使用了服務(wù)端的GPL代碼或者通過鏈接的方式使用了客戶端的GPL動態(tài)庫,或者軟件與MariaDB數(shù)據(jù)庫強(qiáng)綁定,即在沒有安裝MariaDB數(shù)據(jù)庫的情況下,軟件無法運(yùn)行或者只能使用非常少的功能,該軟件也必須遵循GPL許可協(xié)議;但是如果該軟件通過第三方獨(dú)立框架訪問數(shù)據(jù)庫,

MariaDB的C/JAVA/ODBC的客戶端動態(tài)庫使用了LGPL許可證,軟件也只需遵循LGPL協(xié)議,可以自由使用這些動態(tài)庫,不存在必須開源的問題。

如果軟件通過調(diào)用非GPL的連接器與MariaDB數(shù)據(jù)庫進(jìn)行通信,例如:mysqlnd for PHP, ruby-mysql等,軟件只需要遵循該連接器所使用的許可證。如果軟件通過第三方獨(dú)立的框架訪問數(shù)據(jù)庫,即使框架中使用了包含GPL許可證的模塊,例如:ODBC, JDBC, Perl,PHP PDO等,軟件本身并不受其影響,不需要遵循GPL許可證。如果發(fā)布的軟件除了可以訪問MariaDB數(shù)據(jù)庫之外,還可以訪問其他數(shù)據(jù)庫,即MariaDB在軟件中不屬于必須項(xiàng),在這種情況下該軟件可以和MariaDB一起自由發(fā)布,同樣不需要遵循GPL許可證。

如果軟件中必須使用數(shù)據(jù)庫服務(wù)端的相關(guān)代碼,又不希望自己的商業(yè)代碼遵循GPL許可證,可以考慮以下三種方案:

  1. 使用類似MIT/BSD許可證的PostGreSQL作為替代產(chǎn)品。
  2. 更換為不使用SQL作為查詢語言的NoSQL非關(guān)系數(shù)據(jù)庫方案,例如:Cassandra (Apache 2.0), Redis (BSD-3-Clause), 或者 CouchDB (Apache 2.0)等。
  3. 付費(fèi)購買帶有商業(yè)許可證的軟件,如MySQL, MongoDB等。

Linux Kernel

Linux內(nèi)核以GPL v2許可證發(fā)行,所以任何Linux內(nèi)核的衍生產(chǎn)品也必須遵循GPL許可證進(jìn)行發(fā)布。如下圖所示的應(yīng)用實(shí)例,我們列出其中違反GPL許可證的使用方法(紅線所示)。

?
?
  1. 應(yīng)用程序通過靜態(tài)或動態(tài)鏈接的方式使用GPL類庫,會導(dǎo)致整個應(yīng)用也必須以GPL許可證方式發(fā)布。規(guī)避方法是主程序通過LPC或者RPC間接調(diào)用GPL庫里的接口,或者改用動態(tài)鏈接LGPL類庫的方式。
  2. 應(yīng)用程序通過非標(biāo)準(zhǔn)接口直接訪問Linux內(nèi)核的行為,會導(dǎo)致整個應(yīng)用也必須以GPL許可證方式發(fā)布。規(guī)避方法是通過Linux 內(nèi)核提供的標(biāo)準(zhǔn)接口函數(shù)訪問Linux內(nèi)核,用戶空間的程序及類庫的普通系統(tǒng)調(diào)用不被視為Linux內(nèi)核的衍生產(chǎn)品,應(yīng)用程序不需要遵循GPL許可證。
  3. 可加載內(nèi)核模塊(LKM)是用戶編寫的軟件,它與Linux內(nèi)核緊密綁定,運(yùn)行在內(nèi)核地址空間中,Linux內(nèi)核開發(fā)社區(qū)認(rèn)為LKM程序應(yīng)該遵循GPL許可證。但是不少硬件廠商出于保護(hù)商業(yè)機(jī)密及知識產(chǎn)權(quán)的角度出發(fā),在這一點(diǎn)與Linux內(nèi)核開發(fā)社區(qū)一直存在爭議,硬件廠商一般都會以二進(jìn)制目標(biāo)文件的方式單獨(dú)發(fā)布硬件驅(qū)動試圖規(guī)避GPL風(fēng)險(xiǎn),但是始終存在潛在的法律風(fēng)險(xiǎn)以及開源帶來的的商業(yè)影響,降低風(fēng)險(xiǎn)的方法就是同樣以GPL或者其他與GPL兼容的許可證發(fā)布LKM程序,并且不要把那些不希望開源的的私有代碼直接鏈接到LKM程序。

小結(jié)

由于GPL嚴(yán)格要求使用了GPL代碼或類庫的軟件產(chǎn)品必須使用GPL協(xié)議,所以商業(yè)軟件最好不要使用GPL許可證的產(chǎn)品。開源許可證既保護(hù)代碼作者,對他人使用代碼產(chǎn)生的風(fēng)險(xiǎn)免責(zé);同時也保護(hù)代碼使用者,了解使用開源代碼的權(quán)利及必須履行的義務(wù),規(guī)避將來可能的法律風(fēng)險(xiǎn)。

參考文檔:

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

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

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