GNU 通用公共许可证(GPL)自发布以来经历了多个版本的更新。最重要的两个版本是 GPL 2.0 和 GPL 3.0,后者对前者进行了多项重要的修改。下面是这两个版本的主要区别:
1. 专利保护
GPL 2.0:虽然GPL 2.0中并没有明确提到专利,但它通过“Copyleft”条款间接地提供了一定的专利保护,即如果开发者使用GPL 2.0代码,必须继续公开自己的修改,避免他人通过专利限制开源软件的自由。
GPL 3.0:在GPL 3.0中,专利条款得到了更加明确的强调。GPL 3.0要求贡献者放弃通过专利起诉开源软件用户的权利,并提供了更强的专利保护。也就是说,如果某个开发者贡献代码,他们就不能在之后通过专利对GPL 3.0授权的软件提出诉讼。
2. Tivoization
GPL 2.0:GPL 2.0没有直接提及硬件锁定的问题(即“tivoization”)。如果一个设备使用了GPL授权的软件,用户可以修改软件的源代码,但没有强制要求硬件上能够运行修改后的代码。
GPL 3.0:GPL 3.0明确提出了针对硬件锁定问题的限制,规定设备制造商不得通过硬件限制用户运行修改版的GPL软件,即使软件本身是开源的。具体来说,GPL 3.0要求,用户如果想要修改和运行自己的代码,必须能够在硬件上实现这一目标。
3. 兼容性
GPL 2.0:与其他开源许可证(如Apache、BSD等)兼容性较差。如果一个项目采用GPL 2.0许可,任何与之合并的代码也必须采用GPL 2.0许可。
GPL 3.0:增强了与其他开源许可证的兼容性,特别是与Apache 2.0许可证的兼容性。这意味着GPL 3.0代码可以与Apache 2.0代码结合,避免了GPL 2.0和Apache 2.0之间存在的许可证冲突问题。
4. 反对DRM(数字版权管理)
GPL 2.0:没有明确反对数字版权管理(DRM),在一定情况下,使用DRM的系统仍然可以分发GPL 2.0代码。
GPL 3.0:GPL 3.0明确禁止使用开源软件来实施数字版权管理(DRM)。如果开发者试图利用GPL 3.0代码来增强或支持DRM,GPL 3.0将视为违反协议。这一修改是为了进一步保护软件自由性,防止软件被用来加强对用户的限制。
5. 更严格的合规性要求
GPL 2.0:GPL 2.0的合规性要求相对较少,更多的是在代码发布时要求提供源代码。
GPL 3.0:在合规性方面,GPL 3.0要求更为严格。它要求开发者提供更多的合规性证明和文档,确保开源代码的使用符合法律规定。尤其是在涉及到对外发布和对专利、DRM的约束时,GPL 3.0对开发者的义务更为详细和严格。
6. 许可证升级
GPL 2.0:GPL 2.0没有明确允许从GPL 2.0升级到GPL 3.0。如果开发者想将项目从GPL 2.0升级到GPL 3.0,需要明确声明许可版本的更改。
GPL 3.0:GPL 3.0允许开发者选择将GPL 2.0或更早版本的代码升级到GPL 3.0。这种灵活性使得GPL 3.0能够逐渐替代旧版本,推动更广泛的适用。
总结
GPL 2.0:主要针对自由软件的传播和修改,强调“Copyleft”原则,但在专利保护、硬件限制等方面较为宽松,较难与其他许可证兼容。
GPL 3.0:对专利保护、硬件锁定(Tivoization)、数字版权管理等方面进行了加强,提升了开源软件的自由性和安全性。更强的合规性和与其他开源协议的兼容性,使得GPL 3.0适应现代的开源软件需求。