软件不应限制其用户。每个用户都应该有四项基本自由:
我们会升级GPL以免法律或技术的发展对其造成逐步的削弱。最新版许可证保护用户不再受三个新到威胁的侵害:
版本3也做一些改进,使之更容易理解和使用。但是即使加上这些改进,GPLv3也不是一个全新许可证;它是以前版本的演进。虽然文本改了很多,但是大多数只是澄清GPLv2的内容。考虑到这些之后,我们来审阅一下GPLv3的主要改进,探讨一下它们如何为用户和开发者改善了许可证。
一直以来,GNUGPL不限制人们用软件做什么;它只是阻止人们限制其他人。
Tivoization是剥夺用户自由的危险行为:如果计算机不能运行你修改的软件,那么修改的权利就没有意义。GPLv3通过要求发布者提供安装和运行修改版本的信息或数据来阻止tivoization。这可以是一些简单的指令,或者包括一些帮助跳过硬件检查的密钥数据和信息。它依赖于硬件设计——但无论你需要的是什么信息,你都应该得到。
这个要求是有范围限制的。发布者还是可以使用密钥,他们只是在你需要修改他们提供的GPL软件时被要求公布一个密钥。GNU工程本身也使用GnuPG来证明它放在FTP站点的软件是正确的。GPLv3并不阻止人们使用加密;这个我们想都没想过。它只是要阻止人们剥夺该许可证赋予你的权利——不管他们是通过专利法剥夺、通过技术剥夺,还是通过其他手段剥夺。
这个对于用户和开发者来说,就是他们能够从事GPLv3的工作而无需担心有孤注一掷的发行者想要通过专利侵权来告他们。有了这些改变,GPLv3给用户提供了比其他自由软件许可证更多的对付专利攻击的保护。
如果你想把某个代码组合到一个GPL项目中,GPLv2说该代码的许可证不允许有任何GPLv2还没有包含的限制。如果是这样,那么我们说该许可证兼容GPL。
GNUAfferoGPL版本3被加了进来。初始AfferoGPL的设计是用来保证网络应用的用户可以获得源代码。GNUAfferoGPL版本3拓宽了这个目标:它可以用于所有网络交互软件,所以它也适用于诸如游戏服务器之类的程序。其增加的条款也更灵活,如果某人要在没有网络接口的程序里使用AGPL源代码,那么她只需按照GPL的要求提供源代码。通过使这两个许可证兼容,网络交互软件的开发者能够增强copyleft,同时能够在成熟的GPL代码基础之上进行发展。
GPL的一个基本要求就是当你向用户提供目标代码时,你也必须提供获取源代码的方法。GPLv2提供了几个方法,而GPLv3维持这些方法并做了澄清。它还为你通过网络输送目标代码时提供了给出源代码的新方法。例如,当你在网络或FTP服务器上托管目标代码时,你可以简要地向访问者提供如何从第三方服务器获取源代码地指令。感谢这个新的选项,它让众多只对代码做出少许改动的微小发布者更容易达成提供源代码的要求。
新许可证还让大家通过BitTorrent输送目标代码更容易。首先,仅在torrent下载或播种的人被排除在许可证的输送软件要求之外。其次,发起torrent的人可以通过告知其他torrent用户源代码在哪个公共网络服务器上的方式提供源代码。
新选项既保持了GPL提供源代码的社区标准,也没有让用户获得源代码变得更困难。
GPLv3对系统库的定义做了调整,使之包含了操作系统不一定直接带有、但是全体软件用户都合理期待的软件。比如,它现在也包含了象Python和Ruby等通用编程语言的标准库。
新的定义还澄清了你可以组合GPL软件与不兼容GPL的系统库,比如OpenSolaris的C库,并合在一起发布。这大大方便了想为用户提供此类组合的自由软件发布者。
GPLv3使用了新的术语,“输送”,并提供了定义。“输送”和我们使用的“发布,”意思一样,但是它在许可证里有直接的解释,这样任何地方的人都容易理解我们的意思。整个许可证还有一些小的改动,它们也有助于在全球范围内使用该许可证。
维护GPL合规一直是FSF合规实验室和世界上其他许可证执法组织的首要任务。这些改变保证了维护合规仍然是执法者的首要任务,并且给予违反者愿意悔过自新的理由。
这些改变可能对你不如对其他人那么重要。不要紧。项目五花八门,每个都需要许可证里面的不同营养。但是这里的改进大概率会帮到你和你的项目。
整体来看,所有这些升级代表:我们做出了一个更好的copyleft。它对用户自由的保护更多,但是也会促进更多的自由软件社区合作。升级许可证只是部分工作:为了让人们受益GPLv3,开发者应该在项目中使用它。使用此新许可证发布你的软件,所有收到软件的人——用户、其他开发者、发布者、甚至是律师——都会受益。我们期待你的下一个发布使用的是GPLv3。