CentOS 是 “Community Enterprise Operating System” 的缩写,按字面翻译为「社区企业操作系统」,而 CentOS 受害者一般称其为「圣斗士」,准确描述它的中二性质。这是一款让人一言难尽的 Linux 发行版。

如果一定要为服务器挑选 Linux 发行版(假设不考虑其他非 Linux 系统例如 FreeBSD)的话,首要的原则就是尽可能远离 CentOS。

这篇文章告诉你为什么。不服来战


Red Hat 的荣光

说起 CentOS 就不得不提到红帽公司 (Red Hat)。红帽早年发布的「红帽 Linux」 (Red Hat Linux) 对 Linux 的普及作出了巨大贡献。之后红帽专注于企业市场,主打「红帽企业 Linux」 (RHEL, Red Hat Enterprise Linux),同时将民用版产品线移交给开源社区开发和维护,改称为「毡帽 Linux」 (Fedora Linux)。

让钢铁直男掌握产品命名权就会出现这个画风,而且他们还自我感觉良好。

Weird Branding

按你胃,Fedora 与 RHEL 的关系是这样的:

  1. Fedora 是一个追求新功能的发行版,更新速度快(大约每半年发布一次新版),由社区主导(提供免费劳动力与小白鼠),由红帽提供支持。
  2. RHEL 是一个追求稳定的企业级发行版,更新速度慢(三到五年才更新一次大版本),由红帽主导。
  3. 新功能在 Fedora 里经过验证,会被有选择性地加入 RHEL 的下一个大版本。这相当于红帽定期收割社区劳动成果,与社区互惠互利。

简单来说,Fedora 是红帽利用开源小白鼠们肉身测试和修复新功能的沙盒,而 RHEL 就是日后这些新功能的企业级稳定发行版。RHEL 还包含另外一个重要组成部分,即红帽提供的订阅服务。将 RHEL 用于生产环境的前提是必须付费订阅(最便宜的一档为自助服务,也就是不提供客服),否则只能用于测试和开发。换句话说,只有向红帽支付了过路费才有使用 RHEL 的权力。

RHEL 的付费规定无可厚非。第一红帽也是要吃饭的,第二红帽不希望免费用户吃肉骂娘,到头来还让它背锅。事实证明 Fedora 与 RHEL 的共生模式是成功的,这两款优秀的发行版各自拥有特定的用户群,整个开源生态也非常健康。


CentOS 的黑历史

现在终于讲到 CentOS 的来历了。

由于 Linux 采用 GPL 许可证,红帽发布的 RHEL 也必须完全开源,尽管不能直接免费使用成品。

历史告诉我们,每当一款开源产品问世,开源社区一定会有一帮思路清奇的人灵机一动,投机取巧专做一些细枝末节的工作,然后包装成自己的成果发布。

Bold Idea

果然,觊觎 RHEL 名望的鸡贼志愿者们一顿操作猛如虎,将 RHEL 的源码拿来洗洗,去除 RHEL 专有程序以及其他不「清真」的部分,最后脸也不红地改成自己的品牌,堂而皇之沽名钓誉。

于是这款名为 CentOS 的山寨品开始吹嘘自己是 RHEL 原汁原味的「平民」企业级发行版,却闭口不提因为缺乏 RHEL 技术支持所以实际上只是个半成品这个事实,把开源社区唬得一愣一愣的,骗取了大量不明真相的群众的信任。

不得不佩服这帮人的推销技巧。把 “Community” 与 “Enterprise” 结合在一起缩写成 “Cent” 以凸显其「平民企业级」标签,的确是神来之笔。

遗憾的是,对用户来说,”Community” 和 “Enterprise” 是不可能共存的两个属性,只能二选一。这个世界并没有捷径,想收获就必须有付出。要么付出时间(使用社区免费产品,自己花时间踩坑并回馈社区),要么付出金钱(使用企业付费产品,破财消灾,让别人帮你踩坑)。不管选择哪一种方案,最后都是对劳动成果的认可,都能以货币量化,本质上没有区别,并无高下之分。

而 CentOS 却鼓吹「又要马儿跑,又要马儿不吃草」,我只能说这个思路真是绝佳的中二典范。

CentOS 的黑历史远不止这些。2009 年 7 月底,创始人兼管理员 Lance Davis 玩消失,导致 CentOS 的几位核心成员以公 (sī) 开 (bī) 信的形式向他严厉逼宫,使得社区矛盾公开化。此后分崩离析的 CentOS 社区苟延残喘至 2014 年初,最终被红帽招安。也就是说从 2014 年开始,CentOS 项目已经名存实亡了。


薛定谔的圣斗士

我在《FreeBSD 劝进文》里批判了大多数 Linux 发行版不合理的一刀切发行模式,RHEL 也不例外。从 RHEL 的发行周期可以看出其默认软件版本的陈旧(一般都至少落后发布时的最新版本三四年)。对于老旧的求稳的企业级应用,例如简单的网络服务等,三四年的版本延迟并无大碍。然而,在技术日新月异的互联网行业,短短六到十二个月时间已经可以迭代多次,三四年的周期更是足够改天换地。

RHEL 提供十余年的维护支持,这也是不少 CentOS 拥趸津津乐道的一个卖点。然而,在强调快速迭代冲冲冲的互联网企业眼里,「一成不变」根本就不是什么值得炫耀的事情,更有可能成为彻头彻尾的反面教材。如果一个项目从出生、壮大到成熟都可以「稳定」运行在十余年不变的「企业级」环境里,那么不是它规模小得都不需要重构,就是用户没有指数增长以至于触发不了新的技术挑战,只能说明这个项目是失败的。

很多运维口中所谓的极度强调「稳定性」的「企业级」应用本质上都属于狐假虎威,实际情况却是技术陈旧导致项目臃肿或者缺乏自动化,最后走到丧失可维护性的绝境,只能留在旧版本苟且偷生,混一天算一天。这样的普通运维一般不具备互联网企业常见的 DevOps 这类深刻理解开发与运维的复合型人才可以直接往应用和系统社区上游回馈修复代码甚至贡献新工具链的技能,以至于 CentOS 之类的虚假的「企业版」系统让他们可以获得心理安慰,有借口回避自己本质上的成长问题。而这一类的运维也往往是和开发人员矛盾最深的那批人。

对「企业级稳定性」的迷信和对新软件的刚需,这两个自相矛盾的需求直接催生了 EPEL (Extra Packages for Enterprise Linux)、ELRepo (Enterprise Linux Repository) 等一系列 RHEL 及其山寨品的野包的出现。「野包」指的是非官方维护的第三方软件包,在这里「野」与「官方」是相对概念。例如,对于公司背书的企业级产品,「野」通常指代社区或者个人,「官方」指代公司。而对于社区产品,「野」通常指代更小众的其他社区或者个人,「官方」则指代社区。

前面说过 RHEL 因为有付费支持的技术把关其实问题不大,可是 CentOS 既「平民」又「企业」的扭曲定位不可避免造就了大批精分用户,他们甚至都不能以正常逻辑与人交流。

假设我们承认 CentOS 的「企业级稳定性」,我们承认的只是 RHEL 系的原始代码质量。但 CentOS 软件版本太旧,实际工作中其自带仓库几乎没有实用价值。如果要增加新软件支持,无可避免就会使用到野包。尽管野包也有不同的「野」度(是从野仓库直接装还是从源码野编译,或者野包来源是野组织还是野人,等等),但所有这些操作在逻辑上有一点无可置疑,那就是一旦使用野包,整个系统就被「野」感染了,成了「野」系统,换句话说就是失去了完整性 (integrity)。系统一旦「野」掉,「企业级稳定性」就无从谈起。

又假设我们不在意「企业级系统」被「野」感染,那么这样的野系统,又和其他任意的社区维护的 Linux 发行版,在「野」不「野」这个问题上,有任何区别呢?

说得更简单点,那就是 CentOS 默认安装几乎没法用,不是软件太老就是缺这缺那,想正常使用就不得不被新版本的野包给「野」掉。所以要么是「稳定但没用」,要么是「有用但是野了所以不能继续宣称稳定」。其实单独宣称任何一点都没有问题,可是在现实生活中,CentOS 的精分用户总会想方设法同时挑选两点和你辩论。你说 CentOS 软件太老,他们说不老啊,你不会加 EPEL 吗?你说用了 EPEL 不就野了就不能在逻辑上宣称稳定了吗?他们说哪里会,CentOS 是 RHEL 来的,很稳定啊。

在他们眼里,CentOS 如同薛定谔的猫一般,既「无野包那样稳定」又「有野包那样新」。当你想和他们具体理论的时候,他们总是能根据当前形势将这两个无法共存的优点坍缩成最有利的那个与你辩论。

Schrödinger's Cat
by Dhatfield, CC BY-SA 3.0

实际上,在所有的 Linux 发行版中,几乎只有 CentOS 这朵奇葩有如此招黑的体质,因为它没法在逻辑上回避「你到底野不野」这个直击灵魂的拷问。

其他的 Linux 发行版就不会出现这种逻辑漏洞。随便举几个例子:

  1. Arch: 我本身就是野的,而且我还有更野的 AUR。我只说自己好用,但我从不标榜自己稳定。
  2. Debian: 我是野的但是野得很正规。我只说自己稳定版稳定但是软件旧,测试版与非稳定版软件新但是不稳定。我从不标榜自己又新又稳定。
  3. Ubuntu: 我比 Debian 更野因为我是山寨它的测试版与非稳定版。我标榜自己的 LTS 版比 Debian 稳定版更新,同时也有毫不逊色的稳定程度,因为我背后有商业公司提供免费支持。
  4. Gentoo: 我是野的但是野得很优美。我的稳定与否取决于使用者水平而不是有没有商业支持。CentOS?呵呵呵想起来我家水龙头还没关,你们聊,我先走了。
  5. Oracle Linux: 我是 RHEL 山寨品,只不过把红帽换成自己(甲骨文)来收钱。我和 RHEL 一样又新又稳定因为我俩都是破财消灾的。

·璃莹殇·安洁莉娜·樱雪羽晗灵·血丽魑·魅·安塔利亚·伤梦薰魅·海瑟薇·蔷薇玫瑰泪·羽灵·邪儿·凡多姆海威恩·夏影·琉璃舞·雅·蕾玥瑷雅·曦梦月·玥蓝·岚樱·紫蝶·丽馨·蕾琦洛·凤·颜鸢·希洛·玖兮·雨烟·叶洛莉兰·凝羽冰·泪伊如冰落·殇心樱语冰凌伊娜·洛丽塔紫·蝶梦如璃紫陌悠千艳·优花梦冰玫瑰灵伤如爱·晶泪墨阳云筱残伤雅·琉璃爱梦莲泪·冰雪殇璃陌梦·爱樱沫渺·落璃琴依语·千梦然丝伤·可薇·茉殇黎·幽幻紫银·泪如韵影倾乐兰慕·冰雅泪落冰紫蝶梦·璃紫陌悠千艳优墨阳云筱残·雪莲茉·伊文思·蕊夏清·碎墨音·芊乐梦黛怡·墨丽莎·梦灵苏魅香·紫蓝幽幻倾城萌美迷离·茉莉白嫩爱凤风魑·殇泪花如霜梦兰·萝莉心梦妖丽百千艳·瑰百合香珠合梦喃·泪伤梦雅爱之瑰·墨艳黎幻殇雪倩梦·情娜血清恋沫幽弥千月绯心丝梦灵蓝千月筱雪殇·希羽岚梦心殇雨樱琉璃舞韵倾雅·芸茜殇樱雪梦·曦魂梦月澪瑷琪欣泪·殇紫乐蝶雨·苏丽落雅馨瑷魅·蠫赬飖·风璃殇·沫血伤·月冰灵希洛梦·恋琴爱·斗士 Linux 界的玛丽苏