Administrator
Administrator
发布于 2026-05-19 / 1 阅读
0

转载文章:一群几乎没有名字的人,写着几十年都不会出错的代码,支撑着整个物理世界运转

来源(强烈推荐这个公众号)

一群几乎没有名字的人,写着几十年都不会出错的代码,支撑着整个物理世界运转

 

他们不在 TED 演讲台上,不出现在科技媒体的封面,甚至没有维基百科的详细词条。但此刻,你乘坐的飞机、停在路边的汽车、病房里的呼吸机、城市里的路灯——都在运行着他们写下的代码。


一、地下室里的那盏灯

1992年,科罗拉多州博尔德市,一个叫 Jean Labrosse 的加拿大工程师,正坐在自家地下室里调试一段实时操作系统内核。

他不是在为某家公司工作。他是在用业余时间,试图解决一个让他困扰已久的问题:为什么在单片机上协调多个任务,这件事在1992年还如此原始、如此危险?

那个年代的嵌入式世界,大多数工程师的做法是在一个无限循环里查询所有状态——俗称"超级循环"(Super Loop)。它简单,但脆弱。一个任务稍微慢一点,整个系统就会错过别的事件。用这种方式控制医疗设备?想想都让人脊背发凉。

Labrosse 没有等别人来解决这个问题。他打开编辑器,开始写 μC/OS(Micro C OS)。

两年后,他把整个源代码和设计原理发表在《嵌入式系统编程》杂志上,附上了完整的注释——超过一万行代码,每一行都有注释。这在当时是几乎不可思议的事。他说的理由很简单:"我写这个是为了让别人能看懂,不是为了炫耀。"

这段代码后来通过了 DO-178B 航空认证,又通过了 FDA 医疗设备认证,被用在了 F-16 战斗机的座舱仪表板上。

Labrosse 的名字,驾驶那架战机的飞行员大概从未听说过。


二、工业革命之后,还有一次没人注意到的革命

我们总喜欢谈论互联网的革命,谈论 iPhone 的革命,谈论大模型的革命。

但有一场革命,几乎没有人注意到它正在发生——物理世界的软件化

从1990年代到2010年代,悄悄发生了一件事:人类制造的每一个稍微复杂的物体,都开始在内部运行代码。汽车里的 ECU(发动机控制单元)、工厂里的 PLC、电梯里的控制器、医院里的输液泵……这些设备不联网、不显示界面、不被用户感知——但它们在以精确到微秒的节拍,控制着真实世界里的每一个物理动作。

这一切的基础,是一批人在安静地写代码。

他们写的代码有几个共同特征:

第一,小。 不是因为他们能力有限,而是运行环境只有 4KB、8KB、64KB 的 Flash 和 RAM。每一个字节都要精打细算。

第二,快,而且要准时。 嵌入式世界里,"够快"和"准时"是完全不同的两件事。一个任务可以在1毫秒内完成,但如果它不能保证在1毫秒内完成,它就不能用来控制刹车系统。这就是实时性(Real-Time)的本质——不是速度,是确定性

第三,不能出错。 不是"尽量少出错",而是不能出错。一个服务器宕机,重启就好。一个心脏起搏器的代码崩溃,病人会死。

写这种代码的人,背负的是普通软件工程师很少感受到的重量。


三、两个人,和一个不该被遗忘的名字

2003年,英国,Richard Barry。

他是一名自由职业的嵌入式顾问,接了太多需要在 MCU 上实现多任务调度的项目,厌倦了每次都要重复搭建同一套脚手架,于是开始写一个轻量级的实时操作系统内核——FreeRTOS

FreeRTOS 的设计目标只有一个:让它在最小的 MCU 上也能跑起来。它的调度器核心只有几百行 C 代码,可以在只有 4KB RAM 的芯片上运行,移植到新平台只需要修改几个函数。

他把代码开源,放在 SourceForge 上,然后等着看会发生什么。

2017年,Amazon 宣布收购 FreeRTOS,将其纳入 AWS IoT 生态。彼时,FreeRTOS 已经是全球下载量最大的嵌入式操作系统之一,运行在数以亿计的设备上。

Richard Barry 得到了一笔钱,但更重要的是,他的代码在 Amazon 的承诺下保持着 MIT 授权,继续开源,继续被全世界的工程师免费使用。

有意思的是,在 IoT 世界的另一端,还有两个人也在做类似的事情。

1999年,IBM 的 Andy Stanford-Clark 和 Arlen Nipper(来自 Cirrus Link)面对一个奇怪的需求:用卫星链路,监控穿越沙漠的输油管道。卫星带宽极其昂贵,每一个字节都是真金白银。TCP/IP 在这种场景下太重——连接建立的握手就要消耗宝贵的带宽,更别提 HTTP 那层层套娃的头信息。

他们设计了 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)。这个协议的控制报头最小只有2个字节,专为"低带宽、不可靠网络、资源受限的设备"而生。

十几年后,整个 IoT 行业爆发,MQTT 成为了物联网通信的事实标准,运行在从工业传感器到智能家居网关的各种设备上。而 Roger Light 写的开源 MQTT Broker——Mosquitto,成了很多人入门 IoT 时第一个跑起来的服务端。

这三个人的名字,在科技媒体上几乎见不到。但每次你家的智能插座上报一条数据,背后都有他们的影子。


四、那个一个人顶半个生态的人

如果要在这份名单里选一个"最被低估的天才",Fabrice Bellard 大概会得票最多。

他写过:

  • • QEMU:目前最广泛使用的开源硬件模拟器/虚拟机,几乎每个嵌入式工程师都用它来仿真目标板

  • • FFmpeg:全球最重要的开源音视频处理框架,YouTube、VLC、几乎所有你用过的视频软件背后都有它

  • • TCC(Tiny C Compiler):一个可以编译自身、只有几百KB、比 GCC 快十倍的 C 编译器

  • • jslinux:世界上第一个在浏览器里运行完整 Linux 的实现

  • • 还有 π 小数点后精度的世界纪录(他用普通PC打破了这个纪录)

这些项目,任何一个都足以让一个人"成名"。而 Bellard 把它们都写了,然后继续下一个。

他没有公司,没有风投,没有公关团队。他就是在写代码。

QEMU 的故事对嵌入式工程师尤其重要。在2003年之前,如果你想在没有物理硬件的情况下调试嵌入式程序,你的选项要么是昂贵的仿真器,要么是没有。Bellard 用 C 语言在软件层面重建了整个硬件——CPU、总线、外设、内存控制器——让开发者可以在 x86 的 PC 上运行为 ARM、MIPS、PowerPC 编写的代码。

这一件事,让全球嵌入式开发的门槛下降了一个台阶。


五、Linux 的守门人,和那些没有名字的补丁

Greg Kroah-Hartman,Linux 内核稳定版(Stable Branch)的维护者。

这个角色的工作是什么?简单说:把 Linus Torvalds 的 mainline 内核中经过验证的 bug fix,小心翼翼地移植到已经发布的稳定版本上,同时不引入任何新功能、不破坏任何现有行为。

听起来很机械,但实际上极度精细。

Linux 内核有数千万行代码,任何一个 patch 的应用都可能产生意料之外的副作用。而工业设备、医疗器械、汽车系统,使用的往往是一个特定版本的内核——它们不能随意升级,但它们需要安全补丁。Greg 做的事,就是保证这些设备能拿到他们需要的修复,而不被迫承受他们不需要的风险。

他管理的邮件列表每天接收数百个补丁,每年处理的代码变更超过一百万行。

Linux内核之上,Ulrich Drepper 和 Rich Felker——两个写 C 标准库的人。

Drepper 主导了 glibc 的开发长达二十年。glibc 是 Linux 上几乎所有用户态程序的地基:mallocprintfopenpthread……这些函数调用,每秒钟在全世界发生数以千亿次。

但 glibc 太大了,太复杂了,太为大型系统优化了——对于嵌入式 Linux 来说,它是一块过于沉重的基石。

所以 Rich Felker 写了 musl libc。它轻量、标准兼容、对静态链接友好——在只有几MB存储空间的嵌入式设备上,musl 往往是唯一的选择。Docker 容器里流行的 Alpine Linux,用的就是 musl。

一个写了太重的库,一个写了轻量的替代——两个人,共同撑起了 Linux 在不同场景下的完整生态。


六、路由器里的那行字符串

Rob Landley,BusyBox 的主要维护者之一。

BusyBox 是什么?它是把 lscpgrepshwgettar……等等数百个 Linux 命令行工具,压缩进一个单一可执行文件的项目。

在完整的 Linux 系统里,这些工具各自是独立的程序,总大小可能有几十MB。而 BusyBox 的版本,整个加在一起可能只有300KB。

你现在家里的路由器,大概率在运行 BusyBox。十几年前出厂的路由器,很可能还在运行同一版本的 BusyBox。

Rob 曾经说过一句话,很能代表这个群体的心态:

"我做 BusyBox 不是因为它有趣,我做它是因为它需要被做好。"。"

这是工程师的语言,不是布道者的语言。他们不谈改变世界,他们谈的是"把这件事做对"。


七、一个人,一个文件,装下了全世界的数据

2000年,美国海军,一艘舰艇上的软件工程师 D. Richard Hipp 遇到了一个麻烦。

他需要在一个嵌入式系统里管理结构化数据。按常规做法,他应该连接一个数据库服务器——但这艘舰艇上没有网络、没有服务器、没有数据库管理员,只有一块运行着精简系统的板子和他手头的代码。

他决定不等别人来解决这个问题。他写了一个可以嵌进任何程序、不需要任何服务器进程、把整个数据库压缩进一个单一文件的 SQL 引擎——SQLite

SQLite 的设计哲学可以用一句话概括:它不是一个数据库服务器,它是一个库。 你把它的源码(一个叫 sqlite3.c 的文件,约十几万行)复制进你的项目,编译进去,然后它就在你的进程里运行,不需要安装、不需要配置、不需要守护进程。

这个设计决定了它能去任何地方。

Android 用它存储联系人和短信。iOS 用它存储所有 App 的本地数据。Firefox 用它管理历史记录和书签。Airbus A350 的飞行数据记录系统用它。全球几乎所有的智能电视、机顶盒、车载导航仪,都在用它。SQLite 的官方文档有一句话,读来让人有点眩晕:"SQLite 是世界上部署量最大的数据库引擎,没有之一。" 估计运行实例超过一万亿个。

但让 SQLite 真正成为这份名单里"最极端案例"的,不是它的部署量,而是它的测试方式

Hipp 为 SQLite 写的测试代码,比 SQLite 本身的源码多出将近六百倍。SQLite 的源码约十五万行,而它的测试套件超过九千万行。测试覆盖率达到 100% 的分支覆盖(MC/DC),和航空软件的认证要求一样严苛——但他没有被任何认证机构要求这么做,他只是认为这是正确的做法。

Hipp 自己出钱,雇了一位全职员工,专门负责测试。

他还给 SQLite 写了一份颇为罕见的东西:质量承诺文档(Quality Commitment Document)。里面写明了他们遵循的开发流程、测试标准、发布前的检查清单——这不是给监管机构看的表演,是他们实际在做的事。

SQLite 的源代码是公有领域(Public Domain),不是 MIT、不是 BSD,而是直接放弃了所有版权。Hipp 的解释是:"我不想让任何人在使用这个代码时有任何法律上的疑虑。"

他在一次访谈里说过,SQLite 将来会比互联网上绝大多数现在活着的网站活得更长。他说这话的语气很平静,不像预言,像是陈述一个他已经想清楚了的工程事实。

大概他是对的。


八、那些离硬件最近的人

还有两个人,干的是最靠近金属的活儿——写 Linux 驱动。

Linus Walleij,Linux 内核 GPIO(通用输入输出)子系统的主要设计者和维护者。

GPIO 是最基础的硬件控制接口:点亮一个 LED、读取一个按键、控制一个继电器——这些操作,背后都是 GPIO。在 Linux 引入统一的 GPIO 子系统(gpiolib)之前,每个平台的 GPIO 控制方式都是各自为政,驱动代码没法复用,移植工作苦不堪言。

Walleij 花了多年时间重构和统一这个子系统,让驱动开发者可以用一套 API 操控不同芯片的 GPIO,让用户空间也可以安全地访问硬件管脚。

Mark Brown,ALSA(Advanced Linux Sound Architecture)的 ASoC(Audio System on Chip)子系统维护者。

ASoC 是让 Linux 能正确驱动嵌入式音频芯片的框架——智能音箱、车载娱乐系统、耳机、麦克风阵列,背后都有它。Brown 还维护着 Regmap(寄存器抽象层)等其他子系统,是让硬件驱动变得不那么痛苦的幕后功臣。

他们两个的代码,一行也不会出现在你的应用软件里,但每次你的 Linux 系统正确识别一块音频芯片,或者 GPIO 操作没有搞乱别的硬件,都是他们在起作用。


九、日本的那条暗线

在这张名单里,有一个体系经常被非日本的工程师忽视——TRON/ITRON

TRON(The Real-time Operating system Nucleus)是由东京大学的坂村健(Ken Sakamura)在1984年提出的架构,ITRON 是其面向工业/嵌入式的子规范。Magnus Damm 是这一体系中的关键贡献者之一,长期在 Renesas 从事相关内核工作。

ITRON 没有像 Linux 或 FreeRTOS 那样在中文技术社区被广泛讨论,但它在日本国内的嵌入式产业里是统治级别的存在:丰田、本田的汽车 ECU,日本家电品牌的控制芯片,数码相机的图像处理模块——很大一部分跑的是 ITRON 内核。

它不开源(主要实现由各厂商自行完成),它不追求全球影响力,但它安静地运行在地球上数十亿台设备里。这或许是"不出名但重要"这个特征在这个群体里最极端的例子。


十、"几十年都不会出错"意味着什么

有一个问题值得停下来想一想:为什么这些代码能做到几十年不出错?

这不只是因为这些人聪明。写出可靠代码的背后,是一套痛苦的约束:

不用动态内存分配。 μC/OS 的早期版本明确建议,实时系统里不要用 malloc——因为堆分配可能失败、可能产生碎片、时序不确定。所有内存在系统启动时静态分配好,之后不变。

测试要覆盖所有路径,包括你觉得不可能发生的路径。 航空级软件标准 DO-178B/C 要求 100% 的 MC/DC(Modified Condition/Decision Coverage)——每一个判断条件的每种组合都必须被测试到。这件事在实践中的代价,是每行代码可能需要几十行测试。

代码审查是强制的,而且要交叉审查。 Labrosse 的 μC/OS-III 代码,经过了不止一家独立机构的审计。Greg 管理的 Linux 稳定版每个 patch 都要经过严格审查,任何有副作用的变更都会被退回。

接受"够用",拒绝"过于聪明"。 最可靠的代码往往是最无聊的代码——直线逻辑,没有技巧,每个 case 都显式处理。聪明的技巧在单元测试里很好看,在嵌入式设备的野外环境里是灾难。

这套约束,和"互联网速度"的文化正好相反。"快速迭代,失败是可以的"——这句话在服务器端成立,在医疗设备上杀人。


十一、他们是谁,他们不是谁

这些人有几个共同点,值得注意:

他们大多数不富有。Jean Labrosse 靠卖 μC/OS 的商业授权和书籍为生,坚持了多年。Richard Barry 把 FreeRTOS 维护了十多年才等来收购。Rich Felker 的 musl 项目长期靠捐款运转。Richard Hipp 的 SQLite 是公有领域——他把版权彻底放弃了,没有任何方式向使用者收费。

他们大多数不出名。在嵌入式社区以外,你很难找到关于他们的深度报道。没有传记,没有纪录片,没有"改变世界的XX人"榜单。

他们大多数不停止。Labrosse 还在更新 μC/OS-III 的文档。Walleij 还在提交 GPIO 的 patch。Brown 还在处理 ASoC 的 bug 报告。他们不是"完成了一件事然后移向下一件"的人,他们是"承诺维护一件事,然后真的去维护"的人。

这最后一点,是软件史上最容易被低估的美德。

任何人都可以在一个月内写出一个原型。愿意在十年后还在修那个原型的 bug 的人,少之又少。而物理世界的基础设施,需要的正是后者。


尾声:地下室的那盏灯还亮着

回到1992年的科罗拉多州博尔德市。

Jean Labrosse 在地下室里调试完了 μC/OS 的第一个版本,把代码打印出来,检查了最后一遍注释。他不知道这段代码将来会运行在战斗机上。他只知道这段代码是他目前能写出的最干净、最正确的版本。

三十年过去了。μC/OS 的代码还在运行。那盏地下室的灯早就关了,但代码留下来了,在某个地方,以确定的节拍,控制着某个真实的物理过程,不知疲倦。

这是这个群体留给世界的东西:不是名声,不是财富,而是那些在黑暗中安静运转、几十年都不会出错的代码。

物理世界在它们的节拍上运转。我们大多数人,永远不会知道它们的名字。


作者

主要作品

应用领域

Jean J. Labrosse

μC/OS-II / III

工业控制、医疗设备、军工

Richard Barry

FreeRTOS

MCU、IoT、消费电子

Magnus Damm

ITRON / TRON体系

汽车电子、日本消费电子

Greg Kroah-Hartman

Linux 稳定版内核

嵌入式Linux、工业设备

Ulrich Drepper

glibc

Linux用户态基础库

Rich Felker

musl libc

轻量嵌入式Linux、容器

Rob Landley

BusyBox

路由器、嵌入式Linux系统

D. Richard Hipp

SQLite

嵌入式数据库、移动端、IoT

Andy Stanford-Clark

MQTT

IoT通信、工业物联网

Arlen Nipper

MQTT

IoT通信

Roger Light

Mosquitto

MQTT Broker、IoT平台

Linus Walleij

GPIO 子系统

驱动开发、硬件控制

Mark Brown

ALSA / ASoC

音频驱动、嵌入式多媒体

Fabrice Bellard

QEMU / TCC / FFmpeg

虚拟化、编译器、多媒体

他们几乎没有名字。但每次你触摸一个屏幕,踩下一脚油门,或者平安落地,都和他们的工作有关。