關於 Netscape 公共許可證(原始版本)
作者:Richard Stallman本文撰寫於 1998 年 3 月 10 日至 12 日,內容關於當時可用的 NPL 草案。
Netscape 公共許可證(NPL)代表著設計新的自由軟體發布條款的認真嘗試。這是一個有趣的嘗試,但它存在需要修正的重大缺陷。其中一個缺陷非常嚴重,我們應該認為它會使程式變成非自由軟體。其他缺陷則有不同的後果:一個傳達了糟糕的哲學訊息,而另一個則為自由軟體社群創造了一個主要的實際問題。
NPL 仍然是草案,並且仍在修改中;本文的目的不是攻擊和譴責,而是鼓勵改進 NPL。如果您閱讀本文時,其中一些問題已經得到糾正,那就更好了,我們可以將那些過時的問題放在一邊。
1. 並非所有使用者都是平等的
我在 NPL 中注意到的第一個問題是,它不像 GNU GPL 那樣給予 Netscape 和我們其他人平等的權利。根據 NPL,我們只能按照 NPL 中的規定使用 Netscape 的程式碼,但 Netscape 可以以任何方式使用我們的變更——甚至在軟體的專有授權版本中也可以。
這裡的問題很微妙,因為這不會使程式變成非自由軟體。它不會阻止我們重新發布程式或更改程式;它沒有剝奪我們的任何特定自由。從純粹務實的角度來看,這可能根本不像是一個問題。
問題在於此條件中包含的更深層次的訊息。它否認了我們社群賴以生存的平等合作理念,並表示致力於自由程式意味著為專有軟體產品做出貢獻。那些接受此條件的人很可能會因此而改變,而這種改變不會增強我們的社群。
針對這種不對稱性的一個擬議解決方案是為其設定時間限制——可能是三到五年。這將是一個很大的改進,因為時間限制會否認有問題的更深層次的訊息。
這種條件的實際影響因 NPL 的另一個缺點而最小化:它並非設計為徹底的著作權宣告。換句話說,它並沒有非常努力地確保使用者所做的修改可以作為自由軟體提供。
2. 非著作權宣告
NPL 具有著作權宣告的形式;它明確表示,使用者所做的所有修改都必須根據 NPL 發布。但這僅適用於對現有程式碼的修改——不適用於新增的子常式,如果它們放在單獨的檔案中。實際上,這意味著如果您想進行專有更改很容易:只需將您的大部分程式碼放入單獨的檔案中,並將該集合稱為「較大的作品」。只有添加到舊檔案的子常式呼叫才必須根據 NPL 發布,而且它們本身不會非常有用。
缺乏真正的著作權宣告並非災難;它不會使軟體變成非自由軟體。例如,XFree86 發行條款根本沒有嘗試使用著作權宣告,但 XFree86 仍然是自由軟體。BSD 也是非著作權宣告的自由軟體(儘管 BSD 條款有一個嚴重的缺點,不應模仿——如果您想發布非著作權宣告的自由軟體,請改用 XFree86 條款)。Netscape 軟體也可以是非著作權宣告的自由軟體。
然而,雖然這不是災難性的,但它仍然是一個缺點。而且由於 NPL 看起來像著作權宣告,一些使用者可能會對此感到困惑,並可能採用 NPL,認為他們正在為其軟體獲得著作權宣告的好處,但事實並非如此。為了避免這種結果,我們需要努力教育人們了解一個不容易用幾句話解釋清楚的問題。
3. 不尊重隱私
NPL 中的下一個問題是一個阻礙:如果您進行更改,則必須發布它。不允許為了自己使用而進行私人更改;也禁止僅向幾個朋友發布更改。
當我們思考自由軟體的問題時,我們通常關注發布和修改的自由,因為這是軟體開發人員最常試圖阻止的事情。但是,當您不希望發布副本時,不發布副本的自由也很重要。例如,進行修改而不向任何人展示的自由是我們所說的「隱私」的一部分。將您的修改發布給幾個朋友,但不向公眾展示(或暫時不展示)的自由也是至關重要的。(當然,如果程式是自由的,您的朋友可以自由地將其傳遞給其他人,如果他們願意的話——但他們不會被要求這樣做。)
修正 NPL 以尊重這項基本自由是絕對必要的,我們的社群必須堅決堅持這一點。為了額外的程式而犧牲重要的自由是不值得的,無論它多麼有用和令人興奮。
4. 與 GPL 不相容
NPL 中還有另一個嚴重的問題:它與 GNU GPL 不相容。不可能將 NPL 涵蓋的程式碼和 GNU GPL 涵蓋的程式碼組合在一個程式中,即使通過連結單獨的目標檔案或程式庫也不行;無論如何完成,都必須違反其中一個許可證。
這種衝突的發生是因為 GPL 對著作權宣告非常認真:它旨在確保對自由程式的所有更改和擴展都必須是自由的。因此,它沒有留下通過將更改放入單獨的檔案中來使更改變成專有的漏洞。為了堵住這個漏洞,GPL 不允許將受著作權宣告保護的程式與具有其他限制或條件的程式碼連結——例如 NPL。
與 GPL 不相容並不會使程式變成非自由軟體;它不會引發基本的道德問題。但它很可能會為我們的社群創造一個嚴重的問題,將程式碼庫分成兩個無法混合的集合。實際上,這個問題需要解決。
通過更改 GPL 來解決這個問題是可能的,但那將意味著放棄著作權宣告——這將弊大於利。但是,可以通過對 NPL 進行小小的更改來解決這個問題。(請參閱下文了解具體的解決方法。)
5. 關於名稱的說明
NPL 代表 Netscape 公共許可證,但 GPL 並不代表 GNU 公共許可證。我們的許可證的全名是 GNU 通用公共許可證,縮寫為 GNU GPL。有時人們會省略「GNU」這個詞,只寫 GPL。
結論
由於問題 3 和問題 4 最為嚴重,我希望人們會禮貌且理性地向 Netscape 解釋解決這些問題的重要性。解決方案是可行的;他們只需要決定使用它們。有傳言稱 Netscape 已決定糾正問題 3——但讓他們知道這對您很重要不會有任何壞處。沒有消息表明他們計劃糾正問題 4。
這裡有一個可能的方法來允許將 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 應該認識到這種改變是可以接受的,並採用它,以避免讓自由軟體開發人員面臨嚴重的困境。