每两月新增40万行!Linux内核代码狂飙至4000万行,十年膨胀了一倍

360影视 2025-01-29 16:13 2

摘要:近日,随着 Linux 6.14 rc1 的发布,Linux 内核的源代码总量首次超过 4000 万行。作为从服务器到物联网设备的核心支柱,Linux 内核已发展为现代技术体系中不可或缺的关键组件。这一里程碑也引发众人热议,代码体量的扩大,对代码质量与性能的持

近日,随着 Linux 6.14 rc1 的发布,Linux 内核的源代码总量首次超过 4000 万行。作为从服务器到物联网设备的核心支柱,Linux 内核已发展为现代技术体系中不可或缺的关键组件。这一里程碑也引发众人热议,代码体量的扩大,对代码质量与性能的持续提升究竟是好还是坏?

编译 | 苏宓

出品 | CSDN(ID:CSDNnews)

Linux 内核作为无数开源操作系统的支柱,随着 6.14 rc1 版本的发布,近日达成了一个令人瞩目的里程碑:其代码行数突破 4000 万行大关,这些代码不仅包含实际的代码内容,还包括注释、文档,甚至为了结构和可读性而保留的空行。

稳步增长:从课堂走向科技前沿的 Linux

自 1991 年由 Linus Torvalds 以学术项目的形式创立以来,Linux 内核不断发展,现已成为从服务器、超级计算机到智能手机和物联网设备等多种技术的核心。

2015 年,Linux 内核的代码行数达到了 2000 万行,这在当时已是一个重要的里程碑。

十年后,这一数字翻了一番,内核以每两个月新增约 40 万行代码的速度持续增长。

2025 年 1 月初发布的 Linux 6.13 版本包含 39,819,522 行代码,而随着最近发布的 Linux 6.14 rc1 的源代码,这一数字现如今已飙升至 40,063,856 行。

Linux 内核代码数量为什么涨得这么快?

毋庸置疑,Linux 内核源代码的增长速度相当快。探索其背后的原因,可归因于以下关键因素:

1.硬件支持的不断扩展

Linux 以其广泛的兼容性著称,能够支持从 x86、ARM 到 RISC-V 等多种架构和设备。

硬件架构:仅架构支持相关代码就超过 450 万行。

驱动程序:最典型的例子是 AMD Radeon 显卡驱动,其中包括驱动本身及其文档,共计 500 万行代码。

2.高效的模块化设计

尽管 Linux 内核体量庞大,但并非所有代码都会在每个系统上运行。其模块化设计确保了驱动和组件仅在检测到对应硬件时才会加载,从而优化资源使用。

3.完善的文档与代码质量

开发者社区一直在积极完善代码文档并添加有用的注释,使新贡献者更容易上手,同时确保内核的高质量和可维护性。

现实来看,Linux 内核代码的快速增长并非偶然,而是数十年全球开发者集体努力的结果,也是内核不断适应日益多样化技术生态需求的体现。

关于内核大小的争论:大部分代码对普通用户其实没啥用

然而,Linux 内核的增长引发了技术界的争论,不少网友在社交媒体或技术论坛上分为两大派系。一方认为在 Linux 中增加更多功能和支持可以使 Linux 能够适应从企业服务器到嵌入式系统等各种设备和环境,因此他们觉得 Linux 内核代码行数并不重要

另一方的开发人员认为,通过删除冗余功能,内核可以从进一步优化中受益。对于后者,他们觉得内核源代码中的很大一部分可能与特定的计算机或用户毫无关系。

要知道 Linux 内核中支持各种处理器架构的代码大约有 450 万行。然而,如果你的系统只使用 x86 架构(大多数 PC 使用的架构),编译器会跳过这些代码中的大部分。实际上,专门针对 x86 架构的代码不到 50 万行。

此外,编译器会针对你使用的 x86 芯片架构进一步优化,这意味着即使在这 50 万行代码中,还有更多内容不会被使用。比如,当前主流的 x86-64 架构,其内核代码约 49.3 万行,但其中仍包含大量用于早期 32 位版本的内容。换句话说,即便是现今的 64 位 CPU,仍然会继承许多历史代码,而非所有内容都被实际执行或调用。

查看 arch 目录:大约十分之九的 Linux 架构代码与 x86 系统无关

编译配置帮你筛掉了很多没用的东西

Linux 使用的是偏单体内核的设计,不仅包含现代操作系统内核的核心功能,还包括大量的驱动程序。而这些驱动程序的数量非常惊人,总计约 2500 万行代码。

但如果你是针对自己的系统编译内核,其中很多驱动代码根本用不上。和架构代码类似,有些驱动只适用于特定平台,甚至都不能在 64 位 x86 系统上编译。即使可以编译,也不代表驱动一定会被包含进去——这完全取决于在编译前由人通过工具(比如 make menuconfig 或 make xconfig)配置的“蓝图”文件(.config)。

内核的哪些函数和驱动程序需要编译是由人员在构建配置期间决定的

无用的驱动不会被加载

可能有经验非常老道的 Linux 资深专家会想:即便筛掉了很多驱动代码,一些主流发行版(比如 Debian)仍会为相应平台激活大部分驱动,这样会不会留下安全隐患?确实,这是个合理的担忧,但不必过于担心。大多数驱动都会被编译成模块,而这些模块大部分情况下根本不会被内核加载。

比如,在一个虚拟机中安装了 GNOME 桌面的 Debian GNU/Linux 12.8,系统只会加载 4000 个内核模块中的 100 多个。如果直接运行在物理硬件上,可能会加载两倍的模块,但即便如此,也只是所有模块的 5% 左右。

更重要的是,如果 Linux 内核检测不到对应的硬件,它根本不会加载相关驱动模块。当然,这对文件系统、网络协议或其他与硬件无关的模块并不适用。如果你担心这些模块的安全问题,可以通过简单的命令禁止系统启动后加载新模块:

echo 1 > /proc/sys/kernel/modules_disabled

这样可以有效阻断潜在的安全漏洞。

未来 Linux 代码增长还会继续

值得注意的是,随着新产品和技术层出不穷,Linux 内核的规模还会继续增长,因为其中大多数都得到了 Linux 的支持。面对这股永无止境的浪潮,偶尔的代码清理就像杯水车薪,因为内核开发者通常只会移除那些已经没人会用的旧硬件驱动。这也是许多人喜欢 Linux 的原因之一——它常常能让十几年前的老电脑焕发第二春。

多年来,Linux 内核的增长速度已经稳定在每 9 到 10 周增加大约 40 万行代码的水平。不过,每个版本的增长情况差异很大:有时新版本的内核代码甚至会缩减,而有时则会暴增超过一百万行。

这种代码体积快速增长的主要原因通常是计算机生成的硬件定义头文件。这些文件可能会占用好几兆,比如 Linux 中针对 AMD 现代显卡芯片的头文件就已经超过了 500 万行代码——虽然大部分内容是编译器不会真正使用的硬件特性文档。

即便如此,开发者们目前正在讨论将未使用的定义移到外部存储。这种做法可能会大幅缩小内核的体积。“代码越少越好”的支持者自然会欢迎这种变化,但这并不是为了减少体积而减少体积,而是为了改善安全性、维护性和性能——不过这些优势可能微乎其微,甚至感觉不到。

所有代码都很重要

如果按照一些人的要求,把那些很少用到的旧驱动,甚至所有驱动都移除,反而会对安全性、维护性和性能造成负面影响。毕竟这些驱动仍然有需求存在,如果被移除,它们很可能会被转移到外部维护。

这种做法会严重限制 Linux 的“众人之力”原则,因为这些代码及其修改将不再由经验丰富的内核维护者进行质量审查,也不会在官方内核测试系统中被反复编译和检查性能变化。此外,它还会逃避诸如“内核自保护项目”(Kernel Self Protection Project)等努力的范围,而这些项目致力于持续优化内核代码,提高系统安全性和内核的稳健性。

在某些情况下,驱动外包反而会导致更多的外部内核代码。实际经验表明,由硬件厂商在官方内核代码之外维护的驱动问题重重。比如,Linux 内核开发者通常会在原有驱动的基础上添加对新一代硬件的支持,而硬件厂商却更倾向于基于旧驱动重新创建一个新驱动。结果是错误修复或优化需要在多个地方重复进行,而这样的做法通常是事倍功半。更糟糕的是,许多厂商并不会长期维护驱动,通常只支持几年,甚至维护得不够充分。

来源:CSDN

相关推荐