GPL和许可证兼容性

私有不兼容与私有兼容许可证的最尖锐区别,也就是GNU GPL与其他许可证的区别。因为GPL作者的主要目标是提升自由软件,他们故意使它们的许可证不可能让GPL代码混入私有程序。具体说来,在GPL的要求中(见http://www.fsf.org/licensing/licenses/gpl.html的全文)有这样两点:

  1. 所有衍生作品—也就是任何包含非琐碎量GPL代码的作品—也必须在GPL下分发。

  2. 对于原始作品或衍生作品的分发没有其他附加的限制。(另一种表达是:“你不可以为接受者设置一些超过这里列出的进一步限制。 ”)

通过这些条件,GPL成功的让自由传播。一旦某个程序在GPL下设置版权,它的再次发布条款会像病毒—传播到与之组合的代码中,有效的使GPL化的代码无法用于闭源程序中。然而,同样的条款也使GPL与其他自由许可证无法兼容。一个常见的方式是其他许可证设置了一个需求—例如,需要以某种方式提及原始作者的荣誉条款—与GPL中“不得设置进一步的限制不兼容...”。从自由软件基金会的角度,这种二阶的后果是理想的,至少没有值得后悔的。GPL不仅仅保持你的软件的自由,也有效的推动其他软件强制自由。

这是否是提升自由软件地位的好方法这个问题是互联网上一场持久的圣战(见Chapter 6, 交流the section called “避免圣战”),我们不做深入分析。重要的是GPL兼容性是我们选择许可证时的一个重要问题。GPL是最流行的开源许可证;在http://freshmeat.net/stats/#license大约是68%的份额,而第二高的许可证则只有6%。如果你希望你的代码可以自由的与GPL的代码混合—这里有大量GPL的代码—然后你必须选择一种GPL兼容的许可证。大多数GPL兼容的开源许可证也是私有兼容:也就是说,在该许可证下的代码可以用于GPL程序,也可以用于私有程序。当然,混合的结果不会互相兼容,因为一种是GPL,另一种则是闭源作品。但是真正相关的是衍生的作品,而不是你一开始分发的代码。

幸运的是,自由软件基金会维护了一个与GPL兼容或不兼容的许可证列表,位于http://www.gnu.org/licenses/license-list.html。本章讨论的许可证都会展现在这个列表中,兼容的和不兼容的。