ARTICLE · 1200860
阿波罗登月源码刷屏GitHub!90岁代码教母谢幕,4KB内存竟藏着神级操作

作者程问
编辑陈卓
一行英文,就把读者带回了登月年代
科技账号 World of Engineering 在社交平台上只发了短短一行英文:“阿波罗11号的源代码,在GitHub上就能看。”

▲ 引发全网程序员围观的简短推文
评论区瞬间变成了大型极客狂欢现场。有人冷幽默地调侃:“太好了,现在谁都能在家自己搞个航天计划了。”

▲ 网友打趣“现在谁都能自己搞航天计划了”
还有程序员条件反射般地抛出了那个统治代码圈的经典老梗:“所以,已经有人用 Rust 语言把它重写一遍了吗?”

▲ 程序员在评论区玩起了“用 Rust 重写一切”的经典梗
顺着网线摸过去,让全球开发者翻来覆去研读的,是一个名叫 chrislgarry/Apollo-11 的公共代码仓库。
它早就静静地躺在那里,攒下了惊人的 7.53万颗星标(Stars) 和 8200多次分支复刻(Forks)。点开左侧的文件树,里面整整齐齐地躺着当年飞向月球的两个核心大脑:指令舱程序 Comanche055,以及登月舱程序 Luminary099。

▲ GitHub 上狂揽 7.53 万星的 Apollo-11 源码仓库首页
但一个早就公开的老仓库,为什么会在 2026年10月 突然再次刷屏全网?
因为就在两周前的 2026年9月30日,一位名叫 玛格丽特·汉密尔顿(Margaret Hamilton) 的老人在马萨诸塞州剑桥市安详辞世,享年90岁。
如果你打开阿波罗指令舱源码的第一页,在 CONTRACT_AND_APPROVALS.agc 这个文件里,你会看到一行用纯字符敲出来的审批签名:提交人:Margaret H. Hamilton,日期:1969年3月28日。

▲ 指令舱源码批准文件的开篇,记录了博物馆扫描与转录来源;署名位于文件后续行
她是阿波罗机载飞行软件的灵魂统帅。翻阅她参与领导开发的代码,也成了程序员纪念这位“代码教母”的一种方式。

▲ 《卫报》刊文悼念玛格丽特·汉密尔顿辞世,享年 90 岁
而当你点开这些尘封了半个多世纪的代码,你会发现:人类第一次踏上月球的故事,远比教科书里写的更加惊心动魄。
01.4KB内存与“老太太织毛衣”:用玩具算力直闯月球
先来做一个能让人冷汗直流的算术题。
1969年,你的目标很明确:把三名宇航员送到38万公里外的月球附近,让其中两人乘登月舱着陆,再将三人平安送回地球。
但横在工程师面前的硬件障碍,按今天的标准看简直是一场灾难。
阿波罗飞船指令舱和登月舱各自搭载了一台 阿波罗制导计算机(简称 AGC)。这台机器重达70磅(约32公斤),体积差不多有一个微波炉那么大。
它的算力有多大?主频只有 2 MHz
它的内存有多大?按今天的字节换算,它只有大约 4 KB 的可读写内存(RAM,精确说是2048个字),以及 72 KB 的只读程序存储(ROM,精确说是36864个字)。
这是什么概念?你现在手机里随便存一张微信搞笑表情包,体积都超过几百 KB。也就是说,把人类送上月球的整套导航软件,连塞满你手机里的一张表情包都不够!
在连现代操作系统桌面都放不下的狭小空间里,怎么保证程序在火箭升空的剧烈震动和太空辐射下绝对不崩溃?
阿波罗工程师给出的行动方案,堪称硬核到了极点:把只读程序直接“织”进铜线里!

▲ 硬件专家 Ken Shirriff 拆解阿波罗计算机如何“把软件织进导线”
在当时,AGC 的只读程序是用一种名叫 “磁芯绳存储器”(Core Rope Memory) 的黑科技制造的。
工程师们把软件编译成由 0 和 1 组成的清单,然后交给雷神公司(Raytheon)工厂里的女工。女工们手里拿着长长的金属针,像织毛衣一样在密密麻麻的环形磁芯阵列里穿引铜线:导线从磁芯圆环中间穿过去,就代表数字 1;导线从磁芯外面绕过去,就代表数字 0。 仅仅一个小小的磁芯,就能穿绕多达192根线。
这堪称字面意义上的 “硬编码”(Hard-coded)。当时的工程师甚至半开玩笑地把这种存储器叫做 “LOL Memory”,即 “Little Old Lady Memory”(老太太存储器)。
这种物理织出来的代码能在断电后保留。但代价同样残酷:一旦制成,程序修改往往涉及重新制造或更换存储模块!
在这种容错率为零的极限高压下,汉密尔顿带领 MIT 实验室团队干了一件改写计算机史的大事。在那个软件还被视为“硬件附属品”的年代,她推动普及了 “软件工程”(Software Engineering) 这个词。

▲ 网友指出汉密尔顿团队在编写阿波罗代码时推动了“软件工程”概念的普及
她带领的团队在短短 4 KB 的内存里,构建了包含 异步优先级调度和重启保护 的软件系统。
这套设计有多致命?1969年7月20日,阿波罗11号登月舱正在向月球表面急速下降。就在距离月面只有几千英尺的生死关头,计算机突然疯狂闪烁,跳出了令人生畏的 “1201”和“1202”程序报警!
交会雷达接口产生的大量额外计数请求占用了计算机时间,最终使执行系统无法为新任务分配所需资源,触发程序报警。
计算机报警后执行软件重启,恢复制导等关键任务,丢弃部分待执行工作。 地面控制人员判断可以继续,登月进程得以推进。
这套过载恢复机制,成了阿波罗软件史上最著名的设计之一。
02.点火程序叫“烧吧宝贝”:4KB里的摇滚幽默与神级数学
当你翻开 GitHub 上的源码目录,扑面而来的是一股浓烈的1960年代摇滚气息与极客浪漫。
全网最出圈的一个文件,在登月舱目录里,名字长达一串:BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc。
翻译过来就是:“烧吧,宝贝,烧吧,主点火例程”。

▲ 主点火例程中的功能说明、法语格言与数据表“别碰我”注释
负责登月舱发动机点火的生死代码,名字居然起得这么皮?
文件开头的双井号注释,记录了唐·艾尔斯(Don Eyles)在登月四十周年聚会时讲述的命名故事:这个名字取自1960年代著名黑人电台 DJ “Magnificent Montague” 在播放最劲爆的灵魂乐唱片时高喊的口头禅,“Burn, baby! BURN!”。
国内博主“铁锤人”在翻看这段代码时也忍不住感叹:哪怕完全看不懂汇编语言,光去翻翻这些文件名和旁边的英文注释,都足够让人拍案叫绝。
在代码的角落里,这样的彩蛋比比皆是:
在一段引导宇航员校准光学设备的程序里,程序员把宇航员手里的精密仪器直接注释成了 “silly thing”(那个傻乎乎的玩意儿); 在点火例程的注释末尾,有人用中世纪法语写下英国嘉德勋章的格言: HONI SOIT QUI MAL Y PENSE(愿心怀恶意者蒙羞);在关键的数据表格区,标题赫然写着拉丁语警告: NOLI SE TANGERE(别碰我!),仿佛在隔着屏幕对后来的维护者大吼:这段代码能跑,千万别乱改!
但千万别被这些嬉皮士风格的玩笑骗了。一旦进入核心数学计算,这群人的工程品味毒辣到了令人发指的地步。
举个最直观的例子:在没有现代浮点协处理器、只有15位字长的机器里,怎么快速算出正弦函数
?
如果按高中和大学微积分教科书的教法,你会用泰勒展开式(Taylor Series),取前三项多项式来近似计算。但这样做有一个致命问题:泰勒展开在靠近
的地方极准,可一旦到了区间边缘(比如接近
的地方),误差就会像脱缰野马一样急剧放大。要想压住误差,就得增加项数,可在 AGC 里,多算一项就会多占宝贵的磁芯内存和 CPU 周期!
怎么办?阿波罗的程序员做了一个神级操作:他们为多项式选用了经过调整的系数!

▲ 数学博主拆解 AGC 源码如何通过微调常数,将正弦近似精度提升一个数量级以上
看上面这张对比图:上半部的蓝色实线为正弦函数,红色虚线为阿波罗多项式;下半部比较了误差,黄色曲线对应泰勒系数,红色曲线对应阿波罗系数。调整系数后,误差在有效区间内起伏,最大偏差被压低了。
结果是什么?同样的三项式,没多花一分钱算力,没多占一个字节内存,阿波罗代码的运算精度直接比教科书做法提升了整整十倍以上!
在螺蛳壳里做道场,只改几个小数点,就能从有限的硬件里多争取一分精度。
03.险些灭绝的人类遗产:一场耗时20年的“数字考古”生死战
读到这里,一个更大的悬念浮出水面:既然1969年根本没有互联网,甚至连软盘都还没普及,这些被女工织在铜线里的代码,到底是怎么变成 GitHub 上的文本文件的?
很多人以为,这是美国宇航局(NASA)某天整理旧电脑,顺手点了一下“上传到 GitHub”。
真相完全相反在评论区里,知情网友 Geoff 一针见血地戳破了这个误区:志愿者们对着博物馆里的纸质清单,一页一页拍下来,再手工转录为文本。

▲ 网友 Geoff 澄清源码并非 NASA 直接上传,而是志愿者从博物馆纸质档案转录而来
把时间拨回 2003年当时,资深软件工程师 罗纳德·伯基(Ronald S. Burkey) 在研究阿波罗技术史时,着手收集分散的历史软件资料,并开发模拟工具。
纸质程序清单成为复原工作的重要依据。保存、拍摄与转录这些档案,让后人有机会重新阅读和运行旧软件。
伯基坐不住了他当即发起了一个名为 Virtual AGC(虚拟阿波罗制导计算机) 的民间开源抢救项目。目标只有一个:保存历史代码,并在现代电脑上重新运行!
但抢救行动刚一启动,就撞上了三座几乎无法翻越的大山。
第一座大山:OCR(光学字符识别)的准确率。有人问,把纸扫描成图片,用识别软件扫一下不就变成文字了吗?旧清单上的字迹却给识别带来困难1960年代的机械撞针打印机用的是色带,墨水浓淡不一,色带旧了字迹断裂,墨水多了字迹糊成一团,再加上几十年的折痕和污渍。在汇编代码里,数字 0 和字母 O、数字 1 和字母 I、数字 5 和字母 S 长得几乎一模一样!
怎么解决?用最笨、也最伟大的办法:志愿者手工录入与校对!
在 MIT 博物馆馆员 Deborah Douglas 的协助下,保罗·菲尔德(Paul Fjeld)将一箱箱泛黄的纸页逐页拍成超高清数码照片。随后,志愿者对照扫描件转录、校对,并借助汇编结果检查错误。

▲ 中文技术博主详细梳理 Comanche055 与 Luminary099 的博物馆转录链路与工具链
第二座大山:重建能运行的工具链字敲完了,怎么证明几万行代码里没有一个拼写错误?一种核验办法是把它汇编成机器码,再与历史资料比对。项目需要能在现代电脑上运行的工具链。伯基开发了现代汇编器 yaYUL 和硬件模拟器 yaAGC,让转录文本得以汇编和运行。
第三座大山:终极的“逐比特(Bit-for-bit)”生死大考。转录文本能否重现历史版本,还要经过核验。
原始汇编清单还保留了机器码等核验信息。将现代汇编器的输出与历史清单比较,可以帮助发现转录错误。
这种交叉核验,让纸上的字符重新成为能在模拟器中运行的程序;仓库至今仍欢迎读者对照扫描件纠错。
04.尾声:每隔十年,人类都要向这4KB代码脱帽致敬
程序员社区多年前就曾为这个仓库沸腾。
早在 2016年7月,这套经 Virtual AGC 转录、由 Chris Garry 等整理到 GitHub 的代码受到关注时,极客社区 Hacker News 就曾掀起过一场多达600多分、上百条评论的狂热讨论。

▲ 2016 年 Apollo-11 仓库首次在 Hacker News 引发现象级讨论
而在整整十年后的 2026年,当这个仓库再次冲上 Hacker News 和各大社交平台的热榜时,置顶评论温情地提醒着大家:距离我们第一次在 GitHub 上重逢这段代码,已经过去整整十年了。

▲ 十年后的 2026 年,同一仓库再次登上 Hacker News 引发新一代程序员致敬
为什么一套五十多年前的“古董汇编代码”,每隔十年就会像潮水一样重新震撼一代又一代年轻的程序员?
因为我们今天正生活在一个算力极度富足、却也极度铺张浪费的时代。
今天,我们随便打开一个聊天软件、一个点外卖的小程序,动辄就要吞掉几个 GB 的运行内存;我们习惯了在几百亿参数的大模型里挥霍算力,习惯了先上线再打补丁。
而当你点开 chrislgarry/Apollo-11,从 4 KB 的内存限制 读到磁芯绳中的 BURN, BABY, BURN,再读到 玛格丽特·汉密尔顿 在57年前签下的名字,那个年代的工程壮举,便有了可以触摸的轮廓。
那个人类第一次仰望月球并决定动身前往的黄金年代,仿佛从未远去。
斯人已逝,但只要 GitHub 的服务器还在闪烁,只要还有人下载那个仿真器并按下虚拟的 PRO(继续)键,那台只有 4 KB 内存的计算机,就依然在数字宇宙里,永不停歇地飞向月球。















































































