LGPL、GPL 和 AGPL 开源协议在商用情况下的例举

本贴最后更新于 1462 天前,其中的信息可能已经渤澥桑田

概要

本文主要举例说明公司在商用情况下使用 Copyleft 协议项目的情况,修改源码情况并未涉及。

Copyleft

这三个开源许可证都是“Copyleft”的,即未经原作者许可就可以随意复制源码,前提条件:

  • 如果分发二进制,必须提供源码
  • 修改后的源码,必须与修改前保持许可证一致
  • 不得在原始许可证以外,附加其他限制

Copyleft 许可证是有传染性的,使用源码后衍生代码也必须使用相同的开源协议。

GPL 商用列举

如果依赖使用 GPL 的项目(无论是引用源码还是引用库),则衍生代码必须以 GPL 发布。

一个常见的情况就是 MySQL 的 Java 驱动 Connector/J,该库基于 GPL 发布,很多公司都使用该驱动来连接 MySQL。那是否公司项目代码必须使用 GPL 开源呢?分为两种情况:

  1. Web 项目使用 MySQL 驱动,该情况下其实项目源码已经“开源”。因为公司项目的源码仅有员工可以访问,这满足了引用 GPL 库必须开源(这里的“开源”指的是对使用 GPL 项目的用户提供源码,这些用户就是公司员工),所以其实公司内部使用 MySQL 驱动开发项目时已经满足许可
  2. 端用户项目使用 MySQL 驱动,该情况下源码必须给到端用户。比如公司开发了一款数据库管理工具使用了 MySQL 驱动,则该工具的源码必须基于 GPL 给到最终用户

还有一种情况是商业项目必须依赖某个 GPL 库,但是为了防止被传染,可以用进程(网络)隔离。比如有个库是基于 GPL 开源的,可以考虑将其封装为独立进程,对外暴露网络接口来提供给公司项目用。这样就只用开源那个封装程序,商业项目不受影响。

LGPL 商用列举

LGPL 对比 GPL 主要是放宽了对引用类库的限制,如果衍生代码使用了 LGPL 库则可以不用 LGPL。结合上面的 GPL 商用列举就比较好理解了,比如公司项目依赖 LGPL 库,则公司项目可以用其他协议,不受感染。但是如果用了 LGPL 代码,则必须要用 LGPL。

AGPL 商用列举

这是最严格的 Copyleft 协议,无论是跨进程还是跨网络,只要依赖了 AGPL 的库,则项目必须要用 AGPL。比如公司项目依赖某个 AGPL 库,则无论如何封装和使用,整个项目都必须继续用 AGPL。

举个例子,如果公司项目用了 AGPL 库来开发 Web 站点,则整个站点相关的代码都必须使用 AGPL,并且对能够访问到站点的人提供完整的项目源码。

该协议一般用于那种找不到替代品的项目,并且一般使用该协议的项目都会提供单独的商用授权协议,公司如果一定要用可以考虑采购商用授权。如果不确定的话,千万不要以任何方式依赖 AGPL 项目。

是否能销售

这三个开源协议并未规定不能收费(源码收费除外,源码给到用户是前提),换句话说就是即使用了这三个开源协议,项目也是可以销售的,只是必须附加源码。

违反协议的结果

这几个协议在国内也是有法律效力的,被起诉的结果是大概率会被要求停止使用 GPL 库并赔偿侵权损失,但不会要求项目开源。当然,也有可能会被要求开源,但是否有效不太确定。

最后

本文部分参考了阮一峰老师的开源许可证教程,在此表示感谢。

另外,我并非法律专业,本文仅提供给其他程序员同行参考,如有问题欢迎讨论,谢谢!

  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    395 引用 • 3408 回帖
  • LGPL
    1 引用
  • GPL
    2 引用 • 3 回帖
  • AGPL
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...