開源軟體

開源軟體（open source software，縮寫：OSS）又稱開放原始碼軟體，是原始碼可以任意取用的電腦軟體，這種軟體的版權持有人在軟體協議的規定下保留一部分權利並允許用戶學習、修改以及以任何目的向任何人分發該軟體。開源協議通常符合開放原始碼的定義的要求。開源軟體是開放原始碼開發的典型代表，通常採用公開協作的開發模式。這類軟體不僅向公眾開放原始碼，還常被發布至公有領域。其開放性和協作性與使用者生成內容有著諸多相似之處。根據開放原始碼促進會在2006年的FAQ，「Open Source」詞組，為自由軟體的營銷術語。

開源軟體同時也是一種軟體散佈模式。一般軟體僅可取得已編譯的二進位可執行檔（exe），通常只有軟體作者或著作權所有者等擁有程式原始碼。

有些軟體的作者只將原始碼公開，卻不符合「開放原始碼」的定義及條件，因為作者可能設定公開原始碼的條件限制，諸如限制可閱讀原始碼的對象、限制衍生產品等，此稱之為公開原始碼的免費軟體（Freeware，例如知名網路論壇軟體Discuz!），因此公開原始碼的軟體並不一定可稱為開放原始碼軟體。

## 歷史

1997年，埃里克·雷蒙出版其著作《大教堂和市集》，探討黑客社群與自由軟體原則。1998年初，該論文受到極大的關注，為促成網景通訊公司將其受歡迎的網際網路套裝軟體《網景通訊家》釋放成為自由軟體的因素之一。這些程式碼即為今日大家熟悉的Mozilla Firefox與Thunderbird。

網景的行動激起雷蒙及其夥伴深入研究如何將自由軟體基金會的自由軟體概念及優點帶入商業軟體產業。他們查覺基金會的社會活動不如網景等公司的行動來得吸引人，因而試圖重新包裝自由軟體運動，以強調分享與協作軟體原始碼的潛在商機。他們選用的新名稱為「開放原始碼」（open source），很快地布魯斯·佩倫斯、出版家提姆·奧萊理、林納斯·托瓦茲及其他人支持新名稱。開放原始碼促進會於1998年2月創建，以推動使用新名稱，並宣揚開放原始碼的原則。

## 開放原始碼的定義

開放原始碼的定義由Bruce Perens（一位Debian創始人）提出，經社群潤飾，最終定義如下：

- 自由再散布（Free Distribution）：允許獲得原始碼的人可自由再將此原始碼散佈。
- 原始碼（Source Code）：程式的可執行檔在散佈時，必需以隨附完整原始碼或是可讓人方便的事後取得原始碼。
- 衍生著作（Derived Works）：讓人可依此原始碼修改後，在依照同一授權條款的情形下再散佈。
- 原創作者程式原始碼的完整性（Integrity of The Author's Source Code）：意即修改後的版本，需以不同的版本號碼以與原始的程式碼做分別，保障原始的程式碼完整性。
- 不得對任何人或團體有差別待遇（No Discrimination Against Persons or Groups）：開放原始碼軟體不得因性別、團體、國家、族群等設定限制，但若是因為法律規定的情形則為例外（如：美國政府限制高加密軟體的出口）。
- 對程式在任何領域內的利用不得有差別待遇（No Discrimination Against Fields of Endeavor）：意即不得限制商業使用。
- 散布授權條款（Distribution of License）：若軟體再散佈，必需以同一條款散佈之。
- 授權條款不得專屬於特定產品（License Must Not Be Specific to a Product）：若多個程式組合成一套軟體，則當某一開放原始碼的程式單獨散佈時，也必需要符合開放原始碼的條件。
- 授權條款不得限制其他軟體（License Must Not Restrict Other Software）：當某一開放原始碼軟體與其他非開放原始碼軟體一起散佈時（例如放在同一光碟片），不得限制其他軟體的授權條件也要遵照開放原始碼的授權。
- 授權條款必須技術中立（License Must Be Technology-Neutral）：意即授權條款不得限制為電子格式才有效，若是紙本的授權條款也應視為有效。

儘管一開始接受，自由軟體基金會的理查·斯托曼現在斷然反對將「開源軟體」與「自由軟體」混為一談。雖然在法律上並未明確區分自由軟體與開源軟體，但斯托曼認為不宜濫用。

## 開源軟體開發

### 開發模型

在他1997年的文章大教堂與集市中，開源倡導者Eric S. Raymond提出了一種被稱為"集市"模型的開發OSS的模型。Raymond 將傳統方法開發軟體與建造大教堂相類比，"由個別巫師或小團隊的法師精心製作"。他建議所有軟體都應該使用集市風格開發，他將其描述為"各種不同議程和方法的大雜燴集市"。

然而，在傳統的開發模型中，他稱之為"大教堂"模型，開發是以中心化的方式進行的。角色是明確定義的，角色包括負責設計的人（建築師）、負責項目管理的人以及負責實施的人。傳統的軟體工程遵循大教堂模型。

然而，集市模型是不同的。在這個模型中，角色並沒有明確定義。Gregorio Robles提出，使用集市模型開發的軟體應該表現出以下模式：

### 使用者應被視為共同開發者

使用者被視為共同開發者，因此他們應該可以訪問軟體的原始碼。此外，鼓勵使用者提交對軟體的添加、代碼修復、漏洞報告、文檔等。擁有更多的共同開發者增加了軟體演化的速度。林納斯之法則說："只要眼睛足夠多，所有的錯誤都是淺顯的。"這意味著如果有很多用戶查看原始碼，他們最終會找到所有的錯誤並提出如何修復它們的建議。請注意，一些使用者具有高級的編程技能，此外，每個使用者的電腦提供了額外的測試環境。這個新的測試環境提供了查找和修復新錯誤的能力。

### 早期發布

軟體的第一個版本應該儘早發布，以增加儘早找到共同開發者的機會。

### 頻繁集成

代碼更改應儘可能經常地集成（合併到共享的代碼庫中），以避免在項目生命周期末期修復大量錯誤的開銷。一些開源項目有每晚構建，自動進行集成。在GitHub等平台上甚至可以在每次提交更動後都進行持續整合。

### 多個版本

應該有至少兩個版本的軟體。應該有一個具有更多功能但更不穩定的版本和一個具有更少功能但更穩定的版本。有問題的版本（也稱為開發版本）是為希望立即使用最新功能並願意接受尚未經過充分測試的代碼風險的使用者準備的。使用者然後可以充當共同開發者，報告錯誤並提供錯誤修復。

### 高度模塊化

軟體的一般結構應該是模塊化的，允許獨立組件的並行開發。

### 動態決策結構

需要一個決策結構，無論是正式的還是非正式的，根據不斷變化的使用者需求和其他因素進行戰略決策。與極限編程進行比較。

然而，數據表明，OSS 並不像集市模型所暗示的那麼民主。對 31,999 位開發者編寫的五十億字節的自由/開原始碼進行的分析顯示，74% 的代碼是由最活躍的 10% 的作者編寫的。一個項目中參與的作者平均有 5.1 人，中位數為 2 人。

### 優勢

開源軟體通常比專有軟體更容易獲取，這通常會增加其使用率。此外，標準的開源實現的可用性可以增加對該標準的採用。它還有助於建立開發者的忠誠度，因為開發者感到有權力並對最終產品有一種所有權感。

此外，OSS 需要更低的市場營銷和後勤服務成本。這是一種宣傳公司形象，包括其商業產品的好工具。OSS 開發方法有助於快速、廉價地生產可靠的高質量軟體。

開源開發提供了加速創新和創新和社會價值創造的潛力。例如，在法國，一項政策鼓勵政府支持自由開源軟體，導致每年近 60 萬次 OSS 貢獻，通過增加開源軟體的數量和質量來生成社會價值。這一政策還導致了科技初創公司的增加約 18%，以及IT部門就業人數的增加約 14%。

據說它更可靠，因為通常有數千名獨立程式設計師測試和修復軟體的錯誤。開源不依賴於最初創建它的公司或作者，即使公司失敗，代碼仍然存在並由其使用者開發。此外，它使用對每個人都可訪問的開放標準；因此，它不會出現在專有軟體中可能存在的不兼容格式的問題。

它是靈活的，因為模塊化系統允許程式設計師構建自定義界面或添加新的功能，並且它是創新的，因為開源程序是許多不同程式設計師合作的產物。不同的觀點、公司目標和個人目標的混合加速了創新。

此外，自由軟體可以根據純技術要求進行開發。它不需要考慮商業壓力，這往往會降低軟體的質量。商業壓力使傳統軟體開發人員更加關注客戶的需求，而不是安全需求，因為這些特性對客戶而言有些看不見。

### 開發工具

在 OSS 開發中，工具用於支持產品和開發過程的開發。

像Concurrent Versions System（CVS）和後來的Subversion（SVN）和Git這樣的版本控制系統是工具的示例，通常本身也是開源的，有助於管理軟體項目的原始碼文件和對這些文件的更改。這些項目通常存儲在像Launchpad、GitHub、GitLab和SourceForge這樣的倉庫中，這些倉庫是託管並發布在原始碼託管設施上的。

開源項目通常組織鬆散，"很少有形式化的流程建模或支持"，但通常使用問題跟蹤器等工具來組織開源軟體開發。常用的bugtracker包括Bugzilla和Redmine。

像mailing lists和IRC這樣的工具提供了協調開發人員之間的手段。集中式代碼託管站點還具有允許開發人員進行溝通的社交功能。

### 組織

一些參與開源軟體開發的「知名組織」包括Apache Software Foundation，他們是Apache網路伺服器的創建者；Linux Foundation，這是一個非營利組織，截止到2012年，由Linux作業系統的創造者Linus Torvalds僱傭，該作業系統的核心是Linux kernel；Eclipse Foundation，這是Eclipse軟體開發平台的所在地；Debian Project，他們是著名的Debian GNU/Linux發行版的創建者；Mozilla Foundation，這是Firefox網路瀏覽器的所在地；以及OW2，這是一個歐洲社區，致力於開源中間件的開發。新組織往往擁有更複雜的治理模型，其成員通常由法律實體成員組成。

開放原始碼軟體研究所是一個成員制的非營利組織（501（c）（6）），成立於2001年，旨在促進在美國聯邦、州和地方政府機構內開源軟體解決方案的開發和實施。OSSI的努力重點是在聯邦政府、國防部和國土安全部社區內推廣開源軟體程序和政策的採用。

美國開源組織是一個旨在提高美國聯邦政府對開源軟體的好處的認識的團體。他們的目標是鼓勵政府使用開源軟體，參與開源軟體項目，並採用開源社區動態，以增加政府的透明度。

軍事開源軟體工作小組是一個致力於在軍事領域推動開源軟體的使用和創建的團體。

### 資金

以開源軟體開發為中心的公司採用各種商業模式來解決提供根據定義免費授權的軟體如何賺錢的挑戰。這些商業策略的基礎都是，開源技術的使用者願意購買在專有許可下的附加軟體功能，或者購買其他服務或價值元素，以補充核心業務中的開源軟體。這種附加價值可以包括但不限於，符合企業級要求的功能和正常運行時間保證（通常通過服務級別協議提供）以滿足業務或合規要求，通過尚未在開源版本中提供的功能獲得性能和效率提升，法律保護（例如，免受版權或專利侵權的賠償），或者與專有軟體應用程式典型的專業支持/培訓/諮詢等專業支持。

## 開放原始碼與自由軟體

許多人將開放原始碼與自由軟體（Free Software）視為相同，但若以定義條件而言，自由軟體僅是開放原始碼的一種，也就是自由軟體的定義較開放原始碼更為嚴格，並非開放原始碼的軟體就可稱為自由軟體，要視該軟體的授權條件是否合乎自由軟體基金會對自由軟體所下的定義：

自由軟體是在電腦為個人或為公共利益，而非私人公司或政府等企圖限制或監視我們工作時，我們在家、學校、公司使用時，我們具有其控制權。

開放原始碼有時不單指開放原始碼軟體，它同時也是一種軟體開放模式的名稱。使用開放原始碼開放模式的軟體代表就有Linux作業系統。

嚴格地說來，開放原始碼軟體與自由軟體是兩個不同的概念，只要符合開源軟體定義的軟體就能稱為開放原始碼軟體（開源軟體）。自由軟體是一個比開源軟體更嚴格的概念，因此所有自由軟體都是開放原始碼的，但不是所有的開源軟體都能稱為「自由」。但在現實上，絕大多數開源軟體也都符合自由軟體的定義。比如，遵守GPL和BSD許可的軟體都是開放的並且是自由的。

「開放原始碼軟體運動」是一個主要由程序工程師及其它電腦使用者參與的聲勢浩大的運動。它是自由軟體運動的一個分支，但兩者的差別並不明顯。一般而言，自由軟體運動是基於政治及哲學思想（有時稱為所謂黑客文化）的理想主義運動，而開放原始碼運動則主要注重程序本身的質量提升。

## 許可證

開源軟體有許可證（Open Source License），使用者需要遵守許可證規定，以保護開源軟體的利益。例如：GNU通用公共許可證（GPL）、BSD許可證、MIT許可證等。使用開源軟體前，使用者應該仔細閱讀許可證。

開源軟體許可證的類型開源軟體許可證大致可以分為兩種類型：Copyleft（互惠許可證）和 Permissive（寬鬆許可證）。這兩種類型都遵循開源定義（Open Source Definition），即使用者必須能夠查看、修改和共享原始碼。但它們在修改後如何再分發軟體方面存在顯著區別。

- 寬鬆許可證（Permissive License）

使用寬鬆許可證發布的軟體，其衍生版本可以更改原始軟體的許可證條款，甚至可以轉為專有軟體。例如，開發者可以在原有軟體基礎上進行修改，並選擇使用與原始軟體不同的許可證，而不會強制繼承原許可證的條款。這種靈活性使得許多企業願意使用寬鬆許可證的軟體，並在其基礎上構建商業化產品。常見的寬鬆許可證包括：

MIT許可證（MIT License）：允許修改、分發和再許可，唯一的要求是保留原始許可證聲明。

Apache許可證（Apache License）：與MIT許可證類似，但額外包含專利授權條款，進一步減少了法律風險。

- 互惠許可證（Copyleft License）

互惠許可證（也稱為「傳染性許可證」或「共享相同協議」）確保一旦某個軟體以這種許可證發布，其衍生版本必須保持相同的許可證條款，並且不能添加額外的限制。這種方式保證了軟體及其衍生作品的自由性。例如：

GNU 通用公共許可證（GPL）：要求任何基於GPL軟體的衍生作品也必須採用GPL許可證發布，以確保軟體的自由傳播。

GNU 寬通用公共許可證（LGPL）：相較於GPL，LGPL允許軟體以庫的形式被其他非GPL軟體使用，而不強制要求整個軟體採用GPL。

Mozilla 公共許可證（MPL）：允許部分代碼保持開源，但允許其他部分保持專有，屬於一種中間形式的許可證。