大多数 Linux 发行版都附带特定的内核版本,并且仅在点发布 (x.y.z
至x.y.(z+1)
) 和安全更新时对其进行更新。
另一方面,我知道 Linux 有一个非常严格的政策,即不更改内核 ABI 和不破坏用户空间。事实上,Linus 曾多次针对想要(有意或无意)以非向后兼容方式更改内核的开发人员公开发脾气。
我不明白为什么发行版使用“稳定”内核而不是始终更新到最新内核。这不是批评,我只是好奇原因。
答案1
Linux 内核的系统调用接口非常稳定。但内核还有其他接口并不总是兼容。
/proc
大部分是稳定的,但过去发生了一些变化(例如,某些界面移动到创建/sys
后的某个时间)。/sys
- 提供了许多与设备相关的接口已删除在过去。
/sys
包含一些稳定的接口(列在Documentation/ABI/stable
)和一些不是。你不应该使用那些不是的,但有时人们会这样做,简单的安全性和稳定性升级不应该对他们造成破坏。- 过去存在与 modutils 不兼容的情况(较新的内核需要较新版本的 modutils),尽管我认为这是很久以前的事了。
- 在一些不寻常的配置上,启动过程也存在不兼容性。即使增加内核的大小也可能会导致某些嵌入式系统出现问题。
- 虽然内核的外部的接口相当稳定,内部的接口不是。内部接口的规则是任何人都可以破坏它们,只要修复内部使用,但修复第三方模块是该模块的作者的责任。总的来说,相当多的安装运行第三方模块:内核不支持的硬件的额外驱动程序(如果新内核支持该硬件,那很好,但如果不支持怎么办),专有驱动程序(虽然如果所有驱动程序都是开源的,世界将会变得更加美好,但事实并非如此,例如,如果您想要良好的 3D GPU 性能,那么您几乎只能使用专有驱动程序)等等。
- 有些人需要重新编译他们的内核,或者一些第三方模块。较新的内核通常无法使用较旧的编译器进行编译。
总而言之,不切换到更新的内核版本的主要原因是第三方模块。
尽管如此,一些发行版仍然提供最新的内核作为选项。例如,Debian 通过向后移植将测试内核提供给稳定版本的用户。同样,在 Ubuntu LTS 上,可以使用最新 Ubuntu 版本的内核,但默认情况下不使用。这对于在发行版最终确定时尚不支持的硬件上的新安装非常有用。
答案2
我不是为发行版工作,但我至少可以想到两个原因:
- 一些发行版将其自定义补丁应用于尚未合并到主线的内核。这意味着对于内核的每次更新,他们都需要确保他们的补丁不会破坏任何内容并且仍然正常运行。
- 即使最新的稳定内核版本也可能包含错误,认真对待可靠性的发行版将希望在向客户交付内核之前经历一些测试程序/过程。
答案3
更保守的分布遵循(并积极参与)稳定的内核版本,为了稳定性。更具冒险精神的人使用最新和最伟大的香草版本左右的内核,再加上从开发技巧向后移植的补丁(以及一些自制的补丁)。
当前的内核开发政策是 Linus 的版本不断推出闪亮的新玩具,并且不害怕大规模的更改。有些版本被认为足够稳定(在开发方面),可以构成严格测试和稳定的基础,从而提供稳定的系列。
由于使用的工具,这一切都是可能的,每个人都可以修饰自己的工具git树,保持有趣的上游分支和树在本地同步,窃取其他人的提交,并自由共享本地更改。