應用自由軟體標準

四項基本自由提供了判斷特定程式碼是否為自由/開放原始碼(即,尊重其使用者自由)的標準。我們應該如何應用它們來判斷軟體套件、作業系統、電腦或網頁是否適合推薦?

一個程式是否自由首先影響我們關於私人活動的決定:為了維護我們的自由,我們需要拒絕那些會奪走自由的程式。然而,它也影響我們應該對他人說什麼以及與他人做什麼。

非自由軟體是不公正的。散布非自由軟體、向他人推薦非自由軟體,或更廣泛地引導他們走上使用非自由軟體的道路,意味著引導他們放棄自由。當然,引導人們使用非自由軟體與在他們的電腦中安裝非自由軟體並不相同,但我們不應該把人們引向錯誤的方向。

在更深層次上,我們絕不能將非自由軟體呈現為解決方案,因為那樣會賦予它合法性。非自由軟體是一個問題;將其呈現為解決方案是否認問題的存在

本文解釋了我們如何應用基本的自由軟體標準來判斷各種事物,以便我們可以決定是否推薦它們。

軟體套件

為了使軟體套件是自由的,其中所有程式碼都必須是自由的。但不僅僅是程式碼。由於文件檔案,包括手冊、README、變更日誌等等,是軟體套件必不可少的技術部分,它們也必須是自由的

一個軟體套件通常與許多其他套件一起使用,並與其中一些套件互動。與非自由程式的哪些互動類型在道德上是可以接受的?

我們開發 GNU 是為了有一個自由的作業系統,因為在 1983 年還沒有自由的作業系統。當我們在 1980 年代開發 GNU 的初始組件時,每個組件都依賴非自由軟體是不可避免的。例如,在 GCC 工作之前,沒有 C 編譯器任何 C 程式都無法運行,並且在 glibc 工作之前,沒有 Unix libc 任何程式都無法運行。每個組件只能在非自由系統上運行,因為所有系統都是非自由的。

在我們發布了一個可以在某些非自由系統上運行的組件後,使用者將其移植到其他非自由系統;這些移植在道德上並不比我們開發這些組件所需的平台特定程式碼更糟,因此我們合併了他們的修補程式。

當核心 Linux 在 1992 年被自由化時,它填補了 GNU 系統中的最後一個缺口。(最初,在 1991 年,Linux 是在非自由授權條款下發布的。)GNU 和 Linux 的結合構成了一個完整的自由作業系統——GNU/Linux

在那時,我們可以刪除對非自由平台的支持,但我們決定不這樣做。非自由系統是不公正的,但使用者運行它並不是我們的錯。在該系統上支持自由程式並不會加劇不公正。而且它不僅對這些系統的使用者有用,而且對於吸引更多人為開發自由程式做出貢獻也很有用。

然而,在自由程式之上運行的非自由程式是完全不同的問題,因為它引導使用者遠離自由。在某些情況下,我們不允許這樣做:例如,GCC 禁止非自由外掛程式。當一個程式允許非自由附加元件時,它至少不應引導人們使用它們。例如,我們選擇 LibreOffice 而不是 OpenOffice,因為 OpenOffice 建議使用非自由附加元件,而 LibreOffice 避開它們。我們最初開發 IceCat 是為了避免 Firefox 建議的非自由附加元件。

實際上,如果 IceCat 套件解釋了如何在 MacOS 上運行 IceCat,那不會導致人們運行 MacOS。但是,如果它談論某些非自由附加元件,那將鼓勵 IceCat 使用者安裝該附加元件。因此,IceCat 套件,包括手冊和網站,不應談論此類事情。

有時,一個自由程式和一個非自由程式可以互操作,但兩者都不是基於另一個。我們針對這種情況的規則是,如果非自由程式非常有名,我們應該告訴人們如何將我們的自由程式與之一起使用;但如果專有程式很晦澀,我們不應該暗示它的存在。有時,如果安裝了非自由程式,我們會支持與之互操作,但避免告訴使用者這樣做的可能性。

我們拒絕“增強功能”,這些功能只能在非自由系統上工作。這些功能會鼓勵人們使用非自由系統而不是 GNU,這是在搬石頭砸自己的腳。

GNU/Linux 發行版

在 Linux 於 1992 年自由化之後,人們開始開發 GNU/Linux 發行版(“distros”)。只有少數發行版是完全自由軟體

軟體套件的規則也適用於發行版:一個符合道德規範的發行版必須僅包含自由軟體,並僅引導使用者使用自由軟體。但是,對於發行版而言,“包含”特定的軟體套件是什麼意思呢?

某些發行版從屬於發行版的二進制套件安裝程式;其他發行版則從上游原始碼建構每個程式,並且實際上僅包含下載和建構它的配方。對於自由問題,發行版如何安裝給定的套件並不重要;如果它將該套件呈現為一個選項,或者其網站這樣做,我們就說它“包含”該套件。

自由系統的使用者可以控制它,因此他們可以安裝任何他們想要的東西。自由發行版提供通用設施,使用者可以使用這些設施安裝他們自己的程式以及他們修改後的自由程式版本;他們也可以安裝非自由程式。提供這些通用設施並不是發行版的道德缺陷,因為發行版的開發人員不對使用者自行主動獲取和安裝的東西負責。

當開發人員引導使用者使用非自由程式時,他們就要對安裝非自由軟體負責——例如,通過將其放入發行版的套件列表中,或從他們的伺服器分發它,或將其呈現為解決方案而不是問題。這是在大多數 GNU/Linux 發行版中存在道德缺陷的地方。

自行安裝軟體套件的人具有一定的複雜程度:如果我們告訴他們“Baby 包含非自由程式碼,但 Gbaby 是自由的”,我們可以期望他們注意記住哪個是哪個。但是發行版是推薦給普通使用者的,他們會忘記這些細節。他們會想,“他們說我應該使用哪個名字?我想是 Baby。”

因此,為了向公眾推薦發行版,我們堅持其名稱不應與我們拒絕的發行版相似,以便我們僅推薦自由發行版的消息可以可靠地傳達。

發行版和軟體套件之間的另一個區別是非自由程式碼被添加的可能性有多大。程式的開發人員會仔細檢查他們添加的程式碼。如果他們已決定使該程式成為自由軟體,他們不太可能添加非自由程式碼。曾經有例外,包括添加到 Linux 的“二進制 blobs”這個非常有害的案例,但它們僅佔現有自由程式的一小部分。

相比之下,GNU/Linux 發行版通常包含數千個套件,並且發行版的開發人員每年可能會添加數百個套件。如果沒有仔細努力避免包含某些非自由軟體的套件,那麼肯定會有一些偷偷溜進來。由於自由發行版數量很少,我們要求每個自由發行版的開發人員承諾通過移除任何非自由程式碼或惡意軟體來保持發行版是自由軟體,作為列出該發行版的條件。請參閱GNU 自由系統發行版指南

我們不要求自由軟體套件做出這樣的承諾:這在實務上不可行,而且幸運的是沒有必要。要求 30,000 個自由程式的開發人員承諾保持它們的自由將避免一些問題,但會讓 FSF 工作人員付出大量工作;此外,這些開發人員中的大多數與 GNU 計劃沒有關係,可能對向我們做出任何承諾沒有興趣。因此,當我們發現從自由變為非自由的罕見情況時,我們會處理它們。

周邊設備

電腦周邊設備需要電腦中的軟體——可能是驅動程式,也可能是系統要加載到周邊設備中以使其運行的韌體。因此,如果周邊設備可以從沒有安裝非自由軟體的電腦上使用,那麼它就是可以接受使用和推薦的——周邊設備的驅動程式,以及系統需要加載到其中的任何韌體,都是自由的。

檢查這一點很簡單:將周邊設備連接到運行完全自由的 GNU/Linux 發行版的電腦,看看它是否工作。但是大多數使用者希望在購買周邊設備之前知道,因此我們在 h-node.org 中列出了許多周邊設備的資訊,這是一個完全自由的作業系統的硬體資料庫。

電腦

電腦在各個層次都包含軟體。我們應該根據什麼標準來認證一台電腦“尊重您的自由”?

顯然,作業系統及其之上的所有內容都必須是自由的。在 90 年代,啟動軟體(當時是 BIOS)變得可替換,並且由於它在 CPU 上運行,因此它與作業系統是同一類問題。因此,安裝在系統中或與系統或啟動軟體一起安裝的程式(例如韌體和驅動程式)必須是自由的。

如果電腦具有需要與系統一起安裝的非自由驅動程式或韌體的硬體功能,我們或許可以認可它。如果沒有這些功能也可以使用,並且如果我們認為大多數人不會被引導安裝非自由軟體來使其功能正常,那麼我們可以認可它。否則,我們就不能。這將是一個判斷性的決定。

電腦可以在較低層次具有可修改的預裝韌體和微程式碼。它也可能在真正的唯讀記憶體中具有程式碼。我們決定在今天的認證標準中忽略這些程式,因為否則沒有電腦可以符合標準,並且因為通常不會更改的韌體在道德上等同於電路。因此,我們的認證標準僅涵蓋在電腦主處理器上運行且不在真正的唯讀記憶體中的程式碼。當且僅當其他處理層次也可能實現自由軟體時,我們也將要求這些層次也使用自由軟體。

由於認證產品是對其進行積極推廣,因此我們堅持賣家通過談論自由軟體而不是開放原始碼,並將 GNU 和 Linux 的組合稱為 “GNU/Linux” 來回報我們對他們的支持。我們沒有義務積極推廣那些不認可我們的工作和不支持我們運動的專案。

請參閱我們的認證標準

網頁

如今,許多網頁包含複雜的 JavaScript 程式,沒有它們就無法工作。這是一種有害的做法,因為它阻礙了使用者對其計算的控制。此外,這些程式大多數是非自由的,這是不公正的。JavaScript 已經演變成對使用者自由的攻擊。

為了應對這個問題,我們開發了 LibreJS,這是一個用於 Firefox 的附加元件,可以阻止不重要的非自由 JavaScript 程式碼。(沒有必要阻止實現次要使用者介面 hack 的簡單腳本。)我們要求網站釋放他們的 JavaScript 程式,並標記他們的授權條款,以便 LibreJS 能夠識別。

同時,連結到包含非自由 JavaScript 程式的網頁在道德上是否可以接受?如果我們完全不妥協,我們只會連結到自由 JavaScript 程式碼。但是,即使在不運行 JavaScript 程式碼的情況下,許多頁面也確實可以工作。此外,您最常遇到的非自由 JavaScript 除了通過我們的連結之外,還有其他方式;為了避免它,您必須使用 LibreJS 或禁用 JavaScript。因此,我們已決定繼續連結到在沒有非自由 JavaScript 的情況下也能工作的頁面,同時敦促使用者保護自己免受一般的非自由 JavaScript 的侵害。

但是,如果一個頁面在不運行非自由 JavaScript 程式碼的情況下無法完成其工作,那麼連結到它無可否認地要求人們運行該非自由程式碼。原則上,我們不連結到此類頁面。

結論

軟體應該是自由的這個基本思想應用於不同的情況會導致不同的實務政策。隨著新情況的出現,GNU 計劃和自由軟體基金會將調整我們的自由標準,以便在實踐和原則上引導電腦使用者走向自由。通過僅推薦尊重自由的程式、發行版和硬體產品,並聲明您的政策,您可以為自由軟體運動提供急需的支持。