关于“新增代码”
网上流传的这张图片实际上容易产生一些误导,关键在于“新增代码是否采用同样许可?”中的“新增代码”。
GPL
GPL全称GNU General Public License,一般要求derivative work必须使用同样的GPL。
LGPL
LGPL最初是GNU Library General Public License的缩写,原本是基于GPL,为适用于类库而开发的版本。LGPL同样要求derivative work必须使用同样的LGPL或GPL。
但此License中区分了两个概念,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的含义是非常广泛的,不仅仅是程序源代码,还包括编译结果,可执行程序,相关文档等。因此想要自由使用许可,发布的工程中连库的二进制版本也不能包含。
不过此License的发布者Free Software Foundation (FSF)发现,GNU Library General Public License的命名方式会误导大家,使大家认为library代码应该优先使用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,其它的新增代码可以使用其他协议,而且这个Larger Work
整体也可以是其他协议,但其中MPL部分的代码要依旧开源。
由此可见,在MPL下,图中的“新增代码”与平时的理解是一样的。
结语
BSD,MIT,Apache,GPL,LGPL,MPL等都是当下使用的主流许可,各个许可其实各自有着详细而复杂的规定。各自的细则都在最新的许可内容中定义了,本文章以及网上流传的各个文章都不一定正确,也不够全面。
《Understanding Open Source and Free Software Licensing》,该书比较全面的阐述了各个主流许可的规定,从copyright和patent的角度分析了各个许可,值的参考。该书的下载地址。不过此书的成书时间较早,部分许可有做微调,需要以最新版的许可为准。
网友评论