Linux 内核稳定版发布模式始于 2005 年,当时人们认为现有的内核开发模式(每 2-3 个月发布一个新版本)无法满足大多数用户的需求。用户希望在这 2-3 个月内进行错误修复,而 Linux 发行版发现,在没有内核社区反馈的情况下,很难使内核保持最新状态。总的来说,为了确保各个内核的安全并包含最新的错误修复,许多不同的个人付出了巨大而令人困惑的努力。
稳定版内核版本直接基于 Linus Torvalds 发布的版本,并且大约每周发布一次,具体取决于各种外部因素(年份、可用补丁、维护者工作负载等)。稳定版版本的编号以内核版本的编号开头,并在末尾添加一个额外的编号。例如,4.4 内核由 Linus 发布,然后基于此内核的稳定版内核版本编号为 4.4.1、4.4.2、4.4.3 等。当指代稳定版内核版本树时,此序列通常缩写为数字 4.4.y。每个稳定版内核版本树都由单个内核开发人员维护,该开发人员负责为版本挑选所需的补丁并管理审核/发布流程。
稳定版内核在当前开发周期的长度内进行维护。在 Linus 发布新内核后,之前的稳定版内核版本树将停止,用户必须迁移到较新的已发布内核。
长期稳定版内核
在此新的稳定版发布流程一年后,人们认为许多不同的 Linux 用户希望内核获得比仅仅几个月更长的支持。作为回应,创建了长期支持 (LTS) 内核版本,第一个 LTS 内核 (2.6.16) 于 2006 年发布。从那时起,每年选择一个新的 LTS 内核,内核社区将该内核维护至少 2 年。
在撰写本文时,LTS 内核为 4.4.y、4.9.y、4.14.y、4.19.y、5.4.y 和 5.10.y 版本。每周发布一个新的内核。由于某些用户和发行版的需求,内核开发人员以较慢的发布周期维护一些额外的旧内核。有关所有长期稳定版内核、谁负责维护以及维护多长时间的信息,可以在 kernel.org 发布页面上找到。
LTS 内核版本平均每天接受 6-8 个补丁,而正常的稳定版内核版本每天包含 10-15 个补丁。补丁的数量因版本而异,具体取决于相应开发内核版本的当前时间和其它外部变量。LTS 内核越旧,适用于它的补丁就越少,因为许多最近的错误修复与旧内核无关。但是,内核越旧,由于代码库中的更改,回溯应用所需更改就越困难。因此,虽然可能应用的总补丁数量较少,但维护 LTS 内核所花费的精力大于维护正常的稳定版内核。
稳定版内核补丁规则
自引入以来,可以添加到稳定版内核版本中的规则几乎保持不变,并在下面进行总结
- 必须是显而易见的正确且经过测试。
- 不得大于 100 行。
- 必须只修复一个问题。
- 必须修复已报告为问题的内容。
- 可以是硬件的新设备 ID 或怪癖,但不能添加主要的新功能。
- 必须已合并到 Linus Torvalds 的树中。
最后一条规则“必须已合并到 Linus Torvalds 的树中”可防止内核社区丢失修复程序。社区绝不希望将尚未在 Linus Torvalds 树中的修复程序纳入稳定版内核版本中,以便任何升级的人都不会看到回归。这可以防止其他维护稳定版和开发分支的项目可能遇到的许多问题。
内核更新
Linux 内核社区已向其用户群承诺,任何升级都不会破坏以前版本中正常运行的任何内容。该承诺至今仍然有效。回归确实会发生,但这些都是最高优先级的错误,要么很快得到修复,要么导致回归的更改很快从 Linux 内核树中恢复。
此承诺对于增量稳定版内核更新以及每三个月发生的更大的主要更新都成立。但是,内核社区只能对合并到 Linux 内核树中的代码做出此承诺。任何合并到设备内核中的代码(如果该代码不在 kernel.org 版本中)都是未知的,并且永远无法计划或甚至考虑与其交互。
基于 Linux 且具有大型补丁集的设备在更新到较新内核时可能会遇到重大问题,因为每个版本之间都有大量更改(每个版本 10-14 千个更改)。SoC 补丁集尤其以在更新到较新内核时出现问题而闻名,因为它们体积庞大并且对特定于架构的内核代码(有时是核心内核代码)进行了大量修改。因此,大多数 SoC 供应商都开始标准化在其设备上使用 LTS 版本,使这些设备能够直接从 Linux 内核社区接收错误和安全更新。
安全
在进行内核发布时,Linux 内核社区几乎从不将特定更改声明为安全修复。这是因为基本问题在于,在创建时很难确定错误修复是否是安全修复。此外,许多错误修复仅在很长时间后才被确定为与安全相关,因此内核社区强烈建议始终采用发布的所有错误修复。
当安全问题报告给内核社区时,它们会尽快得到修复并公开推送到开发树和稳定版版本中。如上所述,这些更改几乎从不被描述为“安全修复”,而是看起来像内核的任何其他错误修复。这样做是为了让受影响方能够在问题报告者宣布问题之前更新其系统。
有关向内核社区报告安全错误以尽快解决和修复这些错误的详细信息,请参阅 Linux 内核用户和管理员指南中的“安全错误”,网址为 www.kernel.org。
由于内核团队不会向公众公布安全错误,因此 Linux 内核相关问题的 CVE 编号通常在修复程序合并到稳定版和开发分支后数周、数月甚至数年才发布。
保持系统安全
在部署使用 Linux 的设备时,我们强烈建议制造商采用所有 LTS 内核更新,并在适当的测试表明更新运行良好后将其推送给用户。这有几个优点
- 版本已由内核开发人员作为一个整体进行审核,而不是单独审核各个部分。
- 很难确定哪些补丁修复了“安全”问题,哪些没有。几乎每个 LTS 版本都包含至少一个已知的安全修复,以及许多“未知”的安全修复。
- 如果测试显示有问题,内核开发人员社区会迅速做出反应以解决问题。
- 尝试仅过滤掉您运行的更改会导致内核树无法与未来的上游版本正确合并。