Linux 的成功,为什么会带来“写一个操作系统不难,难的是生态构建”的错觉?
近年来,“开源”作为一个热词,被越来越多的人关注,它甚至走出了IT圈,被写进“十四五” 规划里。与此同时,被誉为“软件灵魂”的操作系统,在开源浪潮下,迎来了突破性发展。但在另一方面,一直以来,我们经常听到一种说法:写一个操作系统并不难,难的是生态的构建。本文试图从开源的 Linux 操作系统的演进出发,讨论开源生态的构建。
本文节选自《新程序员 005》
为什么要开源?为什么要选择 Linux?
既然开源软件的开发是一个“松散耦合”的关系,即每个项目有各自的发展目标,不同项目之间虽彼此协调,但自主性很强,也没有统一的管理者进行统筹规划。选择开源软件,是否意味着“不可控”,软件发展方向、周期、安全性都不可控?那么,我们为什么要选择开源软件?为什么要选择 Linux?
先讲一个小故事。最近几年 Rust 语言比较火,大家知道,传统的 C/C++ 语言在开发时,很容易造成内存泄漏,而 Rust 则被认为是更安全的语言,且适合底层开发,所以用 Rust 编写底层程序(如操作系统),也被学界和业界所追捧,Rust 也开始进入 Linux 内核。作为程序员的我们,可能天然想到是 Rust 会取代 C 成为 Linux 内核主要语言?在最近 Linus 接受的采访中,Linus 也提到Rust 进入 Linux 才刚刚开始,同时着重强调了 C 语言的种种优点。我在这里不想陷入任何孰优孰劣的“语言之争”, 因为那将是一个“哲学问题”。但是,这似乎从侧面反映了开发者的喜好很重要,开发者的技能积累以及既有程序代码积累到一定程度,想要彻头彻尾改变或者从头再来其实很难,里面有太多前人智慧的结晶。操作系统内部极其复杂,你可能会有很多好的想法,但实现它们并不是一蹴而就的,而 Linux 已经在那里。
因此,选择开源,是因为开源是一个宝藏。选择 Linux, 是因为在三十多年的积累当中,Linux 已经演变为稳定的操作系统和强大的生态,具备稳定的核心,拥有众多的硬件及应用支持、快速的迭代能力。
开源加速创新,通过开源的方式,全世界聪明的头脑都可以参与其中贡献自己的想法和代码,这种讨论和贡献是完全开放的。我们常常发现针对某一个具体的问题,开源的方式往往要经过多轮的讨论、测试、验证,代码才能最终进入到开源项目的主线,经常经历一年半载, 甚至更长的时间,相比之下闭源软件可能只需要几周时间,一个想法就可以被合入主线。那为什么还说开源加速创新呢?当有更多双眼睛在看你的代码,那么它潜在的问题、架构合理性、安全性等问题,就可以更早地被暴露,问题也可以更快得到解决。虽然看似某一个特性,它的合入速度是慢的,但有更多双眼睛去看,就会发现更多的问题,迸发出更多新奇的想法、涌现出更多的代码实现,因此开源方式的创新速度要快于一个闭源开发的小团队的。所谓“独行快,众行远”,就是这个道理。
当然,开源只是一种开发模式,并不是唯一的。很多优秀的软件(包括操作系统软件)都是闭源的。闭源软件,更加受控于其开发商,有确定的产品规划路线图,有更多的“确定性”,对于商业更加“友好”。因此,如果开发一个操作系统,选择闭源或开源路线,都有各自的优势。当你有很多独特的见解和想法,在某个领域有重大的发明创造,并不想把里面的核心技术公开,因此选择闭源的方式,获取商业价值,这完全是被尊重和鼓励的,也是尊重知识产权的一个表现。反过来,如果你觉得开源世界里有更多的创新、更多好的技术、成熟的技术是你所需要的,可以避免你在很多地方重新造轮子,那么你选择开源的技术路线,也是不错的选择。特别是在操作系统领域,涉及的技术点很广泛,很多看似不经意的、习以为常的功能实现,实则凝结了前人很多心血,因此选择开源,更容易站在巨人的肩膀上进行创新。
Linux 操作系统的演进
如前所述,广义的 Linux 操作系统,是指以 Linux 内核为核心的 Linux 发行版,发行版的存在是因为 Linux 操作系统的所有组件不是由一个社区开发,需要博采众家之长。因此,Linux 发行版是一个“集成项目”,我们必须承认,创新的源头在上游社区,如 Linux、GCC、GNOME 这些上游。来自发行版的创新,也要尽可能地贡献到上游社区,这样不仅对开源项目的发展有利,对于发行版本身也有利——历史上曾经有几百个 Linux 发行版,但能够被大家所熟知并广泛使用的却屈指可数,往往做得比较成功的发行版都遵循着“上游优先”的原则。
所谓“上游优先”,就是当你打算在自己的发行版或产品中做代码更改时,先把优化后的代码提交到对应开源项目的上游,上游接受你的更改后,再把它加到自己的发行版或产品中。
相信有些读者一定会有这样的疑惑:这种方式在实践中根本不可行!
第一,如果我把开发的所有新特性都先提交到开源项目的上游,那自家的产品将如何构建差异化竞争力,进而在激烈的市场竞争中获利?第二,我向上游提交代码,上游不接受怎么办?那我是否就没办法规划我的产品都有哪些特性,也没办法控制产品什么时候上市。的确,正因为有这两方面的困难,很多 Linux 发行版或者面向企业级应用的发行版就无疾而终了。甚至有很多人研究后得出这样的结论:开源的终点是闭源,或者只有 Open Core 的模式才可以生存,即最终还是要靠不开源的部分在商业竞争中获利。
然而,Linux 发行版的发展,并不是靠所谓的 Open Core 模式,而是 100% 开源的模式。下面以红帽系的 Fedora、 CentOS、RHEL 为例,谈一下 Linux 发行版的演进。
整体上,红帽系 Linux 的发展,可分为三个阶段:
Fedora Linux 阶段
Fedora Linux 是前面提到的由众多上游社区项目构成的 “集成项目”,它最贴近上游,主要的工作是集成,确保由开源项目集成后的操作系统是可用的。当然,这个集成包含了集成前项目的筛选和集成后简单的测试。Fedora 被认为是开源创新的大舞台,它上面的软件包多且全,这一定程度上也促进了开源生态的繁荣。因此,Fedora 吸引越来越多的开源项目加入其中。同时,红帽也基于Fedora 开发追求稳定以及具有商业支持的企业级 Linux 发行版 RHEL。值得注意的是,具备商业支持并不意味着闭源,红帽在企业级操作系统中的所有增强也都回馈到对应的上游社区,并且任何人都可以免费得到红帽企业级 Linux 的源代码。通过 Fedora 和 RHEL 两条线,红帽既满足了开源创新的需求,同时也满足了企业要求稳定可靠的需要。
CentOS Linux 阶段
CentOS Linux 被人们所熟知是因为它作为 RHEL 的复刻版被大量地使用,正如它的名字—Community Enterprise Operating System,完全来源于社区,完全免费,同时又具备企业级的稳定性,自然受到大家的青睐。但一个很多人没太关注的事实是,随着虚拟化、云计算的兴起,很多开发者、云厂商,基于Linux 的生态做了大量的工作,如基于 KVM 虚拟化的优化、软件定义网络、软件定义存储,以及云计算 OpenStack 等。以这些云厂商为代表的新一代开发者,逐渐倾向于选择一个稳定的操作系统作为基础,在其上做各种创新。因此,CentOS Linux 成为一个被开发者广泛使用的操作系统平台。红帽为迎合这部分需求,从2014年开始,将 CentOS Linux 演变为不仅仅是包含复刻 RHEL 的部分,也具备虚拟化、云计算等项目的上游社区的软件包,如红帽 OpenStack 的社区版 RDO 就被包含在 CentOS Linux 中。这一举动有助于更好地培育 CentOS 生态,使其进入如火如荼的云计算领域。
CentOS Stream 阶段
随着企业业务云化及数字化转型的深入,云原生、DevOps、敏捷开发、敏捷集成等成为 IT 业务转型的重点。操作系统作为支撑 IT 业务的基石,也面临着同样的挑战,即操作系统需要快速地迭代开发,同时迭代的结果在满足稳定可靠的同时,要尽可能快地给到社区开发者、生态合作伙伴。这实际上对企业级操作系统的研发测试流程提出了更高的要求,CentOS Stream 就是在这样的背景下应运而生的。那么,CentOS Stream 可以给生态开发者带来哪些好处呢?一个重要的好处就是,以前你只能看到最终的结果,而现在,你可以看到整个开发过 程。这个开发过程不是不稳定的中间过程,而是经过了所有企业级质量保证测试的成果物,确保你可以更快拿到 RHEL 中的补丁
综上, Linux 发行版的发展并不是越来越走向封闭,反而是越来越开放。
开源生态构建与商业变现的关系
前面以 Linux 发行版的演进为例,分享了开源生态的构建,更多的是从开发者生态的角度去讨论。然而,一个可持续发展的开源生态,必须能够让该生态里的不同玩家都从中获益。一个以开源为生的企业,必须能够通过开源实现商业变现。因此,对于想要投入开源的企业来说,首先要想清楚几件事情:我在这个生态里的角色,是使用者、开发者还是维护者?开源是我实现其他业务目标的一个途径、助力,还是我要以开源为生?作为一家制造业或零售业中的企业,为什么要投入开源,以及成立开源项目办公室
我们发现,很多企业对于开源感兴趣,很大程度是源于他们使用了大量的开源软件,尽管开源软件是开放源代码的,对于他们来讲却是一个黑盒子,使用开源软件的潜在风险完全难以评估,因此试图通过投入开源的方式实现开源治理,保障业务的安全平稳运行。还有一部分企业是通过开源的方式实现自己在其他方面的业务目标,比如开源作为一种营销方式,但自己的核心竞争力是闭源的,或是通过其他方式盈利的;或者自己是开源生态的合作伙伴,如众多的硬件厂商、闭源软件厂商等。
无论什么角色、出于什么目的,只要是在繁荣开源生态,社区都是欢迎的。只是对于不以开源为主业的企业来说,要考虑在开源方面的投入方式以及投入产出比,是阶段性投入还是长期投入,是完全自己做还是选择第三方的服务,想清楚这些问题很重要。行业中存在的一个常见的问题是前期没有想清楚投入开源可以为自己带来哪些业务价值,因而最终没能达到自己的预期效果。
还有一部分以开源为生的企业,在激烈的市场竞争和生存压力下,必须承认,这种模式不可能轻松盈利。靠政策性扶植、基金会捐赠等方式,短期内可能有一定效果,长期却很难形成真正的市场竞争力。我们不妨从另一个角度看待这个问题,海量的开源软件,海量的企业在使用,而绝大多数企业对于开源软件里的技术细节知之甚少,因此基于“不确定”的开源软件为企业提供有价值、“确定”的服务,赋能企业,帮助企业用好开源, 一定存在很大的市场需求。所以这部分以开源为生的企业,也是可以实现商业变现的。那么,这部分企业为什么要投身于开源生态的构建呢?如果只做产品或服务而不去贡献,不可以吗?事实上,开源是一个大舞台,只有这个社区的生态繁荣了,这个社区的所有玩家,包括自己,才会从中受益。
结语
开源软件已成为企业 IT 的重要组成部分,本文从被业界广泛使用的开源 Linux操作系统出发,阐述了开源生态构建的重要性,并且它与企业实现自身的业务价值或商业变现并不矛盾。最后,我想引用最近看到的一段哈佛大学校长对2022届毕业生的寄语来结束这篇文章:“在你们离开校园走上社会之后,学会为他人留一个‘位置’,确保你们受到的良好教育,不仅丰盈了自己的灵魂,更能惠及这世界上的大多数人。“
作者简介:
张家驹,红帽大中华区首席架构师(Chief Architect for Greater China)。热衷于开源软件及开源社区,对 Linux 操作系统、分布式、存储及高可用性、虚拟化、云计算等有近 20 年的产品研发、架构设计及团队管理经验,曾在知名外企及国内 ICT 领导企业担任首席架构师、技术总监、中国区技术负责人等职。