几个主流开源License的区别

Paul Bagwell的分析图(阮一峰 译)

关于“新增代码”

网上流传的这张图片实际上容易产生一些误导,关键在于“新增代码是否采用同样许可?”中的“新增代码”。

GPL

GPL全称GNU General Public License,一般要求derivative work必须使用同样的GPL

LGPL

LGPL最初是GNU Library General Public License的缩写,原本是基于GPL,为适用于类库而开发的版本。LGPL同样要求derivative work必须使用同样的LGPLGPL

但此License中区分了两个概念,work based on the librarywork 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的角度分析了各个许可,值的参考。该书的下载地址。不过此书的成书时间较早,部分许可有做微调,需要以最新版的许可为准。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容