GPLv3 开源协议:读懂那份"最讲原则"的许可证

在开源世界的几十种许可证里,GNU 通用公共许可证第三版(GPLv3)大概是性格最鲜明的一个:它慷慨到允许任何人商用、修改、再分发,又强硬到要求你把衍生作品同样开源。有人视它为自由软件的守护者,有人视它为商业化的绊脚石。但无论立场如何,你几乎不可能绕开它——GCC、Bash、GRUB 这些基础设施级的软件都以它授权。
这篇文章想把 GPLv3 讲透:它从哪来、核心机制是什么、相比 v2 改了什么、为什么 Linux 内核拒绝升级、以及今天的企业和个人该怎么面对它。
一、三代 GPL 的简史
- 1989 年,GPLv1 发布。 理查德·斯托曼(Richard Stallman)为 GNU 工程写下初版通用公共许可证,核心目标只有一个:用著作权法反制著作权法——"你可以自由使用,但必须让这份自由继续传递下去"。
- 1991 年 6 月,GPLv2 发布。 它修正了 v1 的若干法律表述,成为此后十六年里使用最广的自由软件许可证。Linux 内核、Git、MySQL、WordPress 都基于它。
- 2007 年 6 月 29 日,自由软件基金会(FSF)正式发布 GPLv3(FSF 发布公告)。这次修订历时两年,从 2006 年 1 月起公开了三版草案,累计收到来自全球社区的上万条意见,是开源史上罕见的"开门立法"(LWN 当日报道)。
需要注意:GPLv3 不是 GPLv2 的"补丁",而是一份独立的新协议。GPLv2 和 GPLv3 互不兼容,这一点后面细说。
二、核心机制:Copyleft 与"传染性"
GPLv3 的一切设计,围绕着斯托曼提出的"四项基本自由":出于任何目的运行软件的自由、研究和修改源码的自由、再分发副本的自由、分发修改版的自由。
把这四项自由变成可执行的法律义务的机制,就是 Copyleft(著佐权),国内常俗称"传染性":
- 你可以商用、修改、倒卖 GPL 软件,GPL 从不禁止商业使用。
- 但只要你"分发"了软件(交付二进制给他人,无论是卖、送还是预装进设备),就必须同时提供对应源码,或提供可获取源码的书面承诺。
- 衍生作品必须以相同许可证发布。 你基于 GPL 代码写的模块、改的版本,再分发时整体只能按 GPL 来——不能转成闭源,不能附加额外限制。
常见的误解有两个,值得当场纠正:
- "用了 GPL 代码,公司所有代码都得开源"——不准确。 传染性只作用于"衍生作品"(基于 GPL 代码创作的部分),独立的、进程外或功能上不相干的程序不受影响。边界在哪(尤其动态链接、静态链接、同进程插件)历来是社区争论焦点,FSF 的立场比宽松派更严格,这也是后来 LGPL、Classpath 例外等变体存在的原因。
- "提供网络服务也算分发,也得开源"——不对。 GPLv3 不管这件事。"运行软件对外提供服务视为分发"是另一个许可证 AGPLv3 的规则。用户访问你的网站、你没有把软件副本交给用户,GPLv3 的源码义务就不触发。
三、从 v2 到 v3:这次修订到底改了什么
GPLv3 的修订目标,是补上 1991 年的协议面对 2007 年现实时的漏洞。最核心的四条:
1. 明确的专利授权
GPLv2 对专利几乎沉默,理论上你贡献了代码、再拿专利去起诉使用者,协议管不着。GPLv3 堵上了这个口子:贡献者在授予版权许可的同时,自动授予必要的专利许可;而且如果有人对 GPL 软件发起专利诉讼,其依协议获得的授权将被终止。用大白话说——拿了代码,就不许放专利的冷箭。
2. 反 Tivoization:不许用硬件锁死软件
这是 GPLv3 最具争议的条款。"Tivoization"得名于 TiVo 数字录像机:它运行 GPL 软件、也按要求公开了源码,但设备会校验启动签名——你可以改代码,但改完的版本设备拒绝运行。自由在纸面上完整,在硬件上归零。
GPLv3 对此的回应:对于面向消费者的设备(协议中称"User Products"),分发者必须同时提供安装修改版软件所需的信息(密钥、签名方法等),让"修改的自由"真正可用(GNU 官方对 Tivoization 的说明)。
3. 对 DRM 的明确否定
GPLv3 声明:协议不允许以数字版权管理或技术保护措施来限制用户行使其修改权。你可以用 GPL 软件做加密工具,但不能用它把用户锁在门外。
4. 法律层面的现代化
包括:条款措辞面向国际法域而非只考虑美国法;违规后提供 30 天内改正即可恢复授权的"治愈期"(v2 一经违约永久终止,不留余地);引入"附加许可"(Additional Permissions)机制,允许作者在 GPL 之上放宽部分限制,LGPLv3 就是"GPLv3 + 附加许可"的产物;对"分发""衍生作品"等关键概念作出更清晰的界定。
四、兼容性:一张表看清
许可证兼容性决定了"两个项目的代码能不能合到一个程序里"。方向性很重要:
| 组合 | 能否合并发布 | 原因 |
|---|---|---|
| GPLv2 + GPLv3 | 不能 | GPLv2 只允许"原版或(按作者声明)任意后续版本";GPLv3 相对 v2 多出专利、反 Tivo 等限制,v2 用户不接受 |
| Apache 2.0 + GPLv3 | 可以 | GPLv3 与 Apache 2.0 的专利条款兼容,FSF 官方确认 Apache 2.0 代码可并入 GPLv3 项目 |
| Apache 2.0 + GPLv2 | 不能 | 两者的专利授权条款互相冲突,这是当年促使 GPLv3 修订的原因之一 |
| MIT/BSD + GPLv3 | 可以 | 宽松许可证单向兼容于 GPL 家族 |
| LGPLv3 + GPLv3 | 可以 | LGPLv3 本质就是 GPLv3 加附加许可 |
一句话记忆:GPLv3 站在兼容性的枢纽位置——宽松许可证的代码流得进来,GPL 家族的代码流得出去,唯独和 GPLv2 断了路。
五、最大的争议:Linux 内核为什么留在 GPLv2
如果 GPLv3 全是优点,升级会是自然的事。但开源世界最有影响力的项目——Linux 内核——明确拒绝了它,内核许可声明至今是"GPLv2 only"。
林纳斯·托瓦兹(Linus Torvalds)的反对主要集中在两处:
- 反 Tivoization 被他视为"管过头"。他的立场是:硬件厂商有权做签名验证,GPL 要保证的是源码层面的自由,而不是干涉别人的产品设计。
- 专利条款与他信奉的"代码换代码"原则相悖。他把 GPL 的精髓理解为对等交换("你用了我的代码,你的修改也要给我"),而 GPLv3 的专利与安装信息要求,在他看来掺入了政治目标,把协议变成了"代码换政治"。
这场分歧的结果是开源生态的"版本分层":Linux 内核、BusyBox、Git 等留在 GPLv2;GNU 工具链(GCC、coreutils、Bash、GRUB)升级到 GPLv3;更多新项目则干脆选择 MIT、Apache 2.0 这类宽松协议。孰是孰非没有定论,但它说明一件事:许可证不只是法律文件,它是一套价值观的表达,选协议就是选立场。
六、实用指南:我该怎么用 GPLv3
选型判断,三个问题:
- 你想不想让修改版必须开源?想 → GPL 家族;不想 → MIT/Apache 2.0。
- 你会不会把代码装进卖给消费者的硬件?会 → GPLv3 的安装信息义务必须评估,否则考虑宽松协议或商业授权双轨。
- 你的代码会不会被云服务商拿去当服务卖而不分发?会且你介意 → 用 AGPLv3 而不是 GPLv3。
声明写法(项目根目录 LICENSE + README):
Copyright (c) 2026 <作者名> 本项目基于 GNU 通用公共许可证第三版(GPLv3)授权,你可以在遵守该许可证的前提下自由使用、修改和分发。完整许可证文本见 LICENSE 文件。
LICENSE 文件直接放 GPLv3 中文译本或英文原文。建议写明"GPLv3 or later"还是"GPLv3 only"——这句话决定了别人能否在你之上叠加更新的版本,Linux 内核当年正是靠它锁定了 v2。
三条合规红线:
- 触发点是"分发"。 交付二进制(含预装进设备、作为 SDK 发给客户)那一刻起,源码义务生效;纯内部使用和对外提供 SaaS 不触发。
- 源码要"可得且对得上"。 随包附源码、或给出书面获取方式都可以,但必须对应你分发的那个版本,且不能附加额外限制(不能只给编译不过的残缺源码,不能加 NDA)。
- 违规有 30 天治愈期,别滥用。 GPLv3 规定首次违规者在收到通知后 30 天内改正可自动恢复授权,但这不是护身符——屡次违规将永久失去授权。
七、在中国:GPLv3 已有司法判例背书
开源协议在中国是否具有法律约束力,曾长期存疑。近年的司法实践给出了肯定答案:2019 年北京知识产权法院在"数字天堂诉柚子科技"案中首次确认 GPL 协议构成有效合同;2021 年,广州知识产权法院在"罗盒"案(涉 VirtualApp 项目)中对 GPLv3 的效力作出认定——协议条款对双方具有约束力,违反开源义务的使用行为构成著作权侵权,需承担停止侵害、赔偿损失等责任。
对国内从业者的启示很实际:GPL 不是社区倡议,是白纸黑字的合同。 在代码库里引入 GPL 依赖前的合规审查,其必要性和审查一份商业软件授权没有区别。
结语
GPLv3 常被误读为"不许商用",它恰恰从不禁止商用——它只坚持一条:你得到的自由,必须原样传给下一个人。 专利授权、反 Tivoization、DRM 禁止,都是这条原则在 21 世纪语境下的延伸。
它未必适合每个项目。想让代码被最大范围嵌入商业产品,MIT 和 Apache 2.0 更友善;想守住"修改版永远自由"的底线,GPLv3 目前仍是设计最周密的法律文本。选协议之前,先想清楚你想要一个怎样的世界——这正是斯托曼二十年前写下第一版 GPL 时,想让每个开发者回答的问题。
