什么阻止发行版使用最新的 Linux 内核?

img*_*x64 13 linux linux-kernel

大多数 Linux 发行版都附带特定的内核版本,并且仅在点发布 ( x.y.zto x.y.(z+1)) 和安全更新时对其进行更新。

另一方面,我知道 Linux 有一个非常严格的政策,即不更改内核 ABI 并且永远不会破坏用户空间。事实上,Linus 已经有许多针对想要(有意或无意地)以非向后兼容方式更改内核的开发人员的公开发脾气。

我不明白为什么发行版使用“稳定”内核而不是总是更新到最新的内核。这不是批评,我只是想知道原因。

rep*_*lay 9

我不是为发行版工作,但我至少可以想到两个原因:

  • 一些发行版将其自定义补丁应用于尚未合并到主线的内核。这意味着对于内核的每次更新,他们需要确保他们的补丁不会破坏任何东西并且仍然正常运行。
  • 即使是最新的稳定内核版本也可能包含错误,认真对待可靠性的发行版在将内核交付给客户之前需要经过一些测试程序/过程。

  • 无论如何,特定于发行版的补丁不一定适用于上游。最新的上游内核平均包含比发行版测试的“库存”内核更多的错误。由发行版分发的内核所做的大部分工作是尝试消除/修复尽可能多的错误,同时不更改不必要的代码。 (2认同)

Gil*_*il' 9

Linux 内核的系统调用接口非常稳定。但是内核有其他接口并不总是兼容。

  • /proc大部分是稳定的,但过去发生了一些变化(例如,一些界面/sys/sys创建后移动了一段时间)。
  • 过去已经删除了许多与设备相关的接口。
  • /sys包含一些稳定的接口(在 中列出Documentation/ABI/stable)和一些不是。您不应该使用那些不是的,但有时人们会这样做,并且简单的安全性和稳定性升级不应该为他们带来麻烦。
  • 过去曾与 modutils 不兼容(较新的内核需要较新版本的 modutils),但我认为这是很久以前的事了。
  • 在一些不寻常的配置上,引导过程也存在不兼容性。即使增加内核的大小也可能导致某些嵌入式系统出现问题。
  • 虽然内核的外部接口相当稳定,但内部接口却不是。内部接口的规则是,只要修复内部使用,任何人都可以破坏它们,但修复第三方模块是所述模块的作者的责任。总的来说,相当多的安装运行第三方模块:内核不支持的硬件的额外驱动程序(如果新内核支持硬件,那很好,但如果它不支持),专有驱动程序(虽然如果所有驱动程序都是开源的,世界会变得更美好,但事实并非如此;例如,如果您想要良好的 3D GPU 性能,那么您几乎只能使用专有驱动程序)等。
  • 有些人需要重新编译他们的内核,或者一些第三方模块。较新的内核通常无法使用较旧的编译器进行编译。

总而言之,不切换到更新内核版本的主要原因是第三方模块。

尽管如此,一些发行版还是提供了最新的内核作为选项。例如,Debian 通过向后移植向稳定版本的用户提供来自测试的内核。同样,在 Ubuntu LTS 上,可以使用来自较新 Ubuntu 版本的内核,但默认情况下不使用。这对于在分发完成时尚不支持的硬件上的新安装非常有用。