除了自由軟件之外的都是非自由軟件,有些是收費的,比如妳熟悉的Windows;有些是免費的,比如我日常用的開發Web應用的活字格。
“自由軟件”尊重用戶的自由,並且尊重整個社區。粗略來講,壹個軟件如果是自由軟件,這意味著用戶可以自由地運行,拷貝,分發,學習,修改並改進該軟件。因此,“自由軟件”是關乎自由的問題,與價格無關,軟件如何定價並不影響它是否被歸類為自由軟件。英文中,我們使用Free Software。由於Free壹詞既有自由,也有免費的意思。而Free Software中的Free是指“自由言論”中的自由,而非“免費”這壹意項。為避免歧義,在使用英文時,我們也會借用法語或西班牙語的“Libre Software”來指自由軟件。
我們支持軟件用戶的自由,因為我們堅信這是每個用戶應得的。有了這些自由,軟件用戶,無論是個人還是集體,都可以掌控所運行的軟件,並決定這些程序如何為自己服務。如果壹個軟件令用戶失去了這種控制權,我們則稱它為“非自由”的,或“專有”的程序。與自由軟件相反,非自由軟件會操控它的用戶,而軟件的開發者則掌控著軟件。這使得非自由軟件成為了?非正義力量的幫兇。
四項基本自由
如果壹個軟件是自由軟件,那麽它必須為用戶提供以下四項基本自由:[1]
自由度0:無論用戶出於何種目的,必須可以按照用戶意願,自由地運行該軟件。
自由度1:用戶可以自由地學習並修改該軟件,以此來幫助用戶完成用戶自己的計算。作為前提,用戶必須可以訪問到該軟件的源代碼。
自由度2:用戶可以自由地分發該軟件的拷貝,這樣就可以助人。
自由度3:用戶可以自由地分發該軟件修改後的拷貝。借此,用戶可以把改進後的軟件分享給整個社區令他人也從中受益。作為前提,用戶必須可以訪問到該軟件的源代碼。
壹個軟件只有提供了以上所有的自由給它的用戶,才可以被成為自由軟件。否則,它就是非自由的。盡管我們也可以比較非自由軟件為其用戶提供的自由度,但是我們認為,無論如何,非自由軟件本身是不道德的。
無論在哪種情況下,只有所有用戶使用的代碼都滿足了這四項基本自由,該程序才能被視作自由軟件。例如,有兩個程序,甲程序運行的時候會自動調用乙程序。發布甲程序意味著用戶必須使用到乙程序,那麽必須甲乙兩個程序都是自由的,甲程序才是自由的。如果通過修改甲程序,使其不再依賴乙程序,那麽僅僅以自由軟件的形式發布甲程序即可。
“自由軟件”不等於“非商業軟件”。壹個自由軟件必須允許商業用戶,商業開發,和商業發布。商業開發自由軟件早就司空見慣了,這樣的自由軟件非常重要。妳可能需要花錢購買自由軟件的拷貝,也可能免費拿到。但是無論妳如何獲得妳的拷貝,作為用戶,妳的四大自由都會被保證,妳可以自由地運行,修改,發布甚至出售妳拿到的自由軟件。
本文著重介紹在哪些情況下,軟件會被認為提供了或剝奪了某個自由度。
自由度0:無論用戶出於何種目的,必須可以按照用戶意願自由地運行該軟件。
“自由地運行程序”(自由度0)意味著任何人或組織可以在任何(支持的)計算機系統上,出於任何目的去運行該程序,並且沒有義務通知軟件的開發者或任何個人或團體。此處,用戶的目的是重點,而非開發者的目的。如果妳是該程序的用戶,那麽妳就可以自由地運行該程序。同理,如果妳把程序發布給別人,那麽此人也成了軟件的用戶,他也可以出於自己的任何目的運行該軟件。然而,妳作為軟件的發布者,不可將自己的目的強加於妳的用戶。
“自由地運行程序”意味著沒有人可以阻止用戶使用該程序做任何事情。它並沒有規定該程序必須提供哪些功能特性,也並不意味著軟件必須迎合用戶的所有需求。
學習和更改程序源代碼的自由
自由度1和3(自由地修改軟件;自由地發布修改後的軟件)意味著用戶必須有權訪問程序的源代碼。由此,訪問源代碼是成為自由軟件的必要條件。混編(Obfuscated)後的“源代碼”不能被算作此處討論的源代碼。
自由度1(自由地運行程序)包括自由地運行自己修改後的程序以替代原版程序。如果程序是跑在某種設備上,該設備可以運行別人修改的軟件但不運行妳修改的軟件—這個方法叫做“tivoization”或者 “鎖死”,或者(用其發明者的術語)叫做“安全啟動”—自由度1將被視為無法滿足。該設備中的程序也將不被視為自由軟件,即使它們的源代碼是自由的。
倘若要修改某個程序,壹種很重要的方法就是從別的程序中拿來現成的函數,或模塊來使用。如果某個程序的許可證中禁止妳使用其他合理授權的軟件的代碼來修改該程序—比如,如果某個程序的許可證要求妳只能使用妳擁有版權的代碼—那麽這個程序的許可證將不被視為自由軟件許可證。
對軟件的修改可能是出於各種目的。某個特定的修改究竟是好是壞,這本身是個非常主觀的事情。自由軟件許可證不能對用戶修改軟件做任何限制,例如,不能僅僅因為某人覺得哪處修改不夠好,就禁止用戶自己做這個改動。
自由度2:用戶可以自由地分發該軟件的拷貝。
自由分發(自由度2和3)意味著妳(即,軟件用戶)可以把軟件原版或修改版再發布給其他用戶。妳可以免費發布,也可以收取費用。軟件可以發布給任何地方的任何人。所謂“自由”,意味著妳的這些行為(發布軟件原版或修改版給其他用戶;或其他自由度中提及的行為)不必事先征得任何人的許可,也不必為此額外支付任何費用。
用戶可以自由地運行該程序或對程序進行修改。如果僅僅私下自己修改或運行該程序,那麽妳沒有義務將該行為公開給任何人。如果妳發布了自己修改後的程序,那麽妳也沒有任何義務將該修改行為告知給哪個或哪些指定的人或組織。
自由度3允許用戶自由地發布軟件的修改版。自由軟件不壹定要求修改版必須繼續采用自由軟件許可證。換句話說,自由軟件許可證可以不必是copyleft許可證。但是,如果壹個軟件許可證要求修改後的軟件必須以非自由軟件的形式發布,那麽該許可證則不被視為自由軟件許可證。
“自由地分發軟件的拷貝”意味著必須允許用戶自由地發布軟件的原版或用戶自己的修改版。無論那個版本,用戶都可以選擇發布程序的二進制或可執行文件,也可以發布程序的源代碼。(以可執行文件的形式發布程序可以讓人方便安裝,這壹點對於推廣自由軟件也至關重要。)對於某些程序,也許無法或者不必發布二進制或可執行文件(壹些編程語言的實現可能並不支持,例如某些腳本語言),但是用戶必須有權利以任何方式生成二進制或可執行文件,並且發布這些生成的軟件。
Copyleft
當然,只要不違背這些核心自由,自由軟件許可證也可以額外添加壹些要求,限制軟件的分發步驟。例如,copyleft就是常見的壹種限制。簡言之,copyleft要求軟件的修改版必須同樣以自由軟件的形式發布。這條限制與核心自由並不沖突,相反,copyleft可以用來很好地保護軟件用戶的自由。
在GNU項目中,我們使用copyleft這壹規則來保護軟件用戶的四大自由。我們相信Copyleft是更好的選擇。然而,非copyleft的自由軟件也同樣是合乎道義的。參見自由軟件分類來了解更多關於“自由軟件”、“copyleft軟件”以及其他分類和它們之間的關系。
打包和發行的詳細規則
自由軟件可以對修改版的打包或分發方式做壹定的限制。這些限制不得與前面提到的四大自由相矛盾,不得直接或間接地限制用戶運行,修改或發布軟件。例如,某些自由軟件可以要求修改版不得使用軟件的原有名字發布;不能使用軟件的原有商標;必須標明軟件來自誰的修改等等。只要這些限制不會明顯地限制用戶再發布軟件的修改版,那麽它們就是可以接受的。既然已經對軟件修改了,那麽妳估計也就不會在乎針對這些額外的小限制再做壹點修改了。
同理,自由軟件也可以要求用戶“如果以這種方式發布,那麽用戶必須也可以從另外某壹渠道獲得”。比如,某個自由軟件可能會要求如果發布了修改版,那麽必須也要給原作者壹份修改後的拷貝。(註意:此處前提是軟件必須發布,用戶可以私下修改軟件而不發布,這樣也就不必把修改版發給開發者了。)另外還有壹些規則也不會與自由軟件原則沖突,比如軟件可以要求修改後的版本發布時需要附帶相應的原版軟件的代碼。
有壹些特例需要額外討論:如果某軟件許可證要求修改後的軟件必須修改可執行文件的名字,那麽必須保證軟件運行的環境允許修改文件名或具備某種別名機制,否則該要求將被視作與自由軟件原則相背。因為軟件的可執行文件可能會被其他第三方軟件調用,而文件名則是這種調用的基礎。別名機制可以保證用戶在遵守該要求的前提下,順利將原版軟件替換成修改版,並且不會影響依賴該軟件的第三方程序。
出口條例
壹些政府的出口限制或貿易制裁可能會影響到軟件用戶在國際範圍內發布軟件的自由。軟件開發者也許沒有能力去改變這些現實,但是我們可以拒絕自我審查。自由軟件的開發者不得在軟件許可證中要求用戶遵守哪條特定法律,因為開發者無法保證用戶所在國度或地區具備該法律條款。這樣,自由軟件許可證就不會給用戶在法律之外添加額外的違反基本自由的限制。
當然,自由軟件可以僅僅在許可證中提及某條出口條例或相關法律,而不強制要求用戶遵守。這樣做只是為用戶提供了信息而沒有實際限制用戶。如果某條出口限制法律是普遍存在,全部用戶所在的地區都做出該限制的,那麽在許可證中要求用戶遵守該條例也不會被視為限制用戶的自由。然而,這會存在潛在問題:壹旦該條出口限制法律在某個用戶的所在地區做了修改,那麽該許可證也就不被視作自由的。
法律考慮
要落實這些自由度,就應該保證:如果用戶遵守許可證上的要求,那麽這些自由度就必須是長久的,不可更改的。如果軟件的開發者有權利隨意修改已發布軟件的許可證,那麽該軟件也不被視為自由軟件。
自由軟件許可證不得要求用戶額外遵守哪些非自由軟件的許可證。例如,自由軟件許可證不得要求用戶必須遵守“所有使用的軟件的許可證”。因為用戶可能使用非自由軟件,而要求用戶遵守全部使用的軟件的許可證則意味著需要遵守非自由軟件許可證,這要的要求將被視作非自由的。
自由軟件許可證可以指定與軟件相關的訴訟需要遵守哪個地區的法律,或需要在哪裏提起訴訟。
基於合同的許可證
絕大部分自由軟件許可證是基於版權的。基於版權,能采取的限制往往相對有限。如果壹個許可證基於版權並且遵照上述的自由軟件原則,那麽它很可能被視作是自由軟件許可證。當然,我們也見過壹些例外,不過這些還很少見。然而有些自由軟件許可證是基於合同的。合同可能會有更多的額外要求。這就意味著基於合同的許可證可能會在很多不經意的地方違背自由軟件原則,導致軟件不被視作自由軟件。
很遺憾,我們無法列出所有可能的意外情況。如果壹份基於合同的許可證對用戶做出了壹些額外限制,並且這些限制是不可能包含在壹份基於版權的許可證中的,那麽我們就需要再三考慮它是否可以被視作自由許可證。很多情況下,這些許可證都是非自由的。
在談論自由軟件時使用正確的詞匯
在討論自由軟件的時候,盡量避免使用“贈送”或“免費”壹類的詞匯。因為這會讓人們聯想到價格,而非自由。壹些常見的詞匯,例如“盜版”,其中包含了或褒或貶的感情色彩,而這些感情體現的價值觀並不被我們接受。參見歧義詞匯列表,裏面列舉了我們不推薦使用的詞匯以及相關的討論。我們還有壹個列表,包含了“自由軟件”壹詞在不同語言中的推薦翻譯。
我們如何詮釋這些標準
最後請註意,在實踐中,本文中提及的各種關於自由軟件的界定標準都需要仔細思考後再做出解釋。在決定壹個軟件許可證是否是自由軟件的時候,我們會仔細查看該許可證的內涵和行文是否符合本文中涉及的原則,由此決定許可證是否為自由軟件許可證。如果許可證中包含了壹些不合理的限制,哪怕這些限制沒有在本文中提及,我們也會拒絕承認它是自由的。有時候,某個許可證可能會引起壹場大討論,甚至需要專業律師參與。這時候,我們往往需要仔細定奪之後才能給出結論。遇到這樣的許可證,在做出結論之後,我們很可能會更新本文,把之前沒有考慮到的因素添加進來。
獲得關於自由許可證的幫助
如果妳想知道哪些許可證是自由軟件許可證,可以參見我們的許可證列表。如果妳關註的許可證沒有在這個列表中提及,妳也可以給我們發郵件來單獨詢問。我們的郵箱是:<licensing@gnu.org>。
如果妳打算起草壹份新的自由軟件許可證,那麽請先不要給上述郵箱發郵件。希望您能先考慮聯系自由軟件基金會。太多的自由軟件許可證會增加用戶的選擇難度,我們也許可以按照您的要求,幫您找到壹份現有的許可證,而不必您親自操刀起草壹份新許可證。
如果您真的需要自己創造壹個新許可證,那麽我們會盡力幫助您。在我們的幫助下,我們會保證您的許可證是自由的,並且幫助您避免壹些常見的問題。
軟件之外
基於同樣的原則,自由軟件的手冊也必須是自由的,因為手冊本身也應該被視作軟件的壹部分。
同理,相同的原則也適用於其他的具有實用功能的作品中 — 所謂實用功能的作品,是指作品中包含實用的知識,例如教育材料或參考材料。維基百科就是其中壹個廣為人知的例子。
任何作品都可以是自由的,自由軟件的定義也可以延伸到其他作品上。關於這方面的材料,請參見自由文化作品。
開源?
現在還有另外壹夥人,使用“開源”壹詞來表達與“自由軟件”類似,但不完全相同的概念。我們更傾向於使用“自由軟件”這個詞。因為壹旦妳看到自由二字,就明白了它所要表達的意思。而“開放”卻並不意味著自由。