2010年9月10日 星期五

[Unix 小學堂] 甚麼是自由軟體?

前言 : 

自從電腦發明以來, 軟體發展者就開始交換自己的程式, 特別是在大學校園裡, 程式設計師習於彼此分享的程式 ; 而大多數的電腦廠商, 於各種場合, 積極鼓勵使用者分享彼此的程式 : 例如迪吉多 (DEC) 的使用者群組 (DECUS) 就維護了一個免費的程式庫, 裡面的程式全部都是會員所提供的.
當電腦網路越來越普及 (80年代初期的大學校園及90年代的社會) , 分享程式也比以前更為便利 ; 當寫了某些有用的程式, 就可以透過電子郵件傳給朋友, 或者上傳到 FTP 站台或電子佈告欄 (BBS) 上, 其他人就可以很方便的去取用. 你可以免費取得軟體, 可以修改程式加上自己要的功能, 然後再將新版本分送給你的朋友.
所以總是會有許多自由軟體不斷出現. 基本上, 這類可以免費使用的程式, 在程式規模及穩定性不太可能有明顯的商業價值, 但也不是毫無用處. 我們不敢想像 sps 程式 (這是 UNIX 玩家所寫出類似系統上ps 命令的版本) 當成商業軟體銷售的情況, 但它不是一無是處. 具商業軟體價值的自由軟體於 80 年代初期開始出現, 而80年代末到 90年代初開始開花結果. 整個作業系統 (如Linux), 編譯器 (gcc 與 g++), 直譯語言 (如Perl, Python 與 Tcl) 與編輯器 (Emacs) 以及其他許多工具程式, 現在都可以免費使用.


各種不同的自由軟體 : 
我們可以將自由軟體區分成三種主要類型. 類型定義也許有模糊地帶而不是很清楚, 但究竟多數的軟體都是屬於這三種的其中一種 : 
* 公共網域軟體 (Public domain software) 
某些軟體很明確的就是要放在公共網域中, 代表任何人都可以免費下載使用這軟體, 也可以作任何想做的事, 沒有任何限制.


* 自由傳播軟體 : 
許多軟體, 特別是那些來自大學校園的軟體, 是由發展人或組織所擁有的. 加州大學柏克萊分校所發展的 BSD Unix 就是屬於這一類 ; 其他的還有 X Windows 系統以及一些小型程式. "所有權" 這個名詞意味的是 : 散播軟體須得到原始所有人的同意 ; 它同時表示在修改後, 不可以在未取得許可再將你的版本像外散播. 換句話說, 如果你修改了 BSD Unix, 你不可以未獲取擁有人 (加州大學) 允許下, 將修改過的版本傳送給別人使用.


* 一般公共授權軟體 (General Public License (GPL) software) 
這代表使用軟體的權利涵蓋在某些自由軟體協會的一般公共授權 (也稱為 "copyleft") "GNU 一般公共授權" 會詳列其條款. GPL 的理念是確保自由軟體真的免費. 換句話說, 它確保任何收到軟體的人, 不管是如何取得並將其修改, 都能在相同條款下繼續傳播.

前兩種的自由軟體保證原始程式暫時是免費的, 例如你可以取得並進行修改, 然而它無法防止一個非常普遍的情況 : 就是商業投機客從電腦網路取得自由軟體, 作一些改進並加上限制性的授權, 也許是不讓你取得原始代碼, 或是要經過付費後才能使用. 
想想大多數的Unix 系統網路部分的程式碼. 大部分的 Unix 網路都是以 BSD Unix 的成果為基礎發展的. 這部分的程式碼屬於 "自由傳播軟體" : 你可以在網路上取得 BSD 網路程式碼並任意修改, 但你的 Unix 廠商會不會將它們相同的軟體的改良版本原始代碼給你呢? 八成不會, 除非你願意付錢 ; 或是無論如何都不給你. 隨著時間消逝, 這種方式使的許多軟體好像從公共區域消失了一般. 但最原始的版本還在, 但經過改良的代碼 - 你真正想要的東西 - 卻成了商業軟體, 免費的初衷成了泡影. 一般公共授權皆特別闡明, 任何使用自由軟體的人有權利再將原始程式碼散播出去, 連帶他們修改過後的部分. 實際上, 這意味著你不得將修改過後的程式碼加上新的限制授權. GPL 也特別聲明, 自由軟體必須以原始碼的形式傳播, 否則就必須承諾必須提供原始程式碼. GPL (或精簡版本 LGPL) 適用於所有 FSF 所發展的軟體, 同時也適用於需多非FSF 所發展的軟體. 

自由, 不是免費 : 
一般大眾通常誤解 "自由軟體" 就代表 "不需要付費的軟體", 這是不對的. 並沒有條款禁止任何人銷售自由軟體的碟片, 甚至收取從 FTP 站下載的費用. 事實上, 一般公共授權明確的聲明可以銷售這些軟體, 你也不能禁止你售予的對象轉售.
"自由"這個字的傾向於策略性 : 它真正的意義在"授權限制下的取得". 這是自由軟體協會極重要的一部分 ; 它的目標是要建立一套能在沒有限制下, 能循環傳播的完整軟體. (一套作業系統, 加上所有必要的公用程式).


免費但是可作商業應用 : 
自由軟體及商業軟體之間存在許多誤解, 導致人們不太願意同時使用兩者. 最常見的一點就是被 FSF所涵蓋的軟體無法當作商業軟體來發行, 這完全不正確. 一般公共授權要求的是 : 
* 自由軟體必須以原始碼型態或者是在要求下提供原始碼的方式, 來進行傳播.
* 自由軟體的使用或傳播上, 不得再附加任何額外限制.

從以上條款, 沒有一條告訴你不可以將自由軟體搭配商業軟體一同出貨. 最常見的誤解就是凡是被 GNU 工具所接觸過的都將變成 "自由軟體" , 而無法進行商業銷售 ; 也就是說從 gcc 編譯器產出的程式也同樣涵蓋在 GPL 內. 這種說法很離譜, FSF 當然希望 gcc 的使用者有責任與義務以某種形式回饋自己的程式碼, 但卻不強迫你一定得這麼做. 只有在你的軟體中使用到自由軟體的程式碼時, 才必須將你的程式碼免費提供給大眾. 
但偏偏還有一些延伸問題會造成誤解, 如果你使用到了自由軟體的函式庫, 就必須受 GPL 規範; 因為傳播程式時也須將使用的函式庫傳播. 這類問題有好幾種解決辦法. 最常看到的就是避開使用 GNU 的函式庫而使用商用的 C/C++ 函式庫. 假使你想要使用 "免費的" 函式庫, FSF為函式庫建立了一個特殊的GPL 版本(LGPL) ; LGPL 允許你傳播使用 GUN 函式庫的軟體, 卻無需使你的程式無限制的傳播下去, 或是一定得交出程式碼. 這種解決辦法也並非完全沒有問題, 不過仍有對應的解決之道. 

補充說明 : 
@. Wiki GPL : GPL給予了電腦程式自由軟體的定義,並且使用「Copyleft」來確保程式的自由被完善的保留。

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...