开源实践联盟通信 2021年 06月10日

聊聊CentOS的前世今生

文/陈立夫
在2020年12月8日这天,红帽和CentOS的官网同时宣布不再对CentOS社区进行投入,而相关的投资将转移到CentOS Stream项目上。

2020年年底的时候,开源界发生了一件大事儿,来自全球的CentOS用户群情激奋,毫不留情的对当事人进行了毫不留情的笔伐口诛。Linux社区就像是滚热的油锅里被撒了一把盐,一时间浓烟滚滚,硝烟弥漫。相信说到这里,搞开源软件的朋友已经知道我说的是什么事情了,这一切都和开源界的重量级人物——红帽公司有关,在2020年12月8日这天,红帽和CentOS的官网同时宣布不再对CentOS社区进行投入,而相关的投资将转移到CentOS Stream项目上。


关于红帽对CentOS项目投资重心转移的官宣


为什么这件事让众多的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上游社区成熟稳定的补丁(安全更新和功能增强)到RHEL中,红帽会保证这个升级是向下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。这就是上游优先的力量,保证你可以永远站在巨人的肩膀上立于不败之地。

坚持上游优先是红帽致胜的大招。总得说来体现在两个方面:

  • 紧随上游,不在自己产品中放任何没有被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、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技术中坚站,作者陈立夫。)

《数字化转型方略》杂志 《数字化转型方略》杂志