Eileen'blog

第七章 Linux的诞生:一个大学生的杰作

2026-05-10T09:10:00 文章

1991年,计算机世界已经分裂成两大阵营。

一边是微软的MS-DOS和Windows,跑在廉价的IBM兼容机上,占领了普通用户的桌面。另一边是苹果的Macintosh,高端、漂亮、贵,在图形设计和出版领域独霸一方。

但在另一个世界里——那个由连接全世界的网络、嗡嗡作响的服务器、命令行和C语言构成的世界——UNIX才是王者。问题是,UNIX分裂了,而且贵。AT&T的System V要几千美元的授权费,伯克利的BSD又因为和AT&T的官司前途未卜。

有一群人很不爽。

他们是程序员、学生、研究人员。他们想要一个UNIX,但不想付钱;他们想读源码、改源码,但版权法不让;他们想参与一个共同的事业,但UNIX属于AT&T。

这群人中,一个21岁的芬兰大学生决定自己动手。

他叫林纳斯·托瓦兹

这一章我们回答:

  • 为什么林纳斯要自己写一个操作系统内核?
  • GNU计划已经写了十几年,为什么内核迟迟出不来?
  • 为什么Linux能形成社区?邮件列表、补丁和“林纳斯的独裁”是如何运作的?
  • Linux只靠开源社区活着吗?没有社区它会死吗?(WSL的例子)
  • 为什么我们需要Linux?为什么现在的开源应用往往先适配Linux?
  • 什么是Linux桌面?为什么它没有占领个人电脑?
  • 常见的开源许可证(GPL、BSD、MIT、Apache)有什么区别?
  • Linux如何统治了服务器和移动设备?

先记住硬件前提。

硬件前提

Linux的诞生依赖一个硬件普及:x86架构的个人计算机

1991年,一台386 PC已经只要1000多美元,性能超过了几年前的工作站。学生买得起,可以在宿舍里搞开发。更重要的是,386的保护模式提供了完整的虚拟内存和任务隔离(分页、特权级、任务寄存器),为现代操作系统提供了硬件基础。

林纳斯的电脑是一台Intel 386兼容机(由他的外债和父母资助),配置4MB内存、40MB硬盘。没有这个廉价而强大的平台,Linux就没有诞生的土壤。


一、为什么林纳斯要自己写一个操作系统?——“只是我的一个爱好”

1991年初,林纳斯在赫尔辛基大学修UNIX课程。学校有一台MicroVAX小型机,跑着Ultrix(DEC的UNIX版本)。但林纳斯更习惯在自己那台386 PC上工作——PC上跑的是MS-DOS,但他想要一个UNIX。

他试过两个选择:

  • Minix:荷兰教授安德鲁·坦能鲍姆为教学写的一个迷你UNIX,源码开放,可以读、可以改。但Minix的设计目标是“清晰易懂”,不是“高性能”。它故意做得很简单:单用户、没有真正的分页内存管理、文件系统慢、不支持抢先式多任务。林纳斯觉得Minix太“教学化”了,他想在自己的机器上跑一个“真”的UNIX,能充分利用386的保护模式。

  • 386BSD:BSD正在移植到386平台,但过程很慢。1991年,386BSD还没有可用的稳定版本。就算有,伯克利和AT&T的官司也让很多人不敢用。

于是他在邮件列表里发了一条消息:

“我正在写一个免费的操作系统(只是个爱好,不会像GNU那么大和专业)。它从4月份开始,现在已经有了一些碎片。我主要对Minix感兴趣,想做一个比Minix更好的……”

这封邮件的标题是:“What would you like to see most in minix?”

他后来回忆说:“我一开始并没想做一个世界级的操作系统。我只是想了解我的新电脑。”

这就是Linux的起点:不是“改变世界”的崇高理想,而是一个学生的好奇心和“我们动手试试”的冲动。

他从任务切换开始写,然后是终端驱动,然后是文件系统。8月份,第一个“正式”版本0.01发布,只有约1万行代码。他把源码上传到赫尔辛基大学的FTP服务器。很快,全世界的地下室里、宿舍里、实验室里——有人下载,然后给他发来补丁。


二、为什么GNU的Hurd内核迟迟出不来?“完美主义”与“敏捷”的战争

Linux不是凭空出现的。如果没有GNU计划(理查德·斯托曼在1983年发起),Linux可能只是一个内核,什么用都没有。

GNU的目标是“一个完全自由的、与UNIX兼容的操作系统”。到1991年,GNU已经完成了几乎所有大型组件:

  • gcc:C编译器,至今仍是UNIX世界的编译器标杆。
  • emacs:文本编辑器。
  • glibc:C标准库。
  • bash:命令行解释器。
  • coreutils:ls, cp, grep等基本工具。

唯一缺的是内核。这个内核叫Hurd

Hurd从1986年左右开始设计。它采用微内核架构(基于Mach微内核),只在内核空间中做最基本的事情(进程调度、内存管理、消息传递)。文件系统、驱动、网络栈全部跑在用户空间的服务器进程中。

理论上,微内核更稳定(驱动崩溃不会导致整个系统挂掉)、更模块化。但问题是:

  1. 微内核的性能问题。用户空间的服务器之间通信需要多次消息传递(内核→用户→内核→用户),在1990年代初的硬件上,这比单内核(如Linux)慢得多。Mach微内核每秒钟几十微秒的系统调用开销,在当时就是巨大浪费。

  2. 设计过于复杂。为了做“完美设计”,GNU开发者在几个设计方案之间反复争论,迟迟不动手写核心代码。Hurd的开发进度极其缓慢。

  3. 没有“粗糙但能跑”的版本。林纳斯的态度是:“先让一个最简单的东西跑起来,然后发布,让用户帮你测试。”Hurd的开发者则倾向“先设计完美再实现”。结果:1991年Linux已经能跑bash和gcc,而Hurd甚至连一个可以安装的alpha版本都没有。

1992年,坦能鲍姆和林纳斯有一场著名的辩论。坦能鲍姆说:“微内核是未来。Linux是单内核,过时了。”林纳斯回应:“微内核的论文我看过,但理论再漂亮,现实中我的代码能跑,而你的设计还没落地。”历史站在林纳斯这边。


三、为什么Linux能形成社区?——邮件列表、补丁和“林纳斯的独裁”

1991年底,Linux内核只有约1万行代码,全部由林纳斯一个人写。到1995年,已经有上百名开发者参与;到2000年,数千人;到今天,Linux内核每年有来自全球数千名贡献者的数万次提交。

这种大规模分布式协作是怎么形成的?林纳斯做对了三件事。

第一,开放的邮件列表讨论。

林纳斯把所有开发讨论放在comp.os.linux新闻组(后来迁移到邮件列表)上。任何人都可以订阅,任何人的技术提案都会得到回应。这种透明让开发者感到自己是社区一员。

第二,补丁文化。

在Git出现之前,开发者用diff命令生成补丁文件,然后发邮件。林纳斯通过patch命令手动合入。流程简单得可怕:你不需要签贡献者协议,不需要提交申请,只要你的补丁能解决问题、不破坏现有功能,就会进入内核。

低门槛吸引了海量贡献者。很多大学生第一次参与开源,就是从给Linux修一个小bug开始的。

第三,“林纳斯的仁慈独裁”。

林纳斯拥有最终决定权:任何争议,他拍板。但他的原则是:技术优先(谁的代码好就用谁);信任模块维护者(后来内核太大,他把子系统交给专门的维护者);公开批评但不对人(邮件中骂代码但不骂人)。

这种“独裁+社区”的模式被称为BDFL(仁慈的终身独裁者)。它避免了自由软件运动中常见的“无休止设计讨论”,保留了执行的效率。

你可能会想:Linux是不是完全依赖那群自愿的程序员?如果有一天,这些人不干了,Linux会不会直接消亡?

答案是:不会。因为今天的Linux已经不完全是一个“社区项目”了。

第一,商业公司养着一大批全职内核开发者。 比如,Linux内核的顶级贡献者来自Intel、Red Hat、Google、IBM、SUSE、Facebook等公司。这些人拿公司的薪水,专门写Linux内核代码。因为这些公司的业务——云服务、服务器、Android——都离不开Linux。社区不再是一群业余爱好者,而是产业联盟。

第二,即使所有志愿开发者一夜消失,已经存在的Linux代码不会消失,已经运行Linux的设备也不会停止工作。 只是新硬件(比如下一代显卡)可能没人写驱动。但商业公司会立刻补上,因为他们的利益绑定在Linux上。

第三,Windows用户现在也离不开Linux了。 你可能听说过WSL(Windows Subsystem for Linux,Windows的Linux子系统)。微软在2016年推出WSL,允许用户在Windows上直接运行原生Linux命令行工具(bash、gcc、python、ssh等),不需要虚拟机或双系统。后来WSL 2甚至内置了一个轻量级的Linux内核。为什么微软要做这件事?因为大量开发者(数据科学家、后端工程师、嵌入式开发者)需要Linux工具链,如果他们觉得Windows不方便,就会换成Mac或直接装Linux。微软为了留住这些开发者,主动把Linux“请”进了Windows。

所以,Linux不是靠“爱心”活着,而是靠真实的技术需求巨大的商业价值。社区是它的灵魂,但不是它的命脉。


四、为什么我们需要Linux?——从服务器到开源工具链

你可能不是程序员,平时只用Windows或Mac,但你其实每天都在使用Linux(的成果)。因为互联网的绝大部分服务器跑在Linux上,你访问的网站、刷的视频、发的消息,背后都有Linux在支撑。

那么,为什么Linux在服务器端这么重要?

  • 稳定:Linux可以连续运行几年不重启,适合不能停机的服务。
  • 安全:开源意味着安全专家可以审查代码,漏洞被发现后修复更快。
  • 免费:对于中小企业,不需要花几千美元买Windows Server授权。
  • 轻量:最小化的Linux可以只用几十MB内存,适合云服务器容器化。

为什么现在的开源应用往往先适配Linux?

你可能听说过一些开发工具的名字:Docker、Kubernetes、TensorFlow、Node.js、React……它们几乎都是先在Linux上跑得最好,然后才移植到Windows和Mac。这是因为:

  • 多数顶级开发者自己用Linux(或Mac,但Mac也是Unix系)。他们写完软件,首先在自己的环境测试,所以Linux版最成熟。
  • 服务器是Linux。如果你写一个后端服务(比如API、数据库),它最终要部署到Linux服务器上。先在Linux开发,可以减少“在我机器上能跑,到服务器就崩”的问题。
  • 包管理方便。Linux发行版有成熟的包管理器(aptyum),安装依赖一行命令。Windows直到近些年才有winget,远没有Linux方便。

所以,如果你是一个开发者,想学习新工具,最好的做法是装个Linux虚拟机或者用WSL。这也是为什么微软要搞WSL——他们知道开发者需要Linux环境,与其让他们双系统,不如在Windows里原生支持。


五、Linux桌面:为什么没有占领个人电脑?

什么是Linux桌面?

很多人一听到“Linux桌面”就觉得很复杂,以为要天天对着黑底白字的命令行。其实,Linux可以安装图形界面,就像Windows和macOS一样。你开机看到登录屏幕,桌面有背景图片、文件夹图标、任务栏、开始菜单(或类似物)。你可以用鼠标点开浏览器、Office软件、听歌、看电影。Linux桌面指的是在个人电脑上(笔记本或台式机)安装Linux作为日常操作系统的形态,而不是只把它当服务器用。

Linux桌面的历史几乎和Linux内核一样长。1992年就有了最早的图形界面。今天的Linux桌面,比如Ubuntu、Fedora、Debian,已经非常漂亮,也足够稳定。然而,它的份额始终在2-3%徘徊。

为什么?

1. 分裂的桌面环境

Linux的图形界面不是由一个公司开发的,而是由多个社区分别维护。主要有两个大派系:

  • GNOME:界面简洁,默认布局类似macOS,被Ubuntu(2020年前后版本)和Fedora使用。
  • KDE Plasma:功能丰富,高度可定制,类似Windows的布局。

除此之外还有XFCE(轻量)、Cinnamon(类似Windows 7)、Budgie、Pantheon(Elementary OS)等等。每个都有自己的设置工具、文件管理器、终端模拟器。普通用户看到这么多种“桌面”,直接蒙了。开发者资源也被分散,一个软件要适配多个桌面环境,增加了维护难度。

2. 应用生态匮乏

Linux桌面可以装Chrome、Firefox、Spotify、Steam、VS Code、Zoom等主流软件。但还有很多常用软件没有Linux版:

  • Adobe全家桶(Photoshop、Premiere、After Effects)——没有。
  • Microsoft Office——网页版或WPS替代,但功能不如原生。
  • 许多专业行业软件(AutoCAD、SolidWorks、Pro Tools)——没有或性能差。
  • 主流3A游戏——虽然Steam Proton可以让很多Windows游戏在Linux上跑,但仍有兼容性问题,而且许多新游戏首发不提供Linux版。

你可能会说:“我不需要这些,我就上网、看视频、写文档。”那Linux桌面对你可能够用。但绝大多数普通用户的需求是“电脑买回来就能用,想装的软件都有”,而Linux做不到。

3. 硬件兼容性问题

虽然现在Linux对主流硬件的支持已经很好,但一些特殊硬件仍然麻烦:

  • 新款显卡(NVIDIA)的驱动程序需要手动安装,且闭源驱动有时会与内核版本冲突。AMD显卡的开源驱动较好。
  • 一些Wi-Fi芯片、指纹识别器、触摸屏的驱动缺失或需要自己编译内核。
  • 笔记本的省电模式、续航优化不如Windows。

4. “先有鸡还是先有蛋”的死循环

因为用户少,厂商不愿意开发Linux版软件;因为软件少,用户不愿意用Linux桌面。这个循环很难打破。Windows靠巨大的市场份额锁死了生态,Linux桌面没有机会打破这个循环。

5. Linux桌面的真正定位

Linux桌面并不是“为了取代Windows”而存在的。它的用户群很明确:

  • 开发者:需要原生Linux环境写代码,尤其是后端、嵌入式、C++程序员。
  • 科研人员:很多科学计算软件跑在Linux上。
  • 隐私和安全发烧友:喜欢完全开源的系统,可以自己审计代码。
  • 旧电脑拯救者:轻量级Linux发行版可以让十年前的电脑流畅运行。

对这些人来说,Linux桌面已经足够好。但要让普通人的妈妈也能用,还差得远。

一句总结:Linux桌面不是“失败”,而是“没有成为主流”。它在一个小众但重要的市场里活得很好。


六、开源许可证科普:GPL、BSD、MIT、Apache的区别

Linux的成功离不开许可证的选择。你可能在各种开源软件里见过LICENSE文件,里面写着GPL、MIT、BSD等字样。它们有什么区别?

为什么要区分许可证? 因为开源不等于“随便用”。不同许可证对“你能否修改后闭源”“你修改后是否需要公开源代码”“你能否商用”有不同要求。

1. GPL(GNU General Public License)

  • 核心条款:Copyleft。如果你基于GPL代码写了一个新软件,并分发给别人,那么你的新软件也必须使用GPL许可证,并提供源代码。
  • 目的:保证软件永远自由,任何人不能把它变成闭源产品。
  • 例子:Linux内核、GCC编译器、Git。
  • 适用场景:你希望你的代码被所有人自由使用,但不希望别人拿去做闭源的商业软件。

一句话:你用了我,你也得开源。

2. BSD(Berkeley Software Distribution License,比如BSD 3-Clause)

  • 核心条款:允许闭源商用,只要在版权声明中注明原始作者。
  • 没有“传染性”。你可以把BSD代码放进自己的闭源软件里,不需要公开你的源代码。
  • 例子:FreeBSD内核、Go语言的部分早期代码、Redis(早期采用BSD)。
  • 适用场景:你想鼓励最大限度的代码复用,不介意被人拿走闭源赚钱。

一句话:你随便用,给我个署名就行。

3. MIT License

  • 核心条款:和BSD类似,极其宽松。允许闭源、商用,只要求保留版权声明。
  • 比BSD更简单:没有禁止用作者名字做广告的条款(BSD 3-Clause有)。
  • 例子:Node.js、React、Angular、JQuery、X Window System。
  • 适用场景:你想让代码被尽可能多的人使用,不管他们拿来干什么。

一句话:你爱干嘛干嘛,别告我就行。

4. Apache License 2.0

  • 核心条款:类似MIT/BSD,但增加了专利授权条款。如果贡献者持有软件相关专利,使用该软件的人自动获得该专利的使用许可。
  • 也允许闭源商用,但必须保留版权声明和专利声明。
  • 例子:Android(用户空间部分)、Apache HTTP Server、Kubernetes、TensorFlow。
  • 适用场景:大公司开源项目,因为公司可能有大量专利,需要明确授权。

一句话:MIT + 赠送你专利授权。

简单对比表格

许可证允许闭源要求公开源码专利授权适用项目
GPL是(传染)隐含Linux, Git
BSDFreeBSD
MITReact, Node.js
ApacheAndroid, K8s

Linux为什么选择GPL v2?

林纳斯在1992年左右把Linux的许可证从自己的许可换成了GPL v2。他看重的正是GPL“反闭源”的传染性——这保证了任何公司不能拿走Linux内核改成闭源产品,从而保护了社区形成的协作成果不会一夜之间被私有化。而如果选择BSD或MIT,很可能早就有公司(比如当时的Sun、IBM)做了Linux的闭源分支,导致社区分裂。

Linux后来没有升级到GPL v3,因为GPL v3加入了“反Tivo化”(禁止硬件锁定阻止用户修改软件)和更严格的专利条款,林纳斯认为这会限制Linux在某些嵌入式设备中的采用。这个选择是务实的。


七、Linux如何统治了服务器和移动设备?

虽然Linux在桌面失败,但在服务器和移动设备上,它是绝对的王者。

服务器胜出的原因:

  • 免费:Windows Server需要许可证,Linux零成本。
  • 稳定:Linux可以连续运行几年不重启,适合关键任务。
  • 网络性能:Linux继承了UNIX的网络栈,对高并发、TCP/IP优化极好。
  • 可裁剪:小到几MB的内核,适合嵌入式设备。

移动设备的胜利: 2005年,Google收购了Android Inc.,基于Linux内核搭建移动操作系统。安卓 = Linux内核 + Dalvik/ART虚拟机 + Java框架 + Google服务。选择Linux的原因:已经支持ARM架构,驱动模型成熟,GPL v2允许上层闭源(Android的用户空间用Apache许可证)。2008年安卓开源,2012年成为全球第一的移动操作系统。

今天,全球超过70%的智能手机运行安卓,超过90%的超级计算机运行Linux,互联网上大部分服务器运行Linux。Linux不是“赢”了桌面,而是直接跳过了桌面,统治了计算的其他战场


八、小结:Linux为什么能成功?

  • 时机:PC性能与互联网的成熟。
  • 许可:GPL v2确保了自由与商业的平衡。
  • 可移植性:支持多种CPU架构。
  • 开放、务实:先跑起来,再迭代。
  • 社区模式:邮件列表、补丁、林纳斯的独裁。
  • 发行版多样性:不同方向满足不同用户群。

哪些选择被固定了?

  • 单内核架构 vs 微内核。
  • GPL v2许可证 vs 更宽松的协议。
  • 分布式协作开发模式(后来催生了Git)。
  • Linux桌面偏安一隅,未能取代Windows。

被放弃的路径:Hurd微内核、386BSD、BDFL的替代治理模式。


下一章预告

Linux在服务器和超级计算机上横扫千军,但在桌面端,Windows帝国固若金汤。微软是怎么做到的?它的“兼容性锁链”和OEM铁三角是怎么形成的?IE捆绑如何毁掉网景又招来反垄断官司?

下一章:Windows帝国的建立(加厚版)