百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

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

sinye56 2025-02-15 17:12 1 浏览 0 评论

近日,随着 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 内核开发者通常会在原有驱动的基础上添加对新一代硬件的支持,而硬件厂商却更倾向于基于旧驱动重新创建一个新驱动。结果是错误修复或优化需要在多个地方重复进行,而这样的做法通常是事倍功半。更糟糕的是,许多厂商并不会长期维护驱动,通常只支持几年,甚至维护得不够充分。


相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: