分支與發行版有什麼不同?
如果你們對開源軟體有過一段時間的了解,一定曾在許多相關方面中聽說過 分支 和 發行版 兩個詞。許多人對這兩個詞的區別不太清楚,因此我將試著通過這篇文章為大家解答這一疑惑。
(LCTT 譯註:fork 一詞,按我們之前的倡議,在版本控制工作流中,為了避免和同一個倉庫的 branch 一詞混淆,我們建議翻譯為「復刻」。但是在項目和發行版這個語境下,沒有這個混淆,慣例上還是稱之為「分支」。)
首先,一些定義
在解釋分支與發行版兩者的細微區別與相似之處之前,讓我們先給一些相關的重要概念下定義。
開源軟體 是指具有以下特點的軟體:
- 在特定的 許可證 限制下,軟體供所有人免費分發
- 在特定的許可證限制下,軟體源代碼可以供所有人查看與修改
開源軟體可以按以下方式 使用:
- 以二進位或者源代碼的方式下載,通常是免費的。(例如,Eclipse 開發者環境)
- 作為一個商業公司的產品,有時向用戶提供一些服務並以此收費。(例如,紅帽產品)
- 嵌入在專有的軟體解決方案中。(例如一些智能手機和瀏覽器用於顯示字體的 Freetype 軟體)
自由開源軟體 (FOSS)不一定是「零成本」的「 免費 」。自由開源軟體僅僅意味著這個軟體在遵守軟體許可證的前提下可以自由地分發、修改、研究和使用。軟體分發者也可能為該軟體定價。例如,Linux 可以是 Fedora、Centos、Gentoo 等免費發行版,也可以是付費的發行版,如紅帽企業版 Linux(RHEL)、SUSE Linux 企業版(SLES)等。
社區 指的是在一個開源項目上協作的團體或個人。任何人或者團體都可以在遵守協議的前提下,通過編寫或審查代碼/文檔/測試套件、管理會議、更新網站等方式為開源項目作出貢獻。例如,在 Openhub.net 網站上,我們可以看見政府、非營利性機構、商業公司和教育團隊等組織都在 為一些開源項目作出貢獻。
一個開源 項目 是集協作開發、文檔和測試的結果。大多數項目都搭建了一個中央倉庫用來存儲代碼、文檔、測試文件和目前正在開發的文件。
發行版 是指開源項目的一份的二進位或源代碼的副本。例如,CentOS、Fedora、紅帽企業版 Linux(RHEL)、SUSE Linux、Ubuntu 等都是 Linux 項目的發行版。Tectonic、谷歌的 Kubernetes 引擎(GKE)、亞馬遜的容器服務和紅帽的 OpenShift 都是 Kubernetes 項目的發行版。
開源項目的商業發行版經常被稱作 產品 ,因此,紅帽 OpenStack 平台是紅帽 OpenStack 的產品,它是 OpenStack 上游項目的一個發行版,並且是百分百開源的。
主幹 是開發開源項目的社區的主要工作流。
開源分支fork是開源項目主幹的一個版本,它是分離自主幹的獨立工作流。
因此,發行版並不等同於分支。發行版是上游項目的一種包裝,由廠商提供,經常作為產品進行銷售。然而,發行版的核心代碼和文檔與上游項目的版本保持一致。分支,以及任何基於分支的的發行版,導致代碼和文檔的版本與上游項目不同。對上游項目進行了分支的用戶必須自己來維護分支項目,這意味著他們失去了上游社區協同工作帶來的好處。
為了進一步解釋軟體分支,讓我來用動物遷徙作比喻。鯨魚和海獅從北極遷徙到加利福尼亞和墨西哥;帝王斑蝶從阿拉斯加遷徙到墨西哥;並且北半球的燕子和許多其他鳥類飛翔南方去過冬。成功遷徙的關鍵因素在於,團隊中的所有動物團結一致,緊跟領導者,找到食物和庇護所,並且不會迷路。
獨立前行帶來的風險
一隻鳥、帝王蝶或者鯨魚一旦掉隊就失去了許多優勢,例如團隊帶來的保護,以及知道哪兒有食物、庇護所和目的地。
相似地,從上游版本獲取分支並且獨立維護的用戶和組織也存在以下風險:
- 由於代碼不同,分支用戶不能夠基於上游版本更新代碼。 這就是大家熟知的技術債,對分支的代碼修改的越多,將這一分支重新歸入上游項目需要花費的時間和金錢成本就越高。
- 分支用戶有可能運行不太安全的代碼。 由於代碼不同的原因,當開源代碼的漏洞被找到,並且被上游社區修復時,分支版本的代碼可能無法從這次修復中受益。
- 分支用戶可能不會從新特性中獲益。 擁有眾多組織和個人支持的上游版本,將會創建許多符合所有上游項目用戶利益的新特性。如果一個組織從上游分支,由於代碼不同,它們可能無法納入新的功能。
- 它們可能無法和其他軟體包整合在一起。 開源項目很少是作為單一實體開發的;相反地,它們經常被與其他項目打包在一起構成一套解決方案。分支代碼可能無法與其他項目整合,因為分支代碼的開發者沒有與上游的其他參與者們合作。
- 它們可能不會得到硬體平台認證。 軟體包通常被搭載在硬體平台上進行認證,如果有問題發生,硬體與軟體工作人員可以合作找出並解決問題發生的根源。
總之,開源發行版只是一個來自上游的、多組織協同開發的、由供應商銷售與支持的打包集合。分支是一個開源項目的獨立開發工作流,有可能無法從上游社區協同工作的結果中受益。
via: https://opensource.com/article/18/7/forks-vs-distributions
作者:Jonathan Gershater 選題:lujun9972 譯者:Wlzzzz-del 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive