聊聊CentOS的前世今生
2020年年底的時候,開源界發(fā)生了一件大事兒,來自全球的CentOS用戶群情激奮,毫不留情的對當事人進行了毫不留情的筆伐口誅。Linux社區(qū)就像是滾熱的油鍋里被撒了一把鹽,一時間濃煙滾滾,硝煙彌漫。相信說到這里,搞開源軟件的朋友已經(jīng)知道我說的是什么事情了,這一切都和開源界的重量級人物——紅帽公司有關,在2020年12月8日這天,紅帽和CentOS的官網(wǎng)同時宣布不再對CentOS社區(qū)進行投入,而相關的投資將轉移到CentOS Stream項目上。
為什么這件事讓眾多的CentOS用戶無法接受呢?這還得從CentOS和紅帽的淵源說起。早在20多年前,紅帽就憑借其Red Hat Linux吸引了大批的商業(yè)和個人用戶,牢牢的占據(jù)了Linux市場份額第一的大佬地位。之后在2002年,出于公司發(fā)展的需要,紅帽將Linux產品的開發(fā)重心全面轉向了企業(yè)用戶,停止了Red Hat Linux的開發(fā)并發(fā)布了Linux歷史上第一個面向企業(yè)級市場的Linux版本——Red Hat Advanced Server 2.1(后續(xù)版本改名為Red Hat Enterprise Linux簡稱為RHEL)。為了彌補原來Red Hat Linux在開源社區(qū)的空缺,在2003年,紅帽發(fā)布了Fedora Core Linux 1(即后來的Fedora Linux),這是一個完全面向開源社區(qū)的免費Linux發(fā)行版。至此,Red Hat Linux分化為面向企業(yè)的收費版本RHEL和面向社區(qū)的免費版本Fedora。
開源軟件是人類軟件歷史上最大的變革之一,它對軟件開發(fā)的影響力在于極大的激發(fā)了人類的創(chuàng)新,讓志同道合的人可以為了一個共同的目標,共享自己的想法和觀點并將其付諸于實踐。但是開源社區(qū)是一個任何人都可以參與的大集市,這也就導致了很多開源項目良莠不齊,而且一些在一開始熱度很高的開源項目可能隨著核心開發(fā)者的興趣轉移以及其他原因慢慢的失去維護了。所以開源軟件如果要在企業(yè)的生產環(huán)境中使用就必須要同時解決軟件的成熟穩(wěn)定和生命周期維護的問題。而Red Hat Linux分化為Fedora和RHEL在很大程度上解決了開源軟件能順利的在企業(yè)生產環(huán)境落地的問題,包括開源軟件雜亂無序的野蠻式開發(fā)(如何選)和社區(qū)項目未來發(fā)展的不確定性(誰來服務)等問題。也就是從這個時候紅帽開始了自己獨有的從社區(qū)到到企業(yè)的開源軟件開發(fā)模式。
- Fedora作為RHEL的試驗田,與開源社區(qū)緊密結合并從社區(qū)吸收和接納各種新技術和新特性,每6個月發(fā)布一個新版本。免費使用、用戶自服務。
- RHEL則是根據(jù)各個開源項目在Fedora中的使用情況和社區(qū)反饋,選取其中成熟穩(wěn)定的功能和版本,基于某一個Fedora的發(fā)行版本fork出來的一個分支,對其做進一步的QE/QA、壓力測試、和其他商業(yè)公司進行軟硬件兼容測試、安全認證和加固等等一系列的工作之后發(fā)布的面向生產環(huán)境的有技術支持和服務的企業(yè)級Linux發(fā)行版本。有長達十年的生命周期,而且在生命周期之內,對于同一個大版本內的小版本,紅帽還會不斷的backport上游社區(qū)成熟穩(wěn)定的補。ò踩潞凸δ茉鰪姡┑絉HEL中,紅帽會保證這個升級是向下ABI和API兼容的。這意味著用戶在RHEL的同一個大版本的老版本上開發(fā)或者是認證過的應用可以無障礙的在新版本上運行而不需要修改或者重新認證。
所以紅帽希望的是Linux愛好者、桌面用戶和程序員可以選擇Fedora來體驗開源社區(qū)最新的功能和特性,基于Fedora來積極參與社區(qū)開發(fā)并來向Upstream社區(qū)提交代碼。而企業(yè)用戶可以購買RHEL的訂閱來在RHEL上運行操作系統(tǒng)自帶的有紅帽支持服務的開源軟件、有認證的第三方商業(yè)數(shù)據(jù)庫和中間件或者自己開發(fā)的應用程序。不僅僅是Linux操作系統(tǒng)采用的是這樣的開發(fā)模式,后續(xù)紅帽所有的產品都采用了這樣的模式進行開發(fā),從而完美的實現(xiàn)了開源軟件從社區(qū)到企業(yè)的華麗轉變。
但是很多以前的Red Hat Linux的用戶不買賬了,以前可以免費得到的技術支持,現(xiàn)在要購買訂閱后才能得到,習慣了吃免費午餐的人突然吃不到了,這是無法接受的。CentOS就是在這個背景下誕生的。
Gregory Kurtzer創(chuàng)建了CentOS項目(全名是Community EnterpriseOperating System),CentOS項目的目標是在紅帽不再提供免費的技術支持和產品后對紅帽的重構,基于紅帽的源代碼對RHEL進行翻版,在重新編譯的過程中去僅去除了RHEL源代碼中紅帽的LOGO、商標或者其他會可能會造成商業(yè)糾紛的部分并替換了主題。
由于RHEL的知名度以及CentOS對自己發(fā)行版清晰的定位,所以CentOS一經(jīng)發(fā)布就被眾多紅帽用戶追捧。CentOS是一個完全非盈利性質的開源項目,而開源軟件誕生的初衷之一是讓那些用不起昂貴商業(yè)軟件的人可以用上免費或者廉價的替代品,所以試想一下,有多少捉襟見肘的實驗室和研究機構、入不敷出的初創(chuàng)公司、預算緊張的中小企業(yè)可以拒絕這樣的免費大餐?因此CentOS很快成了X86服務器上非付費Linux發(fā)行版裝機量名義上的No.1,雖然沒有找到確切的統(tǒng)計數(shù)據(jù),但是我覺得說CentOS是非付費Linux發(fā)行版裝機量第一一點也不過分。
CentOS在最終用戶心里的地位一點不次于紅帽在開源社區(qū)的地位,它同樣擁有無數(shù)鐵粉。我不得不說它太成功了,以至于很多Linux發(fā)行版基于CentOS來定制屬于自己的發(fā)行版本,這樣可以避免直接使用紅帽的源代碼可能會帶來的商業(yè)糾紛又能最大程度的繼承RHEL的穩(wěn)定性。
對于CentOS的興起,紅帽在大多數(shù)情況下都是聽之任之,畢竟CentOS毫不避諱自己就是RHEL的復刻,所以它的成功其實也是在給紅帽做市場宣傳,它從另外一個角度證明了紅帽的RHEL是成功的。此外,還是會有一些用戶會因為生產需要將會部分CentOS切換到RHEL,紅帽多少也能從中獲益。
在2014年,CentOS宣布加入紅帽,紅帽出資對CentOS項目進行贊助,出人直接參與CentOS項目的開發(fā),并占據(jù)了CentOS社區(qū)當時9個常任董事中3個名額。
CentOS加入紅帽后完善了紅帽的整個開源生態(tài)系統(tǒng),最大的好處就是紅帽所有產品對應的社區(qū)發(fā)行版本有一個比Fedora更理想的體驗和開發(fā)平臺,形成了完整的有一一對應關系的企業(yè)開源產品和社區(qū)開源產品。
紅帽的社區(qū)開源到開源企業(yè)版的生態(tài)系統(tǒng)
CentOS成功說到底是因為RHEL的成功,說到RHEL的成功,我們必須要提一下紅帽一直堅持的UpstreamFirst的原則。了解了這個對于幫助大家理解以下幾個問題:
1、那么多人和企業(yè)參與開源的,為什么在開源軟件企業(yè)化的市場上貌似只有紅帽風生水起?
2、紅帽為什么要把投資從CentOS切換到CentOS Stream?
3、CentOS的用戶以后怎么辦?
Upstream(上游)和Downstream(下游)這兩個單詞都是源自河流,意思是離源頭近或者遠,也有相對的意思,在河流的任意兩點之間,相對源頭較近的稱之為上游,反之為下游。對于開源社區(qū)來說,上游通常指的是各類開源項目,比如Linux kernel、Apache、k8s等等,下游指的是某個開發(fā)者或者組織fork了上游的一個代碼,形成了自己的分支自行進行維護,也就是相對于原有的開源項目說形成了自己的所謂產品。
例如,相對于Linux kernel社區(qū)Linux社區(qū)是Fedora的上游,相對于RHEL,F(xiàn)edora是RHEL的上游。而CentOS是基于RHEL的源代碼重新編譯后翻版的,因此它是RHEL的下游。
堅持上游優(yōu)先背后的含義在于永遠緊跟社區(qū)的發(fā)展步伐,在自己的開源產品中只放開源上游社區(qū)接納的功能和特性,不放任何自己獨有的東西,從而避免形成一個完全獨立的分支和不斷merge自己補丁的窘境,避免走入死胡同和降低維護難度和成本。
現(xiàn)實中有不少案例證實了不堅持上游優(yōu)先帶來的后果,比如Ctrix,其一度非常有名的虛擬化技術Xen,由于體系結構的限制,Xen為了在X86架構上實現(xiàn)Linux系統(tǒng)的虛擬化,只能去修改Linux內核,所以從誕生到現(xiàn)在,Xen一直維護著一套自己的Linux內核版本,上游Linux內核社區(qū)的新特性和功能,它也需要費一番功夫才能移植進來,可想而知維護成本有多高,并且對Xen的發(fā)展速度會有多大的制約和阻礙。
而相比較另外一個開源的Linux虛擬化技術kvm,因為其是合并在Linux內核項目之中的,是Linux內核的標配,所以維護起來非常的容易,因此kvm在這種情況下后來者居上,很快就超越了Xen成為了開源社區(qū)虛擬化的主力,目前主流的開源虛擬化、云計算軟件以及公有云平臺幾乎都是基于KVM來構建的。AWS和Oracle在最開始的時候在自己的云和虛擬化產品中都采用的是Xen技術,而現(xiàn)在都已經(jīng)回歸了主線開始擁抱KVM。這就是上游優(yōu)先的力量,保證你可以永遠站在巨人的肩膀上立于不敗之地。
堅持上游優(yōu)先是紅帽致勝的大招。總得說來體現(xiàn)在兩個方面:
- 緊隨上游,不在自己產品中放任何沒有被Upstream接納的代碼。在上游社區(qū)的代碼的基礎上做減法,篩選出對企業(yè)用戶有價值的、成熟穩(wěn)定的代碼用來構建自己的發(fā)行版。
- 引導上游,紅帽在開源社區(qū)的話語權是非常重的,幾乎所有流行的開源項目都能看到紅帽開發(fā)人員的身影,依靠公司多年的沉淀來指引社區(qū)的發(fā)展方向。
所以,明白了這點大家再去對比其他做開源的公司,孰優(yōu)孰劣就一目了然了。無論國內外,有哪家公司能在完全開源的基礎上做到上游優(yōu)先,又有哪家公司有紅帽參與開源社區(qū)的廣度、深度以及領導力的?貌似找不出第二家了。
我們再回頭看看紅帽把投資從CentOS轉移到CentOS Stream這個話題,網(wǎng)上流傳的IBM陰謀論以及紅帽背叛開源論,這些我個人覺得都不靠譜,看待這個這個問題我覺得只需要抓住一點——那就是和紅帽的上游優(yōu)先的政策。
上下游在開源社區(qū)里還可以理解為開發(fā)端和用戶端,當然同樣是一個相對的概念。在紅帽以前的開發(fā)體系中,如果第三方想?yún)⑴cRHEL的開發(fā)過程是比較困難的,因為紅帽的開發(fā)團隊只有在參與Linux社區(qū)和Fedora項目的工作才是開放的,允許第三方提交代碼,而RHEL的開發(fā)工作是在紅帽內部進行的,這一現(xiàn)象從RHEL發(fā)布之日起一直持續(xù)到現(xiàn)在。
你也不太可能通過參加CentOS的項目來向紅帽提交代碼,雖然CentOS也是開源社區(qū)的一個項目,但是不像Fedora,F(xiàn)edora是雙向社區(qū),既有使用方也有代碼貢獻者,CentOS更主要的是一個使用者社區(qū),它為CentOS社區(qū)貢獻一個免費的“RHEL重制版”給眾多的用戶。此外,因為CentOS是RHEL的下游,通過CentOS項目向RHEL提交源碼就像你想讓江水逆流而上一樣不現(xiàn)實。
所以在整個紅帽的RHEL開發(fā)模型里缺少了很重要的一環(huán),作為標榜所有代碼都是開放的紅帽,其旗艦產品RHEL的開發(fā)過程居然是封閉的,這讓紅帽情何以堪。
而CentOS Stream是什么?紅帽給CentOS的定位介于Fedora和RHEL之間的開發(fā)平臺,它將以RHEL上游的身份來解決合作伙伴、社區(qū)用戶和其他開發(fā)者在之前無法參與RHEL的開發(fā)過程的問題。旨在提高 RHEL 開發(fā)過程的透明度和協(xié)作性,它出現(xiàn)的目的是為了完善紅帽RHEL的生態(tài)和加速創(chuàng)新。所以給CentOS換個身份,問題就完美解決了。
Fedroa、CentOS Stream和RHEL的上下游關系
上面兩張圖很直觀的說明了Fedora、RHEL、CentOS以及CentOS Stream之間的上下游關系。有了CentOS Stream,紅帽把以前處于完全封閉的RHEL的開發(fā)環(huán)境完全開放給了公眾,任何人人都可以以向CentOS Stream貢獻代碼的方式來參與RHEL的早期開發(fā)工作,這對紅帽和最終用來來說都是非常有利的。
在官宣了未來的工作重心遷移到CentOS Stream的同時,紅帽也對目前的CentOS的生命周期作了清晰的定義:
- CentOS 6生命周期結束時間為2020年11月30日
- CentOS 7生命結束時間2024年6月30日
- CentOS 8生命結束時間2021年12月31日
- 不會再有CentOS 9發(fā)布
所有已發(fā)布版本的生命周期結束后,CentOS項目將全面終止,已有的CentOS用戶可以通過簡單的兩條命令將現(xiàn)有的CentOS切換到CentOS Stream,詳見:https://www.centos.org/centos-stream/
對于以前的CentOS用戶而言,紅帽此舉措帶來的影響是非常之大的,要知、道CentOS之前功成名就的原因就是它是基于紅帽企業(yè)Linux源碼重新編譯的版本,僅僅是去掉了LOGO和Trademark等紅帽公司有版權的內容并將桌面調色和主題進行更換而已。它會緊隨紅帽的發(fā)布節(jié)奏更新和發(fā)布自己的版本,其作為RHEL的下游,在很大程度上是可以繼承RHEL的成熟度、穩(wěn)定性、安全性和可靠性的。然而CentOS Stream替換了CentOS之后,整個CentOS Stream的角色和定位發(fā)生了變化,它將作為RHEL的上游,即開發(fā)版本來完善RHEL的生態(tài)和加速其創(chuàng)新,它和RHEL的關系簡單說來包含以下幾方面內容:
- 其定位為RHEL的開發(fā)版本,即它現(xiàn)在是RHEL的上游
- CentOS Stream處于Fedora Project 和RHEL之間,提供一個有新特性的RHEL內核以及新特性的“滾動預覽”(rolling preview),也就是說CentOS Stream并沒有8.0\8.1\8.2等版本,只有“最新版”
- 滾動的另外一個含義是CentOS Stream中的補丁是實時發(fā)布的,不像在RHEL里那樣經(jīng)過嚴格的測試和認證之后才會發(fā)布。
- CentOS Stream提供的包普遍要比RHEL版本更“新”, RHEL會基于CentOS Stream來做減法,選擇其中成熟穩(wěn)定的功能。言外之意,CentOS Stream里的軟件組件的穩(wěn)定性和成熟度要遜色于RHEL。
綜合上面所描述的,其實大家心里已經(jīng)很明確了一個事實,那就是CentOS Stream是不太適合運行在生產環(huán)境上的,因為它誕生的目的是讓更多的社區(qū)開發(fā)者和合作伙伴盡早的參與RHEL的開發(fā)和完善RHEL的生態(tài)。
既然如此,前CentOS用戶該何去何從?
首先,切換到CentOS Stream而言對于大多數(shù)人來說都是不現(xiàn)實的,也不是首選;因為前面我們已經(jīng)說過了,CentOS定位就是RHEL的開發(fā)版本。
其次,因為CentOS的版本維護終止是有明確的時間安排的,因此,在沒有合適的可替換的發(fā)行版本之前,暫時繼續(xù)停留在CentOS發(fā)行版上,持續(xù)觀望可能是比較明智的選擇;然后從長遠看,大量的CentOS用戶是必須要找一個替代品的。
在紅帽宣布將工作重心遷移到CentOS Stream之后,CentOS 聯(lián)合創(chuàng)始人 Gregory Kurtzer 成立了初創(chuàng)公司 Ctrl IQ,Kurtzer 宣布啟用 Rocky Linux 項目,而Ctrl IQ將作為 Rocky Linux 的贊助商為期提供法律費用和部分啟動開支等初始資金,Ctrl IQ會與Rocky Linux項目之間會保持獨立性,確保其不會受到Ctrl IQ或者其他投資公司的影響。
Rocky Linux定位將和以前的CentOS一樣,是一個社區(qū)的企業(yè)級發(fā)行版本,其官網(wǎng)宣稱第一個發(fā)行版本在2021年3月31日左右發(fā)布。因為有Kurtzer這樣的CentOS創(chuàng)世人的主角光環(huán)加持和CentOS取得的成功作為借鑒,因此Rocky Linux項目這對廣大CentOS用戶來說也許是很值得期待的另外一個重大事件,感興趣的朋友可以關注其官方網(wǎng)站以了解最新動態(tài):https://rockylinux.org/,讓我們拭目以待其月底的發(fā)布。
開源社區(qū)就像茂盛的亞馬遜雨林,一顆蒼天大樹的倒下,會為其他的生物的成長提供空間、養(yǎng)分和光照。最終會彌補這顆大樹倒下所留下的空白。CentOS離開后,相信不僅僅只是Rocky Linux,會有更多的項目參與進來,這對廣大最終用戶來說也許是好事情,畢竟有競爭才會刺激進化。
大家也完全沒必要就此事詬病紅帽,因為說一千道一萬,如果沒有紅帽對開源和社區(qū)的貢獻,我們根本不可能有CentOS或者Rock Linux這樣讓大眾喜愛的社區(qū)企業(yè)發(fā)行版,可以說沒有開源就成就不了紅帽,而沒有紅帽,也不會有今天的開源盛世。紅帽是家公司,需要有正常收入才能維持公司的正常運作和發(fā)展。而且對于紅帽的用戶,紅帽自己也有非常清晰的建議來讓用戶選擇合適的發(fā)行版本:
- 對于想?yún)⑴cLinux操作系統(tǒng)開發(fā)和面向桌面的使用場景的個人用戶和愛好者可以選擇Fedora,F(xiàn)edora完全免費無服務支持每6個月更新一個大版本
- 家用環(huán)境,但是對操作系統(tǒng)有穩(wěn)定系和安全性要求的可以使用采用RHEL:Red Hat Developerprogram(developers.redhat.com)。這是為開發(fā)人員提供免費的RHEL訂閱,可以在線升級、查資料庫,不能開Case,詳見紅帽的微信公眾號《無成本紅帽開發(fā)者訂閱個人版怎么用?》
- 開發(fā)以及CI/CD場景,同時還需要確保RHEL和第三方軟硬件的兼容性的場景:Red Hat Developerprogram(developers.redhat.com),同上。
- 開發(fā)以及CI/CD場景,同時還需要確保RHEL+1和第三方軟硬件的兼容性的場景: CentOS Stream
- 在容器化環(huán)境中開發(fā)應用的場景:RHEL UBI,這是紅帽發(fā)布的基于RHEL的容器鏡像,有RHEL7和RHEL8的版本,任何人都可以在容器環(huán)境中使用紅帽的RHEL UBI,而且有來自紅帽的技術支持
- 希望參與RHEL的開發(fā)的場景:CentOS Stream
- 在生產環(huán)境中運行關鍵負載應用:RHEL,有來自紅帽的企業(yè)級技術支持包括熱線電話、web開case和瀏覽資料庫升級等等
為分銷和硬件開發(fā)軟件:Red Hat Partner Connect Program(connect.redhat.com)
對于現(xiàn)有的CentOS用戶來說,如果希望有人對生產環(huán)境上運行的RHEL兜底,那么遷移到RHEL可能是最佳選擇,畢竟CentOS就是源自RHEL,而且為了繼承RHEL的穩(wěn)定、安全和可靠,它盡可能消除對RHEL的修改。紅帽也提供了相應的工具(convert2rhel)和服務來幫助你進行遷移。讓專業(yè)的人干專業(yè)的事情,要比我們自己有效率的多。
(本文轉載自Linux技術中堅站,作者陳立夫。)