关于 Netscape 公共许可证

本文的原始版本写于 1998 年 3 月,是关于 NPL 的草案。我们关于该主题的第一篇文章是Netscape 正在考虑将 Netscape 浏览器变为自由软件


Netscape 公共许可证(简称 NPL),正如它在 1998 年最终设计的那样,是一个自由软件许可证,但它有三个主要缺陷。一个缺陷传递了一个错误的哲学信息,另一个使自由软件社区处于弱势地位,而第三个缺陷在自由软件社区中造成了一个主要的实际问题。其中两个缺陷也适用于 Mozilla 公共许可证。由于这些缺陷,我们敦促您不要将 NPL 或 MPL 用于您的自由软件。

1. 并非所有用户都是平等的

我在 NPL 中注意到的第一个问题是,它没有像 GNU GPL 那样给予 Netscape 和我们其他人平等的权利。根据 NPL,我们只能按照 NPL 中的规定使用 Netscape 的代码,但 Netscape 可以以任何方式使用我们的更改,即使是在该软件的专有许可版本中也是如此。

这里的问题很微妙,因为这并没有使程序成为非自由的。它并没有阻止我们重新分发程序或更改它;它并没有剥夺我们任何特定的自由。从纯粹的实用主义角度来看,它可能看起来根本不是问题。

问题在于这一条件中体现的更深层的信息。它否定了我们社区所依赖的平等合作的理念,并表示从事自由程序意味着为专有软件产品做出贡献。那些接受这一条件的人很可能会因此而改变,而这种改变不会加强我们的社区。

针对这种不对称性提出的一种解决方案是对其设置时间限制,例如三年或五年。这将是一个很大的改进,因为时间限制将否定有问题的更深层信息。

NPL 的另一个缺点最大限度地减少了这一条件的实际影响:它不是设计为彻底的著作权。换句话说,它并没有非常努力地确保用户所做的修改可以作为自由软件提供。

MPL(Mozilla 公共许可证)没有这个问题。这是 MPL 和 NPL 之间的主要区别。

2. 不是著作权

NPL 具有著作权的形式;它明确指出,用户所做的所有修改都必须在 NPL 下发布。但这仅适用于对现有代码的修改,而不适用于添加的子程序(如果它们放在单独的文件中)。实际上,这意味着如果你想进行专有更改,很容易做到:只需将你的大部分代码放入单独的文件中,并将这个集合称为一个更大的作品。只有添加到旧文件中的子程序调用才需要在 NPL 下发布,而且它们本身不会很有用。

缺乏真正的著作权并不是灾难性的;它并没有使软件成为非自由的。例如,X.org 发行条款根本没有尝试使用著作权,但 X.org 仍然是自由软件。BSD 也是非著作权的自由软件(尽管较旧的 BSD 条款有一个严重缺点,不应效仿,如果你想发布非著作权的自由软件,请使用 X.org 条款代替)。受 NPL 约束的软件也是自由软件,而不是著作权软件,并且这本身并没有使 NPL 比其他非著作权的自由软件许可证更糟糕。

然而,虽然这并不是灾难性的,但它仍然是一个缺点。而且由于 NPL 看起来像著作权,一些用户可能会对此感到困惑,并可能采用 NPL,认为他们正在为他们的软件获得著作权的好处,而事实并非如此。为了避免这种情况,我们需要努力教育人们了解一个不容易用几句话解释清楚的问题。

3. 与 GPL 不兼容

NPL 中最严重的实际问题是它与 GNU GPL 不兼容。不可能在一个程序中将受 NPL 约束的代码和受 GNU GPL 约束的代码组合在一起,即使是通过链接单独的目标文件或库也是如此;无论如何完成,它都必须违反其中一个许可证。

之所以会发生这种冲突,是因为 GPL 对著作权非常认真:它旨在确保对自由程序的所有更改和扩展都必须是自由的。因此,它不会留下通过将更改放入单独的文件来使其成为专有的漏洞。为了堵住这个漏洞,GPL 不允许将受著作权保护的程序与具有其他限制或条件的代码(例如 NPL)链接。

与 GPL 不兼容不会使程序成为非自由的;它不会引发根本的道德问题。但是,它很可能会给自由软件社区带来一个严重的问题,将代码库分成两个无法混合的集合。实际上,这个问题非常重要。

通过更改 GPL 来解决这个问题是可能的,但这将意味着放弃著作权,这将弊大于利。但是,可以通过对 NPL 进行少量更改来解决此问题。(有关具体的解决方法,请参见下文。)

4. 关于名称的说明

NPL 代表 Netscape 公共许可证,但 GPL 不代表 GNU 公共许可证。我们许可证的全称是 GNU 通用公共许可证,缩写为 GNU GPL。有时人们会省略“GNU”这个词,只写 GPL。

(这不是问题,只是您应该知道的一个事实。)

结论

由于问题 3 最为严重,我希望人们能够礼貌且理性地向 Netscape 解释解决这个问题的重要性。解决方案是可用的;他们只需要决定使用它们。

以下是一种可能的方法,允许将受 NPL 约束的代码和受 GPL 约束的代码链接在一起。可以通过在 NPL 中添加以下两个段落来完成

A.1. You may distribute a Covered Work under the terms of the GNU
     General Public License, version 2 or newer, as published by the
     Free Software Foundation, when it is included in a Larger Work
     which is as a whole distributed under the terms of the same
     version of the GNU General Public License.

A.2. If you have received a copy of a Larger Work under the terms of a
     version or a choice of versions of the GNU General Public
     License, and you make modifications to some NPL-covered portions
     of this Larger Work, you have the option of altering these
     portions to say that their distribution terms are that version or
     that choice of versions of GNU General Public License.

这允许人们将受 NPL 约束的代码与受 GPL 约束的代码结合在一起,并根据 GNU GPL 的条款分发组合作品。

它允许人们根据 GNU GPL 的条款发布对此类组合作品的修改,但最简单的方法是在 NPL 下发布它们。

当人们利用 A.2 时,他们的更改将仅在 GNU GPL 的条款下发布;因此,这些更改将不可用于 Netscape 在专有版本中使用。Netscape 可能会认为这是不幸的,这是有道理的。

但是,NPL 为专有软件开发人员提供了一种简单的方法,可以使他们的更改完全无法供 Netscape 使用,方法是将他们的代码放入单独的文件中,并将组合称为更大的作品。实际上,对于他们来说,这比 A.2 对 GPL 用户来说更容易。

如果 Netscape 认为它可以忍受(实际上)专有修改的麻烦,那么与此相比,受 GPL 约束的修改的麻烦肯定很小。如果 Netscape 认为实际考虑将鼓励大多数专有软件世界将其更改发布回 Netscape,而无需被迫,那么同样的理由也应适用于自由软件世界。Netscape 应该认识到此更改是可以接受的,并采用它,以避免使自由软件开发人员面临严重的困境。