出处:乌克兰程序员 Paul Bagwell 的分析图:
1. GPL
我希望我的代码能生根发芽(“繁衍”后代),遍地开花
GPL——Copyleft(“反版权”),意味着
你可以去掉所有原作的版权信息
,只要你保持开源,并且随源代码、二进制版附上GPL的许可证就行,让后人可以很明确地得知此软件的授权信息。
GPL核心理念就是任何衍生作品,也必须在GPL下发布。具有以下特点:
使用者循相同的GPL协议进行开源(
生生不息,不断衍生
)
支持商业用途
,但必须开源!
GPL-v2支持软件商用,但不允许修改后和衍生的代码
作为闭源的商业软件
发布和销售。
程序库应当尤为关注GPL——库是大型软件的构建模块:在GPL-v2协议下发布库,你将
强制使用该库的任何应用程序也在GPL协议下发布
。即,只要引入的某个模块是GPL协议的,它会一直扩展到最上层直到整个项目都强制GPL开源。
GPL协议有点像
病毒
,一旦被感染,那么就演变成了GPL项目,
强制开源(且,再也回不到过去了)
!
使用此协议的的开源项目:
Linux
scapy
1.1. GPL-v3
GPL 3.0 相比 2.0 新增了一些条例:
任何向GPL项目贡献的成果将永远以GPL协议发行
GPL软件设备的用户有权更改软件(DRM)
实际上,Linux内核的维护者们,一直都反对GPL-v3协议,造成GPL在版本2/3上的分裂。
1.2. LGPL
核心在于:如果仅调用lib库,可以
避免GPL的“传染性”
。
LGPL允许商业软件通过引用(link)的方式使用LGPL类库,而不需要开放源代码,或使用其他协议
但是如果修改或衍生LGPL协议代码,则必须采用LGPL协议
如果使用静态库方式链接则退化为GPL授权
小益使用 LGPL 协议开源了一个 Android 类库,小张做开发时
调用了该库。之后小张将项目上架到 GooglePlay 而不开源,是没有违反协议的
。但是如果小张引用类库时,是以源码的形式引用的,那就必须要将项目开源了。
1.3. AGPL
更严格的GPL,防止钻空子……通过
网络
与GPL开源项目交互,也需要提供源代码!
其实socket/http通讯,本质上与过程(函数)调用没有区别。AGPL弥补了这一漏洞。当然,如果你的代码不涉及通讯接口,那么这两种协议对你并无差别。
1.3.1. AGPL限制分发(distribution)漏洞
除了 Affero GPL (AGPL) ,其他许可证都规定只有在"分发"时,才需要遵守许可证。换言之,如果不"分发",就不需要遵守。
简单说,分发就是指将版权作品从一个人转移到另一个人。这意味着,如果你是自己使用,不提供给他人,就没有分发。另外,这里的"人"也指"法人",因此如果使用方是公司,且只在公司内部使用,也不需要遵守许可证。
云服务(SaaS)是否构成"分发"呢?答案是不构成。
所以你使用开源软件提供云服务,不必提供源码。但是,Affero GPL (AGPL) 许可证除外,它规定云服务也必须提供源码。
2. MPL(Mozilla Public License)
类似GPL,具有传染性
类似LGPL,支持模块外的源代码闭源,便于商业软件引用MPL的模块(库)
修改后的代码版权归软件的
发起者
,可以免费使用
小益使用 MPL 协议开源了一个 Android 类库,小张对源码进行修改以后重新发布,
修改后的源码版权也属于小益
。
3. Apache
我想保有专利,但你们可以随便用
如果修改了代码,需要进行说明
必须署名原作者
对专利进行保护
Apache 2 的效力与 MIT 近似,区别主要在于前者额外提供了一份简易的
专利许可授权
,明确禁止商标使用权以及要求明确指明所有修改过的文件(state changes)。
4. BSD
可以随意使用
必须署名原作者
不可以用开源代码的“作者/机构的名字”或“原来产品的名字”做市场推广
5. MIT
我只想安心的写代码(只想保留版权),别人爱怎么搞就怎么搞吧
允许别人以任何方式使用(支持商业闭源)
必须署名原作者
原作者不承担代码使用后的风险
小益使用 MIT 协议开源了一个 Android 类库,只要小张引用类库时保留包含了许可声明,那后续项目开源与否,都是符合协议的。
6. 常见问题
6.1. 开源软件的专利如何处理?
某些许可证(Apache 2 和 GPL v3)包含明确的条款,授予用户许可,使用软件所包含的所有专利。
另一些许可证(BSD、MIT 和 GPL v2)根本没提到专利。但是一般认为,它们默认给予用户专利许可,不构成侵犯专利。
总得来说,除非有明确的"保留专利"的条款,使用开源软件都不会构成侵犯专利。
6.2. 违反协议的后果
很多公司希望避开GPL条款,既使用GPL软件,又不把自己的专有代码开源。理论上,这是做不到的。因为GPL的设计目的,就是为了防止出现这种情况。
但是实际上,不遵守GPL,最坏情况就是被起诉。如果你向法院表示无法履行GPL的条件,法官只会判决你停止使用GPL代码(法律上叫做"停止侵害"),
而不会强制要求你将源码开源,因为《版权法》里面的"违约救济"没有提到违约者必须开源,只提到可以停止侵害和赔偿损失
。
7. 总结
有严格到宽松,简单排序:
Apache