關於 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 應該意識到這種改變是可以接受的,並採納它,以避免讓自由軟體開發人員面臨嚴重的困境。