科技史里流传最广的一张黑白照片,定格在1969年:一位清瘦年轻的女性站在MIT实验室里,身旁整齐码放着与她等高的纸质程序清单。
这位用软件托举阿波罗登月的总工程师走了。麻省理工学院官方确认,阿波罗计划机载飞行软件工程团队负责人、现代软件工程先驱玛格丽特·汉密尔顿(Margaret Hamilton)于2026年9月30日逝世,享年90岁。大众文化偏爱孤胆天才的叙事,总把阿波罗11号最后时刻的惊险化险为夷,附会成女程序员即兴写了几行神仙代码救场。
这种造神是对她最大的贬低。汉密尔顿从来不是单打独斗的码农,那场登月危机里也没有任何灵光一现的侥幸。真实的历史是,她在物理算力极度匮乏的荒蛮年代,统领数百名工程师将异步并发、优先级队列与防御性容错焊进了底层架构。当硬件被海量垃圾信号冲垮时,系统依照预设的调度法则平静地活了下来。
2KB内存与手织代码,在物理断崖上搭建骨骼
今天随便一个手机应用就能吞掉几百兆内存,人们很难想象半个世纪前阿波罗计算机的资源贫瘠到何种地步。
阿波罗制导计算机(AGC)的固定只读存储(ROM)仅有36,864个字,可擦写内存(RAM)更是只有少得可怜的2,048个字。整机字长16位,其中15位用于数据,1位用于奇偶校验,内存周期约为11.72微秒。更反直觉的是,当年的程序无法直接烧录进硅片芯片,而是由新英格兰纺织女工用铜线穿过磁芯手工穿凿而成。导线穿过磁芯代表1,绕过代表0。这种被称为磁芯绳(core rope memory)的工艺,让汉密尔顿在工程界得到了绳母的诨名。任何一根线穿错,整艘飞船升空后就会万劫不复。
在进入阿波罗项目前,汉密尔顿在MIT协助混沌理论创始人爱德华·洛伦兹(Edward Lorenz)用LGP-30计算机模拟天气。当时没有像样的调试器,她就把穿孔纸带铺在走廊地面上,用铅笔和透明胶带手工修改二进制打孔;参与SAGE雷达防空系统时,她甚至接手过连开发注释都写成希腊文和拉丁文的底层程序。这种在物理底层摸爬滚打出来的嗅觉,让她对硬件的脆弱与不可靠有着近乎偏执的清醒。
1965年她受聘进入MIT仪器实验室,1968年升任指令舱与服务舱团队助理总监。当时的主流工业界把硬件视为核心资产,软件被贬低为附属于机器的杂役工作。为了给这份工作争取平等的工程地位,汉密尔顿顶着传统硬件同行的讥讽,强推软件工程(Software Engineering)这一称谓。
在内存只有几千字节的牢笼里,抢占式操作系统是不可能的奢望。汉密尔顿团队构建了一套极简而高明的异步实时调度体系:负责定时延时调用的WAITLIST最多只能容纳9个短任务;主调度器EXECUTIVE通过严格的优先级队列,最高仅支持并发7个核心作业(Core Sets,每个仅占12个字)与5个矢量累加区(VAC,每个占用44个字)。
同时,宇航员操作的DSKY显示单元通过PRIODSP例程与计算核心解耦。外层报警可以随时打断界面刷新,却绝不能把底层动力学计算拖下水。正是这套严密的物理调度层级,在登月舱降落的生死关头发挥了定海神针的作用。
登月惊魂102秒:1201与1202警报的自愈真相
1969年7月20日,阿波罗11号登月舱飞鹰号正在向月球表面降落。距离月面仅剩数分钟的关键阶段,机载计算机突然发出蜂鸣并闪烁错误代码。
很多通俗读物把这一刻写成电脑奇迹般地自行忽略了故障,这完全遮蔽了真实的工程逻辑。登月舱运行的软件版本代号为Luminary 099,当时发生了一场致命的人工与硬件失配:机载交会雷达的开关处于错误挡位,导致硬件接口以每秒数百次的高频持续向处理器灌入虚假中断,偷走了大量计算周期;舱内宇航员奥尔德林为了确认高度与速度,又频繁在键盘上敲下16/68指令刷新显示屏。
有限的内存池被瞬间挤爆。
当EXECUTIVE调度器用光了全部7个Core Set槽位,系统立即抛出1202警报;紧接着VAC向量累加区见底,系统又抛出1201警报。换作寻常软件系统,这时候早已死锁瘫痪。
汉密尔顿构建的软失效(fail-soft)机制在此时展现了威力。系统在数毫秒内完成自动热重启,重建调用栈,随后严格按照任务优先级表执行冷酷淘汰:直接掐死交会雷达的数据接收,停掉非核心的屏幕刷新,把全部算力锁死在火箭发动机推力调节、姿态控制与制导回路。
休斯敦地面控制台的年轻工程师Jack Garman与Steve Bales确认了警报性质,给出继续指令,阿姆斯特朗随即稳稳落入静海。救下飞船的不是奇迹,是架构师提前写进系统的断臂求生法则。
击碎零失误神话,400人工业体系的工程确立
汉密尔顿对防御性容错的执念,其实来自一次被官僚主义驳回的教训。
在模拟测试阶段,汉密尔顿带着4岁的女儿劳伦来到实验室。小女孩在操作台上乱按,在模拟飞行途中触发了本该在发射前执行的校准程序P01,系统当场死机。汉密尔顿随即向NASA管理层提交改进报告,要求在代码里加入边界拦截,防止在飞行中调出该程序。
NASA高层驳回了提议,给出的理由冠冕堂皇:宇航员受过严苛训练,绝不可能犯这种低级失误。
结果到了1968年阿波罗8号绕月任务,宇航员吉姆·洛威尔在太空中真的误触启动了P01程序,关键导航数据顷刻归零。汉密尔顿团队被通宵叫醒抢修,最终通过地面计算紧急上传参数拯救了飞船。这次险情在内部被称为劳伦缺陷,彻底粉碎了所谓训练有素绝不犯错的神话,防御性编程自此成为航天软件的行业铁律。
《孙子兵法》有言:善战者之胜也,无智名,无勇功。
大众喜欢把登月归功于某位个人英雄,但照片里堆至一人高的代码清单,凝结的是MIT仪器实验室超过400名专家的工业化协作。Richard Battin主导算法,Hal Laning搭建调度雏形,Dan Lickly与Don Eyles深耕制导。汉密尔顿的核心贡献,是作为架构总师在蛮荒摸索中建立了测试矩阵、人机隔离屏障与系统级容错标准。
离开MIT后,汉密尔顿创办Higher Order Software与Hamilton Technologies,终生推广通用系统语言(USL)与错误预防架构。2016年奥巴马为她颁发总统自由勋章时,官方引文明确写着:开创异步软件设计、引入优先级调度与系统故障恢复机制。
反观今天的科技产业,到处充斥着狂飙百亿千亿参数的算力崇拜,软件体积膨胀了数万倍,偶发崩溃却被习惯性地推给算力不足或用户操作失误。半个世纪前在2KB内存里跑通的阿波罗系统提醒着每一个工程师:最高级的优雅从不是把系统包装成刀枪不入的神迹,而是在深渊降临时,懂得如何让机器清醒地舍弃冗余、守住核心。
