在過去的幾年裡,開源運動改變了計算的面貌,這超出了幾乎所有人的想象。許多計算機行業的人認為,這些變化是自 IBM 委託微軟為其個人電腦編寫作業系統以來計算領域最重要的變化。本書旨在討論開源的歷史、哲學和法律問題,以及軟體開發人員如何透過選擇和加入他們想貢獻的專案來參與其中。本書將提供比維基百科關於開源和自由軟體的文章更詳細的資訊,並增強和擴充套件華夏公益教科書上關於免費軟體的資訊。請隨時新增/更正整本書中的資訊。本書不是為了列出專案,也不是為了指導選擇最佳軟體(雖然本書後面提供了一些指標)。
開源或開源軟體不同於專有軟體。在開源中,軟體中使用的原始碼可供任何人檢查、評估和修改。開源對許多開發人員看待和建立軟體的方式產生了重要影響。終端使用者經常使用開源一詞來涵蓋各種免費和開源軟體。
開源促進會對開源軟體有以下定義
開源不僅僅意味著訪問原始碼。開源軟體的釋出條款必須符合以下標準
1. 免費重新發布
許可證不得限制任何一方將軟體作為包含來自多個不同來源的程式的聚合軟體釋出的一部分出售或贈送。許可證不得要求支付此類銷售的版稅或其他費用——除標準知識共享許可證的知識共享署名非商業版本外。
理由:透過限制許可證要求免費重新發布,我們消除了為了賺取少量短期銷售額而放棄許多長期收益的誘惑。如果我們不這樣做,就會有很大的壓力迫使合作者背叛。
2. 原始碼
程式必須包含原始碼,並且必須允許以原始碼形式以及編譯形式釋出。如果某些形式的產品未隨原始碼釋出,則必須有公開的方式以不超過合理的複製成本獲得原始碼——最好是透過網際網路免費下載。原始碼必須是程式設計師修改程式的首選形式。故意混淆的原始碼不允許。中間形式(如預處理器或翻譯器的輸出)不允許。
理由:我們要求訪問未混淆的原始碼,因為您無法在不修改的情況下演化程式。由於我們的目的是使演化變得容易,因此我們要求修改變得容易。
3. 派生作品
許可證必須允許修改和派生作品,並且必須允許這些作品以與原始軟體許可證相同的條款釋出。
理由:僅僅能夠閱讀原始碼不足以支援獨立的同行評審和快速演化選擇。為了實現快速演化,人們需要能夠試驗和重新發布修改。
4. 作者原始碼的完整性
許可證可能僅在許可證允許將“補丁檔案”與原始碼一起釋出以在構建時修改程式的情況下,才限制以修改形式釋出原始碼。許可證必須明確允許釋出使用修改後的原始碼構建的軟體。許可證可能要求派生作品與原始軟體具有不同的名稱或版本號。
理由:鼓勵大量改進是一件好事,但使用者有權知道誰對他們使用的軟體負責。作者和維護人員有權利知道他們被要求支援什麼以及保護他們的聲譽。
因此,開源許可必須保證原始碼易於獲得,但可能要求將其釋出為原始基礎原始碼加上補丁。這樣,“非官方”的更改就可以提供,但可以輕鬆地與基礎原始碼區分開來。
5. 不歧視個人或群體
許可證不得歧視任何個人或群體。
理由:為了從該流程中獲得最大利益,應允許最大限度地發揮個人和群體的多樣性,他們應該有資格平等地為開源做出貢獻。因此,我們禁止任何開源許可將任何人排除在流程之外。
包括美國在內的一些國家對某些型別的軟體有出口限制。符合 OSD 的許可證可能會警告被許可人注意適用的限制,並提醒他們有義務遵守法律;但是,它本身可能不會包含這些限制。
6. 不歧視努力領域
許可證不得限制任何人將程式用於特定領域。例如,它可能不會限制在企業中使用程式,或限制將其用於基因研究。
理由:本條款的主要意圖是禁止阻止開源在商業上使用的許可陷阱。我們希望商業使用者加入我們的社群,而不是感到被排除在外。
7. 許可證的釋出
與程式相關的權利必須適用於所有重新發布程式的人,而無需這些方執行額外的許可證。
理由:本條款旨在禁止透過間接手段(例如要求籤署保密協議)關閉軟體。
8. 許可證不得針對特定產品
與程式相關聯的權利不應取決於程式是否為特定軟體發行版的一部分。如果程式從該發行版中提取並在程式許可條款內使用或分發,則將程式重新分發給的所有方應享有與原始軟體發行版相結合的相同權利。
理由:此條款排除了另一類許可陷阱。
9. 許可證不得限制其他軟體
許可證不得對與已許可軟體一起分發的其他軟體施加限制。例如,許可證不得堅持要求與同一介質上分發的所有其他程式必須是開源軟體。
理由:開源軟體的釋出者有權對自己的軟體做出自己的選擇。
是的,GPL 符合此要求。與 GPL 許可的庫連結的軟體僅在形成單個作品時才繼承 GPL,而不是與它們一起分發的任何軟體。
10. 許可證必須是技術中立的
許可證的任何條款不得以任何個人技術或介面風格為前提。
理由:此規定專門針對需要明確同意姿態才能在許可方和被許可方之間建立合同的許可證。要求所謂“點選包裝”的規定可能會與重要的軟體分發方法衝突,例如 FTP 下載、CD-ROM 合集和網路映象;此類規定也可能阻礙程式碼重用。符合的許可證必須允許以下可能性:(a) 軟體的重新分發將透過不支援下載點選包裝的非 Web 通道進行,以及 (b) 涵蓋的程式碼(或涵蓋的程式碼的重用部分)可能執行在不支援彈出對話方塊的非 GUI 環境中。
自由軟體是開源軟體,但並非所有開源軟體都是自由的。
什麼是自由軟體?
[edit | edit source]自由軟體是指遵循 GNU 專案闡述的軟體四大自由的軟體。這四大自由如下所示
- 使用者可以自由地將軟體用於任何目的。
- 使用者可以自由地研究程式執行機制,並根據特定目的調整這些機制。
- 使用者可以自由地將軟體重新分發給其他使用者。
- 使用者可以自由地調整和改程序序,並將這些調整和改進發布給公眾。
自由軟體與開源軟體在理念上有很多共同之處,但開源社群中的許多人認為這兩個術語之間存在重要的區別,如“自由軟體與開源軟體”部分所述。
自由軟體通常被稱為“自由如言論,而非如啤酒”,強調了自由軟體運動關心的是“自由”,而不是“價格”。
自由軟體與開源軟體
[edit | edit source]開源軟體的主要區別在於它不是關於自由,而是關於軟體如何更好地做事。
並非所有開源許可證都符合此要求。我們希望本書能提供足夠的資料,讓讀者瞭解兩者之間的區別,並據此做出選擇。
總的來說,該運動通常被稱為“自由和開源軟體”(FOSS)。雖然許多人指出了兩者之間的區別,但本書將重點介紹兩者之間的共同點。為了清楚起見,在描述適用於所有開源軟體專案的議題時,將使用縮寫“FOSS”;在描述僅適用於允許未來開發人員封閉原始碼的開源許可證的軟體的議題時,將使用“OSS”;在討論僅適用於要求未來開發人員維護先前許可風格(如果不是許可證本身)的自由許可證的軟體的議題時,將使用“FSS”。
公有領域軟體
[edit | edit source]另一種常見的開源軟體形式是進入公共領域的軟體。這類軟體不受版權或許可證的限制,因此可以自由地用於任何目的。在開源軟體運動興起之前,學術界編寫的許多軟體都以公共領域的模式釋出,以便同行評審。隨著更加註重目的性的開源運動的興起,這種做法發生了變化,導致許多曾經屬於公共領域的軟體現在被作為 FOSS 釋出。公共領域是許多用於開源專案的資源來源,但很少有大型專案完全在公共領域內運作(例如 SQLite)。
FOSS 不意味著沒有成本
[edit | edit source]這是一個關於 FOSS 的常見誤解,部分原因是幾乎所有 FOSS 程式都是免費提供的。例如,當文字編輯器Emacs首次釋出時,理查德·斯托曼有時會收取費用以獲得副本。在大多數 FOSS 許可證下,開發者可以選擇收取費用,儘管他們很少選擇這樣做。要成為一個真正的 FOSS 專案,唯一的要求是釋出者在程式中提供原始碼,並允許使用者編輯該程式碼。
除了購買軟體的初始成本外,所有軟體還與其他持續成本相關聯。這可能以支援協議的形式出現,包括定製成本、培訓成本、支援人員成本以及其他來源。這對於傳統的商業軟體和 FOSS 程式都是如此。關於哪種型別的軟體從長遠來看對於大型公司而言更昂貴,存在著大量的爭論,對於個人使用者而言,毫無疑問 FOSS 要便宜得多。
歷史
[edit | edit source]此處提供的歷史並非旨在完整且完美地反映開源運動的歷史。事實上,做到這一點是不可能的,因為我們目前正處於運動的中間階段,而關於當前事件的真實歷史無法撰寫。相反,本章旨在讓讀者對開源運動是如何起步的有一個大致瞭解,以便他們能夠更好地理解當前的爭論。
在早期(1960 年代和1970 年代),幾乎所有程式碼都以開源的形式提供。由於您必須在許多不同的機器上執行程式,因此希望客戶能夠執行其軟體的公司必須提供原始碼以供自行編譯。通常,此程式碼不受許可協議的約束,或者這些許可證從未被執行。通常,使用者會發現程式中的缺陷,修復它們,並免費將改進提供給釋出者。Unix 使用者組經常互相共享程式碼,從而建立了更大的程式碼庫。當時,大多數公司認為硬體總是比軟體創造更多的利潤。
同時,當學者在研究中編寫程式時,他們經常會將程式碼釋出到公共領域,以便其他人從他們的工作中學習。第一個電子郵件伺服器、ftp 伺服器和 web 伺服器都是由學者建立並作為公共領域軟體共享的公共領域專案。
隨著時間的推移,硬體變得更加標準化。這使軟體釋出者能夠收緊對他們允許使用者檢視和編輯的程式碼部分的控制。這種收緊開始讓使用者感到沮喪,尤其是學者,因為他們不再能夠修復他們發現的問題,並且有時發現他們無法使用他們想要的硬體或軟體。這種趨勢主要在主流軟體中持續,並在微軟的興起中得到加強。
在1970 年代後期,許多小型企業試圖透過為新型微型計算機編寫軟體來生存。沒有人能夠依靠硬體銷售或售後支援合同來補貼軟體開發。這些人,無論是來自學術界自由分發軟體的傳統,還是其他原因,都不願意在不收費的情況下提供他們的產品。也許最有名的是,比爾·蓋茨(微軟的聯合創始人)意識到,在新的計算世界中,軟體而不是硬體擁有成為最大利潤來源的潛力。當 IBM 需要為其個人電腦提供作業系統時,微軟沒有自己編寫作業系統,而是許可了 DOS 的早期版本,但保留了其他硬體製造商的許可權。這一選擇改變了計算的面貌,創造了一個大多數個人電腦都會執行的標準作業系統,它直接導致了微軟在個人計算領域的主導地位,並在後來也讓他們能夠進入伺服器端市場。微軟已經發展成為世界上最大的軟體生產商,幾乎在每個細分市場中都有競爭對手。許多人認為,與微軟競爭的唯一方法是透過開源專案,這些專案利用了比大多數公司所能提供的更大的支援基礎。
在這片活躍的海洋中,FOSS 運動主要發源於兩個地方:加州大學伯克利軟體發行版許可證和理查德·斯托曼的自由軟體基金會 GNU 通用公共許可證。
BSD
[edit | edit source]
在 20 世紀 70 年代,貝爾實驗室的肯·湯普森在加州大學伯克利分校任教一年後,伯克利的一些研究小組開始為 Unix 作業系統開發軟體。由於貝爾實驗室沒有計劃將該系統移植到當時的新型 DEC VAX 計算機系統,伯克利的計算機科學研究小組 (CSRG) 承擔了移植工作。該移植在其他大學非常受歡迎,CSRG 開始以伯克利軟體發行版 (BSD) 的名稱釋出它,其中包含了他們的修改和新增。伯克利的研究人員經常找到改進或新增現有 Unix 版本的方法。貝爾實驗室接受了某些 BSD 更改,而其他更改則被傳遞。隨著時間的推移,CSRG 找到了改進 Unix 基本方面的方法(例如檔案系統)。與此同時,AT&T 也進行了自己的改進,導致這兩個版本朝著不同的(儘管相似)方向發展。隨著伯克利版本的 Unix 的開發進展,它與 AT&T 在其版本上所做的工作越來越遠(最後一個版本是 System V)。在 1990 年代初期,AT&T、加州大學伯克利分校和 Unix 系統實驗室 (USL) 之間爆發了一場關於伯克利軟體發行版 (BSD) 的重大法律糾紛,AT&T 已將 Unix 的營銷和開發權移交給了 USL。該訴訟的結果是,大多數 BSD 被發現不受控制原始貝爾實驗室程式碼者的版權限制。到 1990 年代中期,CSRG 釋出了 4.4BSD-Lite,第 2 版作為他們的最終產品,因為他們被加州大學理事會關閉。BSD 發行版是當今流行的各種 BSD 版本的根源,最著名的是 FreeBSD、NetBSD 和 OpenBSD。在整個開發過程中,BSD 以開放的方式分發,導致來自許多不同貢獻者的貢獻。
自由軟體基金會和 GNU 專案
[edit | edit source]在 1983 年,理查德·斯托曼(當時在麻省理工學院)對在麻省理工學院完成的計算機開發工作的日益商業化以及對軟體使用者施加的越來越多的限制感到沮喪。經過一段時間,他開始建立讓使用者擁有控制權的軟體。他的願景是建立一個完全不受專有許可證限制的完整作業系統。在他對軟體行業趨勢感到失望之前,他最主要的軟體開發工作是文字編輯器 GNU Emacs。接下來是 Lisp 系統、C 語言編譯器,最後是 GNU 專案。
在 1985 年,斯托曼成立了自由軟體基金會 (FSF) 來幫助為 GNU 專案提供支援。FSF 已發展成為 FOSS 運動中最重要的組織之一。雖然 FSF 的主要使命仍然是完成 GNU 作業系統,但 FSF 也承擔了“自由軟體福音傳道者”的角色,保護和支援自由軟體。FSF 還擁有 GNU 專案編寫的大部分原始碼的版權,確保它始終可以免費供使用者使用。
在接下來的 10 年裡,斯托曼召集了一群人,他們基本上開發了 Unix 和類 Unix 作業系統中找到的所有核心實用程式。本著 Unix 的精神,這些實用程式由數百(甚至數千)個小型實用程式和工具組成。該專案仍在執行,被稱為 GNU 專案。這些程式中的許多也已成為 BSD 變體的標準(見上文)。1994 年,Linus Torvalds 釋出了第一個版本的 Linux 核心,當它與 GNU 專案已有的 GNU 實用程式結合在一起時,Linux 作業系統誕生了。Linux 的 Debian 發行版被稱為 GNU/Linux,以承認斯托曼的立場,即它是一個聯合制作,以承認 GNU 專案提供了大多數基本實用程式。GNU 專案繼續緩慢地開發自己的作業系統核心,它將被稱為 Hurd。Hurd 旨在作為 Unix 核心的官方 GNU 替代品提供,儘管它目前處於測試開發階段。
雖然 FSF 已變得頗有爭議,但它無疑對計算產生了重大影響。每天全世界有數百萬人使用 GNU 軟體。
更多資訊
[edit | edit source]本文的大部分資訊來自以下來源。如果您有興趣,它們還包含更多有關其開源歷史領域的資訊。
維基百科文章
外部來源
哲學
[edit | edit source]並沒有一種哲學將人們帶到開源軟體。然而,有兩種主要的思想流派,許多人在其中共享一些類似的觀點,並幫助創造了一個強大的運動。要全面瞭解開源運動,您需要了解這兩種主要的哲學。
軟體自由
[edit | edit source]與開源類似的早期軟體運動是自由軟體運動(體現於自由軟體基金會)。雖然對其確切定義存在一些爭議,但軟體自由通常有三個主要組成部分。
- 使用自由
許多人認為,軟體在私下使用方面不應該有任何限制,除了對創作者責任的限制之外。相比之下,一些商業軟體包(如 Microsoft Windows)不允許某些用法,而更昂貴的軟體包則允許此類用法。根據美國版權法,除非受私人合同限制,否則此權利是隱含的。
- 修改自由
可能比使用自由更重要的是修改現有程式的自由。儘管與整體開源理念密切相關,但這種自由也意味著您的修改仍然是您的。一些開源許可證要求修改者將其作品的權利轉讓給許可證的創作者(微軟的共享原始碼計劃通常被認為是一個例子)。顯然,很少有完全商業化的軟體包賦予使用者這種自由。在美國版權法中,這是作品創作者的隱含的專有權利。為了授予他人此權利,創作者必須同意這樣做。
- 分發自由
最後的關鍵自由是分發軟體的能力,無論是修改過的還是未修改過的。限制其分發的軟體包會限制他人對其自由處置的自由。它還可以阻止他們將自己的改進提供給社群。與修改自由類似,一些開源許可證也會限制分發自由,通常要求將更改提交回某個中央儲存庫。與修改權一樣,這是創作者的專有權利。
值得注意的是,這些自由中沒有經濟上自由的軟體要求。一些許可證不阻止商家銷售軟體,無論是修改過的還是未修改過的。事實上,一些組織歷來對通常被認為是自由軟體的各種軟體收費。根據許可證的不同,商家可能仍然受到其他限制。
GNU 通用公共許可證 (GPL) 就是一個例子,它提供軟體自由,但對軟體分發者有一些限制。GPL 由理查德·斯托曼等人為 GNU 專案編寫。GPL 包含了上面列出的所有自由。與上述基線最重要的區別在於 Creative Commons 所謂的“分享與分享相同”條款。如果您在 GPL 下分發對特定軟體包的修改,那麼您必須同意您工作的那一部分也受 GPL 許可。有關 GPL 的更多資訊,請參閱本書的 許可證部分
開源開發模型
[edit | edit source]開源哲學的第二個主要分支圍繞著為新的軟體開發模型提供機會。開源也是關於分享想法,並將建立軟體的工作分散到眾多感興趣的開發人員身上。這種分享可以導致在更短的開發時間內獲得更好的軟體。它還允許開發人員獲得比傳統開發模型中常見的更好的反饋。蘋果和 IBM 等大型公司已經認識到,以這種方式編寫軟體可能會帶來顯著優勢。蘋果透過 Darwin 專案,IBM 透過向開源組織捐贈大量軟體和專利,為其他公司認真考慮使用這種開發模型鋪平了道路。
許可證和專利
[edit | edit source]什麼是許可證?
[edit | edit source]在法律理論中,許可證是指授予從事某些行為的許可或權利,如果沒有這些權利,這些行為可能是非法的。許可證必須由具有法律授權的人、機構或政府授予。術語“許可證”也指具體描述這些許可和權利的文件。
重要的 FOSS 許可證
[edit | edit source]雖然如今有很多開源許可證在使用,但一些許可證已經變得比大多數許可證更受歡迎(因此更重要)。我們將花一些時間詳細研究這些重要的許可證。它們按字母順序排列。
有關開源許可證的完整列表,請參閱GNU 專案許可證列表,或OSI 許可證列表.
Apache 軟體基金會 (ASF) 是一家非營利性組織,旨在支援 Apache 軟體專案。Apache 的專案以協作的、基於共識的開發流程、開放和務實的軟體許可證為特徵。ASF 的目標包括為從事 Apache 專案的志願者提供法律保護,並保護 Apache 品牌名稱不被其他組織使用。
目前,Apache 的兩種形式在當今被廣泛使用:1.1 版和 2.0 版。雖然 ASF 認為 2.0 版是當前版本,並且大多數使用者都樂於切換,但一些大型組織反對 2.0 版中關於專利的條款,並且拒絕使用任何具有新許可證的軟體(最著名的是 OpenBSD 專案)。
根據 Apache 許可證釋出的程式碼可以與公司開發的專有程式碼連結。因此,該許可證在大多數公司內部都被接受。公司會不時地貢獻程式碼以 Apache 許可證的形式釋出,以促進這些專案的活動。例如,IBM 和英特爾為 Apache Harmony 專案貢獻了替代 Java 實現的大部分程式碼。
BSD 既是一種許可證,也是一類許可證(通常稱為 BSD 類許可證)。修改後的 BSD 許可證(今天被廣泛使用)與最初用於 BSD 版本的 Unix 的許可證非常相似(見上文BSD 歷史)。BSD 許可證是一個簡單的許可證,它僅僅要求所有根據 BSD 許可證釋出的程式碼都必須根據 BSD 許可證釋出,如果以原始碼格式重新分發。BSD(與其他一些許可證不同)不要求原始碼被分發。
BSD 實際上非常接近公有領域許可證,但仍然與之不同。與公有領域的作品一樣,BSD 類許可證允許幾乎免費修改和分發作品。BSD 類許可證與公有領域的唯一兩個顯著區別是:第一,BSD 許可證要求許可證及其版權宣告必須與作品或修改後的副本一起提供。但這並不限制將不同許可證下的程式碼與之結合使用。第二,BSD 類許可證包含免責宣告,例如適銷性保證和特定用途適用性保證。這一點應該不奇怪,因為幾乎所有軟體包都包含與之幾乎相同的條款。
總之,BSD 類許可證與公有領域的主要區別在於,BSD 許可的作品必須保留對原始建立者(s) 的歸屬。有些 BSD 許可證進一步要求在分發軟體產品的廣告材料中包含類似的版權宣告。但是大多數只是限制了這個基本要求。
對於那些反對 GPL 對修改和分發進行限制的人來說,BSD 許可證通常是可接受的。由於固有的缺乏限制,BSD 程式碼可以被合併到任何其他專案中,無論是商業專案還是其他專案,從而消除了程式碼許可問題中的許多擔憂。同樣,對於那些贊成 GPL 等許可證來保護軟體自由的人來說,BSD 被視為朝著正確方向邁出的一步,但還不足以保證這些自由。出於這個原因,他們經常鼓勵使用更多類似 GPL 的許可證。
BSD 通常在公司內部被接受。Apple Mac OS 基於最初的 BSD 許可的作業系統,但包含了大量的專有程式碼。
GNU 通用公共許可證是一種自由軟體許可證,由自由軟體基金會 (FSF) 建立;2.0 版於 1991 年釋出。它通常縮寫為 GNU GPL,或者簡稱為 GPL。FSF 最近宣佈他們已經開始著手 3.0 版本的許可證,並將於 2007 年春季釋出新版本。這些變化的動機尚未闡明,但根據理查德·斯托曼在 2005 年 11 月 29 日在紐約庫珀聯盟發表的演講,這些變化與世界智慧財產權組織 (WIPO) 在世界版權標準化方面的工作有關。
GPL 保護了軟體自由的三個主要條款,如軟體自由部分所定義。GPL 還包含一個條款,要求 GPL 許可程式的釋出者對軟體進行的修改必須在 GPL 下分發。許多公司經理不喜歡這一點,因為他們希望對公司編寫的所有程式碼擁有專有控制權。即使軟體僅供內部使用,並且從未出售,經理們仍然希望擁有專有控制權,以確保該軟體不會被競爭對手使用。為了營造負面態度,GPL 反對者將 GPL 稱為“病毒”,因為它似乎“感染”了它接觸到的任何程式碼。
另一方面,可以這麼說,GPL 旨在儘可能地支援甚至強制執行程式碼共享。編寫程式碼並以 GPL 形式釋出程式碼的公司和個人可以訪問大量現有的 GPL 許可程式碼。這樣,他們就可以獲得選擇此許可證的回報,並且可能能夠負擔得起與 GPL 相容的商業模式,而這些模式在程式碼的專有控制方面可能無法帶來直接的利潤。
GPL 在公司內部並非不可接受:許多公司使用過此許可證下的軟體庫,並且根據許可證的要求釋出了與這些庫互動的所有程式碼。例如,GNU gcc 編譯器就是透過這種方式獲得 C++ 支援的。GPL 似乎也是世界上最流行的許可證之一。然而,大多數公司可能會首先嚐試聯絡 GPL 覆蓋軟體的作者,要求購買“商業”許可證。
GPL 的一個重要特例要求只有 GPL 程式碼才能與 GPL 庫連結,即使庫包含在單獨的檔案中,並且使用它的程式碼本身不包含任何 GPL 程式碼。有些人認為這太過嚴格,因為這種行為可以被認為是“使用”庫,而不是修改。為了允許這種區別,LGPL 誕生了。LGPL 解決了這個問題:如果有人將 LGPL 作品用作與專案符號連結的庫,專案中的其他部分不必放在 LGPL 下。另一方面,如果對 LGPL 許可的作品進行任何修改,並且這些修改與軟體包作為一個整體一起分發,則必須公開這些修改,類似於 GPL 的規則。“L”在 LGPL 中對於不同的人意味著不同的東西。最初,它被認為是“庫”許可證,因為該條款專門處理連結問題。但是,GNU 基金會將其描述為“較小的”GPL,因為它對作品提供的保護少於 GPL。雖然 GNU 基金會不反對使用 LGPL,但它鼓勵在可能的情況下使用 GPL。
LGPL 清楚地區分了受此許可證覆蓋的程式碼(通常是軟體庫)和僅與 LGPL 覆蓋程式碼連結的外部程式碼。外部程式碼可以保持專有。但是,LGPL 覆蓋庫內部的修改必須與公眾共享。
公司通常會發現 LGPL 條款是可以接受的,並且在商業軟體中常見到帶有此許可證的公共庫。
GPL + 連結例外許可證聽起來像 GPL,但在額外的章節中明確允許將它覆蓋的程式碼與任何其他程式碼連結在一起,而不管其許可條款如何。因此,雖然聽起來很相似,但 GPL + 例外在實踐中更像 LGPL。此許可證最近已用於多個大型專案,包括 Sun Microsystems 的 java 實現。
軟體許可證不應與版權保護混淆。開源許可證明確依賴於版權法保護,並且根據大多數這些許可證釋出的程式碼不會進入公有領域。軟體作者可以限制他所建立作品的使用,因為該程式碼是一部書面作品,受版權法條款的約束。建立者可以根據需要限制軟體的使用,因為版權是獨佔使用的權利。版權保護允許版權持有者(不一定是作者)透過許可控制軟體的使用和分發。該許可證可能允許更改(如 GPL 所做的那樣),也可能禁止更改(如大多數商業 EULA 協議所做的那樣)。
複製左的概念也源於 GNU 和開源運動中的其他人所做的工作。雖然版權旨在最大程度地保護書面作品免遭未經授權的使用,並且大多數商業版權許可證透過禁止更改或分發來做到這一點,但複製左許可證鼓勵免費和廣泛的使用。
注意:華夏公益教科書是在 GNU 自由文件許可證 的版權下提供的。
在過去幾年中,軟體專利問題已成為開源運動中最緊迫的問題之一。在美國和其他一些國家,軟體受專利保護。雖然只有少數其他國家對軟體生產施加了類似的限制,但美國的專利制度已在全球範圍內變得有爭議。
自由及開放原始碼軟體經濟學的核心是數字環境中商品的零邊際成本。在這方面,自由及開放原始碼軟體的出現印證了經典的微觀經濟學價格理論——完美市場中的均衡價格近似於邊際成本。從這個角度來看,自由及開放原始碼軟體可以被理解為在真正自由市場中實現進化穩定動態納什均衡的先驅。邊際成本是經濟學和商業科學中用來指代生產一件商品額外單位所產生的總生產成本增量的術語。
雖然在開發、增強和記錄自由及開放原始碼軟體方面投入時間和精力不會帶來任何直接收入,但自由及開放原始碼軟體方面的專業知識發展提供了廣泛的創收機會——從透過自由及開放原始碼軟體的增強來產生內部節省到在安裝、培訓、定製和提供自由及開放原始碼軟體安裝技術支援方面的諮詢機會。在《網路財富:社會生產如何轉變市場和自由》 (耶魯大學出版社,2006 年)的第一部分:網路化資訊經濟中,[1],Yochai Benkler 對透過開源和開放內容策略產生收入和財富的方式進行了精彩的分析——以 IBM 的戰略為例。
從自由及開放原始碼軟體中獲取資金的其他可能途徑包括:
- 雙重許可模式,即相同程式碼同時在具有侵略性的自由及開放原始碼許可證(通常為 GPL)和不要求共享派生作品的“商業”許可證下提供。GPL 版本可確保更廣泛的使用者群、更廣泛的普及率,並且可以用作“評估版本”。這種模式被許多公司使用,最著名的例子是 Trolltech 對 QT 的使用。
- 付費文件模式,即軟體和可信示例作為自由及開放原始碼軟體提供,但一些非常好的文件在必須購買的書籍中或在單獨的付費文件包中描述。
- 商標使用。如果派生作品無法使用原始商標(徽標、名稱),那麼使用者可能會優先選擇原始作品,因為使用者願意為他們理解為高質量標誌的產品付費。這種模式只有在商標所有者已廣為人知為軟體開發專家時才有可能。它被紅帽公司成功地使用。
- 使用付費自動更新服務。在這種情況下,付費使用者有機會自動獲取和安裝安全和其他重要更新。非付費使用者需要付出更多努力來保持系統更新。這種模式被許多商業 Linux 發行版使用。
- 使用認證系統,即領先自由及開放原始碼軟體技術的擁有者提供付費認證考試以證明使用者的資格(通常是軟體開發人員)。許多流行的自由及開放原始碼軟體產品的擁有者(Sun Microsystems、Red Hat 等)提供獲得僱主認可和重視的付費認證。
- 為將自由及開放原始碼軟體移植到新的處理器、裝置或作業系統提供付費支援。
- 開發在特定時刻主要在同一公司銷售的裝置上執行的自由及開放原始碼軟體。自由及開放原始碼軟體為該裝置增加了價值,使其現在可以吸引更多關注,以更高的價格出售,或者只是變得可用。這種模式在將 Linux 移植到移動裝置和其他不尋常的平臺時經常使用,它還使公司能夠為他們生產的硬體開發開源驅動程式。
- 使用自由及開放原始碼軟體元件(包括 GPL 元件)在同一公司內部開發高度專門的軟體供內部使用。由於這種軟體從未正式釋出,因此無需從銷售中獲利。GPL 不要求釋出從未公開發布的軟體的原始碼。
- 接觸新客戶群。世界上有許多自由及開放原始碼軟體愛好者。生產開源友好產品的公司可能會吸引這些客戶,這些客戶更喜歡此類產品而不是其替代品。FIC OpenMoko 專案就是一個例子,該專案已售出數萬臺自由及開放原始碼軟體友好的行動電話,即使它們仍不適合普通終端使用者。此外,一些 Linksys 路由器,最著名的是 NSLU2 裝置,擁有一批完全意想不到的使用者,他們只是對破解其內部結構感興趣。
- 對於個人開發人員來說,加入自由及開放原始碼軟體專案並貢獻程式碼可以提供以其他方式難以獲得的專業知識。瞭解可用自由及開放原始碼軟體功能、如何構建它、如何移植它以及如何充分利用它的軟體工程師可能會為他們的公司節省大量資金。在某些情況下,開發自由及開放原始碼軟體替換可以提供與高度類似的專有產品直接相關的專業知識。著名的例子包括 GNU Classpath 和 Sun Microsystem 的 Java、DotGNU 或 Mono 和 Microsoft 的 .NET,以及 J2EE 的各種自由及開放原始碼軟體和專有實現。最容易獲得此類專業知識的方法是為現有的高度成功的自由及開放原始碼軟體專案做出貢獻。
- 參與自由及開放原始碼軟體有助於建立一個專業的社交網路:一個足夠了解的人群,如果需要,可以推薦你成為程式設計師。
- 對於小型但相對流行專案的維護者來說,提供付費文件可能會奏效,尤其是在這種文件易於線上購買的情況下。
首先要注意的是,商業軟體行業是世界上最大、最重要的行業之一。開源運動的興起並不一定意味著商業軟體行業的終結。相反,許多人認為商業軟體可以透過使用開源技術來加強。商業軟體旨在提供值得付費的產品,而且大多數都是這樣的(這就是這個行業如此龐大的原因)。儘管有價格標籤,但商業軟體往往遠非完美。
商業產品將頻繁更新,以反映不斷變化的市場需求和客戶需求。這些需求可能會導致軟體實踐過於頻繁地重新排列和重寫軟體,或者將測試版作為商業行為釋出,導致早期版本中出現大量錯誤。一些商業程式的設計過度,並且用草率的程式碼編寫,導致臃腫、緩慢、執行緩慢的程式。相比之下,開源軟體則由終端使用者的需求驅動。編碼人員的技能在於對他們所做的事情感到自豪,而不是急於滿足人為設定的截止日期(除了他們自己的截止日期)。因此,他們的程式碼往往比商業環境中程式設計師的程式碼質量更高。由於程式設計師在一個廣泛的人員網路中測試他們的產品,因此通常還會進行非常廣泛的反饋。
當原始碼可用時,它可以針對可能有意或無意地留在封閉原始碼軟體中的各種“後門”和其他安全漏洞進行檢查。過去,在包括政府使用的軟體在內的多個專有產品中發現了此類漏洞。高階開發人員將使用元件的原始碼視為重要的補充文件。
擁有原始碼還意味著可以輕鬆地移植軟體以在不同的處理器、裝置或作業系統下執行。專有軟體通常只能由原始開發人員合法移植,而原始開發人員可能不會將此類請求視為重要到足以進行處理。
傳統商業軟體的另一個問題是它的封閉性質。通常沒有或限制對受版權保護產品的篡改。此外,公司經常強迫使用者遵循他們可能不希望遵循的升級路徑。開源軟體使個人能夠自由地根據自己的最終需求定製軟體。商業軟體的另一個受到嚴厲批評的方面是,客戶經常被鎖定在一個產品中,因為為了繼續使用資料檔案,你經常被迫繼續使用同一個程式。如果你想與升級了的使用者共享檔案,你經常需要自己升級,否則就會被視為無關緊要。由於開源軟體允許競爭程式共享不同的資料檔案型別,因此沒有理由被困在一個程式中。如果較新版本有新的檔案格式,那麼通常會有一些轉換器允許舊版本的使用者保持資料檔案最新。
雖然自由及開放原始碼軟體對終端使用者是免費的,但開發軟體的成本是存在的。這些成本可能低於開發專有軟體的成本,因為在自由及開放原始碼軟體許可證下開發專案意味著:
- 眾多網路入口網站(如 SourceForge)會免費提供網路託管、內容儲存庫、郵件列表和其他基本功能。
- 宣傳自由及開放原始碼軟體專案的成本(如在相關會議中展示它)通常更低。
- 在GPL下開發某些東西可以免費訪問高質量的元件(如QT),而這些元件如果購買的話則非常昂貴,甚至根本無法獲得。
然而,任何軟體的開發首先都需要開發人員的時間。只有非常受歡迎的專案才能期望免費獲得高質量的程式碼貢獻。
開源軟體的開放性使得軟體的國際化成為可能。作業系統可以針對任何語言進行修改,例如最近一個版本的Linux被翻譯成了威爾士語(在威爾士語中使用)。雖然許多主要的商業專案都提供多種語言版本,但將其翻譯成3或4種以上語言往往過於昂貴。許多自由軟體專案都提供10種或更多語言版本,因為翻譯工作可以由希望將軟體包翻譯成其母語的程式設計師來完成。
如今世界上最著名的四個開源專案可能是:Apache Web伺服器、BSD作業系統、Linux核心和Mozilla Web瀏覽器(或其衍生產品Firefox)。

Apache Web伺服器目前是世界上最流行的Web伺服器。近70%的網站都是由Apache提供的。
Apache專案源於對原始Web伺服器httpd的改進嘗試,httpd是一個公共領域軟體專案,在早期的1990年代基本上被放棄了。當時它是使用最廣泛的Web伺服器,一些開發人員意識到需要繼續開發。由於httpd是公共領域的,因此他們能夠繼續對該程式進行工作,並加入了許多改進。他們很快組建了Apache基金會,以建立一個穩定的組織來監督他們新Web伺服器的持續工作。Apache版本的httpd很快超越了原始的httpd,成為使用最廣泛的Web伺服器。
隨著時間的推移,Apache基金會發展壯大,並擁有了許多相關的開源專案,包括Tomcat(一個流行的Java servlet伺服器)等等。
經過多年開發Apache 1.x,Apache基金會發現Apache的原始架構中的一些內容已經開始顯現其老態,並且進一步擴充套件變得不可能。因此,一個主要由志願者開發人員組成的團隊開始開發Apache 2。Apache 2是Apache的完全重寫版本,它使Apache基金會能夠為其旗艦產品增加新的靈活性。
Apache基金會的聲望也使其成為開源社群軟體捐贈的寶庫——最值得注意的是,IBM在2004年向Apache基金會捐贈了兩個大型軟體。
BSD(Berkley Software Distribution的縮寫)是一個包含三個免費Unix的系列,分別是OpenBSD、FreeBSD和NetBSD。它們都是BSD 4.4的後續版本。

Linux核心目前是最活躍、最重要的自由和開源軟體開發專案之一。1991年,Linus Torvalds透過網際網路邀請人們共同參與他的一個嬰兒專案,該專案旨在開發一個支援類似於Unix系統的作業系統的核心。他想要一個類似於Unix的作業系統,可以在他的電腦上執行,那是一臺早期且昂貴的386機器,他對當時市場上所有負擔得起的系統都不滿意,包括像Minix(來自教授Andrew Tannenbaum)這樣的學術教學示例。從那時起,Linux核心就被用於多個Linux系統發行版中,這些發行版目前得到IBM、Novell、惠普、許多大學(例如瑞士聯邦理工學院)、貝爾實驗室和Borland等組織的支援。Linux核心是GNU/Linux作業系統中使用的核心,目前已經發布了第二個主要版本和第六個次要版本。Linux核心專案的官方主頁是kernel.org
GNU/Linux作業系統是一個教科書式的例子,它說明了共享修改後的作品的自由的重要性。在與Tannenbaum的討論中,他寫道,他經常收到建議,要求以某種方式擴充套件Minix,但他在接受這些擴充套件時非常嚴格。他試圖保持系統的簡單性,使其易於學習和理解。那些想要將其轉換為真正的下一代作業系統的人無法做到這一點,因為許可證不允許直接共享修改後的程式碼,需要釋出針對Tannenbaum版本的補丁。
第二個教科書式的例子是FSF本身,他們決定拒絕現有的單片核心,並轉向開發基於微核心的Hurd的困難道路,即使在2009年,它也還沒有準備好投入生產。這個錯誤可能嚴重到足以扼殺整個GNU專案,但FSF被其自身的哲學所保護:GPL允許另一個核心(Linux)出現,因此用於構建替代作業系統的其他眾多部分的工作並沒有白費。
Mozilla和最近的Firefox是Netscape Navigator Web瀏覽器的開源衍生產品。Firefox 1.0的釋出使Web在5年內首次出現Web瀏覽器使用率的重大轉變。
GNU Classpath是一個專案,旨在為Java程式語言建立標準類庫的自由軟體實現。GNU Classpath的開發始於1998年,當時只有5名開發人員。最初的進展非常緩慢,因為Sun已經免費提供了自己的Java實現(包括商業用途),並且原始碼可用。然而,移植到新的平臺、連線到新的虛擬機器以及各種不尋常的專案需要分發修改後的版本——這在當時不受Sun許可證的允許。在整個歷史中,該專案與其他具有類似目標的專案(Kaffe、libgcj)合併了幾次。在過去,GNU Classpath提供了自己的虛擬機器(Japhar)。隨著Classpath成為一個基礎庫,與許多不同的專案共享,這個虛擬機器越來越不受關注,直到它不再被支援而被放棄。當該專案接近Java 1.2 API的完成時,它開始加速發展,當時很明顯,一些公司正在加入,允許他們的開發人員在工作時間內為該專案做出貢獻。GNU Classpath已成為幾乎所有Linux發行版的一部分,並已移植到許多處理器和作業系統上;其中一些至今還沒有其他Java支援。在會議上,一連串的談話向驚訝的公眾展示了,存在著**完全功能的**替代自由實現的Swing、CORBA和其他複雜庫,人們曾經認為這些庫永遠無法由志願者社群完成。
Sun釋出了自己的Java實現,該實現使用與GPL+Exception幾乎相同的許可證後,專案的狀況發生了變化。主要目的是在自由軟體許可證下擁有高效的Java實現,但它已經透過另一種方式實現了。由於兩個庫都實現了相同的API,並且現在擁有幾乎相同的許可證,因此,它們是否能夠找到自己的使用者群體,而不是僅僅被另一個庫取代,似乎令人懷疑。
雖然Sun的OpenJDK的興起意味著GNU Classpath不再擁有上升的聲望和加入歷史成為長期存在的替代Java系統作者的可能性,但GNU Classpath社群表現出了自我剋制,盡其所能為自由軟體服務:郵件列表中沒有反對意見,也沒有試圖為Sun的專案製造負面形象——簡而言之,沒有試圖阻止GNU Classpath被OpenJDK取代,而OpenJDK現在是開源的,而且效能仍然優於GNU Classpath。Sun在GNU Classpath即將成為一個完全可行的替代方案和真正的競爭對手的時候釋出了自己的庫,這可能促使Sun做出這一決定。因此,GNU Classpath可能仍然被視為一個成功的專案。這個專案似乎仍然活躍,並且吸引著貢獻,這可能是因為它的虛擬機器介面在歷史上更適合連線各種虛擬機器。它是一個常見的選擇,作為Google Android的擴充套件,提供從Google實現中刪除的“不必要”部分。
建立您自己的開源專案可能是首先想到的事情,但對於初學者來說,一般的建議是**不要這樣做**。該專案必須基於一個非常好的想法,並且需要不止一個開發人員的合作才能真正成功。否則,你可能只會看到下載計數器緩慢地向上跳動,但永遠不會獲得其他任何反饋。通常情況下,從加入現有的專案開始,然後在您積累了足夠的經驗後,再開始自己的專案,要好得多。出於同樣的原因,最好不要從嘗試恢復已經失去前一個團隊的廢棄專案開始(參見原因)。
編寫和使用自由軟體不僅僅是程式設計,它是一種哲學。雖然程式語言是你程式設計所需的一切,但加入社群、結交朋友、共同完成偉大的工作,併成為一個受人尊敬的專業人士,擁有你無法在其他地方獲得的個人資料,似乎也很重要。
確保你作為程式設計師有足夠的競爭力來做出有價值的貢獻。如果沒有,你就對開發者社群毫無用處,所以沒有人會理你。下一個最重要的工具是版本控制(CVS,SVN)。瞭解如何建立和應用補丁(文字差異檔案)。社群中大多數 FOSS 開發都是透過建立、討論和應用各種補丁來完成的。
雖然一個非常流行且非常成功的專案可以讓你獲得更多專業知識,但此類專案對貢獻者的要求也很高。你被期望遵循編碼風格,編寫 CHANGELOG 條目,建立和應用補丁,用測試覆蓋你的程式碼等等。如果沒有預期並瞭解原因的經驗,所有這些最終可能導致你和專案社群之間的衝突。如果你對 FOSS 完全陌生,從一些不太苛刻的專案開始可能更有效率,至少在短期內是如此。大多數現在非常容易加入的小型專案可以在 SourceForge.net 上找到。合適的專案必須
- 使用你已知的程式語言。
- 積極活躍,有近期釋出。通常,一個專案如果超過一年沒有釋出,就被認為是休眠狀態,如果不是死亡的話。
- 已經擁有三到五個開發者或左右。
- 使用版本控制。
- 有一些你認為可以立即開始實施的部分,而不需要過多修改現有程式碼。
- 除了程式碼之外,一個好的專案還應該擁有活躍的討論列表、錯誤報告、接收和實施增強請求,並展示其他類似的活動。
一些 FOSS 入口網站提供“職位空缺”,活躍專案的管理員會在那裡積極釋出邀請新開發者的資訊。這些內容可能很有趣,但最好直接尋找你喜歡的專案,無論它是否釋出邀請。
- 聯絡所選專案的管理員。在一個只有少數開發人員的小型專案中,你的幫助通常會被立即接受。
- 仔細閱讀專案的規則,並或多或少地遵循它們。編碼風格的規則或在單獨的文字檔案中記錄你的更改的必要性,一開始可能對你來說很荒謬。但是,這些規則的目的是使共享工作成為可能——而且大多數專案都有這些規則。
- 在這個專案中工作幾個月。仔細聽管理員和其他專案成員說的話。除了程式設計之外,你還有很多東西要學習。但如果你真的不喜歡什麼,就離開去另一個專案。
- 不要在底層專案中停留太久。一旦你發現自己在這個團隊中工作得很順利,就該尋找一個嚴肅的專案了。
- 找到一個嚴肅的、高級別的自由軟體或開源專案。
- 由於我們現在要做一個嚴肅的跳躍,做好接受度遠低於之前的準備。你可能會被要求工作一段時間,而沒有直接寫入程式碼庫的許可權。但是,之前的底層專案應該教會你很多——所以經過幾個月的有效貢獻後,你可以嘗試爭取你認為應該擁有的權利。
- 接受並完成一項嚴肅的任務。即使在你發現任務比你最初想象的要困難得多之後也要繼續——在這步中,重要的是不要放棄。
- 如果可以,將你的嚴肅任務應用於 Google 的“程式碼之夏”,以從這次冒險中獲得一些資金。但不要太在意申請是否被接受,因為他們資助的職位遠少於真正優秀的駭客。
- 尋找一個合適的會議(“Linux 日”或類似的),並嘗試在那裡介紹你的專案(*所有專案*,而不僅僅是你正在程式設計的部分)。在你表明你是代表一個嚴肅的自由/開源專案時,組織者通常會讓你免除會議費(如果他們沒有,這個會議可能不合適)。帶上你的 Linux 筆記型電腦(如果你有),並演示。向專案管理員索取你準備演講或海報時可能用到的資料。
- 完成任務,用自動測試覆蓋,併為專案做出貢獻。在這一點上,成為嚴肅專案中活躍成員的初始目標已經實現。你可以繼續留在同一個專案中,或者以後遷移到另一個專案中學習新的東西。

開發歷史 - 為了更好地理解,請檢視上面關於自由軟體專案開發歷史的真實示例。每個上升曲線代表一個開發者貢獻的程式碼行數。開發人員多年來傾向於變得不那麼活躍,但專案通常會加速,因為新的開發人員加入。因此,如果你已經具備了一些有用的技能,就沒有理由團隊不會邀請你。
- 如果你仍然對自己不夠信任,從你認為缺失且可以從頭開始編寫的程式碼部分開始。修改現有程式碼更有可能招致批評。
- 在開始時,選擇一個目前沒有人積極工作的類、模組或其他單元。在同一個類甚至同一個函式上一起工作需要更多技能,並且需要各方非常謹慎。
- 在詢問專案內部工作規則的任何問題之前,嘗試在專案文件和郵件列表檔案中搜索答案。
- 避免詢問與程式設計基礎或程式設計工具相關的任何問題。自由軟體程式設計師的時間和黃金一樣寶貴,沒有人能負擔得起教你基礎知識。
- 出於同樣的原因,*永遠*不要指望一個資深駭客為你寫一個詳細的任務描述,甚至為你提供任何形式的監督。雖然開源專案可能有很多嚴格的規則,但它們通常遵循被稱為極限程式設計的程式設計方法。
- Linux 現在是一個相當好的系統,但即使在過去它遠不完善時,駭客們也廣泛使用它。對於駭客來說,更重要的是該系統的每個角落都帶有原始碼。它們是開放的,可以探索、理解、更改,並與他人分享你的更改。理解始於日常使用的瑣碎方面(寫作、郵件、網頁,當然還有程式設計)。因此,你必須至少在雙啟動模式下安裝 Linux,並從將其用於日常任務(如網頁瀏覽或程式設計)開始。
- 許多駭客的僱主似乎有足夠的動力來允許他們在工作時間做出貢獻(通常是因為機構使用駭客正在開發的自由/開源程式)。想想,也許你可以透過這種方式獲得至少部分所需的時間。
- 始終繼續你開始的駭客行為。不能構建、不能執行、崩潰?*確實*有原因,如果你有原始碼,這通常意味著你*可以*強制系統執行任何你想要的操作,尤其是在網路搜尋的幫助下。這條規則有其侷限性,但確實,永遠不要輕易放棄。
- 只有在一些真正的駭客社群承認你是一個駭客之後,你才能說你是駭客。
雖然 FOSS 社群總體上非常友好且合作,但重要的是不要犯一些會導致不愉快經歷的微不足道的錯誤。
- 避免使用 Windows,尤其是在你計劃與自由軟體開發者見面時。Mac OS 比較容易被接受,但也不受歡迎。如果你確實要帶筆記型電腦,它必須執行 Linux 或其他被認為是“自由軟體”的作業系統。這在開源社群可能沒那麼重要,但你帶 Linux 或雙啟動筆記型電腦永遠不會錯。
- 如果你的郵件客戶端支援 html 訊息,請關閉此功能。不要附加只有專有軟體(如 MS Word)才能正常開啟的文件。駭客認為這樣做是一種侮辱。
- 雖然“駭客”這個詞在大多數學術環境中聽起來很可敬,但對於一些不知情的人來說,它可能與侵入安全系統和其他與計算機相關的犯罪行為聯絡在一起,而這些犯罪行為是由一個不同的社會群體——“破解者”所為。除非你準備解釋,否則要看看你對誰說了這個詞。真正的駭客,正如本文所指的,絕不會參加對他們來說是非法的程式設計活動。首先,他們為遵循駭客倫理而感到自豪。其次,違反法律並不一定收入更高。
- 不要自願參與那些沒有在批准的開源許可下發布部分程式碼的公司擁有的專案。在這種情況下,專案的真正重要部分很可能被儲存在所有者的封閉大門後面,阻止你學習任何有用的東西。
- 不要從小的程式碼最佳化、額外的註釋、編碼風格改進以及其他類似的“小規模”工作開始。它可能會招致比任何重大貢獻都多的批評。
- http://sourceforge.net - 尋找第一個加入專案的場所。
- http://www.fsf.org/campaigns/priority.html - GNU 中頂級、高優先順序專案的列表。
- http://www.apache.org/ - Apache 社群(他們稱他們的軟體為“開源”,並有略微不同的許可證)
- http://catb.org/~esr/faqs/smart-questions.html - 一個真實且有用的指南,教你如何向其他駭客提問。
- http://freesoftware.mit.edu/papers/lakhaniwolf.pdf - 一項關於自由軟體駭客的嚴肅科學研究。
- http://www.gnu.org/software/classpath/docs/hacking.html#SEC8 - 典型自由軟體專案的規則
Vaporware 是用來“試探”市場反應的軟體。許多專案,如果捐贈給開源方法,將會更快地找到使用、開發和市場。丟失的程式碼可能會復活並得到增強。越來越多的計算機使用者正在學習使用由程式設計師建立和改進的優秀開發工具。如果你有一個好主意,開源就是實現它的方法。
通常有一套工具參與管理幾乎所有 FOSS 專案。小型專案可能不會使用其中的一些工具;大型專案幾乎總是會使用所有工具。這些工具按使用頻率大致排列,分別是
- 版本控制庫,它包含專案的所有過去修訂版,並且可以遠端訪問。過去的專案主要使用 CVS。最近的專案通常使用 SVN 或其他工具。
- 錯誤/問題跟蹤器,它包含錯誤報告和增強請求,以及後續評論和實現狀態。最常用的工具之一是 Bugzilla。
- 郵件列表,用於討論專案開發的各個方面。
- 一套自動測試。
- CHANGELOG,其中所有程式碼更改都被手動記錄。這在有多個開發人員時尤其重要。
- 網站,它描述專案並提供“入門”和高階文件。

如果專案依賴於外部貢獻,那麼隨著時間的推移,吸引新貢獻者非常重要。志願者往往會隨著時間的推移而變得越來越不活躍,公司提供的捐款也往往不是連續的。這並不意味著專案停滯不前:隨著新開發人員的加入,它可能會隨著時間的推移而變得更加活躍。但是,很明顯,必須歡迎新手,並且維護一小群“精英開發人員”的做法是有問題的,因為他們不允許其他人靠近程式碼。軟體質量透過其他方法來保證(自動測試,以及至少對所有補丁由老開發人員進行簡短檢查)。
許多新使用者發現 FOSS 專案經常使用奇怪的版本號系統。例如,看到廣泛釋出的軟體版本號小於 1.0 非常常見。例如,網路瀏覽器 Firefox 在版本 1.0 完成之前的一年多時間裡,版本 0.6 就被廣泛使用。在 FOSS 軟體的世界裡,在釋出版本 1.0 之前解決所有已知錯誤通常被認為很重要。雖然這不是一個完全可以實現的目標,但許多使用者發現軟體的早期版本比其商業對應產品的早期版本穩定得多。
通常,FOSS 專案將他們的版本號分成 3 部分:主版本、次要更新、點發布。主版本是版本號中的第一個數字;很少看到自由軟體專案的版本號大於 2(儘管 GNU Emacs 目前是版本 21,所以這並非聞所未聞)。次要更新是第二個數字(版本號中的 x)。數字的變化通常表示程式的重大更新。第三個數字(版本號中的 y)通常表示修復錯誤或安全問題的較小更新。這些數字隨著時間的推移會變得非常大,經常超過 30 或 40。當一個軟體專案建立良好時,他們的大多數更新將以點發布的形式出現。
版本號也可能帶有額外的含義。例如,自從 Linux 核心升級到版本 2 以來,設計團隊一直使用奇數來表示開發核心,使用偶數來表示穩定核心。因此,雖然今天常見的版本號是 2.2、2.4 和 2.6,但 2.1、2.3、2.5 幾乎看不到。仍然有一些團隊致力於支援 2.0、2.2、2.4 和 2.6 核心的錯誤/安全修復。截至 2005 年 3 月,該策略正在接受 Linux 核心主要作者的審查,但是許多專案使用類似的編號方案,因此它仍然是一個有用的示例。
當一個軟體專案更改主版本號時,這通常表示軟體的完全重寫,或者至少是徹底的改造。Apache Web 伺服器在 2003 年啟動了版本 2.0,這是在 1.3.x 版本存在多年的基礎上進行的。Apache2 是 Apache 的幾乎完全重寫,它提供了許多新功能,並顯著改進了底層程式碼庫。Apache 基金會仍然維護 1.3.x 程式碼庫,儘管大多數新程式碼的努力都集中在 2.0.x 程式碼庫上。
軟體編寫者可能會完全重寫程式,改進軟體,或者不必要地膨脹本來就很優秀的軟體。如果軟體工作正常,那麼升級的必要性就不大。
此外,升級可能會解決一些問題,但也會帶來新的問題。舉個例子,“Abi Word”是一個很好的文字處理器,但它在我這裡崩潰了。Open Office 中的完整軟體包從未發生過這種情況,Notepad 或 WordPad 也一樣。新的改進的“Notepad”偶爾會崩潰。因此,我停止被擁有很多功能的東西所誘惑。任何具有隱藏崩潰功能的軟體都是一個責任。我一直在使用 Miranda IM,沒有出現問題,而其他人發現它無法工作。
各種計算機硬體通常具有其自身的特定功能,只有專門的軟體才能正確讀取。通常,作業系統包含處理所有特定細節的裝置驅動程式,為其他程式提供更通用的訪問許可權。製造商可以選擇公開編寫驅動程式所需的文件,也可以將其保密,而提供已完成的驅動程式。
專有驅動程式通常是開源專案的問題。首先,它通常具有限制其使用的許可限制(封閉原始碼自動與 GPL 不相容)。其次,無法檢查此類驅動程式是否有錯誤和安全漏洞。最後,驅動程式通常不可用於目標平臺;通常僅為一個作業系統提供此類驅動程式。
由於這些原因,Linux、Solaris 和其他開源作業系統可能無法為沒有足夠文件的硬體提供所需的驅動程式。在硬體非常普遍和流行的情況下,經驗豐富的駭客可能會成功地對裝置進行逆向工程,並在沒有文件的情況下編寫自己的驅動程式。但是,這是一個困難而漫長的過程,已完成的驅動程式可能仍然缺乏某些功能。
因此,在編寫使用某些特定硬體(如相機、高階影片或無線)的開源軟體之前,始終重要的是選擇製造商共享必要技術資訊或至少為您的系統、您的平臺以及您認為可以接受的條件提供其自身驅動程式的裝置。必須事先仔細檢查,不要指望“它無論如何都能工作”,尤其不要假設製造商以後可能會改變立場。
例如,在設計完全開放的手機(OpenMoko 專案)時,FIC 公司為其第一個原型 Neo1973 選擇了 Hammerhead PMB 2520 晶片。直接訪問此晶片的文件一直保密。經過長時間的談判,製造商提供了一些驅動程式,但由於許可問題,每個使用者都需要從專用網站下載並單獨安裝。由於這款手機主要針對不喜歡這種“二進位制 blob”的開源愛好者,因此在許多情況下,最終拒絕了驅動程式,導致手機上的 GPS 無法正常工作。進一步的談判沒有成功,FIC 被迫在下一代產品中切換到完全不同的晶片。然而,切換需要重新設計一些電路。當新手機交付時,發現由於時間不足,新的 GPS 裝置沒有經過適當的測試,只有在從插槽中取出 SD 卡後才能正常工作。雖然最終所有問題都得到了解決,但長時間的延遲和裝置無法正常工作可能會降低該專案的知名度,該專案之後遇到了財務問題。
開源硬體正在開發免費的 BIOS 和 CPU 規範以及電子設計。
未來發展
[edit | edit source]
FOSS 正在創造一種新的視角。這種態度對商業部門特別有利,他們可以獲得程式碼和工具進行商業化。發展中國家和人民可以使用免費的材料和資源。開發者社群正在嘗試新系統,最重要的是留下一個可以流傳後世的遺產。
技術之外的應用
[edit | edit source]基層組織者開始採用自由軟體運動產生的部分理念。透過鼓勵更多透明度和思想分享,基層團體發現他們可以用更少的努力激勵更多人。
像維基百科和華夏公益教科書這樣的專案都是秉承這些原則建立的。
選擇軟體的建議
[edit | edit source]沒有一種最好的方法可以找到最適合您需求的 FOSS 專案。您可以使用以下一些經驗法則來幫助您做出明智的決定。
- 這是開源的嗎?
- 一些公司試圖透過假裝提供 FOSS 軟體來吸引更多使用者,而實際上他們並沒有提供。檢查這一點的簡單方法是驗證他們的許可證是否獲得 OSI 認可。不尋常的許可證通常意味著該專案假裝提供 FOSS 軟體。
- 您是否已經擁有可以很好地完成工作的軟體?
- 在您尋找新的軟體之前,請確保您沒有已經擁有的程式可以很好地完成工作。或者,能夠用您當前的軟體完成工作並不一定意味著沒有更好的軟體可用,因此可能需要定期研究其他軟體選項。
- 該程式是否能滿足您的需求?
- 雖然這似乎很明顯,但每個 IT 支援人員都可以告訴你關於使用者的軼事,他們來找他們尋求幫助使用某個特定工具,因為朋友推薦了它,但它不適合這項工作。
- 您是否關心自由軟體和開源軟體背後的意識形態,或者需要與關心這些理念的人一起工作?
- 許多人認為使用自由軟體是他們生活和工作的重要組成部分。這些人選擇不將 FOSS 程式替換為專有程式,即使專有程式的質量可能更高。然而,最近許多 FOSS 程式已經變得與專有程式一樣好,甚至更好。
- 您是否認識其他已經使用過它的人?
- 線上評論很棒,但沒有什麼比與您認識的人談論他們每天使用的程式更好了。真正的使用者可以告訴你該程式在長期執行中的表現如何。您的朋友可能發現,雖然它最初執行良好,但它缺少您心目中專案的某些重要功能。此外,如果您使用沒有人使用的程式來執行一項常見任務,那麼可能是有原因的(並且您不太可能比其他人更聰明...抱歉)。
- 當前版本是否已經超過一年了?
- 如果是,那麼該專案很可能已經停止或停滯不前。活躍的專案往往每隔幾周或幾個月就會發布新的更新。雖然舊版本可能是程式編寫良好的標誌,需要很少或根本不需要更新,但它通常表明程式設計師已經轉向其他工作,並放棄了該專案。
- 您是否可以加入使用者支援郵件列表?
- 特別是當您剛接觸一個程式時,能夠獲得支援來學習如何使用它會很好。電子郵件列表或網路討論板通常是 FOSS 程式的優秀支援來源。還要檢視列表的存檔,如果它們是活躍的列表,您可以瞭解常見問題以及有多少人使用該程式。
其他常見問題
[edit | edit source]開源軟體的質量總是比其他型別的軟體更好嗎?
[edit | edit source]這在很大程度上取決於使用者認為哪些是主要要求。但是,一般來說,遠非如此。任何型別的軟體(半免費、專有等)都是如此。到處都可以找到不好的軟體和好的軟體。
程式設計師可能仍在學習,並在開源場所提供他們的專案,作為透過向其他人開放專案來加快開發的一種方式。缺乏興趣可能導致專案被放棄。如果需求和想法很好,開源會快速有效地得到發展。原始開發者可以從他們的經驗以及社群中其他成員更快地發現錯誤中受益。預計自由和開源軟體會發布許多次要版本。
那麼,開源軟體的質量總是更差嗎?
[edit | edit source]一些管理人員認為,由於缺乏資金,FOSS 無法與專有替代方案一樣好,並且只因為成本更低才被使用。近年來,情況也不一定如此,特別是考慮到標準可能不同。可以提出接受標準,在這些標準下 Linux 比 Windows 更出色(確實存在執行速度更快並且至少病毒更少的測試)、Thunderbird 比 Lotus Notes 更出色(功能更少,但速度更快,而且跨平臺)、KPdf 比 Acrobat Reader 更出色(至少啟動速度更快)。像 Linux 核心、OpenSolaris 作業系統、Sun java 實現、Firefox、Thunderbird、Google Android 以及許多其他軟體都是透過過去投入鉅額資金建立的。開源軟體僅僅由稀缺的孤立個人開發是一種神話,因此沒有特別的理由說明它總是更差。
在哪裡可以找到開源軟體?
[edit | edit source]獲取此類軟體最可靠的方法是從流行的、公認的網站門戶下載。情況會隨著時間推移而變化,但目前最流行的門戶似乎是sourceforge.net。還可以訪問www.gnu.org,獲取自由軟體基金會贊助的專案的列表。Linux 使用者通常會從他們的發行版中獲得大量的開源軟體,並可以使用作為作業系統一部分的使用者友好軟體管理工具搜尋更多軟體。
也有一些免費軟體網站提供試用版、限制版甚至完全功能版的軟體供免費使用。但需要注意的是,僅僅是免費提供軟體本身並不意味著它是開源軟體。
- Lobster: 開始編寫這本書
- ahc: 接手並重塑了這本書。從 2004 年秋季開始工作
- User:audriusa: 在 2008 年進行了擴充套件。

