一张图看懂开源许可协议

目录

出处:乌克兰程序员 Paul Bagwell 的分析图:

一张图看懂开源许可协议

1. GPL

我希望我的代码能生根发芽(“繁衍”后代),遍地开花

GPL——Copyleft(“反版权”),意味着你可以去掉所有原作的版权信息,只要你保持开源,并且随源代码、二进制版附上GPL的许可证就行,让后人可以很明确地得知此软件的授权信息。

GPL核心理念就是任何衍生作品,也必须在GPL下发布。具有以下特点:

  • 使用者循相同的GPL协议进行开源(生生不息,不断衍生
  • 支持商业用途,但必须开源!

GPL-v2支持软件商用,但不允许修改后和衍生的代码作为闭源的商业软件发布和销售。

程序库应当尤为关注GPL——库是大型软件的构建模块:在GPL-v2协议下发布库,你将强制使用该库的任何应用程序也在GPL协议下发布。即,只要引入的某个模块是GPL协议的,它会一直扩展到最上层直到整个项目都强制GPL开源。

GPL协议有点像病毒,一旦被感染,那么就演变成了GPL项目,强制开源(且,再也回不到过去了)

使用此协议的的开源项目:

  • Linux
  • GCC
  • 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

我只想安心的写代码(只想保留版权),别人爱怎么搞就怎么搞吧

  1. 允许别人以任何方式使用(支持商业闭源)
  2. 必须署名原作者
  3. 原作者不承担代码使用后的风险

例如:

小益使用 MIT 协议开源了一个 Android 类库,只要小张引用类库时保留包含了许可声明,那后续项目开源与否,都是符合协议的。

6. 常见问题

6.1. 开源软件的专利如何处理?

某些许可证(Apache 2 和 GPL v3)包含明确的条款,授予用户许可,使用软件所包含的所有专利。

另一些许可证(BSD、MIT 和 GPL v2)根本没提到专利。但是一般认为,它们默认给予用户专利许可,不构成侵犯专利。

总得来说,除非有明确的"保留专利"的条款,使用开源软件都不会构成侵犯专利。

6.2. 违反协议的后果

很多公司希望避开GPL条款,既使用GPL软件,又不把自己的专有代码开源。理论上,这是做不到的。因为GPL的设计目的,就是为了防止出现这种情况。

但是实际上,不遵守GPL,最坏情况就是被起诉。如果你向法院表示无法履行GPL的条件,法官只会判决你停止使用GPL代码(法律上叫做"停止侵害"),而不会强制要求你将源码开源,因为《版权法》里面的"违约救济"没有提到违约者必须开源,只提到可以停止侵害和赔偿损失

7. 总结

一张图看懂开源许可协议

有严格到宽松,简单排序:

  • AGPL
  • GPL
  • MPL
  • LGPL
  • Apache
  • BSD
  • MIT
上一篇:mica-auto 代码自动生成


下一篇:PySide2与PyQt5区别