1.Linux内核代码量近日突破4000万行,成为现代技术体系中不可或缺的关键组件。
2.自1991年创立以来,Linux内核不断增长,每两个月新增约40万行代码。
3.代码增长的原因包括硬件支持的不断扩展、高效的模块化设计和完善的文档与代码质量。
4.然而,有人认为过多的功能可能导致安全问题,建议进行代码清理。
5.专家表示,过度精简可能导致性能和安全性问题,目前尚无迹象表明Linux内核代码增长会导致这些问题。
以上内容由腾讯混元大模型生成,仅供参考
近日,随着 Linux 6.14 rc1 的发布,Linux 内核的源代码总量首次超过 4000 万行。作为从服务器到物联网设备的核心支柱,Linux 内核已发展为现代技术体系中不可或缺的关键组件。这一里程碑也引发众人热议,代码体量的扩大,对代码质量与性能的持续提升究竟是好还是坏?
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 内核开发者通常会在原有驱动的基础上添加对新一代硬件的支持,而硬件厂商却更倾向于基于旧驱动重新创建一个新驱动。结果是错误修复或优化需要在多个地方重复进行,而这样的做法通常是事倍功半。更糟糕的是,许多厂商并不会长期维护驱动,通常只支持几年,甚至维护得不够充分。
对用户的负面影响
如果驱动程序由外部团队维护,对用户来说会变得麻烦许多。用户无法像现在这样直接通过内核免费获取驱动程序。虽然 Linux 发行版可以重新打包这些驱动并包含在系统中,但这无疑会给每个人带来额外的工作量。结果可能是得不偿失,甚至可能让事情变得比现在更糟糕。
有些人可能会建议为驱动程序创建一个新的集中式存储库,但这种做法并不会比当前内核自带的集中管理更有优势。至少在没有人给 Linux 提供稳定接口,将驱动程序与内核其他部分解耦之前,这样做意义不大。这种稳定接口一直是一个老生常谈的需求,目的是让用户像在 Windows 系统中那样,可以独立更新驱动程序和内核,从而简化安装和管理过程。
不过,是否能真正实现这些好处,以及这种做法会给 Linux 开发带来哪些巨大劣势,都不是简单的问题。有一点很明确:这些接口需要大量额外的代码来保证向前和向后兼容。而这些代码往往容易出错,从而引发安全漏洞。这样的设计反而会与追求“精简内核”的目标背道而驰。
难以避免的“增重”
以上观点可能会让人觉得内核代码不需要任何精简,但事实并非如此。和所有复杂软件一样,Linux 内核中也存在许多可以优化的地方。就像其他软件一样,Linux 的某些部分随着时间推移逐渐增加了“冗余”。例如,新版内核在只有几兆内存的老旧系统上运行得越来越差。
然而,这些问题比看上去要复杂得多,甚至有些像“自行车棚效应”(bikeshedding):就像设计核电站时,每个人都对建一个自行车棚有发言权,因为它看似简单;但实际上,很多“节省开销的简单办法”在内核中可能反而适得其反,甚至是表面功夫,就像一些杂志承诺的快速减肥法一样不靠谱。
当然,像身体多余的脂肪一样,代码“增重”最终也可能给 Linux 带来健康问题。然而,从目前来看,还没有迹象表明这种问题会在短期内出现。实际上,人们已经对 Linux 的“膨胀”担忧了二十多年,但 Linux 内核依然稳健发展。截至目前,Linux 仍然是世界上最成功的操作系统内核,这也许正是因为它的“体积”。
对此,你如何看待 Linux 内核代码的快速增长?
来源:
https://www.tomshardware.com/software/linux/linux-kernel-source-expands-beyond-40-million-lines-it-has-doubled-in-size-in-a-decade
https://www.heise.de/forum/heise-online/Kommentare/Linux-durchbricht-40-Millionen-Zeilen-Marke/forum-555052/comment/
https://www.heise.de/en/background/Numbers-please-Linux-soon-to-weigh-40-million-lines-of-code-10250618.html