什麼是開放原始碼軟體?
開源軟體 是原始程式碼公開供任何人檢查、修改和分發的軟體。 開放原始碼倡議提供了廣泛接受的定義:
“開源軟件是帶有任何人都可以檢查、修改和增強的源代碼的軟件。 版權所有者授予用戶研究、更改和分發軟件給任何人和出於任何目的的權利,但須遵守開源許可條款。
此定義強調幾個關鍵原則:
- 原始碼可用性: 完整的原始程式碼必須是公開存取的,而不僅僅是可執行的二進位檔。
- 自由修改: 用戶可以更改軟件以滿足他們的需求、修復錯誤或添加功能。
- 再分配權: 用戶可以以原始形式或修改形式與他人共享該軟件。
- 授權條款: 使用權限由指定權限、限制和義務的開放原始碼授權定義。
開源軟體與專有軟體有根本的不同, 專有軟體的原始程式碼仍然是秘密的,使用權由版權所有者嚴格控制。
協作開源模型
開源開發 涉及與多個貢獻者協作創建軟體:
社群驅動的開發
- 分散式貢獻者: 來自世界各地的開發人員貢獻程式碼、文件、測試和支援。
- 自願參與: 許多貢獻者自願參與,其動機是解決問題、學習、建立聲譽或支持他們使用的工具。
- 精英統治: 項目中的影響力通常與貢獻的質量和數量相關,而不是組織層次結構。
- 透明的流程: 開發發生在公共存儲庫中,任何人都可以觀察討論、決策和變化。
協作工作流程
- 公用儲存庫: 程式碼託管在 GitHub、GitLab 或 Bitbucket 等平台上,任何人都可以查看它。
- 問題追蹤: 錯誤和功能請求被公開跟踪,使社區成員能夠發現問題並提出解決方案。
- 提取請求審查: 貢獻者透過拉取請求提交變更,這些請求在合併之前由維護者和其他社群成員審查。
- 發布管理: 維護者協調發布,確保穩定性和相容性,同時納入社群貢獻。
專案控管模型
不同的開源專案採用不同的治理方式:
- 仁慈的獨裁者: 一個人(通常是創始人)對項目方向做出最終決定(例如,歷史上是 Guido van Rossum 的 Python)。
- 核心團隊: 一小群維護者透過共識或投票共同做出決策。
- 基金會治理: 大型專案通常會建立提供法律結構、資源和治理架構的基礎 (例如 Apache Foundation、Linux Foundation)。
- 企業贊助: 許多開源項目主要由依賴該軟件的公司的員工維護。
開源軟體的廣泛採用
開源軟體在所有技術領域已變得無處不在:
產業採用統計
- 企業用途: 超過 90% 的企業在生產環境中使用開源軟體。
- 互聯網基礎設施: 大多數 Web 伺服器在 Linux(開源)上運行,透過 Apache 或 Nginx(開源)提供內容,並使用 PostgreSQL 或 MySQL(開源)等資料庫。
- 雲端運算: 主要雲端平台廣泛使用並支援開放原始碼技術,例如 Kubernetes、Docker、Terraform 和許多其他開放原始碼工具,構成了現代雲端基礎架構的基礎。
- 行動裝置: Android 是世界上最受歡迎的行動作業系統,基於 Linux 核心構建,並包含廣泛的開源元件。
技術堆疊組合
現代技術堆棧主要是開源的:
- 作業系統: Linux 為雲端基礎設施、容器和許多嵌入式系統提供支援。
- 程式語言: Python、JavaScript、Java、Go、Rust、Ruby、PHP——大多數流行的語言都是開源的。
- 資料庫: PostgreSQL、MySQL、MongoDB、Redis、Elasticsearch 在資料庫部署中佔據主導地位。
- 網路技術: React、Angular、Vue.js、Express、Django、Rails 支援 Web 應用程式開發。
- 開發工具: Git、Docker、Kubernetes、Jenkins、VS Code 是必不可少的開源開發工具。
Microsoft 對開源的擁抱
Microsoft 體現了企業對開源軟體態度的轉變:
歷史轉變
Microsoft 歷來將開源視為對其專有軟體商業模式的威脅。 在過去十年中,隨著該公司認識到開源的戰略重要性,這種情況發生了巨大變化。
Azure 中的開放原始碼
Azure 廣泛整合開放原始碼技術:
語言和運行時間: Azure支援Python、Node.js、Java、PHP、Ruby、Go等開源語言作為一流的平台選項。
資料庫: Azure 提供 PostgreSQL、MySQL、MariaDB 和 Redis 的受控服務,以及專屬供應項目。
容器協調流程: Azure Kubernetes Service (AKS) 提供受控 Kubernetes,這是開放原始碼容器協調流程平台。
開發工具: Azure DevOps 與 Git、Jenkins 和其他開源工具集成,而 GitHub(被 Microsoft 收購)是世界上最大的開源開發平台。
數據和分析: Azure 支援 Apache Spark、Hadoop、Kafka 和其他開放原始碼巨量數據技術。
.NET 轉換
.NET 平台展示了 Microsoft 對開源的全面承諾:
開源 .NET: Microsoft 在 MIT 授權下以開源形式發布了 .NET Core(現為 .NET 5+),使整個平台可以免費提供原始程式碼。 .NET 執行階段、程式庫、編譯器和工具都是開放原始碼。
跨平台開發: 透過開源 .NET,Microsoft 在 Windows、Linux 和 macOS 上實現了跨平台開發,從而大幅擴展了。NET 的影響力。
社區貢獻: GitHub 上的 .NET 儲存庫收到了來自 Microsoft 以外的開發人員的數千份貢獻,該公司正在積極審查和接受社群改進。
開源依賴關係: ASP.NET Core 應用程式通常包含許多開源元件:
- 前端函式庫: jQuery、React、Angular Vue.js 啟用豐富的使用者介面。
- 公用程式庫: Newtonsoft.Json、Serilog、AutoMapper 和無數其他提供通用功能。
- 測試框架: xUnit、NUnit、Moq支援測試驅動開發。
為開放原始碼專案做出貢獻
Microsoft 積極為自己以外的開放原始碼專案做出貢獻:
Linux核心: Microsoft 有助於 Linux 核心、改善 Hyper-V 整合並支援 Azure 基礎結構。
Kubernetes: Microsoft 是 Kubernetes 的主要貢獻者,協助塑造支援 AKS 的平台。
開源計劃: Microsoft 贊助開源活動、資助關鍵開源基礎設施,並僱用開發人員全職從事開源項目。
Microsoft 建立的開放原始碼專案
除了為現有專案做出貢獻之外,Microsoft 還創建並開放原始碼重要的軟體:
Visual Studio 程式碼: 最受歡迎的程式碼編輯器是開源的,具有由全球社群貢獻的擴充功能、主題和改進。
TypeScript:Microsoft 的一種用於類型安全 JavaScript 開發的語言,這是開源的並被廣泛採用。
PowerShell核心: Microsoft 的自動化框架是開源和跨平台的。
.NET 基金會: Microsoft 建立了 .NET Foundation 來支援 .NET 生態系統中的開放原始碼專案,提供資源、治理和社群支援。
如需詳細資訊,請參閱 .NET Foundation 網站。
戰略理由
Microsoft 對開源的擁抱反映了戰略業務決策:
開發人員採用: 開發人員更喜歡開源工具和語言。 透過支援開源,Microsoft 吸引了開發人員使用其平台。
雲端業務: 開放原始碼工作負載推動雲端採用。 Azure 上出色的開源支持使該平台更具吸引力。
創新速度: 開源透過社群貢獻實現更快的創新,減輕了 Microsoft 的開發負擔。
生態系統成長: 開源社群創建有價值的擴充功能、工具和知識,以增強平台價值。
競爭定位: 由於競爭對手 (AWS、Google Cloud) 廣泛支援開放原始碼,因此 Microsoft 必須符合或超越其開放原始碼功能。
為什麼組織選擇開放原始碼
組織選擇開放原始碼軟體有多種原因:
成本考量: 消除許可費用可以降低直接成本,這在大規模部署軟件或構建將許可成本轉嫁給客戶的產品時尤其重要。
靈活性和控制: 存取原始程式碼意味著組織可以修改軟體以滿足特定需求,獨立修復關鍵錯誤,並且不會被鎖定在功能或修復的供應商時間表中。
透明度和安全性: 公共原始碼可以進行安全審計,社群審查可以更快地識別漏洞,並且沒有隱藏的後門或資料收集提供了信心。
避免供應商鎖定: 開源軟體通常可以部署在任何地方,減少對特定供應商的依賴並改善談判地位。
社區支持: 活躍的開源社群提供論壇、文件、教學和同儕協助,通常可與商業支援品質相媲美或超過。
創新與特點: 尖端技術通常首先以開源形式出現,組織可以貢獻他們需要的功能,而不是等待供應商路線圖。
了解什麼是開源軟體以及為什麼它被如此廣泛採用,為探索組織在實施開源元件時必須解決的問題提供了必要的背景,下一單元將介紹這些問題。