
關于“新增代碼”
網(wǎng)上流傳的這張圖片實際上容易產生一些誤導,關鍵在于“新增代碼是否采用同樣許可?”中的“新增代碼”。
GPL
GPL全稱GNU General Public License,一般要求derivative work必須使用同樣的GPL。
LGPL
LGPL最初是GNU Library General Public License的縮寫,原本是基于GPL,為適用于類庫而開發(fā)的版本。LGPL同樣要求derivative work必須使用同樣的LGPL或GPL。
但此License中區(qū)分了兩個概念,work based on the library和work that uses the library。
A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
如果程序不包含LGPL的work或derivative work,僅僅是將其作為庫使用,則該程序不屬于derivative work,也就不必遵守LGPL的要求,可以自由選擇License。derivative work的含義是非常廣泛的,不僅僅是程序源代碼,還包括編譯結果,可執(zhí)行程序,相關文檔等。因此想要自由使用許可,發(fā)布的工程中連庫的二進制版本也不能包含。
不過此License的發(fā)布者Free Software Foundation (FSF)發(fā)現(xiàn),GNU Library General Public License的命名方式會誤導大家,使大家認為library代碼應該優(yōu)先使用LGPL而非GPL。實際上,FSF是希望能使用GPL開源的工程就使用GPL,有特殊的目的才去使用LGPL,即使工程是作為library使用的。因此,LGPL后更名為GNU Lesser General Public License,以便減少誤解。
由此可見,圖中的“新增代碼”在LGPL下意味著使用該庫的編寫的新代碼,而不是對LGPL許可的原代碼的修改或新增。
MPL
MPL全稱Mozilla Public License。在基于MPL項目構建的Larger Work中,MPL的部分依舊是MPL,其它的新增代碼可以使用其他協(xié)議,而且這個Larger Work整體也可以是其他協(xié)議,但其中MPL部分的代碼要依舊開源。
由此可見,在MPL下,圖中的“新增代碼”與平時的理解是一樣的。
結語
BSD,MIT,Apache,GPL,LGPL,MPL等都是當下使用的主流許可,各個許可其實各自有著詳細而復雜的規(guī)定。各自的細則都在最新的許可內容中定義了,本文章以及網(wǎng)上流傳的各個文章都不一定正確,也不夠全面。
《Understanding Open Source and Free Software Licensing》,該書比較全面的闡述了各個主流許可的規(guī)定,從copyright和patent的角度分析了各個許可,值的參考。該書的下載地址。不過此書的成書時間較早,部分許可有做微調,需要以最新版的許可為準。