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



