Linux系统概述:从一封邮件到世界的基础设施
by Obsidian · 26 Aug 2026·computer systems / linux / os / architecture
← /u/obsidian/blog
by Obsidian · 26 Aug 2026·computer systems / linux / os / architecture
理解 Linux,绕不开 Unix。1969 年,AT&T 旗下的研究机构贝尔实验室的 Ken Thompson 和 Dennis Ritchie 等人开发了 Unix,随后用新发明的 C 语言对它进行了重写。用高级语言编写操作系统,在当时是一个激进的选择,但这个决定让 Unix 首次具备了跨硬件平台移植的可能,并由此在高校和研究机构中迅速扩散。
Unix 留下的不只是代码,更是一套影响至今的Unix设计哲学。Bell System Technical Journal 在 1978 年将其归纳为:
Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.
其核心主张是:每个程序只做一件事,并把它做好;程序之间通过文本流协作。这催生了管道(pipe)机制——将一个程序的输出直接接入另一个程序的输入,用简单工具的组合完成复杂任务。"一切皆文件"是另一条关键原则:磁盘、键盘、网络套接字,在 Unix 眼中都是可以统一读写的文件描述符,极大简化了程序与设备交互的复杂度。这些原则在 Linux 中被完整继承,是今天 Linux 命令行如此强大的根本原因。
Linux 的早期传播,很大程度上得益于一个制度性的偶然——AT&T 当时因 1956 年反垄断同意法令 的约束,被限制在受监管的电话业务范围内,无法将 Unix 商业化,便以象征性的授权费将 Unix 源代码授权给各大学。学生们在课堂上读源码、改源码,Unix 的思想就这样在整整一代程序员中生根。但好景不长。1984 年,AT&T 被拆分,法律限制解除,Unix 随即从学术礼物变成了商业产品。AT&T 开始严格执行版权,授权费水涨船高,各大计算机厂商——IBM、惠普、Sun、DEC——也纷纷以 Unix 为基础推出自己的私有变种:AIX、HP-UX、SunOS、Ultrix……这场"Unix 战争"带来了灾难性的碎片化:同样打着 Unix 旗号的系统,在系统调用接口、文件系统布局、网络实现上却大相径庭,为一个平台写的程序,换个厂商的机器往往就无法编译。Unix 的可移植性优势,正在被商业竞争逐步蚕食。
版权的收紧让源代码从公开变为禁区。用户买到的是一个黑箱,不能查看,不能修改,不能分发。对于习惯了自由研究和分享的学术社区而言,这是一种根本性的倒退。正是在这一背景下,自由软件运动的先驱 Richard Stallman 于 1983 年发起了 GNU 计划,目标是从头构建一套完全自由的类 Unix 操作系统。GNU 是"GNU's Not Unix"的递归缩写——这个名字本身就是一个宣言:功能上兼容 Unix,但在法律上与它彻底切割。直接使用或修改 Unix,哪怕只是参考其源码,都面临侵权风险,要想让每个人都能自由使用、修改和分发,唯一的出路就是从一张白纸开始,独立实现每一个组件。为了让"自由"有法律保障,Stallman 起草了 GPL 协议:任何人都可以使用、修改 GPL 软件,但对外分发修改后的版本时,必须向被分发对象以 GPL 提供对应的源代码——这一"传染性"条款确保了自由不会在流传中消失。
到 1991 年,GNU 已经积累了编译器(GCC)、文本编辑器(Emacs)、调试器(GDB)以及大量基础工具,唯独缺少最关键的一块:内核。GNU 自己的内核项目 Hurd 因设计过于复杂,开发进展迟缓,始终无法投入实用。整个 GNU 系统就像一台备齐了所有零件却唯独缺少发动机的汽车,静静等待着那个人的出现。
1991 年 8 月 25 日,芬兰赫尔辛基大学的学生 Linus Torvalds 在 comp.os.minix 新闻组发出了一封后来被无数人引用的邮件。他以一种轻描淡写的语气写道,自己正在为 386 电脑开发一个免费的操作系统,"只是个人爱好,不会像 GNU 那样庞大和专业"。
Hello everybody out there using minix — I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones.
没有人预料到,这句轻描淡写的判断,宣告的是一个将改写计算机历史的项目。
Linus 的起点是 Minix——Andrew Tanenbaum 为教学目的设计的类 Unix 操作系统。Minix 结构清晰,足够让学生理解操作系统的基本原理,但 Tanenbaum 刻意将它的复杂度控制在教材范围之内,他明确拒绝接受那些会使 Minix 超出教学范围的功能扩展,也不打算将其演进为真正可用的系统——他在 1992 年的 Tanenbaum-Torvalds 论战中直接断言 "LINUX is obsolete.",并批评 Linux 采用的单体内核设计是 "a giant step back into the 1970s."。Linus 对此深感不满:他买了一台新的 386 个人电脑,想要一个能充分发挥硬件性能的操作系统,既用不起商业 Unix,又不愿止步于 Minix 的种种限制,于是决定自己写一个。他从一个简单的任务切换程序出发,逐渐添加文件系统、设备驱动和系统调用支持,从着手开发到发布 Linux 0.01,约历时半年——大约一万行代码,以 C 为主,包含汇编,沿用 Minix 文件系统格式(尚无自有文件系统实现),并依赖特定的硬件分区布局,远非普通用户可以直接上手的可用系统,但内核的基本骨架已经成立。
Linux 与 GNU 计划的相遇近乎命中注定。GNU 耗费数年积累了完整的用户空间工具链,却在内核这最后一块拼图上迟迟无法突破;Linux 有内核,却没有随附完整的用户空间工具链——编译器、Shell、基础命令需要另行获取。两者一经结合,才形成了可以实际使用的完整操作系统。这也是为什么 Stallman 等人坚持应当称其为"GNU/Linux"——Linux 内核固然关键,但没有 GNU 工具,它什么也运行不了。尽管这场命名之争延续至今,日常中大多数人还是只说"Linux"。
Linus 最初为 Linux 设定了一个限制非商业使用的自定义许可证,但很快意识到这与自由软件社区的理念相悖,于 1992 年将其改为 GPL。这个决定的长远影响远超他当时的预期。GPL 的"传染性"条款意味着任何人若将基于 Linux 的修改版本对外分发,必须向被分发对象提供对应的源代码。若仅在内部使用而不对外分发,则不受此约束——这也是许多公司可以在内部大量修改 Linux 而无需公开源码的法律依据。另一方面,Copyleft 机制也从制度上杜绝了以闭源形式对外分发修改版、却对接收方封锁源码的可能,让每一位贡献者的劳动成果得以永久保持可自由获取和修改的状态。恰在此时,互联网开始在技术社区中普及,分散在全球各地的开发者得以通过邮件列表协作,提交补丁、移植驱动、修复漏洞。Linus 建立起一套严格但高效的代码审查机制,亲自把关每一个合并入主线的改动。贡献者的数量以几何级数增长,Linux 的硬件支持范围和系统稳定性随之迅速提升。1994 年发布的 Linux 1.0 已能在 x86 硬件上稳定运行,并具备了完整的网络功能——一个真正意义上的自由操作系统,第一次站在了世人面前。
"Linux"这个词在不同语境下指向不同的东西,理清这一点是理解整个生态的前提。
Linux 内核 是 Linus 和全球数千名开发者共同维护的那一个项目,托管于 kernel.org,负责最底层的硬件管理:处理器调度、内存分页、设备驱动、文件系统接口、网络协议栈。内核本身没有用户界面,启动后若没有任何用户空间程序,屏幕上什么也不会出现。
发行版(Distribution) 则是将内核与 GNU 工具链、包管理系统、图形界面、配置工具乃至预装软件打包在一起,形成普通用户可以直接安装使用的完整系统。发行版的工作,是在内核这块原石上进行打磨和封装,决定默认的用户体验、软件仓库的范围,以及系统更新和安全维护的节奏。
两者的关系,大致相当于 Linux 内核是发动机,发行版是装配了这台发动机的整车。同一台发动机可以驱动跑车,也可以驱动卡车——车型不同但动力来源相同。这正是为什么各发行版在底层行为上高度一致,却在使用体验上差异显著。
三十年间,Linux 发行版的数量已经难以计数,但大多数都可以追溯到少数几个"祖先"。理解这张家族谱系,比逐一记忆发行版名称更有价值——同一家族的发行版共享包格式、包管理命令和底层约定,换发行版时迁移成本极低。
Debian 家族使用 .deb 包格式和 apt 包管理器,以稳定性著称。Debian 本身的发布周期很长,每个版本经过充分测试才推出,是许多服务器管理员的首选;Ubuntu 在 Debian 的基础上更注重桌面体验和固定的约六个月一个版本的节奏,凭借良好的硬件兼容性和活跃的社区成为桌面 Linux 的代名词,其衍生版 Linux Mint 则进一步面向从 Windows 迁移过来的新用户,降低了学习曲线。
Red Hat 家族使用 .rpm 包格式,历史上是企业 Linux 市场的主导者。Fedora 扮演新技术试验田的角色,最新的内核版本、编译器和容器技术往往最先出现在这里;RHEL(Red Hat Enterprise Linux)从 Fedora 中挑选成熟稳定的特性,以商业付费支持的形式提供给企业。2020 年 Red Hat 宣布将 CentOS 8 提前终止,并以 CentOS Stream 取而代之。CentOS Stream 在这条管线中位于 Fedora 与 RHEL 之间:Fedora 作为最前沿的试验田,成熟的特性先进入 CentOS Stream,再从 CentOS Stream 挑选稳定的部分进入 RHEL——CentOS Stream 因此是 RHEL 下一版本的滚动预览,而非过去 CentOS 所扮演的"RHEL 发布后的免费重建版"角色。这一调整彻底改变了 CentOS 原有的定位,由此催生了 Rocky Linux 和 AlmaLinux 作为社区接替者:Rocky Linux 与 RHEL 保持二进制兼容;AlmaLinux 自 2023 年起将目标调整为 ABI 兼容(系统调用接口及库接口层面兼容,而非逐字节一致的二进制重建),以应对 Red Hat 限制 RHEL 源码公开访问的变化。
Arch Linux 代表了截然不同的哲学:滚动更新(没有固定版本,软件始终保持最新)、最小化默认安装(系统初始只有最基本的组件,一切按需添加)、以及详尽的 Arch Wiki。这套哲学对初学者门槛较高,但 Arch 的用户往往对自己系统的每一个组件了如指掌。Manjaro 在 Arch 的基础上提供了图形安装向导和预配置环境,降低了入门难度,同时保留了 Arch 生态中极为丰富的 AUR(Arch 用户仓库)。
Linux 今天运行的地方之广,超出大多数人的直觉。
服务器与云计算是 Linux 最稳固的阵地。互联网上绝大多数 Web 服务器、数据库、消息队列和 API 网关运行在 Linux 之上;AWS、Google Cloud、Azure 的云主机默认镜像几乎清一色是 Linux;Docker 容器技术和 Kubernetes 编排系统均以 Linux 的命名空间(namespace)和控制组(cgroup)为底层支撑。
移动设备领域,Android 以 Linux 内核为基础,在其上构建了一套完整但与桌面 Linux 差异显著的用户空间。Android 设备每年出货量以十亿计,这意味着全球绝大多数人口每天都在使用基于 Linux 内核的设备,尽管他们未必意识到这一点。
嵌入式系统同样是 Linux 的重要战场。家用路由器(OpenWrt)、智能电视、汽车车载信息系统、工业控制设备,以及树莓派这类单板计算机,大量运行着经过裁剪的 Linux。它的优势在于:内核本身高度可配置,可以按需裁减到极小体积,同时保留完整的驱动支持和网络栈。
超级计算机领域,Linux 的统治地位最为彻底:Top500 榜单——全球最快的 500 台超级计算机排名——自 2017 年 6 月起,榜单上的操作系统已经全部是 Linux。背后的原因是可定制性:超级计算机对调度器、内存管理和高速互联网络有极为特殊的需求,Linux 开放的内核允许研究团队深度定制,而封闭系统根本无从实现这一点。
桌面系统是 Linux 占有率相对最低但对开发者最重要的领域。开发者工作站、科研环境和部分创意工作者的主力机器选择 Linux,核心驱动力在于:无处不在的终端、原生的开发工具链(gcc、git、docker)、以及与服务器环境的高度一致性——在本地写好的代码、打好的容器,部署到生产服务器时不需要担心环境差异。
理解 Linux 的生命力,需要理解让它得以持续存在的法律和哲学框架。
Richard Stallman 在发起 GNU 计划时,提出了"自由软件"(Free Software)的四项基本自由:为任何目的自由运行程序;自由研究并修改源代码;自由分发副本;自由分发修改后的版本。用 GNU 官方的表述:
The freedom to run the program as you wish, for any purpose. The freedom to study how the program works, and change it so it does your computing as you wish. The freedom to redistribute copies so you can help others. The freedom to distribute copies of your modified versions to others.
这里的"自由"是 freedom(言论自由的自由),而非 free of charge(免费)——自由软件可以收费,但不能限制用户的上述四项权利。
为了保证这四项自由不被下游违反,Stallman 设计了 GPL(GNU 通用公共许可证),其核心机制称为 Copyleft:任何基于 GPL 代码的衍生作品,对外分发时必须同样以 GPL 开放源代码;若仅在内部使用而不对外分发,则不受此约束。GPLv2 的核心条款表述为:
You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
这形成了一种有条件的"传染性"——自由以许可证条款的方式向下游强制传播,防止有人拿走开源代码改改后以闭源形式分发,却不向被分发对象提供对应源码。
Linux 内核采用 GPLv2 许可证,并附有 Linus 附加的"Linux-syscall-note":用户空间程序在编译时包含内核的 UAPI(用户态 API)头文件,不会因此被认定为内核的衍生作品,从而无需遵守 GPLv2。内核源码中对此有明确说明:
NOTE! This copyright does not cover user programs that use kernel services by normal system calls - this is merely considered normal use of the kernel, and does not fall under the heading of "derived work".
这个例外针对的是头文件的包含关系,而非运行时通过 syscall 指令触发内核的行为——后者本身不构成代码层面的衍生,无需此例外条款覆盖。这个例外设计至关重要——如果用户空间程序也被 GPL 强制感染,几乎不可能有任何商业软件愿意运行在 Linux 上。但内核模块(驱动)则不同,并入内核主线的模块必须是开源的;而以独立模块形式分发的驱动,争议的核心在于:加载进内核运行的模块,是否构成内核的"派生作品"——若是,则必须遵守 GPLv2;若否,则可以闭源分发。这一问题至今没有法院判例给出明确答案。Linux 内核本身以 MODULE_LICENSE 宏区分 GPL 兼容与专有模块,加载专有模块时会打印 tainted(污染)标记,这是法律上的灰色地带,tainted 标记是社区立场的表达,而法律结论尚无定论。这也是 NVIDIA 专有驱动长期游走于灰色地带的背景。2012 年,Linus 在 Aalto 大学问答环节公开竖中指并说出那句著名的"NVIDIA, f**k you",起因是 NVIDIA 长期拒绝向 Linux 社区提供必要的硬件文档,导致 Optimus 双显卡等功能在 Linux 上完全无法工作——这是对 NVIDIA 整体不合作态度的愤怒,而非仅针对开源授权规则本身。不过 2022 年,NVIDIA 终于发布了,延续十年的对立关系才算有所缓和。
GPL 并非唯一的开源许可证。MIT 许可证和 Apache 2.0 许可证允许商业公司将代码纳入闭源产品而不附加限制,因此在库和框架领域更为常见。BSD 许可证同样宽松,macOS 底层基于 BSD,却可以是完全闭源的商业产品,这在法律上完全合规。不同许可证之间的兼容性是一个复杂的话题,但对于构建软件或发布项目的人而言,了解每个依赖组件的许可证要求是不可回避的责任。
将以上所有内容放在一起,Linux 系统从硬件到用户应用程序可以划分为清晰的层次:
从上到下,每一层的职责边界清晰。用户应用程序运行在用户态,看到的是操作系统精心构建的"假象":独占的地址空间、随时可用的文件路径、透明的网络连接。
系统库(以 glibc 为核心)是应用程序与内核之间最重要的中介,它封装系统调用并提供标准 C 接口,同时处理内存分配策略、缓冲 I/O、线程同步等跨平台细节。值得注意的是,glibc 大量工作恰恰是为了降低系统调用的频率,从而减少用户态与内核态来回切换的性能开销——例如 malloc 内部维护内存池,只在需要向内核申请新内存时才触发 brk 或 mmap;printf 也会先在用户态完成格式化和缓冲,再统一调用 write。绝大多数用高级语言编写的程序,最终都会经由 glibc 或等价的系统库触达内核。
系统调用接口是内核向用户态暴露的唯一合法入口,也是上一篇文章讨论过的"用户态切换到内核态"的关口。在 x86-64 架构上,程序通过 syscall 指令完成这次切换,将控制权交给内核态完成操作,再返回用户态。这个接口非常稳定——Linux 对系统调用的向后兼容性有近乎偏执的坚守,Linus 在多次公开表态中所强调:
We do not break userspace. Ever. Period. I don't care how clever your reasoning is.
20 年前编译的程序在今天的内核上通常仍能正常运行。
内核的五大子系统与上一篇讨论的操作系统五大功能高度对应:进程调度对应处理器管理,虚拟内存对应存储管理,VFS(虚拟文件系统)对应文件管理,设备驱动对应设备管理,网络子系统则对应通信管理——在传统操作系统教材中这一职能有时被单列,有时并入设备管理,Linux 内核将其作为独立子系统维护,体现了网络在现代系统中的核心地位。其中 VFS 是一个值得特别注意的设计:它是统一的文件系统接口层,允许 ext4、btrfs、xfs、tmpfs、procfs 等不同实现插入其下,而上层代码无需关心文件实际存储在哪里或用什么格式。/proc 和 /sys 正是通过这套机制,以普通文件树的形式暴露内核运行状态和设备参数——这是"一切皆文件"哲学在现代 Linux 中最具体的体现。
技术层面的优秀是必要条件,但不是充分条件。Linux 能成为世界基础设施,还有几个相互强化的结构性因素。
内核开发采用分布式子系统维护者体系:Linus 本人不再审阅每一行代码,而是由各子系统的可信维护者(maintainer)负责审核本领域的补丁,再逐级合并。这套机制使得内核可以同时消化来自数百家公司和数千名独立贡献者的修改,每个版本都包含来自全球数百家机构的贡献。
商业利益与开源的共生是另一个关键因素。Red Hat、Canonical、Intel、Google、Meta、Microsoft——这些公司都是 Linux 内核的大型贡献者,驱动力不是慈善,而是 Linux 是它们商业基础设施的核心。修复 Bug、提升性能、添加驱动,直接服务于自身的商业利益。GPL 的 Copyleft 机制确保了这些改进一旦对外分发,就必须向接收这份分发物的对象同步提供对应的源代码。这与 AGPL 的要求不同——AGPL 的触发条件是"网络交互":当用户通过网络与运行中的 AGPL 程序交互时,运营者须主动为该用户提供获取对应源码的渠道(如下载链接),而非主动向公众发布的义务,但涵盖范围比 GPL 更广,可覆盖到"仅在服务器上运行、从不向外分发"的场景。回到 GPL:GPL 的这一机制从制度上防止了任何人把基于 GPL 的修改版本以闭源形式分发出去、却对接收方封锁源码,形成良性循环。
最后是生态的正反馈:越多的服务器运行 Linux,越多的开发者熟悉 Linux 命令行……这个循环的触发点,是 1990 年代末 Apache HTTP Server 与 Linux 的组合在 Web 服务器市场的迅速崛起——低廉的部署成本和可靠的稳定性,让 Linux 在互联网基础设施中站稳了第一个滩头。此后正反馈在服务器和云计算领域已持续运转二十余年,形成了极高的迁移壁垒。