開源軟件的發(fā)行版和分支是不一樣的。了解其中的區(qū)別和潛在的風(fēng)險(xiǎn)。
如果你們對(duì)開源軟件有過一段時(shí)間的了解,一定曾在許多相關(guān)方面中聽說過分支fork和發(fā)行版distribution兩個(gè)詞。許多人對(duì)這兩個(gè)詞的區(qū)別不太清楚,因此我將試著通過這篇文章為大家解答這一疑惑。
(LCTT 譯注:fork 一詞,按我們之前的倡議,在版本控制工作流中,為了避免和同一個(gè)倉庫的 branch 一詞混淆,我們建議翻譯為“復(fù)刻”。但是在項(xiàng)目和發(fā)行版這個(gè)語境下,沒有這個(gè)混淆,慣例上還是稱之為“分支”。)
首先,一些定義
在解釋分支與發(fā)行版兩者的細(xì)微區(qū)別與相似之處之前,讓我們先給一些相關(guān)的重要概念下定義。
開源軟件[1] 是指具有以下特點(diǎn)的軟件:
在特定的 許可證[2] 限制下,軟件供所有人免費(fèi)分發(fā)
在特定的許可證限制下,軟件源代碼可以供所有人查看與修改
開源軟件可以按以下方式 使用:
以二進(jìn)制或者源代碼的方式下載,通常是免費(fèi)的。(例如,Eclipse 開發(fā)者環(huán)境[3])
作為一個(gè)商業(yè)公司的產(chǎn)品,有時(shí)向用戶提供一些服務(wù)并以此收費(fèi)。(例如,紅帽產(chǎn)品[4])
嵌入在專有的軟件解決方案中。(例如一些智能手機(jī)和瀏覽器用于顯示字體的 Freetype 軟件[5])
自由開源軟件free and open source software(FOSS)不一定是“零成本”的“免費(fèi)free”。自由開源軟件僅僅意味著這個(gè)軟件在遵守軟件許可證的前提下可以自由地分發(fā)、修改、研究和使用。軟件分發(fā)者也可能為該軟件定價(jià)。例如,Linux 可以是 Fedora、Centos、Gentoo 等免費(fèi)發(fā)行版,也可以是付費(fèi)的發(fā)行版,如紅帽企業(yè)版 Linux(RHEL)、SUSE Linux 企業(yè)版(SLES)等。
社區(qū)community指的是在一個(gè)開源項(xiàng)目上協(xié)作的團(tuán)體或個(gè)人。任何人或者團(tuán)體都可以在遵守協(xié)議的前提下,通過編寫或?qū)彶榇a/文檔/測(cè)試套件、管理會(huì)議、更新網(wǎng)站等方式為開源項(xiàng)目作出貢獻(xiàn)。例如,在 Openhub.net[6] 網(wǎng)站上,我們可以看見政府、非營(yíng)利性機(jī)構(gòu)、商業(yè)公司和教育團(tuán)隊(duì)等組織都在 為一些開源項(xiàng)目作出貢獻(xiàn)[7]。
一個(gè)開源項(xiàng)目project是集協(xié)作開發(fā)、文檔和測(cè)試的結(jié)果。大多數(shù)項(xiàng)目都搭建了一個(gè)中央倉庫用來存儲(chǔ)代碼、文檔、測(cè)試文件和目前正在開發(fā)的文件。
發(fā)行版distribution是指開源項(xiàng)目的一份的二進(jìn)制或源代碼的副本。例如,CentOS、Fedora、紅帽企業(yè)版 Linux(RHEL)、SUSE Linux、Ubuntu 等都是 Linux 項(xiàng)目的發(fā)行版。Tectonic、谷歌的 Kubernetes 引擎(GKE)、亞馬遜的容器服務(wù)和紅帽的 OpenShift 都是 Kubernetes 項(xiàng)目的發(fā)行版。
開源項(xiàng)目的商業(yè)發(fā)行版經(jīng)常被稱作產(chǎn)品products,因此,紅帽 OpenStack 平臺(tái)是紅帽 OpenStack 的產(chǎn)品,它是 OpenStack 上游項(xiàng)目的一個(gè)發(fā)行版,并且是百分百開源的。
主干trunk是開發(fā)開源項(xiàng)目的社區(qū)的主要工作流。
開源分支fork是開源項(xiàng)目主干的一個(gè)版本,它是分離自主干的獨(dú)立工作流。
因此,發(fā)行版并不等同于分支。發(fā)行版是上游項(xiàng)目的一種包裝,由廠商提供,經(jīng)常作為產(chǎn)品進(jìn)行銷售。然而,發(fā)行版的核心代碼和文檔與上游項(xiàng)目的版本保持一致。分支,以及任何基于分支的的發(fā)行版,導(dǎo)致代碼和文檔的版本與上游項(xiàng)目不同。對(duì)上游項(xiàng)目進(jìn)行了分支的用戶必須自己來維護(hù)分支項(xiàng)目,這意味著他們失去了上游社區(qū)協(xié)同工作帶來的好處。
為了進(jìn)一步解釋軟件分支,讓我來用動(dòng)物遷徙作比喻。鯨魚和海獅從北極遷徙到加利福尼亞和墨西哥;帝王斑蝶從阿拉斯加遷徙到墨西哥;并且北半球的燕子和許多其他鳥類飛翔南方去過冬。成功遷徙的關(guān)鍵因素在于,團(tuán)隊(duì)中的所有動(dòng)物團(tuán)結(jié)一致,緊跟領(lǐng)導(dǎo)者,找到食物和庇護(hù)所,并且不會(huì)迷路。
獨(dú)立前行帶來的風(fēng)險(xiǎn)
一只鳥、帝王蝶或者鯨魚一旦掉隊(duì)就失去了許多優(yōu)勢(shì),例如團(tuán)隊(duì)帶來的保護(hù),以及知道哪兒有食物、庇護(hù)所和目的地。
相似地,從上游版本獲取分支并且獨(dú)立維護(hù)的用戶和組織也存在以下風(fēng)險(xiǎn):
由于代碼不同,分支用戶不能夠基于上游版本更新代碼。 這就是大家熟知的技術(shù)債,對(duì)分支的代碼修改的越多,將這一分支重新歸入上游項(xiàng)目需要花費(fèi)的時(shí)間和金錢成本就越高。
分支用戶有可能運(yùn)行不太安全的代碼。 由于代碼不同的原因,當(dāng)開源代碼的漏洞被找到,并且被上游社區(qū)修復(fù)時(shí),分支版本的代碼可能無法從這次修復(fù)中受益。
分支用戶可能不會(huì)從新特性中獲益。 擁有眾多組織和個(gè)人支持的上游版本,將會(huì)創(chuàng)建許多符合所有上游項(xiàng)目用戶利益的新特性。如果一個(gè)組織從上游分支,由于代碼不同,它們可能無法納入新的功能。
它們可能無法和其他軟件包整合在一起。 開源項(xiàng)目很少是作為單一實(shí)體開發(fā)的;相反地,它們經(jīng)常被與其他項(xiàng)目打包在一起構(gòu)成一套解決方案。分支代碼可能無法與其他項(xiàng)目整合,因?yàn)榉种Тa的開發(fā)者沒有與上游的其他參與者們合作。
它們可能不會(huì)得到硬件平臺(tái)認(rèn)證。 軟件包通常被搭載在硬件平臺(tái)上進(jìn)行認(rèn)證,如果有問題發(fā)生,硬件與軟件工作人員可以合作找出并解決問題發(fā)生的根源。
總之,開源發(fā)行版只是一個(gè)來自上游的、多組織協(xié)同開發(fā)的、由供應(yīng)商銷售與支持的打包集合。分支是一個(gè)開源項(xiàng)目的獨(dú)立開發(fā)工作流,有可能無法從上游社區(qū)協(xié)同工作的結(jié)果中受益。
[1]開源軟件:https://opensource.com/resources/what-open-source
[2]許可證:https://opensource.com/tags/licensing
[3]Eclipse 開發(fā)者環(huán)境:https://www.eclipse.org/che/getting-started/download/
[4]紅帽產(chǎn)品:https://access.redhat.com/downloads
[5]Freetype 軟件:https://www.freetype.org/
[6]Openhub.net:http://openhub.net/
[7]為一些開源項(xiàng)目作出貢獻(xiàn):https://www.openhub.net/explore/orgs
編輯:jq
-
開源軟件
+關(guān)注
關(guān)注
0文章
209瀏覽量
15872 -
硬件
+關(guān)注
關(guān)注
11文章
3217瀏覽量
66066 -
源代碼
+關(guān)注
關(guān)注
96文章
2943瀏覽量
66619
原文標(biāo)題:分支與發(fā)行版有什么不同?
文章出處:【微信號(hào):gh_3980db2283cd,微信公眾號(hào):開關(guān)電源芯片】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論