标签 openEuler 下的文章

在刚刚结束的 openEuler Summit 2022 上,华为服务器 OS 首席架构师、openEuler 社区技术委员会委员熊伟为广大开发者介绍了 openEuler 在过去 3 年的成就和成果。而其中最值得关注的是,openEuler 在云、服务器、边缘计算、嵌入式等四大场景下的八个技术方向的创新。

用熊伟博士的话来说,“在过去的三年里,openEuler 深入行业和产业,用八个技术方向的纵深创新,引领全场景的产业领先”。接下来,作为一个一直关注开源操作系统的技术人,我分享一下我的理解。

可编程内核:系统调度的极限追求

首先介绍一下可编程内核。

我们知道,内核是一个操作系统的核心。对于我们所熟悉的 PC 和服务器,由于对资源的消耗和性能的需求没有那么的敏感,无需毫厘必争,所以往往不太需要在内核层面做删减,正常使用即可。删减内核功能的成本可能远高于增加内存的成本。

但对于资源消耗和成本更加敏感的边缘计算、嵌入式设备来说,每一丝的资源占有,都是难以估量的成本。对于资源集群量级极大的云计算场景而言,每 0.1% 的性能优化,对于整个集群而言,都是十分可观的收益。一个可编程的内核相比于模块化的内核,为生产环境下的优化提供了更多的可能性 —— 工程师可以根据业务的实际变化,随时调整内核的实现和策略,从而优化系统的性能。

在这种情况下,对于内核进行组装,支持可编程能力,就变得极其重要。openEuler 创新性地借鉴了社区当中 eBPF 的思想,并在此基础之上,将内核的机制和框架进行了分离,将框架内置到内核,实现的功能和策略则可以在开发完成后,注入到内核中即可实现对内核二次编程的效果。

说起来简单,但在具体落实层面,openEuler 做了不少的工作来达成这个目标:

可编程内核

openEuler 在系统内核层面,提供了编写用户态策略的基础库函数和可配置的调度策略模板,可以帮助用户快速理解内核的编程方式。支持用户快速编排和扩展,降低用户对内核实现调整时的成本,降低上手的门槛。在具体的管理机制方面,则提供了对任务 / 进程 / 组 / 用户等对象的自定义拓展标签,从而承载了用户态与内核态、内核态组件之间协同调度的语义,实现了整个内核的统一调度,确保力往一处使。此外,openEuler 还在内核层面提供了丰富的钩子点位和辅助函数,从而支持对 CFS 调度类的选核、选任务、抢占流程的自定义策略注入。

对于普通的开发人员来说,也可以基于 openEuler 提供的可编程框架,来实现针对不同的应用场景来开发自定义策略,动态加载到内核执行,提升内核的执行效率,为整个业务系统降本增效。

除了内核级别的资源调度,在 openEuler 操作系统中,还实现了两种不同层面的混合部署:在线/离线业务混部和软硬实时混部。从这个角度看,openEuler 志在实现更多更大场景的统一管理和运筹。我们先来看一下在线/离线业务混部:

在线/离线业务混部:资源利用率和系统性能的极限平衡追求

对于任何规模化的业务来说,必然会存在波峰和波谷。如何平衡不同业务之间分配的资源从而实现资源的最大化利用,是一个极为重要的课题。

在 openEuler 当中,你可以使用可编程的内核来完成内核级别的资源调度;而在更上一层,openEuler 提供了完整的在线/离线业务混部能力。openEuler 为开发者提供了三层不同的层次的资源调度能力

在内核层,基于内核优先级隔离调度技术,对于 CPU、内存、IO/NET 等资源维度实现干扰隔离,从根源上优化资源调度和隔离的能力。在用户态,为用户提供了基于 Rubik 的动态配置和拓扑编排能力,同时配合新一代 QoS 感知资源调度器 Skylark 所提供的资源调度能力,从而实现为不同的 QoS 要求的混部业务提供合适的资源调度。

在线/离线业务混部

Rubik 为开发者提供了基于应用画像的应用调度机制,来实现自动的资源调度能力。通过自动注入技术,来实现业务的自动画像和自动分析,得出不同业务负载对于资源的敏感度和压力度。再基于画像和标记,对各节点的资源进行调度(如 CPU、内存带宽、缓存带宽、磁盘带宽、网络带宽等)和数据收集,并基于历史数据二次调度资源,均衡各不同业务对于资源的平均利用水平。

在应用调度之上,Rubik 还会基于业务指标进行一定程度上的节点资源超卖。通过对业务资源维度的采样,预测可压缩资源的使用情况,从而实现基于预测情况的超卖。在为在线业务准确预留所需资源,保障其 QoS 的同时,将未使用资源尽可能多地分配给离线业务,最大化离线业务的吞吐率,提升节点的资源利用率。

通过引入 Rubik 在离线混部解决方案,在保证业务 SLA 不下降的情况下,资源利用率从业界平均的 15% 提升到 35%。

Rubik 混部解决方案

除了在线/离线业务混部之外,openEuler 还支持软硬件层面的实时混部:

软硬实时混部:多层次确定性时延需求满足

在 openEuler 当中,集成了一个新的硬实时内核 uniProton,帮助开发者磨平底层的硬件平台的差异,提供一套标准统一的操作系统平台。uniProton 支持任务管理、事件管理、队列管理、硬中断管理等管理方式,兼容 POSIX 标准接口的开发,降低了开发者的开发成本。

而对于开发者而言,更重要的是 uniProton 是鸿蒙系统和 openEuler 共同支持的内核。开发者可以开发一套应用,同时运行在 openEuler 计算设备和鸿蒙设备上,降低了开发者的开发成本。

对于需要硬实时方案的开发者来说,配合 uniProton 和 openEuler 的系统镜像裁剪能力,可以实现 KB 级的系统镜像调度时延 < 3us;而可以接受软实时方案的开发者则可以选择基于内核自旋锁和信号量优先级继承机制,配合周期性、Workqueue 延时、负载均衡等任务驱逐机制,实现 20us 中断响应。

通过软硬实时方案的混部能力,openEuler 实现了 CPU 、内存等全域资源的隔离分区,满足了数控机床、传统工业场景下对于多层次确定性时延的需求,帮助 openEuler 开发者可以进行传统工业场景的开发。

openEuler 除了和鸿蒙系统共建 uniProton,还提供了一个更有价值的特性 —— 多芯片架构的支持。

异构互联:泛架构算力存储统一调度

openEuler 全版本支持 x86、ARM、申威、龙芯、RISC-V 等五大架构,并支持英特尔、AMD、兆芯等多款 CPU 芯片,支持多个硬件厂商发布的多款整机型号、板卡型号,对于开发者来说,可以轻松完成多个不同型号的设备之间的互联和统一调度。

异构融合统一调度

配合分布式软总线,可以实现鸿蒙设备和 openEuler 系统设备之间的即插即用、高效传输。开发者可以无需关注设备的发现机制,借助分布式软总线提供的通信机制,快速完成设备的发现、组网、连接和传输能力。开发者可以通过使用分布式软总线提供的 API 实现设备间的高速通信,无需关心通信细节,进而实现业务平台的高效部署与运行能力。

SysMaster: 安全可靠机制可靠的服务管理系统

除了上面介绍的各种内核、硬件方面的技术突破以外,openEuler 还在开发者最熟悉的初始化系统上做了一些探索和改进。

SysMaster

我们过去熟悉的初始化系统(比如 sysVinit、systemd、upstart),大多是使用 C 写的,且往往因为设计复杂,功能大一统等有违 UNIX 传统思维的做法而广受诟病。openEuler 社区为社区提供了一个全新的、采用 Rust 编写的初始化系统 —— SysMaster。

和 systemd 相比,由于 SysMaster 采用 Rust 语言编写,原生地规避了内存泄漏问题,开发者无需担心内存泄漏导致的 1 号进程挂掉。而从零构建的 SysMaster,也摒弃了之前的初始化系统中存在问题,为开发者提供了新一代的初始化系统

SysMaster

相比于过去的初始化系统,SysMaster 提供了全新的架构设计,分为 SysMaster Core 和 SysMaster Extend 两类。SysMaster Core 提供了极度轻量的调度方式,占用更少的资源,以及更快的启动速度。拆分的架构则可以支持拓展多种服务类型,实现 1+1+N 的架构,满足初始化系统的多样化诉求。而它的生态兼容工具,则可以让开发者可以自由选择 systemd 和 SysMaster,无需担心被生态绑定。

总结

openEuler 的技术创新覆盖的场景相当地丰富和深入,以至于我无法在一篇文章中逐一分析和披露所有细分场景和技术创新点。在撰写这篇文章时,给我的最大感受是“他们居然实现了!

对于一个产业的研发人员来说,毫无疑问,openEuler 的这些技术创新,将帮助产业和行业的开发者节省大量的时间,用更短的时间完成应用的建设,将精力投放在产业和业务当中,产生价值。

从过去的“要打造根社区”,到如今的“成为根社区,并从根出发,进入纵深领域创新”,openEuler 给我了太多的惊喜。假以时日,我相信,openEuler 还给我带来更多的震撼。

引言

2022 年末,openEuler Summit 2022 上,中国 Linux 内核圈最有影响力的开发者之一——吴峰光博士做了名为《面向全场景操作系统的构建服务发布》的主题演讲,正式向开发者披露了 openEuler 统一构建服务 EulerMaker

Linux 中国开源社区就此采访了吴峰光博士,为读者挖掘到一些在峰会上亮相的 EulerMaker 背后的有趣细节。

? 吴峰光博士是著名的 Linux 内核贡献者、华为计算操作系统首席专家、openEuler 社区技术委员会委员。他在 Linux 内核领域上拥有卓越贡献,在 I/O 和内存管理、内核测试服务方面做出了重要的贡献。有关他的故事,可以参阅《新程序员》杂志的专访《吴峰光杀进 Linux 内核》。

openEuler 的全场景

2021 年 9 月,openEuler 宣布将支持全场景,在服务器、云计算之外,还支持编译计算和嵌入式场景,这就引来了很多人的关注,但也有一些怀疑的眼光。因为,服务器和嵌入式分处两端,中间有着巨大的鸿沟。

“30 年前,服务器 OS、嵌入式 OS,界限非常清晰,像是两个村,中间全是农田。但后来 IT 越来越深入千行百业,云、边缘、IoT 兴起,各种场景涌现,发生了交叠。所以我们认为这是一个新的历史机会,来做一个全场景 OS。”吴峰光说。

? 关于多场景的支持和融合,请参考我们之前对欧拉技术委员熊伟的采访:《操作系统专家解读 openEuler 22.09 最新技术特性》。

“要做全场景 OS,就引入了一个需求:原来的构建系统,如何转化为全场景统一构建系统?”

什么是 OS 构建系统?

OS 构建系统以 OS 源代码作为输入,以用户可安装使用的软件仓或OS镜像作为输出。

? 服务器领域的 OBS、嵌入式领域的 Bitbake,是各自领域的代表性构建系统,历史悠久。

为什么需要新的构建系统?

“openEuler 社区一开始是用 OBS 来构建的,”吴峰光介绍说,“OBS 最初由 SUSE 贡献开源,功能强大。但随着使用的深入,我们发现一些复杂的新需求很难在它上面改进,这就对 openEuler 的演进造成了困难。”

就一般的 OS 来说,OBS 构建可能够用;但是当一个操作系统要支持全场景,复杂度就大大增加,对构建系统提出了更严苛的要求。

吴峰光博士对 OBS、Bitbake 做了深入调研。他解释了这些老牌构建系统,为什么满足不了openEuler的需求:

“服务器领域的 OBS 主打能力是什么?几大主流的 Linux 发行版它都支持,比如可以给 Redhat 打包,也可以给 Debian 打包。兼容并包是它的核心设计目标,适应了 Linux 多样化的现状。但我们认为,多样化在早期对 Linux 发展有利,但长期而言,Linux 生态的碎片化是一个需要被解决的问题。”

“嵌入式领域的 Bitbake 采用了面向任务和过程的 DSL 描述语言,这使得它非常灵活强大,但自由度和复杂性过高,以学习曲线陡峭知名。现在流行的理念是如 YAML、JSON 等通用、声明式的配置语言,和函数式编程,以实现低门槛、易理解、可控可重复的构建过程。”

在吴峰光看来,在 30 年后的今天,构建系统有着新的时代目标

2022 年 3 月,openEuler 团队开始设计新的构建系统 EulerMaker。

EulerMaker 构建系统

OS 构建系统的核心流程是,用户给定一组软件包后,按照包依赖关系,对它们发起并行构建任务。“那么搭一个 Kubernetes 集群,上面叠加一个包构建调度模块,是不是就可以了呢?”

“这里的包依赖管理和调度,的确非常复杂:既有源包的依赖,又有二进制包的依赖,还有构建环境的依赖;既有构建依赖,又有运行依赖,还有传递依赖;成千上万的依赖关系,形成一个巨大的图,要考虑怎么破环,把它变成一个有向无环图(DAG),用于最大化并发调度。随着包构建的推进,新输出的 RPM 包需要成为之后 RPM 包构建的环境,还会提供新的依赖信息,动态更新这个 DAG 图。还要考虑各种包构建的失败情况,多用户并发任务之间的干扰,或者任意机器、模块随时崩溃重启后如何接力,避免单点故障,等等,这需要一整套精巧的架构设计。”

看到这样的难题,可能有工程师大牛们要摩拳擦掌,跃跃欲试了。但是在难题面前,吴峰光不慌不忙,踩了一脚刹车——

“我们先把发动机放一边,追根溯源,回到最初的那一个问题:用户到底需要一辆什么车?

做架构设计,首先要考虑用户场景,然后推导出功能,最后才能确定数据和流程。设计时全盘考虑了所有的用户需求,数据和流程在未来才会稳定,才不会变来变去。

“我们对用户需求的考虑,真的全面了吗?”

吴峰光继续展开分析:“在 Linux 发展的最初阶段,需求是简单的:只要功能实现了,跑一下 gcc / make 能构建出来,用户能用,构建系统的工作就完成了。那时侯 Linux 社区对测试不重视,也还没有 CI / CD 的概念,测试基本全靠用户踩坑。现在情况就不一样了,时代的要求在提高:开发者期望有质量把控,要做测试,要有一整套的构建测试 CI / CD,要覆盖一整个开发流程,一站式全部搞定,出来的 RPM 包已经是经过测试的、用户能放心用的。这已经被开发者认为是标配,是开发者的正常预期。”

所以,新的构建系统要集成测试流程。

那么,是不是直接集成现在流行的通用 CI / CD 测试工具就可以了呢?

“市面上的 CI / CD 通用测试服务,适合测试上层的应用;而操作系统需要测试的,既有上层软件,又有基础软件;既面向应用开发者,又面向内核开发者,还有软件厂商、硬件厂商、OS 厂商,他们都有独特的测试需求;既要做功能测试,还要做性能测试。这些不是市面上通用 CI / CD 能做的。”

“所以,我们需要一套全栈系统,既能构建,又满足上述所有测试需求。”

早在 2020 年,吴峰光就综合分析上述需求,设计了 Compass-CI。Compass-CI 被设计为一个通用的任务执行系统,可以执行构建、功能测试、性能测试等各类任务。Compass-CI 也被设计为一个异构调度系统,可以调度物理机、虚拟机、容器等各种资源。

“Compass-CI 已经在 2020 年上线服务,在这个基础上补足构建相关的模块,就可以作为 EulerMaker 的后端,服务 openEuler 的构建。”

“当我们可以用一套系统,来服务好业界各方的需求,就会有硬件厂商问我们,能不能远程接入他们的硬件?然后,我们就需要支持工作机远程接入,分布式调度,数据共享,立足云端,连接各类线下机房,x86、ARM 等各类硬件,方便开发者之间、厂商之间、开发者与厂商之间的分布式协作。”

“资源有了,功能有了,开发者来了,也会有很多需求:我打包了,能不能看见进展?出问题了能不能复现当时的环境?能不能登录调试修复?能不能 DIY 验证?这些需求都需要一一满足大家。现在 EulerMaker 的可视化界面可以显示构建的进展,每个包会显示其依赖关系图以及其构建的进度,哪些包已经构建了,哪些包还没有构建,预计还有多少分钟,它前面还有哪几个依赖都一目了然。而且每个开发者都可以有专属队列,可以大大缩短等待时间。”

EulerMaker 怎么解决全场景

一个 OS 怎么支持全场景?

“首先这个 OS 要足够通用。但这还不够。”吴峰光继续说到:“一个通用的 OS,所带的软件往往要求大而全,把常见的功能都编进去。但很多场合有着不同的需求,比如启用一个不常用的功能,或者在嵌入式设备上,因为资源受限,需要把不必要的功能裁减掉。”

一个通用软件,往往会提供一组编译期的定制功能,方便不同场景的开发者和用户针对自己的需求,构建出不同功能组合的二进制程序。

“类似的,当我们说一个 OS 支持全场景,是只需维护一套 OS 源代码,通过源码级 + 镜像级定制,即可构建生成各类场景化的二进制 OS 发布。强大的定制能力,是赋能一套 OS 源码支持全场景的‘究极魔法’。”

吴峰光进一步介绍什么是定制能力:

“最简单的定制能力,体现在软件打包上,就是对用户提供定制选项。一般是把上游软件的可选功能做一个封装,让用户在做包构建的时候可以打开或者关闭。比如 RPM SPEC 文件中通过宏定义了 %{with xxx} 选项,用户就可以通过 rpmbuild --with xxx 来打开 xxx 选项对应的软件功能。”

“然而 SPEC 文件中往往只封装了少量选项,对于没有被 SPEC 维护者封装的上游软件功能,用户就只好自行修改 SPEC 文件来实现定制,这样就很杂乱了。”

“事实上 OS 的用户和场景多种多样,他们需要的定制项,往往远超包维护者所能提供。比如有人想升级版本号,有人想加个补丁,有人想加个编译选项,或者修改编译器。我们需要一种开放式的定制规范,即允许用户在不修改打包文件的情况下,实现对打包文件的定制,且允许定制任意字段,不限于包维护者事先提供的一个封闭选项集合。”

“这时候就会发现 SPEC 文件的定制能力不够用了。”

EulerMaker 怎么解决这个问题呢?

“我们引入了开发者们都很熟悉的 YAML 配置语言,用它来声明式的描述一个软件包。然后允许用户再定义一个 YAML 文件,来选择性覆盖或者修改 OS 软件包 YAML 文件里的任意字段。这样不但实现了开放式定制,而且用户定制选项都可以以 YAML 配置文件的形式,集中存储管理,或者代码化 Git 管理。”

不过,事情并没有这么简单。

“当用户可以非常方便的定制任意字段,随之而来一个风险:很多包字段之间有条件依赖和约束,用户一不小心,就容易在不知情的情况下,破坏一些关联约束。在过去,很多这种约束在 Git 日志里隐式维护的。比如开发者首先修改一个 SPEC 文件里的版本号,同时去掉一个只适用于老版本的补丁,完成对软件包的一次升级。当暴露在定制环境下,这就是一大脆弱性,会造成事实上难以自由定制。”

而 EulerMaker 的解决办法,是把该补丁适用的版本范围,用条件语句显式的写在软件包 YAML 里。“这样用户随便改版本号,都不会出错,其它关联字段会自适应的变化,从而实现定制自由。”

如此一来,定制能力是强大了,那么易用性又如何?

“一般用户要的不是一堆零件,而是套装。成千上万的定制项,小白用户眼花缭乱,不知道拿它们怎么办,他可能只知道我用的是 OrangePI,那有没有对应的一组定制项可以拿来就用的?”

针对这个问题,EulerMaker 的解决思路如下:

“这组定制项,要由这个专业领域的开发者或者厂商,在社区里提供,我们称之为一个定制层。每一种硬件、场景都可以有这样一个个的定制层。这样场景化 OS 的开发任务就简化为,菜单式选择所需的层,像搭积木一样组合,轻松完成 OS 的场景化分层定制。”

以上,就是 EulerMaker 解决全场景的整体思路。最后,吴峰光总结说:

“一个好用的全场景 OS,一定会是一种生态协作的组织形态。首先把各个场景的公共知识下沉到 BaseOS,统一描述,汇聚复杂枯燥的字段间条件依赖,方便在各个场景中复用。然后创建一个个薄薄的场景化定制层,简单描述各场景下“我要什么”的问题。BaseOS + 多样化场景层,成为 openEuler 社区共同维护和提供的公共组件,通过搭积木的方式,让开发者 DIY 菜单式定制,成就一个轻松愉悦的 OS 创造体验。”

为了让读者们对分层定制有一个直观的概念,吴峰光举了两个例子:

1、Redis 容器裁剪:

env.CC: /usr/bin/musl-gcc -static
env.CFLAGS: -I/usr/musl/include
env.LDFLAGS: -L/usr/musl/lib

buildRequires:
    - musl-gcc

subpackage.redis-server:
    meta.summary: redis-server
    files: %{_bindir}/%{name}-server

redis.yaml 示例

该示例使用十行 YAML,即可裁剪出 1MB 的 Redis 。

​以下视频演示了分层定制 Redis 的过程:

2、内核定制维护:

env.kconfig: CONFIG_BTRFS_FS=y
patchset.my-xxx-improve: xxx.patch

kernel.yaml 示例

该示例使用一个 YAML 文件,两行搞定 Linux 内核的定制维护。

“比如您在一家大公司的基础设施团队,需要在 openEuler 基础上定制 Linux 内核,改一下 kconfig,加一个补丁。在过去,您可能需要拷贝一份 kernel.spec,然后直接在上面修改。这意味着维护上百行的 SPEC 文件,且时不时要从上游回合新的改进,这一过程枯燥而繁琐。现在从 Fork 模式转为搭积木模式,只需维护好一个小小的 kernel.yaml 文件。然后每次拉新的 BaseOS 重新构建,都会自动拿到上游欧拉内核的最新错误修复。这样就很好的降低了开发维护成本,提高了安全性。是一种更加可持续的上下游协同演进方式。”

统一的包格式

在吴峰光的介绍中,我发现了一件令我很感兴趣的事情,就是 openEuler 在探索自己独有的软件包规范。

我们知道,openEuler 现在采用的是业界主流的软件包格式之一:RPM 。这种软件包格式不仅仅被 Redhat Linux 使用,也被 openSUSE、OpenMandriva、Oracle Linux、Tizen 等使用。

而在 openEuler 中,RPM 软件包不仅仅用在我们熟知的服务器、云计算领域,还应用在其它场景中,比如嵌入式。

为了一统软件包的定义,openEuler 采用了新的 YAML 配置语言进行包描述,并接管 RPM 的 SPEC 文件,成为新的开发者界面。吴峰光说,SPEC 文件中采用了大量复杂的宏定义,而 EulerMaker 将这些复杂性隐藏到YAML后面。换言之,openEuler 新的统一构建系统采用的 YAML 配置语言制定了一种更通用、更灵活的包定义。

这是不是代表着 openEuler 会逐渐发展自己的软件包格式?吴峰光表示,在保持兼容性的同时,openEuler 会走出一条自己的路。

别出心裁创建一种新的包格式容易,但是能在兼容既有架构的基础上,又能开拓新的特性,乃至于支持更广泛的场景,这应该很值得期待。

迈向开源开放

经过半年的努力,统一构建系统服务 EulerMaker 已经上线,已经在欧拉社区发挥作用,但是作为一个开源社区的产物,笔者更希望看到它能开源出来,惠及更广大的开源社区,也接受开源社区的批评和贡献。对此,吴峰光博士表示,一定是会开源的,但是目前还需要进一步打磨成熟。对于这样的回应,笔者很认可,毕竟吴峰光博士对开源社区的贡献一向以精益求精而著称。非常期待能早日见到一个强大而完善的统一构建系统开源出来。

前不久,欧拉社区发布了今年的创新版本 openEuler 22.09。作为欧拉社区贡献给开放原子开源基金会后的首个创新版本,此版本中新增了 2012 万行代码,其中仅在 Linux 内核上就新增了 4.8 万行代码,全量代码已达 6.7 亿行!

openEuler 采用长期支持(LTS)版本和创新版本间隔的发布方式,每两年发布一个 LTS 版本,期间每半年发布一个创新版本,用于推出实验性的技术特性。本次发布的 openEuler 22.09 创新版就带有不少的创新特性。但是在欧拉社区官方发布的公告中,并没有特别详细地介绍这些特性,因此,我特别邀约了华为服务器 OS 首席架构师、openEuler 社区技术委员会委员熊伟来为我们解读了本次发布中的一些最新、最酷的技术特性。

从内核说起

在本次的 openEuler 22.09 发布公告中提及了若干技术特性,比如可编程内核、分布式软总线、嵌入式硬实时,这些新的名称给人一种似曾相识,但又不明其中奥秘的感觉。作为欧拉技术委员会的专家,熊伟针对我的好奇,给出了他的解答:

什么是可编程内核?

“可编程内核”这个名词是我最迷惑的 —— 内核难道不是代码吗?肯定是编程产生的,那这个“可编程”的意思是什么?

对此,熊伟首先解释了“可编程内核”产生的背景,“现在的硬件迭代变化非常快,但是相对而言,软件的变化就有点跟不上。比如说,芯片一般的生命周期就三年,你得花一年时间上传到上游,半年后进入内核社区,而从社区到用户手里还有很长的周期。本质原因在于内核相对是固定的,一次开发完成以后,编译成内核模块后就相对固定了。”因此,openEuler 创新性地借鉴了 eBPF 的思想,将机制和框架分离,框架内置到内核,而实现的功能和策略只需要写完以后注入到内核即可。

在实现上,主要是两个方面:

  1. 把这种类似 eBPF 的机制扩展到内核的很多方面。比如说,扩展到内存、可调度性,让它们都成为可变化的;
  2. 把内核中的驱动程序和内核主体的绑定解耦。

Linux 内核中的大部分代码都是驱动程序。熊伟说,“我们有一种想法,是不是能把内核驱动也能抽离出来。现在驱动程序跟 Linux 内核绑定得太死了,是不是能把内核驱动也变成可变化?”换言之,让驱动程序和 Linux 内核版本的演进尽量减少关系,这样的话,内核版本可以不断演进,但驱动程序可以在几个大版本内不断复用,而不像现在内核稍微一变化,所有的内核驱动都得重新测试验证甚至重新开发。

而关于“可编程内核”的开发计划,熊伟称,“从现在开始尝试,到明年的下半年,我们期望能推出一个相对比较完整的框架。”

对此,我不禁想到,我们知道内核的各个部分都是模块化的,不但可以在编译内核时选择和配置不同的模块,而且可以在运行中根据需要动态加载。那么,“可编程内核”和内核的模块化有什么关系和区别呢?

熊伟解释称,内核的模块还不是“彻底可变化的”,这些内核模块(KO)插入内核后是固定的,在运行过程中是不能变化的。而“可编程内核,是可以灵活动态进行调整的。”更进一步说,动态加载的不仅仅是模块,更多的是策略,模块加载进去以后可以动态地给它提供新的策略。比如说,可以根据运行的业务使用不同的内核调度器,来适应不同的需求,比如大数据和数据库对内核所采用的调度器是有不同的需求的。

对于这样的一种在内核底层机制层面进行的创新,而不仅仅是某些内核驱动程序或某个子系统,我非常期待在后继的几个版本中看到它变得成熟和更多应用。

什么是分布式软总线?

在最近的几个版本中,openEuler 提到了一个“分布式软总线”,这个名词有的人可能在鸿蒙操作系统中见到过,这是否标志着欧拉和鸿蒙的进一步融合?

熊伟称,openEuler 的“分布式软总线”就是来自于鸿蒙操作系统。“软总线”是鸿蒙的万物互联、自动发现、自动识别、自动认证、自动连通的基础。平移过来以后,凡是基于 openEuler 的操作系统和所有基于鸿蒙的操作系统的设备之间就可以实现同样的特性。在 openEuler 的上个版本中已经开始进行“分布式软总线”的平移,而在此版本中已经基本完成。

“分布式软总线”基础设施的工作,相当于提供了一个“底座”,能在这个基础上出现什么有趣的应用和场景,我们期待合作伙伴和用户去探索。

什么是嵌入式硬实时?

我也看到了这次 openEuler 22.09 中提到了“嵌入式硬实时”,这是将 RTLinux 的部分加入到了 openEuler 中了么?

熊伟首先澄清了“硬实时”这个名词:硬实时能力是个通用词,实时到什么程度才能称作“硬”,这个没有什么明确的说法。实时一般分为三个层次:

第一层,就是标准的 Linux 内核,现在芯片处理能力是比较快的,只要达到一定的响应速度,其实一般的 Linux 可以满足大部分实时的要求。

第二层,在内核中打上 RTLinux 补丁,相对于标准的 Linux 内核具有更强的实时性。

但是第三层,对实时性要求就会特别严格。比如汽车的刹车系统,目前 Linux 是达不到相关的要求的,同时合规层面等也都面临挑战,所以一般这类场景中还是选用专用的实时操作系统。对此,欧拉社区容纳了多个不同的内核,不仅仅是 Linux 内核,还包括了 Zephyr 内核、一个华为贡献的小型实时内核 uniproton 等。此外,欧拉也在和国内的实时性操作系统 RT-Thread、翼辉等形成合作。

面对纷繁复杂的场景,社区目前正在做的一个方案是混合部署方案。比如说,一个芯片或一个 SOC 中有 8 个核心,可以分出两个核做强实时性的工作,运行 RT-Thread、翼辉等这种实时内核,而另外六个核可以跑 openEuler 的 Linux 版本,两者之间构建通信机制,两者之间可以进行交互。实时部分做实时的工作,非实时部分充分利用 Linux 庞大的生态,两者再通过标准化的语义联通起来,这样就能兼顾各种场景的需求。熊伟称,这个部分社区还正在开发当中,应该在年底到明年年初大家可以看到样例。

对架构的支持

根据欧拉社区披露的信息,openEuler 全版本支持 x86、ARM、申威、龙芯、RISC-V 五种架构,支持众多的芯片厂商的多种芯片,多个硬件厂商发布的多款整机型号、板卡型号,支持网卡、RAID、FC、GPU&AI、DPU、SSD、安全卡七种类型的板卡,具备良好的兼容性。

对国产的龙芯和申威等架构的支持是应有之义。此外,随着内核对树莓派的支持,包括 openEuler 在内的各个 Linux 发行版也都纷纷提供了对最新的树莓派板卡的支持。

此外, openEuler 对 RISC-V 的支持也引起了业界关注。RISC-V 被誉为硬件里的 Linux,因其开放性而广受开源界的追捧。提及 RISC-V 支持,熊伟说,对于单板级的产品来讲,RISC-V 的成熟度已经比较高,但对于边缘计算以上的,比如说服务器、桌面,差距还是比较大。如果想在 RISC-V 上把欧拉操作系统的数千个软件包都编译过,这个本身就是一个很大挑战。但编译通过还只是第一步,第二步你得先能跑起来,第三步是要跑得好。第二步、第三步对于整个 Linux 产业线来讲,熊伟觉得 RISC-V 还有比较长的路要走。

熊伟说,“我们在去年上半年和国内很多 RISC-V 厂商都有过沟通,还组织过相关的讨论会等活动,现在的情况是大家先合力把技术准备工作做好,欢迎 RISC-V 相关厂商基于 openEuler 来开放相关产品”。

对应用场景的支持

什么是虚拟化混合部署,其意义何在?

前面我们在嵌入式硬实时部分提到一种虚拟化混合部署场景,熊伟就此做了进一步展开:对于未来的趋势可以探讨一下。以汽车为例,汽车上分为实时部分和非实时部分,汽车设计起初是分离式的,非实时部分和实时部分都是各走各的芯片,各走各的线路,但这样成本就比较高,结合起来也比较复杂。未来可能会出现这种趋势,这些功能都集中在一个板卡上,甚至一个 SOC 上,而 SOC 会分成不同的分区,有实时控制的分区,有非实时控制的分区。实时分区进行车辆控制,非实时分区负责车载娱乐系统。在很多场景上都会产生这种需求,其好处就是它的成本会降低,交互和互联或者信息共享更加容易方便。openEuler 有几种内核,会通过构建系统进行混合部署,根据不同的场景采用不同的内核。

所以,基于混合部署可能会催生出很多有趣的想象力,熊伟称,今年年底可以推出混合部署的一个原型,明年有望变得相对比较成熟。

对云计算/服务器场景的支持

对于云计算和服务器场景的支持,除了对英特尔最新硬件的支持之外,openEuler 还在云原生、混合部署方面做了较多工作,比如离线/在线的混合部署,增强了资源利用率。熊伟称,云以及云原生方向是 openEuler 的发力重点。

此外,熊伟还提到了一个令我颇感兴趣的东西,即一个新的初始化系统。我们知道,Linux 最初的初始化系统,比如 sysVinit,已经基本上被 systemd 所取代。虽然 systemd 也带来很多新的进步,但是其也因不透明、庞杂、大一统等有违 UNIX 传统思维的做法而广受诟病。因而,欧拉社区也在开发一个新的初始化系统 SysMaster,它是一个使用 Rust 开发的轻量级初始化系统,目前计划首先应用在嵌入式和容器中。熊伟称,今年年底将会发布原型系统,并预期未来会支持更多的场景。

当然,在 openEuler 社区里,SysMaster 和 systemd 可以按照客户的要求自行选择,在特定场景下可以提供更好的性能、更轻量的资源占用。熊伟还就此表达了欧拉操作系统的设计理念,“沿这个脉络出发,openEuler 做的很多工作都是期望把操作系统的部件尽量简化,而不是越做越复杂。做事太多对操作系统也是一种负面影响。”

可能有人会对技术圈重复造轮子感到不以为然,熊伟说,“我们是非常强烈地建议大家重复造轮子的。重复造轮子,造更好的轮子才能不断推动技术的进步。比如说 OpenSSL 问题也比较多,如果谁用 Rust 或者其它语言重写了 SSL 实现,我们也非常乐意支持,会融合到我们的操作系统当中。”

欧拉为开发者提供的支持

从这次公布的数据来看,欧拉社区的开发者、贡献者增长迅速。有 1265 名开发者参与了 openEuler 22.09 的版本贡献,相较于上一个版本,参与版本贡献的开发者数量新增 63%,是 openEuler 已发布的版本中开发者数量最多的一次。

对此,我和熊伟进行了讨论,欧拉社区为开发者做了什么支持,才能有这么多的开发者、贡献者参与贡献。熊伟对这个话题表示了很大的兴趣。他认为,如果对标 Debian、Fedora 等操作系统社区来看,在 openEuler 之前,甚至是 openEuler 早期,其实中国是没有一个完整的操作系统社区的。

在开始阶段,欧拉社区是以包括华为在内的各个厂商的力量结合在一起组成的,但坦白来讲,开始阶段还是人拉肩扛这种方式比较多,相当于堆人力。熊伟说,但是从今年开始,欧拉开始真正地把社区的一些综合性的机制建立起来了,同时我们正在重构基础设施。比如建立统一账号,之前欧拉操作系统的开发需要在 Gitee 上注册账号进行,而如果是 GitHub 上的开发者就没办法参与。所以,欧拉首先要有一个统一账号,把这个基础设施变成分布式的,不会强制捆绑到某一个托管平台。通过分布式平台,使用统一的工具从不同的平台上拉取到一个构建仓进行构建。

这样,整个基础设施做了脱胎换骨式的变革,把公共能力抽取出来,可以适配不同的平台,你个人的开发行为和平台的绑定就可以进行隔离了。这样做有非常大的好处,不光是可以集合几个厂商的力量,还可以让更多的个人开发者参与进来。这使得整个社区的运作更加分布化,同时也容易走向国际化。熊伟说,基础设施改造完成后,一些自动化的工具,包括一些看板、可视化、可量化的评估体系都健全了,社区后续走向国际化、社区规模的进一步扩大也就有了坚实的基础了。

这一点我听了以后特别受鼓舞,我一直在看着欧拉社区是怎么发展起来的,我认为这是下一步发展的重要动力。

说到这里,熊伟也说,“大家在社区里抱怨很多事情,其实我们都是听得到的,技术委员会都听得到。但是很多事情是比较复杂的,消耗的工作量很大,这需要有条不紊地在一点一点去改进。整个社区的演变,我们肯定是有清晰规划的,一定会实现,但是大家可能要稍微耐心点,因为它不可能一蹴而就。”

下一个版本的蓝图

之后,熊伟还谈到了之后的版本蓝图。社区也在讨论如何更好的使得上下游企业,把社区的开发节奏和产品迭代速度相适应。

从目前的计划来看,欧拉社区期望能在下一个 LTS 版本中真正实现全场景、全覆盖,真正能够从嵌入式、边缘计算到服务器、云计算全部拉通。目前的全场景还是比较初级的,组件只是能通,从构建、从基础设施角度来讲还都是比较分离的组件。熊伟称,“至少从我的角度来讲,最重要的就是把整个东西都能变成一个大的体系,而不是分离性的系统。”

此外,欧拉还期望在下一个 LTS 版本上完成基础设施的分布式化、国际化。这是从整个社区角度来讲,欧拉最关心的两件事。熊伟称,运行基础只要好了,产出一定不会差,但是如果运行基础不好,还是原先按照堆人力,手动的太多,这个路是走不下去的,因为社区已经大到不可能走下去。

最后,熊伟还谈到了关于基础工作的观点,“我们做的事不但困难、花费又大、成效又很缓慢。水面下的工作可能并不那么显眼,但实际上它真正是我们这个产业最基础的。”

Debian 确定了处理非自由固件的方案

现在越来越多的设备拥有开源的 Linux 驱动,但却需要闭源的固件来实现功能,Debian 开发者一直在考虑对非自由固件采取最新的立场。在 Debian 社区前一段时间发起的投票中,方案 5 获胜:“改变安装程序中的非自由固件的社会契约(SC),采用单个安装程序”。即在 Debian 的官方介质中包含非自由固件,并在《Debian 社会契约》的第 5 点的末尾增加以下一句话以说明:“Debian 官方介质可以包括原本不属于 Debian 系统的固件,以使 Debian 能够在需要此类固件的硬件上使用。”

消息来源:Phoronix
老王点评:连这么“顽固”的 Debian 社区都不得不向现实低头。

System76 的 COSMIC 桌面将不使用 GTK

System76 一直在开发他们自己的 COSMIC 桌面,准备用在他们的 Pop!\_OS Linux 发行版上。在这个用 Rust 编写的桌面环境中,他们决定不再使用 GTK 工具包,而是使用 Iced-Rs 作为 Rust 原生的多平台图形工具包。Iced 是一个原生的 Rust GUI 工具包,他们在 GTK 和 Iced 中开发了各种 COSMIC 小程序以供比较。System76 称,“与 GTK 相比,Iced 的最新开发版本有一个非常灵活、有表现力和直观的 API。它在 Rust 中感觉非常自然。”

消息来源:Phoronix
老王点评:采用 Rust 开发的桌面环境,非常期待。

openEuler 发布 22.09 创新版,实现鸿蒙欧拉互联互通

该版本是 openEuler 社区捐赠后的首个创新版本,全量代码达 6.7 亿行,新增代码 2012 万行,其中内核新增原创代码 4.8 万行。1265 名开发者参与了该版本贡献,相较于上一个版本,参与版本贡献的开发者数量新增 63%。此版本新增了支持申威的 SW-64、龙芯的龙架构的系统镜像。此外,还通过集成实时内核的方式,实现了欧拉与鸿蒙的互联互通。

消息来源:openEuler
老王点评:虽然创新版本半年推出一个,但是其积累的进步将在 LTS 版本中保留下来。不过,大部分 Linux 个人用户可能对欧拉没什么使用体验。

2021 国庆前一天,欧拉操作系统按照既定的半年发布一个创新版本的节奏,发布了第三个创新版本 openEuler 21.09。在前不久召开的“华为全连接 2021 大会”上,我听到了欧拉即将进行“全新”发布的消息。作为一名长期观察欧拉发展的业内人士,我对这“全新”的说法是好奇的,这究竟是一种宣传的手法,亦或是真的有了很大不同?

怀着这个疑问,我对在“华为全连接 2021”后几天发布的 openEuler 21.09 是颇为关注的,希望可以第一时间拿到它的白皮书一窥究竟。几天后,欧拉发布了该版本的技术白皮书。我在翻阅后感觉,与其说欧拉是一辆粉饰一新的新车,不如说是它在引擎盖下做了颇多改进。

在这份几十页的《openEuler 21.09 技术白皮书》,颇有一些值得重视的技术变化被掩盖在了枯燥的技术术语之中,因此,本着一飨读者的想法,我对其中值得关注的地方,用更浅显的语言进行了一些解读。

openEuler 发布

首先回顾一下欧拉的基本情况。欧拉最初脱胎于华为内部的 Linux 发行版 EulerOS,后于 2019 年底宣布开源,成为 openEuler。其主要面对的是服务器基础设施领域,并在次年春季发布了第一个 LTS 版本。欧拉的主要技术路线沿袭了红帽系的技术方向,无论是从软件包管理、文件系统布局、操作系统体验方面,都吸收了不少 CentOS/RHEL 惯例。但是,欧拉又不是一个 CentOS 的某个版本的下游分支版本,因为其从内核、特性、技术演进方向,都有自己的独立而确定的发展计划,这一点和 SUSE 公司的 openSUSE/SLES 发行版家族类似。

欧拉采用了定期发布版本的发行计划,每两年发布一个长期支持版本(LTS)。除了作为服务器操作系统所重视的长期支持和特性稳定之外,欧拉也是一个技术孵化器,它每半年发布一次的创新版,集成了社区的最新技术成果,将社区验证成熟的特性逐步回合到发行版中。从 2020 年 3 月发布第一个 LTS 版本之后,它已经发布了三个创新版本,按照计划,下一个 LTS 版本将于 2022 年 3 月到来。

openEuler 版本图

如上所述,这次发布的 21.09 是一个创新版本,主要是迭代演进即将放入到下一个 LTS 版本中的新特性。在这个版本中,重点引入和发展的特性有:

  • 内核的创新:新介质文件系统和内存分级扩展
  • 云原生创新:容器操作系统、安全容器和双平面部署
  • 增强的特性:对语言编译器的支持、对运维的支持
  • 全场景创新:对编译计算、嵌入式场景的支持和集群加速引擎

下面,我们就这些特性展开来了解一下。

白话解析白皮书

如果不是欧拉社区的相关贡献者和长期参与者,你可能会觉得这份技术白皮书有些难读。我也是这样觉得的,不过,进行梳理之后,我把这几十页的内容凝聚成了几个关键字:内核特性容器技术架构支持场景支持

内核特性

Linux 系统给你的感受是什么?可能有很多答案,但是归根到底,这是一幢建立在 Linux 内核基础之上的华厦。内核提供的各种新特性,通过上层的应用最终提供了各种公用。因此,一个 Linux 操作系统的根本就是内核。

说句题外话,国内流行的 CentOS,主要的原因还是大家信任它的内核。这一点,谁做过运维谁知道。而华为作为国内首屈一指的在 Linux 内核方面颇有建树的企业,这些年来,在 Linux 内核方面已经做出了诸多贡献。

内核贡献图

华为在芯片架构、ACPI、内存管理、文件系统、介质、内核文档、内核质量加固及代码重构等方面,十余年来总计向社区贡献 17000+ 个补丁。而在 Linux 内核 5.10 和 5.14 版本中,欧拉内核研发团队代码贡献量排名全球第一。

那么我们来看看具体在这个版本中,欧拉在内核方面做了什么努力。

欧拉 21.09 还是基于 Linux 内核 5.10 构建,但在进程调度、内存管理、网络等方面带来了 12 处创新,这主要有:用来提升性能的进程调度优化、大页内存性能优化、OOM 内存回收优化、XDP 网络性能优化等。

除了这些隐蔽但重要的内核改进之外,如今在运维领域已经大量使用的非易失性内存(NVDIMM)存储介质,在使用传统的 ext4 文件系统时,尚缺乏针对性的优化,因为 Ext4 本身是针对旋转式硬盘设计的文件系统。尤其在元数据管理方面,基于现有日志同步机制,元数据管理开销大,且容易出现写放大问题,NVDIMM 优势无法充分发挥。华为推出的 Eulerfs 创新的元数据软更新技术,减少了元数据同步开销,有效提升文件系统的系统调用性能。在单机应用、云原生分布式应用高性能数据存储场景,可以代替 Ext4、XFS 等文件系统。

容器技术

现在的运维领域,几乎是言必称云原生。一个操作系统的对云原生、虚拟化的支持力度,也成了一种试金石。

欧拉面向云原生业务混合部署场景提出了一种 QAS 算法。它是一种适用于云原生场景,业务混合部署的全新调度算法,可以确保在线任务对 CPU 的快速抢占,确定性的调度运行,同时压制离线任务干扰。此外,在欧拉中还优化了 OOM(内存使用超量)时内存回收调度算法,在发生 OOM 时,优先对低优先级的进程组进行内存回收,保障在线业务的正常运行。这些改进适用于对交互类等时延敏感型业务(比如 MySQL、Redis、Nginx 等)和 CPU 消耗重且时延不敏感的业务(如 AI 离线训练)混合部署,它包括了容器与容器、容器与进程、容器与虚机、虚机与虚机等多种混合部署场景。

Kubernetes 已经成为事实上的云原生软件基础设施底座。业界的主流操作系统厂商都推出了针对云原生场景的操作系统。欧拉自然也不甘人后,推出了容器化操作系统 KubeOS,实现云原生集群操作系统的统一容器化管理。它可以对操作系统容器化管理、对接 Kubernetes、原子化的生命周期管理;它也对操作系统进行了轻量化裁剪,减少不必要的冗余包,可实现系统的快速升级、替换等。

再往底层看,欧拉结合虚拟化运行时 StratoVirt、容器管理引擎 iSulad 构建了安全容器方案,较之传统的 Docker + Qemu 方案,其底噪和启动时间优化高达 40% 以上,为应用提供了一个轻量、安全的执行环境,隔离了容器和宿主机操作系统间、容器间的安全风险。

架构支持

针对不同的硬件架构,欧拉在编程语言和架构方面还做了支持。

欧拉提供的毕昇 JDK 是基于 OpenJDK 开发的增强版本,具备高性能、高可用等优点,可用于生产环境。值得一提的是,它积累了大量使用场景,并针对 ARM 进行了性能优化。毕昇 JDK 支持 OpenJDK 8 和 OpenJDK 11 两个版本。

在欧拉中也有鲲鹏处理器打造的高性能编译器,Kunpeng GCC 编译器是基于 GCC 开发的,可以充分发挥鲲鹏的硬件特性,运行效率更高。

据测试,毕昇 JDK 在 SPECjbb2015 等基准测试中性能优于 OpenJDK。Kunpeng GCC 编译器在 SPEC CPU 2017 等基准测试中性能大幅优于上游社区的 GCC 10.3 版本。欧拉最初就是针对华为鲲鹏硬件架构开发的操作系统,因此,在欧拉中自然提供了针对性的优化,以充分发挥鲲鹏服务器硬件特性,这也算是应有之义。

在这次发布中,华为还重点提及,欧拉最初是作为对鲲鹏硬件的支持出现的,但是现在已经扩展到支持 x86、ARM、RISC-V 等多处理器架构,未来还会扩展 PowerPC、SW64 等更多芯片架构支持。但是从白皮书中,我们尚没有看到对其它处理器架构的特定优化工作和测试数据。

场景支持

从白皮书中我们看到,欧拉现在从对服务器场景的应用,逐步拓展到云计算、边缘计算、嵌入式等更多场景,正成为覆盖全场景的操作系统。

欧拉透露,它将发布面向边缘计算的版本 openEuler 21.09 Edge 和面向嵌入式的版本 openEuler 21.09 Embedded。这两个针对不同场景的版本突破了原有的服务器基础设施领域,但是,从我了解到的情况看,这其实已经不是 Linux 内核为基础的操作系统了,而是基于华为本身在这些领域的内核及应用开发的。可以理解为在一个统一的框架下的不同内核、不同操作系统。

欧拉的多场景支持

当然,除此以外,在这次发布的欧拉 21.09 中,还有很多具体方向的创新和改进,感兴趣的同学可以获取这份技术白皮书以了解究竟。

结语

每半年发布的一个创新版,我认为并不是很适合于需要特性稳定的产品环境部署,但是通过这些创新版本,社区和相关生态的企业可以提前针对新的特性进行开发、测试和优化。而无论是服务器环境,还是嵌入式、边缘技术,都需要一个具备稳定性、高性能、精细调优的操作系统,这就是明年 3 月将发布的下一个 LTS 版本的目标。而且,除了长期支持以外,我们可以期待在创新版中发布的新特性,也会经过打磨后融入到 LTS 版本中。

当然,我认为,LTS 版本并不是一个口号,而是需要真正地提供支持和维护。这是一种并不像发布新版本那么令人激动的工作,但是这种持续的支持,才是一个企业级的操作系统的根本。我们期望看到欧拉能够践行其对技术创新和长期支持的承诺和落实。


想要进一步了解这份《openEuler 21.09 技术白皮书》,可以点击此处下载

从黑客玩具到席卷互联网

今年是 Linux 诞生 30 周年,我还依稀记得我在好多年前第一次接触 Linux 时,它还只是一个小众而新奇的操作系统。二十多年前,那时候 Windows 95 还在流行,IBM 的 OS/2 尚能见到影子,而不起眼的 Linux 还只是黑客们的一个新奇玩具。

似乎转瞬间,Linux 已经席卷了整个互联网,而与之伴生的开源也成为了主流的软件和信息行业的时髦法则。从最初计算机诞生时的开源文化,到 IBM、微软和甲骨文等商业软件企业所奉行的闭源,再到包括 IBM、微软在内软件巨头转身拥抱开源和 Linux,历史仿佛又走了一个轮回。

我用的第一个 Linux 发行版是 Slackware Linux,这最早的 Linux 发行版之一,而且也是最长寿的 Linux 发行版之一,至今仍在持续发展。我还记得第一次安装它时,由于要做双引导,结果因为当时所使用的引导程序 LILO 不能引导超过 1024 柱面的分区,因而在安装后首次重启时就刷了满屏的 0101010……,甚至看到没有一行有用的错误信息。而那时,虽然 Google 已经诞生,但是我还尚不知道它,所以面对这种情况,让人不知所措。

就是这样的一个玩具一样的操作系统,30 年来,经过无数人的努力,已经诞生了数百个分属不同系列的 Linux 发行版,并拥有数万自由及开源软件,林林总总,几乎肯定可以满足你的任何需求。

CentOS 大变局

作为一个从业互联网多年的技术人员,我几乎都是在使用 Linux 来作为软件基础设施。从早期的 RedHat Linux,到后来的 CentOS,它基本上是我用来部署服务器操作系统的不二选择。Linux 作为服务器操作系统,主要有两大系列:Debian/Ubuntu 系、CentOS/SUSE 系。不知道出于什么原因,国内在服务器端使用 CentOS、RHEL、SUSE 等红帽系的 Linux 发行版比较多。所以,无论是企业环境、云环境,还是系统运维工程师们,都对 CentOS 等红帽系的 Linux 青睐有加。

不过,意外总是在你意想不到的地方出现。

今年,作为 CentOS Linux 背后的支持者,红帽公司突然宣布,CentOS 将 终止既定的维护计划。 CentOS 8 原本计划维护 10 年, 一直支持到 2029 年 5 月 31 日,却将在今年年底停止支持。而它的上一个版本 CentOS 7 都能维护到 2024 年。

当然,我们理解红帽公司做出这样的决定的 原因,但是其后果就是,原本将产品建筑于具有 10 年维护期的 CentOS 8 的各个企业,纷纷发现他们面临一个严重的危机。这就是,当红帽不再提供免费的 CentOS 之后,其产品和服务底层的操作系统缺失了维护,将给其带来巨大的不确定性。

当然,也并不是没有解决方案。比如说,像 Facebook 这样的大组织,就可以基于 CentOS Stream 定制自己的 Linux 发行版来使用。又比如说,可以考虑购买/订阅红帽的 RHEL 商业服务。再比如说,可以迁移到 Debian/Ubuntu,乃至于 *BSD 上。但是,对于广大中小企业来说,这些选择都存在一定的阻碍。

因此,也有人站出来,秉承 CentOS 原本的宗旨,继续发行和维护一个类似 CentOS 的 Linux 发行版,比如说 Rocky LinuxAlma Linux 等等。虽然,目前这些替代品得到很多肯定,但是,就像被红帽收购之前的 CentOS 一样,谁也不知道这些替代品发行版及其支持服务能有多久。

还有更好的选择么?

我认为有。

其实,在 CentOS 停服之后,国内一些互联网大厂也纷纷考虑将自己原本自用的内部 Linux 发行版打造成公开可用的 Linux 发行版。但是,各家对此事的重视程度不同。我曾经开玩笑地点评过,有的是以战略的方式去打造,有的是按战术的方式去考虑,而有的可能只是以战斗级的规模去尝试。以上就知名不具了。我就说说,我对其中一个 Linux 发行版的认识吧,以及,为什么我认为它是一个更好的选择。

先揭晓我的答案,它就是欧拉(openEuler)操作系统

为什么欧拉是更好的选择?

欧拉可以更好的继承和兼容 CentOS 基础设施

欧拉最初发轫于华为内部的 Euler 操作系统,这是一个定制的 Linux 发行版。其采用和继承了红帽系的一些标志性技术,比如,它们都采用了相同的包管理系统(虽然据称欧拉也在考虑增加新的包管理系统),它们都采用了类似的文件系统布局和同一种安装程序等等。

因此,如果你现有的操作系统使用的是 CentOS ,那么迁移到 欧拉 还是比较轻松的,而且,欧拉还提供了专门的迁移向导程序。

旁注:欧拉 是 CentOS 的下游发行版吗?

可能社区存在一些认识误区,认为欧拉就是基于 CentOS Linux 衍生,并在此基础上定制的。不是。欧拉与 CentOS 的关系,类似于 openSUSE 和 CentOS 的关系,即采用类似的包管理系统和文件系统布局;而不是类似 Oracle Linux 和 CentOS 的关系,即替换和增补部分组件和内核的方式。

结论:欧拉是一个沿袭了红帽系的技术和惯例,但是独立发展的 Linux 发行版。

牵一发而动全身,欧拉已经成为华为的技术基座

就像前面说的,市面上并不乏类似于 CentOS 的发行版,但是,并不能给人以充足的信心。我们知道,开发并维护一个 Linux 发行版,其投入非常大,而且持续的维护也很辛苦。这一点可以从其他几个主要 Linux 发行版的情况可以看出来,有的 Linux 发行版供应商几年来多次卖身、有的转向以云服务为重心、有的几年才能推出一个重大版本。

而据我了解,欧拉在推出伊始,就得到了华为的鼎力支持,不但投入了华为操作系统实验室的技术高手,而且在产品、资金、宣传和人员方面也不吝投入。或许你觉得这只是宣传,但我觉得有一些事例可见一斑:欧拉在推出不久就拥有了诸多下游发行版,比如 UOS(原深度 Linux)、麒麟,甚至连 SUSE 都基于欧拉推出了下游发行版。试想,如果这些发行版认为欧拉只是昙花一现的 KPI 项目,它们会押注欧拉吗?

既然如此,那我就对欧拉能得到持续而稳定的投入和支持拥有信心。所以,是否采用欧拉作为你的基础设施,想必你也有一个判断了吧?

欧拉有丰富而庞大的支持社区和支持企业

说实话,作为一个浸淫 Linux 开源圈子多年的技术人,我这些年见惯了技术社区的起起落落。但是我从来没见过一个技术社区能如欧拉社区一样迅速崛起并壮大。2019 年底,华为正式开源了欧拉操作系统,邀请社区开发者共同来贡献。才仅仅一年半后,截止到 2021 年 9 月,欧拉社区 就已经拥有了 14 万社区用户,6 千多名社区贡献者,8 千多款社区软件,91 个特别兴趣组(SIG)以及 9 个下游的商业发行版。不仅如此,欧拉还在操作系统之外,开源了虚拟化平台 StratoVirt、容器引擎 iSula 等重量级软件。

所以,有这么庞大的支持社区和这么多的生态企业,你觉得需要担心支持吗?

为什么我们还需要一个独立的 Linux 发行版?

我们可以看到,虽然现在的 Linux 发行版不少,但是真正能在企业级使用并不多。而以前,这些企业级的 Linux 操作系统往往是由国外的企业进行支持的。我们说,开源是无国界的,但是企业是有国界的,谁也不敢保证企业是否会受制于某个国家的法案而终止服务。因此,有一个国产的 Linux 发行版供应商至关重要。

这些年来,中国已经有一些 Linux 发行版供应商。如今,在国家的持续支持下,它们也得到了不同程度的发展。不过,相对于中国迅猛发展的信息技术基础设施,我们还需要更多、更有力的企业和社区的支持。此外,考虑到中国对芯片产业的迫切需求,我们也需要有一个符合中国发展的独立 Linux 发行版来更好的支持这些国产的芯片和指令集。

虽然在企业运维中或多或少会使用英语等外语,但是就国内普遍的运维群体而言,对英语的娴熟使用程度上尚有较大的欠缺,因此,这就需要有一个具有更熟悉的语言环境的本土技术社区,才能真正促进国内运维技术人群的发展。当然,这并不是说我们只采用中文,而是会在满足中文沟通和支持的基础上,立足国际化,让源于中国的 Linux 发行版走向世界。

而在这方面,欧拉已经做了一系列工作:

比如,对多种计算架构的支持。典型的,Linux 都会支持不同的技术架构,这包括 x86、ARM 等等。而国内诸多发力于处理器芯片的厂家也打造出了林林总总的不同特性的芯片,但是这些芯片要得到主流操作系统的支持,则需要更广泛的认可和漫长的时间。如今的欧拉不但可以完美的运行在华为自家的鲲鹏处理器上,更是可以支撑国内多家的 ARM 服务器。作为一个拥有多家下游商业发行版的 Linux 操作系统,如果能在欧拉上得到适配支持,无异于可以在更广泛的用户群体里提供对国产芯片的直接支持。

再比如,对新技术需求的支持。近些年各种新技术层出不穷,如云边端融合、以新的容器技术为代表的云原生计算等等。这些都迫切需要在操作系统层面得到支持,由操作系统提供一个创新的平台,才能够给这些新的技术突破提供成长的土壤。欧拉首先是一个 Linux 操作系统,但是它也是一个孵化新技术的“Apache 基金会”,在欧拉之上,已经有可以运行于多种边缘设备的容器引擎 iSula、相对 QEMU 资源占用减少了 80% 的 StratoVirt 等等新技术。

结语

回到我们最初的问题,30 年过去了,我们还需要一个新的 Linux 发行版吗?我的答案是,需要。而且,我们已经提交了一份正在不断丰满的蓝图。