兼容性就是「能否合并发布」
两个许可证兼容,是指将分别适用各许可证的代码合并成一个程序发布时,能够同时遵守两个许可证的条件。如果其中一方禁止另一方的条件,就不兼容。例如,GPL 要求「不得附加额外限制」,因此带有 GPL 所不允许的附加条件的许可证代码,就不能放进 GPL 程序。
兼容性是有方向的
宽松型代码可以进入著佐权项目,反过来则不行。
- MIT 代码 → GPL 项目:可以。保留 MIT 声明,就可以把整个组合作品以 GPL 发布。
- GPL 代码 → MIT 项目:整个组合作品都必须遵守 GPL 条件,因此无法继续作为「MIT 项目」存在。
所以兼容性表始终要按 「把什么代码 → 放进什么项目」 来阅读。
典型组合
Apache-2.0 与 GPL
FSF 认为 Apache-2.0 与 GPL-3.0 兼容,但与 GPL-2.0 不兼容。因为 Apache-2.0 的专利终止条款和免责条款是 GPL-2.0 中没有的附加条件。GPL-3.0 在设计阶段就解决了这个问题。因此,GPL-2.0-or-later 项目只要将组合作品以 GPL-3.0 发布,就可以使用 Apache-2.0 代码。
MPL-2.0 与 GNU 许可证
MPL-2.0 第 1.12 条将 GPL-2.0、LGPL-2.1、AGPL-3.0 及其以后版本定义为「Secondary License」,第 3.3 条允许将 MPL 代码与这些代码合并而成的 Larger Work 按 GNU 许可证发布。原作者附加了 Exhibit B(「Incompatible With Secondary Licenses」)的情况除外。
LGPL 库与闭源应用
LGPL 库可以在闭源应用中使用。但必须让用户能够替换为修改后的库版本(动态链接最简单),并提供库部分的源代码和许可声明。如果把 LGPL 代码复制混入应用源代码,情况就不同了,组合作品必须遵守 LGPL/GPL 条件。
GPL-3.0 与 AGPL-3.0
这两个许可证通过各自的第 13 条明确允许相互结合。在组合作品中,GPL 部分继续遵守 GPL 条件,AGPL 部分继续遵守包括网络源代码提供条件在内的 AGPL 条件。
EPL-2.0 与 GPL
EPL-2.0 默认与 GPL 不兼容,但如果原作者通过 Exhibit A 将 GPL 等指定为 Secondary License,就可以结合。
| 引入的代码 | 闭源应用 | MIT 项目 | GPL-2.0-only | GPL-3.0 |
|---|---|---|---|---|
| MIT·BSD·ISC | 可以(声明) | 可以 | 可以 | 可以 |
| Apache-2.0 | 可以(声明·NOTICE) | 可以 | 不可以 | 可以 |
| MPL-2.0 | 有条件(公开文件) | 有条件 | 有条件(Secondary) | 有条件(Secondary) |
| LGPL-3.0 | 有条件(链接) | 有条件(链接) | 不可以 | 可以 |
| GPL-3.0 | 不可以 | 不可以 | 不可以 | 可以 |
「结合」到什么程度
兼容性问题在代码结合成一个程序时产生。FSF 认为,链接成同一个可执行文件或共享复杂的内部数据结构时,视为一个程序;而管道、套接字、命令行参数等独立程序之间的一般通信,通常视为独立程序的「聚合(aggregate)」。不过这一边界并未由法院判例确定,存在解释分歧。在一个发行版中同时收录多个程序本身并不构成结合。
实务步骤
- 导出依赖项列表(使用包管理器的许可证报告功能或 SBOM 工具)。
- 用 SPDX 标识符整理每个依赖项的许可证。
- 用兼容性检查器初步确认它们与我的项目许可证的组合。
- 对于「有条件」的组合,对照原文确认其条件(声明、链接方式、是否有 Secondary License)。
- 如果存在不可以的组合,就更换依赖项、拆分程序,或调整我的许可证。
本文为一般信息,不构成法律意见。重要决定请咨询专业人士。
参考来源
- GNU 许可证常见问题(兼容性矩阵、MereAggregation)— https://www.gnu.org/licenses/gpl-faq.html
- FSF, Various Licenses and Comments about Them — https://www.gnu.org/licenses/license-list.html
- Apache Software Foundation, GPL Compatibility — https://www.apache.org/licenses/GPL-compatibility.html
- Mozilla, MPL 2.0 FAQ — https://www.mozilla.org/en-US/MPL/2.0/FAQ/
- Eclipse Foundation, EPL 2.0 FAQ — https://www.eclipse.org/legal/epl-2.0/faq/