|
|
|
版本 |
软件总数 |
新增 |
删除 |
版本更新 |
同版本二进制不兼容 |
完全未变化 |
|
7.0 |
2481 |
NA |
NA |
NA |
NA |
NA |
|
7.1 |
2523 |
43 |
1 |
167 |
228 |
2085 |
|
7.2 |
2587 |
68 |
4 |
323 |
303 |
1893 |
|
7.3 |
2640 |
54 |
1 |
219 |
334 |
2033 |
|
7.4 |
2682 |
60 |
18 |
413 |
242 |
1967 |
|
7.5 |
2743 |
61 |
0 |
214 |
283 |
2185 |
基本上来说,每个小版本升级,大约有 20%~30%
的用户态软件会发生变化。这里有一些是因为版本的更新,有一些版本未变但是因为二进制不兼容而做了重新构建。
而对于系统最基本的内核来说,虽然版本号未变化,但内核的接口也是在不断演进的,还是用CentOS
作为例子:
|
内核接口总数 |
8.0 -> 8.1 KABI变化 |
8.1 -> 8.2 KABI变化 |
8.0 -> 8.2 KABI变化 |
|
|
数量 |
18903 |
6324 |
5755 |
7963 |
|
比例 |
100% |
33.4% |
30.4% |
42.1% |
从CentOS 8发布到现在,已经有超过 40%
的内核接口二进制不再兼容。
这是不是和传统中“长期稳定版本”一成不变的印象不太一样呢?
像 openEuler
这样集成了大量的开源软件,每个软件自己的演进节奏,兼容性保持和版本维护策略,都是不一样的。我们的挑战,就是把零散不同的演进节奏,兼容性保持和版本维护策略,整合而形成一个统一的策略。
像一条忒休斯之船,无时无刻不在变化,但又不让人觉得有变化。
openEuler 社区在2020年就软件包的管理策略有过长时间的讨论,最新版本归档在这里:
其中明确提到,对LTS软件版本生命周期内的软件选型要求,以及软件升级时要关注的差异分析要求。
与之相对应的,openEuler
也在 CI 中设立了兼容性检查的门禁,每一次提交,都会触发系统自动对ABI的变化进行检查。比如:https://gitee.com/src-openeuler/poppler/pulls/10 中,我们看到
check_abi 被自动执行,并且结果也能直观看到。当一个软件本身的兼容性变化被检查到时,相应所有依赖这个软件的组件,都会被触发做相应的修改。
但从社区到用户场景,还有很大的鸿沟需要越过。
在当前的用户场景中,软件兼容性大部分情况下都只是一个抽象的概念,这使得软件变更的影响像个混沌系统。太平洋西岸的蝴蝶扇动翅膀,可能会造成太平洋东岸的飓风。
我们就遇到过这样的情况,因为一个内核接口的变更,造成 NVIDIA
驱动必须随之升级,而驱动的升级又要求上层的 CUDA 版本升级,新的 CUDA
必须使用新的 TensorRT。最终,新版本的 TensorRT
上线,因为新旧版本之间的计算精度差异,造成用户场景下当前使用的 AI 算法和模型统统失效。
从操作系统角度,通过内核,驱动,函数库,中间件的联动升级,实现了内部兼容性问题解决的闭环。但当场景延伸到用户场景时,兼容性还是出现了失控。
所以从长期来看,我认为维护策略的核心是识别用户场景中真正的兼容性要求。建议 Release Management SIG在沟通讨论时重点关注这一点,技术委员会也会从工具和方法论角度给出支持。
为了openEuler 21.03
创新版本,最近社区多了很多新的贡献者。也有很多贡献者,因为 openEuler 在建仓提交管理上的要求,感觉深受折磨。我想借这个机会稍微说明下。
1月18日的一个新闻曾经引起了很多人的注意,Flash停更造成大连铁路系统瘫痪 。乍看起来,个别单位对软件生命周期管理不重视而造成事故,这种情况只是个例;开源开放的操作系统,关注的人多,高灯下亮,应该没有个问题。但从2020年的实际分析来看,不仅不是高灯下亮,反而是灯下黑。在广泛使用的开源操作系统里,类似的问题并不鲜见。比如
libdb 数据库,早在2012年就已经从开源转闭源,而有些重要的基础工具依然在坚持引用闭源之前的最后一个版本;而开发人员弃坑,软件本身却依然被广泛依赖的场景更是随处可见。为什么这个问题没有得到社区的关注?一个间接的佐证来自对最近的 sudo
高危安全漏洞 CVE-2021-3156的分析。在 Y
Combinator的讨论贴 中,有从业者表示:
“All you need to know about sudo and frankly most other pieces of the Linux userspace is that it is
undertested…As long as this type of thing continues, our tools will remain at a very low level of safety, reliability, and correctness.”
换言之,Linux用户态的大多数软件不是没有安全问题,而是测试不足没有发现。
一方面是软件上游社区停止维护,另一方面是测试不足没有发现问题,后者掩盖了前者的存在。而对一些操作系统发行版的盲目信赖,让很多人选择性地忽视了后者。
openEuler 认为必须通过透明有效的开发管理和测试来提升社区整体的安全,可靠和正确性。这条路当然是要艰难得多,但想到 openEuler
会越来越多被用在国计民生等关键场景中,社区中的伙伴们也都有了一份责任感和使命感。
艾尔帕西诺在"闻香识女人"里有段著名的台词,我常常拿来勉励自己。
“Now l have come to the crossroads in my life. l always knew what the right path was. Without exception,
l knew, but l never took it. You know why? lt was too damn hard.”
在此感谢大家和 openEuler
一起选择 “对” 的道路。
from openEuler TC