GitHub Explorer

1202 警报如何救下登月:读阿波罗 11 号 68K star 源码里超前 20 年的容错设计

GitHub: https://github.com/chrislgarry/Apollo-11

一句话总结

这是 1969 年阿波罗 11 号制导计算机(AGC)飞行软件的社区转录归档——13 万行汇编,在一台只有约 2K 字 RAM、36K 字「绳索存储」的机器上,提前几十年实现了优先级实时调度、检查点重启容错、字节码数学虚拟机、过载优雅降级四项现代关键系统的支柱设计。它不是用来跑的,而是用来读的:一部「为失败而设计」的工程圣经,外加一个 68K star 的互联网文化现象。

值得关注的理由

  1. 登月惊魂的代码现场可以亲手定位:着陆时连发的 1201/1202 程序警报,根因和解法都能在 Luminary099/EXECUTIVE.agc 里读到——计算机过载时不死机,而是按 Hal Laning 设计的优先级调度「丢弃低优先级任务、保住制导」,再靠重启保护从检查点续跑。这套设计直接让阿姆斯特朗得以继续着陆。
  2. 1969 年的四项设计超前现代 20+ 年:非抢占式优先级 RTOS 内核(商用化要等 1987 年的 VxWorks)、检查点/可重入容错(「crash-only software」这个术语 2003 年才出现)、字节码数学虚拟机(JVM 思想早了十余年)、负载脱落式优雅降级(云原生时代才成共识)。读它等于读一份关键系统设计的「先知文本」。
  3. 它是「软件工程」一词的诞生地,也是顶级内容选题:Margaret Hamilton 在此期间提出并推广「software engineering」;代码里藏着 BURN_BABY_BURN、TEMPORARY, I HOPE HOPE HOPE、# PLEASE CRANK THE SILLY THING AROUND 等工程师彩蛋;issue 区更是全球开发者把历史代码玩成「行为艺术现场」的奇观。故事密度极高。

项目展示

仓库本身是纯代码 + 多语言文字,无截图。最佳「亲手体验」入口是把 VirtualAGC 编译进浏览器的在线仿真器,可直接操作 DSKY 面板:

  • 在线仿真 moonjs(浏览器内运行真实 AGC + DSKY):https://www.svtsim.com/moonjs/agc.html
  • 配图建议:Margaret Hamilton 站在与自己等身高的阿波罗源码打印纸旁的 1969 年 NASA/MIT 历史照片(公有领域,来源标注「NASA / MIT Museum」)

项目画像

维度数据
GitHubhttps://github.com/chrislgarry/Apollo-11
Star / Fork68,038 / 7,694
代码行数13 万行 AGC 汇编(指令舱 Comanche055 65,348 行 + 登月舱 Luminary099 64,838 行,175 个 .agc 模块;行内注释率约 48%)。注:tokei 不识别 .agc,须本地实测
项目年龄转录项目 12 年(2014 起),原始代码作于 1969
开发阶段低维护(历史存档,代码已冻结)
贡献模式社区众包转录 + 60+ 语言 README 翻译(215 人,hacktoberfest 友好)
热度定位大众热门 / 存量经典(GitHub 历史高星「文化·教育」类第一梯队)
质量评级注释「A+」 容错设计「A+」 模块化「A」 可读性「B」(汇编时代局限)

作者视角:为什么存在这个项目

本仓库要分两层看「作者」:原始代码的创造者,与 GitHub 仓库的转录策展者。

创始人/作者背景

原始作者 = 1969 年 NASA / MIT 仪器实验室团队:

  • Margaret Hamilton——COLOSSUS 编程负责人,领导阿波罗在轨飞行软件开发,并在此期间提出并推广「software engineering」一词,为这门学科正名。那张她站在与自己等高的源码打印纸旁的著名照片,正出自这批代码。
  • Hal Laning——设计了 AGC 的优先级调度执行系统(Executive),即「过载时丢弃低优先级、保住关键任务」的核心机制,登月时正是它救了场。
  • Don Eyles——25 岁编写登月舱着陆下降制导程序,1202 警报中正是他的代码扛住了过载。

仓库策展者 = Chris Garry(chrislgarry)+ 215 位社区贡献者:前 NASA 实习生,2016 年 7 月把这批源码上传 GitHub 后病毒式走红(commit 月度分布在 2016-07 单月暴增 126 次)。真正的转录主力是社区(James Harris 127 commits 等),Top 贡献者仅占 24.4%,是典型的「逐字打字录入 + 多语言翻译」众包项目。权威源头则是 Ron Burkey 的 VirtualAGC 项目(从 MIT 博物馆原始打印件扫描转录)。

问题判断

团队面对的是一个当时无人解决过的命题:用一台内存比今天一封电子邮件还小的机器,跑一个永不停机的实时操作系统。Hamilton 观察到的关键现实是——宇航员会在错误的时刻按错键、硬件会瞬态抽风、任务会比预算的算力更重。她坚持软件必须像桥梁一样被工程化地设计成「为失败而生」。

解法哲学

三条贯穿全代码的信条:

  1. 优先级即生命线:算力不够时不是平均变慢,而是保高优先级、丢低优先级(Laning 的 Executive)。
  2. 状态可重建胜过状态不丢:与其防止崩溃,不如让崩溃后能在毫秒级从最近检查点无缝续跑(Hamilton 主导的重启保护 + phase table)。
  3. 空间比速度贵:宁可用解释执行慢一个量级,也要把数学运算的代码密度压到极限(解释器虚拟机),好把够多的物理塞进 36K 绳索。

战略意图

AGC 是阿波罗「自主返回能力」的核心:即便与地面失联,飞船也能靠机上软件完成入轨、着陆、起飞、交会、再入。这套软件在整个登月工程里承担的是「最后一道、不能失败」的实时控制职责——这也是它把可靠性置于一切之上的根本原因。

核心价值提炼

创新之处(1969 年的超前设计)

  1. 非抢占式优先级调度 + 静态 core set 池(EXECUTIVE.agc,新颖度 5/5,历史意义 5/5,现代可迁移性 5/5):维护 7 个 core set(每个 12 个寄存器的任务上下文)+ 5 个 VAC 区,作业按 PRIORITY 寄存器排序、主动让点切换。当 core set 耗尽就 TC BAILOUT1 / OCT 1202——这正是登月著名的 1202 警报;VAC 区耗尽则报 1201。过载时不死机,而是软件重启 + 丢弃积压的低优先级作业,制导照常。现代叫优先级 RTOS,商用化晚了 20+ 年。
  2. 检查点 + 可重入 phase 重启保护(本套代码最伟大的设计,新颖度 5/5):把每个长任务切成可重入的 phase,推进时调用 PHASCHNG 把「组号.相位号」写进 phase table(冗余存原值+补码,异或校验防位翻转)。硬件复位后 GOPROG 校验并从检查点把每个活动任务重新派发、从断点续跑。1202 当天 BAILOUT 反复触发、每次都从 phase 续跑,制导从未中断。现代叫 checkpoint-restart / crash-only software,术语 2000 年代才定型。
  3. 字节码数学虚拟机(INTERPRETER.agc,新颖度 5/5):硬件只有定点加减,却要算向量叉积、矩阵旋转、反三角、双精度。团队实现了一台解释执行的「数学协处理器」——每个 15 位字解出两个 7 位伪操作码,伪指令集含 VXV(叉积)、DOT(点积)、MXV(矩阵乘向量)、UNIT(归一化)、SQRT、ARCSIN 等。一行 VXV 顶几十条原生指令,用执行速度换代码密度。和 JVM 同思想、早了十余年。
  4. 名词-动词人机接口(PINBALL_*.agc,新颖度 4/5):一切交互归约为一对两位十进制码——Verb(动作)+ Noun(数据对象)。「Verb 16 Noun 68」= 监视着陆数据。用最少硬件表达近乎无限的命令组合。这就是今天命令调色板、git commit、REST「动词+资源」的同构思想。

可复用的模式与技巧(给现代工程师的启示)

  • 为失败而设计,而非假设不失败:AGC 不试图杜绝崩溃,而是让崩溃后毫秒内从检查点续跑——对应今天的幂等、重试、断点续传、crash-only。
  • 优雅降级是关键系统第一美德:过载时丢弃低优先级、保住核心功能(1202 当天救了登月)——对应现代的 load shedding / 背压 / 熔断。
  • 资源约束催生简洁:2K RAM 逼出了静态分配、无锁内核、表驱动、字节码——约束是好设计的助产士。
  • 注释即沟通:每个文件头有功能描述、调用序列、报警/中止模式、所需初始化、产出、「被破坏寄存器(debris)」清单——把维护者当人看的工程礼仪。
  • 把人的错误纳入设计:DSKY 输入校验、着陆程序里「让宇航员手动转雷达天线、之后复查他是否在撒谎」的防御逻辑——假设操作者会犯错。

关键设计决策

最值得现代工程师深读的是 1202 警报的代码闭环:过载发生在 EXECUTIVE.agc 的 NEXTCORE 找不到空闲 core set 时触发 OCT 1202 → 走 BAILOUT(OCT 40400)软件重启 → GOPROG/FRESH_START_AND_RESTART.agc 校验 phase table 完整性 → 把每个活动任务从其检查点 phase 重新派发。整条链路(PHASCHNG → RESTART_TABLES.agc → GOPROG)共同实现了「重启对宇航员近乎透明」。这套「调度降级 + 检查点续跑」的组合拳,是一份比任何教科书都鲜活的高可靠系统实证。

竞品格局与定位

本仓库无传统竞品(历史存档,不与任何在研项目争夺用户)。此节改述其与权威项目的关系与生态定位。

与 VirtualAGC 的互补关系

唯一强相关的是 VirtualAGC(Ron Burkey 2003 年发起,github.com/virtualagc/virtualagc)。二者互补而非竞争:

  • chrislgarry/Apollo-11 = 面向大众的「展示版/阅读版」转录——目录清晰、README 多语言、为浏览与玩梗优化,star 量是 VirtualAGC 的数十倍,占据大众认知入口;
  • VirtualAGC = 可仿真运行的权威版——含汇编器 yaYUL + CPU 仿真器 yaAGC + DSKY 仿真,是学术与考据的源头。

本仓库 issue #38「Merge changes with upstream VirtualAGC」(至今 open)明确承认 VirtualAGC 是上游权威。引用考据细节时应以 VirtualAGC / ibiblio.org/apollo 为准。

生态定位

它凭「易读 + 高 star + 强文化属性」占据「人类登月源码」这一不可复制话题的大众入口;护城河就是话题本身。派生出 moonjs(在线仿真)、iAGC(iOS 仿真器)等衍生玩法。

套利机会分析

  • 信息差:它不是技术选型对象,而是故事密度满分的内容选题——「软件工程」一词诞生地、Margaret Hamilton 传奇、1202 警报登月惊魂、代码注释梗、社区玩梗文化,每条都是公众号爆款料。中文圈对这些故事的系统梳理仍不充分,套利空间大。
  • 技术借鉴:优先级调度、检查点可重入容错、字节码 VM 换空间、负载脱落式降级——这四项 1969 年的设计是今天高可靠/嵌入式/分布式系统的核心范式,可直接当设计灵感。
  • 生态位:填补「人类登月源码的大众可读入口」,与权威的 VirtualAGC 形成「展示版 ↔ 权威版」分工。
  • 趋势判断:存量经典,不靠迭代涨星,靠永恒话题持续吸纳新读者;护城河不可复制。

风险与不足

  • 它是只读历史存档,不可用于任何现代工程:强绑定 AGC 硬件与 bank 切换结构,无现代可移植性;要「跑起来」需用 VirtualAGC 而非本仓库。
  • commit 历史易被误读:586 个 commit 是 2014+ 的社区转录/翻译活动,不是 1969 年原始开发——分析时务必厘清,否则会闹「阿波罗团队 12 年只提交 586 次」的笑话。
  • 权威性需溯源:策展者 chrislgarry 是可信的社区整理者,但权威源头是 Ron Burkey 的 VirtualAGC;细节考据应以上游为准。
  • 可读性门槛高:AGC 汇编 + bank 切换 + 偏移寻址使控制流跳转密集,靠近半数的注释才得以补偿——非汇编背景读者需借助 DeepWiki 等导览。

行动建议

  • 如果你要用它:别当软件用——它是只读史料。要体验就用 moonjs 在线仿真器操作 DSKY;要可运行/可汇编的权威版用 VirtualAGC。
  • 如果你要学它:直奔 Luminary099/EXECUTIVE.agc(1202 警报的代码现场)与重启保护链(PHASCHNG → RESTART_TABLES.agc → FRESH_START_AND_RESTART.agc),再看 INTERPRETER.agc(数学虚拟机)、THE_LUNAR_LANDING.agc(Don Eyles 的着陆程序)。配 DeepWiki 导览读最高效。
  • 如果你要传播它:最佳叙事角度是「1202 警报:一套调度系统如何救下登月」「软件工程之母 Margaret Hamilton」「68K star 代码注释梗与社区玩梗文化」——技术与人文双线都有料。

知识入口

资源链接
DeepWikihttps://deepwiki.com/chrislgarry/Apollo-11(已收录,覆盖 Executive/调度/解释器/PINBALL/制导/IMU 对准等)
Zread.aihttps://zread.ai/chrislgarry/Apollo-11(访问返回 403,收录未确认)
权威源 / 文献VirtualAGC https://www.ibiblio.org/apollo/ ;1201/1202 警报权威技术文档 Cherry「Exegesis of the 1201 and 1202 Alarms」
在线 Demomoonjs 浏览器内 AGC 仿真 https://www.svtsim.com/moonjs/agc.html

相关报告