了解開源協議:GPL, LGPL, BSD, MIT, Apache 和 MPL
摘要
github中有很多的開源項目,如果是學習使用,并沒有什么影響,但是如果是想商用,則一定需要了解不同開源協議的區別,以免踩坑,本文介紹五種開源協議GPL,LGPL,BSD,MIT,Apache,以及如何選擇這幾種協議。
BSD開源協議
BSD開源協議賦予使用者極大的自由。基本上,使用者可以隨心所欲地使用、修改源代碼,并將修改后的代碼作為開源或專有軟件再發布。
然而,要享受這種自由,當您發布使用了BSD協議的代碼或者以BSD協議代碼為基礎進行二次開發時,需要滿足以下三個條件:
- 如果再發布的產品包含源代碼,必須在源代碼中包含原始代碼中的BSD協議。
- 如果再發布的只是二進制類庫或軟件,需要在類庫或軟件的文檔和版權聲明中包含原始代碼中的BSD協議。
- 不得使用開源代碼的作者或機構的名稱和原產品的名稱進行市場推廣。
BSD協議鼓勵代碼共享,但同時尊重代碼作者的著作權。由于BSD允許使用者修改和重新發布代碼,也允許在BSD代碼的基礎上開發商業軟件并進行發布和銷售,因此對于商業集成而言非常友好。因此,許多公司在選擇開源產品時首選BSD協議,因為他們可以在必要時完全控制這些第三方的代碼,進行修改或二次開發。
Apache License 2.0
Apache License是著名的非盈利開源組織Apache采用的協議。該協議與BSD相似,同樣鼓勵代碼共享和尊重原作者的著作權,也允許修改代碼并將其作為開源或商業軟件再發布。需要滿足的條件也類似于BSD:
- 需要向代碼的用戶提供Apache License。
- 如果您修改了代碼,需要在修改后的文件中進行說明。
- 在擴展的代碼中(修改和從源代碼派生的代碼)需要包含原始代碼中的協議、商標、專利聲明和其他原始作者規定的內容。
- 如果再發布的產品包含Notice文件,則Notice文件中需要包含Apache License。您可以在Notice文件中添加自己的許可,但不能做出對Apache License的實質性更改。
Apache License也對商業應用非常友好。使用者可以在需要時修改代碼,以滿足其需求,并將其作為開源或商業產品發布或銷售。
GPL
我們都熟悉Linux采用了GPL協議。GPL協議與BSD、Apache License等鼓勵代碼重用的許可有很大不同。GPL的核心思想是代碼的開源和免費使用,以及對引用、修改和派生代碼的開源和免費使用,但不允許將修改后和派生的代碼作為閉源的商業軟件發布和銷售。這就是為什么我們可以使用各種免費的Linux系統,包括商業公司的Linux以及Linux上眾多由個人、組織和商業軟件公司開發的免費軟件。
GPL協議的主要內容是,只要在一個軟件中使用GPL協議的產品("使用"包括類庫引用、修改后的代碼或派生代碼),則該軟件產品必須同樣采用GPL協議,即必須開源和免費。這就是所謂的"傳染性"。使用GPL協議的產品作為獨立產品使用沒有問題,而且可以享受免費的優勢。
由于GPL嚴格要求使用了GPL類庫的軟件產品必須采用GPL協議,因此對于使用GPL協議的開源代碼、商業軟件或者對代碼有保密要求的部門來說,不適合將其作為類庫或基礎進行二次開發。
LGPL
LGPL是為主要用于類庫的開源協議。與GPL要求使用/修改/派生的GPL類庫的軟件必須采用GPL協議不同,LGPL允許商業軟件通過類庫引用(link)方式使用LGPL類庫,而不需要將商業軟件的代碼開源。
然而,如果修改LGPL協議的代碼或進行派生,那么所有修改的代碼、涉及修改部分的額外代碼和派生的代碼都必須采用LGPL協議。因此,LGPL協議的開源代碼非常適合作為第三方類庫被商業軟件引用并進行發布和銷售。
但對于希望以LGPL協議的代碼為基礎,通過修改和派生的方式進行二次開發的商業軟件,LGPL協議則不適用。
GPL和LGPL都保護原作者的知識產權,避免他人使用開源代碼復制并開發類似的產品。
MIT
MIT許可協議與BSD類似,非常寬松。作者只希望保留版權,而沒有其他限制。也就是說,無論是以二進制形式還是以源代碼形式發布,您都必須在發行版中包含原許可協議的聲明。
MPL
MPL是The Mozilla Public License的簡稱,是1998年初Netscape的Mozilla小組為其開源軟件項目設計的軟件許可證。MPL許可證出現的最重要原因是,Netscape公司認為GPL許可證沒有很好地平衡開發者對源代碼的需求和他們利用源代碼獲得的利益。與著名的GPL許可證和BSD許可證相比,MPL在許多權利與義務的約定方面與它們相似(因為都符合OSIA認定的開源軟件許可證)。但與它們相比,MPL還有以下幾個顯著的不同之處:
- MPL要求對經MPL許可證發布的源代碼的修改也必須以MPL許可證的方式再許可出來,以確保其他人可以在MPL的條款下共享源代碼。但在MPL許可證中,對"發布"的定義是"以源代碼方式發布的文件",這意味著MPL允許企業在其已有的源代碼庫上添加接口,除了接口程序的源代碼以MPL許可證的形式對外許可外,源代碼庫中的源代碼可以不必強制采用MPL許可協議。這允許在商業軟件開發中借鑒他人的源代碼留下了空間。
- MPL許可協議第三條第7款允許許可人將經MPL許可證獲得的源代碼與自己其他類型的代碼混合以創建自己的軟件程序。
- 盡管MPL許可協議不像GPL那樣明確反對軟件專利,但它明確規定源代碼的提供者不能提供已經受專利保護的源代碼,除非他們自己是專利權人并向公眾免費許可這些源代碼,也不能在將這些源代碼以開放源代碼許可協議形式許可后再去申請與這些源代碼有關的專利。