GPL 是什么?使用、修改和分发自由软件时有哪些要求
GPL(GNU General Public License,GNU 通用公共许可证)是一种自由软件许可证:它允许任何人运行、研究、修改和再分发采用该许可证的软件,但要求再分发时保留同样的自由。如果你只是自己安装使用,通常不需要额外动作;一旦你对外分发软件(无论原版还是修改版),就需要履行提供源代码和许可证声明等义务。本文以 DAR(Disk ARchive)这类采用 GPL 的项目为例,说明这套规则如何落到实际操作上。
GPL 授予的四项基本自由
GPL 的核心是把版权法下的默认限制(未经许可不得复制、修改、分发)反过来使用:作者保留版权,但通过许可证向所有人授予以下自由。
- 运行:按任何目的使用软件,包括商业环境。
- 研究与修改:获取源代码,按自己的需要改动。
- 再分发:把原版或修改版分发给他人。
- 改进后发布:把自己的改进版公开发布,让社区受益。
这四项自由的关键在于“源代码可获得”。GPL 不要求你公开自己的使用方式,也不要求你向原作者报告改动,只在你分发软件时触发相应义务。
copyleft 的核心机制
GPL 属于 copyleft(著佐权)许可证。它的机制可以概括为一句话:衍生作品必须以相同的许可证发布。
这意味着:
- 你修改了 GPL 代码并对外分发,修改后的整体仍受 GPL 约束,不能改成闭源许可证。
- 你把 GPL 代码与其他代码结合成一个作品分发,通常也会被视为衍生作品,需要整体按 GPL 发布。
- 如果你只是内部使用、不对外分发,则没有公开源代码的义务。
一个常见例子:某团队基于 GPL 的备份工具(如 DAR)做了定制,只在公司内部部署,这不触发分发义务;但如果他们把定制版打包卖给客户或放到网上供人下载,就需要按 GPL 提供对应源代码。
分发时的具体义务
当你分发 GPL 软件的二进制或修改版时,通常需要做到:
- 提供许可证文本:附上完整的 GPL 许可证副本。
- 声明版权与无担保:保留版权声明,并说明软件不提供担保。
- 提供对应源代码:让接收者能获得用于生成该二进制的完整源代码,包括你的修改。
- 不得附加额外限制:不能对接收者施加 GPL 之外的限制,例如禁止再分发。
源代码的提供方式可以是随二进制一起附带,也可以是书面承诺在指定期限内提供。具体条款以你所使用的 GPL 版本为准。
GPLv2 与 GPLv3 的主要差异
| 维度 | GPLv2 | GPLv3 |
|---|---|---|
| 专利授权 | 未明确涉及 | 明确授予专利许可,并要求分发者不主张专利阻碍他人 |
| 反 Tivoization | 无 | 禁止用硬件限制用户运行修改后的软件 |
| 与其他许可证兼容性 | 较严格 | 增加了与 Apache 2.0 等许可证的兼容路径 |
| 数字版权管理(DRM) | 未涉及 | 将绕过 DRM 视为对用户自由的保护范围 |
选择哪个版本取决于项目本身采用的许可证。GPLv2 与 GPLv3 之间通常不自动兼容,不能随意把 GPLv2-only 代码并入 GPLv3 项目。
常见误区
- GPL 不等于放弃版权:作者仍拥有版权,只是授予了广泛的使用许可。
- GPL 不禁止商业使用或收费:你可以销售 GPL 软件,只是不能阻止买家再分发。
- GPL 不要求你公开所有内部代码:只有在你分发衍生作品时才触发源代码义务。
- “开源”不等于“GPL”:MIT、Apache 2.0 等许可证限制更少,不要求衍生作品沿用同一许可证。
如何判断项目是否采用 GPL
- 查看项目根目录下的
LICENSE、COPYING或LICENSE.txt文件。 - 查看源代码文件头部的版权声明,通常会写明许可证名称和版本。
- 查看项目官网的说明。例如 DAR(Disk ARchive)在其下载页明确标注为 GPL 软件,源代码以 tarball 和 GIT 仓库两种形式提供,官方发布的源码包和二进制包均带有作者签名,便于验证来源。
- 注意版本号:
GPL-2.0-only、GPL-2.0-or-later、GPL-3.0-only等写法含义不同,影响你能否升级许可证版本。
与其他许可证的兼容性
兼容性决定你能否把不同许可证的代码合并成一个作品分发。
- GPLv2 与 GPLv3 通常不兼容,除非项目标注“or later”。
- GPLv3 与 Apache 2.0 兼容。
- MIT、BSD 等宽松许可证代码可以并入 GPL 项目,但反向不成立。
- 如果你不确定某个组合是否合规,应查阅许可证原文或咨询法律专业人士。
对大多数使用者来说,判断标准很简单:自己用,不必担心;对外分发,就按 GPL 提供源代码和许可证。