软件许可证的基础知识

软件许可证是一份法律文档,规定了用户对某个软件可以做的事和不能做的事。它主要围绕版权法,对用户的权利和义务进行规定。

版权法默认是禁止计算机软件的自由使用、修改和分享的。而要将这些权利赋予出去,作者就需要使用软件许可证对软件进行授权,从而令用户拥有这些权利。这种权利的授予通常伴随着来自许可证条款的限制,而不同的条款就产生了不同的许可证。

常用许可证及其分类

软件开发者可以自己编写一份许可证,来规定软件的使用条款。但通常情况下,开发者都会选用一份现有的许可证来发布其软件。适用于许可自由软件的许可证,大体来说分为三类:宽松型许可证、中间型许可证和 copyleft 许可证。

需要注意的是,如果你只是普通的软件用户,没有修改软件的需求,那么无论软件使用哪一种许可证,只要它属于自由软件许可证,那对你而言都是没有什么区别的——它都为你赋予了使用和分享软件副本的自由。自由软件许可证分为这三大类,依据的是开发者在对软件做出修改时,应遵守义务的多少。

下文将介绍这三大自由软件许可证的类别。普通用户可以就此止步。

宽松型许可证

这类许可证对源代码的再利用十分纵容,除了署名要求以外,没有其他任何条件限制。如果某个软件使用一个宽松许可证发布,那么其他人就可以不受限制地任意使用这个软件,包括将其源代码纳入自己的专有软件。

以下是一些常用的宽松型许可证(越靠前者越推荐):

我们之所以最推荐 Apache 许可证,是因为它的条款与条件十分完整周全,但仍然保持着宽松性。在上面的列表中,除了 Apache 许可证,其他所有许可证都相当简短。不过,我们认为使用 Expat 许可证(MIT 许可证)也不是一个坏主意。

宽松性许可证虽然能让软件得到更广泛的采用,但它也使其他人能够直接将源代码纳入其自己的项目,然后拒绝发布自己项目的源代码。解决这一问题的方法就是采用 copyleft 许可证。

Copyleft 许可证

Copyleft 的基本内涵是:如果你获得了自由,那么你也要给予他人同样的自由。如果一个软件使用了一份 copyleft 许可证发布,那么其他人在将其源代码纳入自己的项目时,也需要将自己项目的源代码使用相同的许可证发布出来。

这类许可证的代表是 GNU 通用公共许可证(GNU General Public License),简称 GNU GPL 或 GPL。GPL 在赋予用户使用、修改和分发软件的自由的同时,增加了这样的条件:在分发衍生作品时,必须同样使用 GPL 向衍生作品的接收者提供源代码。

除了 GPL,另一个常见的 copyleft 许可证是 AGPL,即 GNU Affero 通用公共许可证(GNU Affero General Public License)。相比 GPL,AGPL 更加适合通常是以网络服务的方式运行的软件。它把通过网络来使用某一软件,也视作软件的分发。这么一来,如果某人基于一个 AGPL 软件,开发了一个衍生作品,并通过网络来向他人提供服务,那么他人也有权根据 AGPL 索取这个衍生作品的源代码。

使用 GPL 和 AGPL 这样的 copyleft 许可证来发布自己的软件,可以避免软件源代码被纳入其他人的专有软件之中,并促进自由软件的增长。

中间型许可证

这类许可证又称“弱 copyleft”许可证,目的是在宽松型许可证和 copyleft 许可证之间寻求一个折中方案。中间型许可证只会将 copyleft 涵盖于本软件,而不会将 copyleft 扩散到链接或依赖本软件的其他软件。

Mozilla 公共许可证(Mozilla Public License,MPL)是一份常用的中间型许可证。MPL 的 copyleft 是以文件为单位的。也就是说,如果项目 A 使用了 MPL 许可,那么项目 B 使用项目 A 时,就必须把在项目 A 中修改过的所有源代码文件发布出来,但不会影响到项目 B 的许可证选择。

除了 MPL 以外,GNU 宽通用公共许可证(GNU Lesser General Public License,LGPL)也是一份流行的中间型许可证。它主要用于函数库,有时也用于其它软件。如果某个库使用 LGPL 许可,那么其它软件在使用这个库(或其修改版)时,就需要向用户提供这个库的源代码。

为软件使用中间型许可证,虽然能保证本软件的自由得到保障,但不能防止包含了本软件的组合作品专有化。

公有领域

除了使用以上三类许可证将代码许可出去,开发者还可以将其代码直接发布到公有领域。公有领域比宽松型许可更为宽松,它比宽松型许可证还少了署名的需求。也就是说,公有领域作品的使用不受任何条件约束。

公有领域并不是一种许可证,而是一种放弃所有版权的声明。常用的公有领域声明有 CC0The Unlicense

付诸实践

现在你已经了解了一些常见的软件许可证。如何使用这些许可证来发布你的自由软件?请继续阅读如何参与自由软件的开发