我们在阿波罗 11 号制导计算机代码中发现了一个未记录的 Bug

查看原文 HN 讨论

文章摘要

JUXT 公司的 Henry Garner 发表了一篇技术博文,详细描述了他们如何使用 Claude 和 Allium(一种开源行为规范语言)在阿波罗 11 号制导计算机(AGC)的飞行代码中发现了一个锁泄漏缺陷。他们将 130,000 行 AGC 汇编代码蒸馏为 12,500 行行为规范,在此过程中直接定位到了这个缺陷。

该缺陷涉及 AGC 管理惯性测量单元(IMU)时使用的共享资源锁 LGYRO。当计算机需要对陀螺仪施加力矩(校正平台漂移或执行星体校准)时,会在开始时获取 LGYRO 锁,在三个轴都完成力矩操作后释放。这个锁防止两个程序同时争抢陀螺仪硬件。

问题出在”cage”(锁死)操作——这是一种紧急措施,通过物理夹具将 IMU 的万向节锁定以保护陀螺仪。当力矩操作正常完成时,程序通过 STRTGYR2 退出并清除 LGYRO 锁。但当力矩操作进行中 IMU 被锁死时,代码通过名为 BADEND 的例程退出,该例程没有清除 LGYRO 锁。缺少的仅仅是两条指令(四个字节):CAF ZEROTS LGYRO

文章还构想了一个戏剧性的场景:在阿波罗 11 号任务中,指令舱飞行员 Michael Collins 独自绕月飞行时,如果在星体校准过程中意外触发了 IMU cage,LGYRO 锁就会被永久占据。此后所有陀螺仪操作都会无声地失败——DSKY 接受输入但不做任何事情。在月球背面的通信盲区,没有地面控制的支持,Collins 将不得不独自判断是否需要重启计算机。

不过,这篇文章后来经过了重要修正。AGC 专家 Mike Stewart(VirtualAGC 项目的核心人物)指出了几个关键事实:这个 bug 实际上在 Apollo 14 之前就已经被发现了(被分配了异常编号 L-1D-02),并在 Apollo 14 和 15 之间被修复。此外,文章中描述的场景无法按原文所述发生——因为启动新的 P52 程序本身就会通过 STARTSB2/GOPROG2 清除 LGYRO。在极少数可以触发该 bug 的特定场景中,它不会默默失败,而是会导致多个作业堆积直到触发程序报警(类似 1202 报警)。

从方法论角度看,这篇文章展示了行为规范相对于测试的独特价值:测试验证代码的行为是否符合预期,而行为规范则追问代码的目的是什么。Allium 规范通过将每个共享资源建模为具有生命周期(获取、持有、释放)的实体,能够系统地检查所有路径,包括那些最难测试的路径。文章最后总结道:Margaret Hamilton 团队手动放置每一个资源释放指令,现代语言虽然尝试用 defer、try-with-resources、with 和所有权系统等机制使锁泄漏在结构上不可能发生,但只要程序员仍然负责编写清理代码的地方,同样的 bug 就在等待。

HN 评论精华

  1. AGC 修复专家 Mike Stewart 的权威回应:最高赞评论来自 VirtualAGC 项目的核心成员 Mike Stewart,他提供了大量关键修正。他指出该 bug 在 Apollo 14 飞行前的三级测试中就已被发现(异常编号 L-1D-02),并提供了两份幸存的异常报告链接。他还纠正了文章中多个不准确之处:文章描述的场景无法发生(启动 P52 会清除锁);Margaret Hamilton 实际上是指令舱软件 COMANCHE 的”绳母”,而非登月舱软件 LUMINARY 的;1202 报警期间 AGC 并非设计来”丢弃低优先级任务”——讽刺的是,着陆制导本身就是最低优先级的任务。

  2. CuriousMarc YouTube 频道推荐:一位评论者向对此感兴趣的人推荐了 CuriousMarc YouTube 频道,该频道记录了大量保护和理解阿波罗 AGC 的工作。他们对 1202 报警有一个潜在的重新解读——实际上有许多条件下该错误可能是极其严重的,可能危及宇航员的生命。

  3. 最喜欢的代码片段:一位评论者分享了 AGC 代码中他最喜欢的注释:TC BANKCALL # TEMPORARY, I HOPE HOPE HOPE / CADR STOPRATE # TEMPORARY, I HOPE HOPE HOPE——这种”我希望希望希望这只是临时的”注释展现了航天工程师们的人性化一面。

  4. 对 AI 发现 bug 可靠性的质疑:一位评论者提出了重要问题——AI 在发现 bug 方面确实有其优势,尤其是在探索性工作中,但仍然有较高的假阳性率。他质疑这个 bug 是否经过了独立验证,并指出有很多 bug 是 AI 找不到但人类能找到的。

  5. 对文章写作方式的批评:一位评论者认为虽然他们发现了一个真实的 bug,但文章的故事化叙述和戏剧化处理(比如胳膊肘碰到开关的场景)缺乏研究支撑,完全是虚构的。他还指出这是 100% AI 撰写的文章,对此感到不满。