ARTICLE · 1200984
仅4KB内存、满屏段子!阿波罗11号源码狂揽7.5万星,揭开登月最后3分钟生死劫
1969年7月20日,距离月球表面只剩最后几千英尺。
阿波罗11号登月舱“鹰号”正在喷火下降。突然,程序警告灯亮起宇航员查询后,计算机屏幕上显示数字:1202。紧接着,又是 1201
降落仍在继续计算机若无法恢复,宇航员就可能被迫中止着陆。
半个多世纪后的今天,这套在生死关头狂响警报的救命代码,再次在社交网络上吸引了程序员围观。当人们点进 GitHub 仓库,准备膜拜人类航天史上最神圣、最严谨的“天书”时,不少人看傻了眼:
人类历史上最严肃的生死工程,里面居然塞满了最“不正经”的段子、黑话和流行歌口头禅。

▲ 工程账号 World of Engineering 一句简短的提醒,再次把阿波罗11号源码推上风口浪尖
01第一重悖论:最要命的点火代码,起着最嬉皮士的名字
事情的起因很简单科技账号 @engineers_feed 在 X 上甩出一句话:“阿波罗11号的源代码已在 GitHub 上公开。”
这条动态瞬间点燃了评论区有人调侃:“现在任何人都能手搓自己的太空计划了。”
点开这个名为 chrislgarry/Apollo-11 的仓库,星标数已经狂飙到 7.52万。里面整整齐齐躺着两个核心文件夹:指令舱程序 Comanche055,以及登月舱程序 Luminary099。

▲ GitHub 上的阿波罗11号源码仓库,目前已斩获超 7.5 万星标
这份电子档经历了漫长的民间转录与校对。
1969年还没有 GitHub当年麻省理工学院(MIT)仪器实验室写完代码,全部打印成厚厚的纸质清单保存下来。几十年后,志愿者们在 MIT 博物馆一页页拍下泛黄的纸质硬拷贝,再由研究者 Ron Burkey 等人靠人工逐行敲进电脑,最后经前 NASA 实习生 Chris Garry 整理,才有了今天全世界都能免费翻阅的公有领域仓库。

▲ 网友在评论区科普:这些代码是由志愿者从 MIT 博物馆的纸质档案中逐行敲出来的
那些上古代码里的注释,让网友们笑出了声。
底层汇编语言晦涩得像外星符号,但旁边的英文注释却活脱脱像个 1960 年代的脱口秀现场。
比如,负责控制登月舱发动机点火的核心文件,干的是稍有差池就会机毁人亡的大事,文件名却极其嚣张地叫:BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc(烧吧宝贝烧吧,主点火例程)。这句词直接抄自当年美国黑人电台 DJ Magnificent Montague 最火的打碟口头禅。

▲ 正式工程路径里赫然躺着 BURN_BABY_BURN 这样充满嬉皮士气息的文件名
再往里翻登月流程代码 THE_LUNAR_LANDING.agc,画风更是彻底放飞。
当降落阶段需要宇航员手动把雷达天线摇到指定位置时,程序员在代码旁边用宇航员的嫌弃口吻留下这样的注释:PLEASE CRANK THE SILLY THING AROUND(请把这蠢玩意儿摇到位)。
等宇航员按下“继续”键,下一行检查代码的注释写着:SEE IF HE'S LYING(看看他是否在撒谎)。
确认没撒谎、准备跳转去执行点火程序时,注释直接唱起了童话《绿野仙踪》的插曲:OFF TO SEE THE WIZARD...(出发去见魔法师喽……)。
这还不算完有网友专门建了个清单,把源码里的“神仙注释”扒了个底朝天:
一堆杂活子程序,被直接命名为 TRASHY LITTLE SUBROUTINES(垃圾小例程);飞船显示屏和键盘(DSKY)因为靠输入两位数的“动词(Verb)”和“名词(Noun)”来操作,被工程师戏称为 PINBALL_GAME_BUTTONS_AND_LIGHTS(弹球机按钮与彩灯),文件开头甚至还一本正经地引用了莎士比亚名剧《亨利六世》里关于“名词与动词”的台词;最让现代程序员膝盖中箭的,是一行修正陀螺仪速率的代码,旁边胆战心惊地写着: TEMPORARY, I HOPE HOPE HOPE(临时的,但愿,但愿,但愿)。

▲ 网友整理的注释合集,包含“垃圾小例程”“临时代码”等片段
Hacker News 上的技术爱好者顺着这行 HOPE HOPE HOPE 往下深扒,发现这段“临时凑合”的代码不仅跟着阿波罗11号飞上了月球,还一路留到了阿波罗13号,直到阿波罗14号升级软件时才被删掉。果真是应了程序员那句至理名言:“只要代码能跑,临时方案就是永久方案。”

▲ Hacker News 极客考证发现,这行“临时代码”一直飞到了阿波罗14号前夕才被移除
但问题来了:为什么这群决定了人类命运的顶尖工程师,要在最严肃的生死簿上写满俏皮话?
答案藏在当年残酷的硬件法则里阿波罗计算机的只读程序,由工人用铜线穿过或绕开磁芯编织出来(绳式磁芯存储器,Core Rope Memory)。穿过磁环代表 1,绕过磁环代表 0
代码一旦下厂“织”成铜线,就彻底焊死,绝无可能在线打补丁。在进厂前的无数个通宵里,那摞厚厚的纸质代码清单,就是几十号年轻工程师唯一的交流黑板。那些看似荒诞的段子,其实是高压到极致的锚点,让你在几万行枯燥的机器指令里,一眼认出哪一段绝对不能乱动。
02第二重悖论:不如电子表的 4KB 算力,撞上最诡异的硬件偷袭
读过这些段子,再看承载它们的电脑,有限的硬件资源更让人惊叹。
阿波罗11号制导计算机(AGC),主频只有 1.024 MHz。什么概念?你手里随便一部智能手机,算力都是它的几千倍。
它的内存更是寒酸得令人发指:只有大约 4KB 的可擦除内存(RAM),以及 72KB 的只读内存(ROM)。4KB 甚至存不下今天微信里的一张高清表情包,连一首三秒钟的 MP3 都塞不进去。
就在这螺蛳壳里做道场的 4KB 内存上,1969年7月20日,一场设计图纸上从未预料到的危机爆发了。
当阿姆斯特朗和奥尔德林驾驶“鹰号”向月面俯冲时,可怕的 1202 警报 响了。
几十年来,坊间流传的说法都是“宇航员奥尔德林忘关了雷达开关,属于人为失误”。但当年亲历登月舱软件开发的 MIT 工程师 Don Eyles 在技术复盘中解释:宇航员按检查单操作,警报源于雷达接口的电气问题。
为了防止降落失败需要紧急点火逃逸、重新和天上的指令舱对接,手册要求在降落时把“会合雷达”打开待命。
要命的事情发生了:会合雷达的天线使用一个 800 Hz 的交流电源驱动,而计算机内部的雷达接口电路,用的是飞船上另一个独立的 800 Hz 电源。两个信号同频却未同步相位,接近 90 度或 270 度时问题最严重。
就是这种相位错位,让计算机的硬件接口彻底疯了。它误以为雷达天线正在以极高频率剧烈抖动,于是化身为“夺命连环call”,每秒钟向计算机强行塞入 12,800 次 计数脉冲!
在计算机术语里,这叫 “周期窃取(Cycle Steal)”。就像一个大厨正在争分夺秒炒一桌国宴,门铃却短路了,每秒钟狂响上万次,逼得大厨不得不放下锅铲去开门。仅仅这一个幽灵般的相位差,就活生生抢走了登月舱计算机 约 13% 至 15% 的计算时间!
而在降落最吃紧的时刻,计算轨道和推力的主程序本来就已经占满了 80% 以上 的算力。
算力瞬间见底由先驱 Hal Laning 设计的操作系统内核里,总共只有 8 个任务槽位(Core Sets,相当于 8 张办公桌) 和 5 个矢量计算区(VAC Areas,相当于 5 间VIP演算室)。
当雷达接口抢走约 13% 的时间后,宇航员还在按键盘查询高度,新任务源源不断涌入,旧任务却根本算不完。瞬间,8 张办公桌全部爆满,系统拉响 1202 警报(NO CORE SETS)!紧接着,5 间演算室也被抢光,系统再次拉响 1201 警报(NO VAC ARY)!
03第三重悖论:用“故意崩溃”拯救坠毁,24岁年轻人的小抄决定历史
面对硬件漏洞带来的算力雪崩,阿波罗11号为什么没有摔在月球上?
这就不得不提到软件工程史上最传奇的名字,Margaret Hamilton(玛格丽特·汉密尔顿)。当年,正是这位女科学家带领 MIT 团队写出了阿波罗飞控代码,也是她亲手把 “Software Engineering(软件工程)” 这个词推向了全世界。

▲ 网友致敬 Margaret Hamilton:她的团队在编写登月代码的同时,帮助推广了“软件工程”一词
在那个连“软件”都被硬件工程师看作附属品的年代,Hamilton 团队在 4KB 内存里塞进了一套超前时代的绝杀设计:基于优先级的异步抢占式调度,以及“壮士断腕”式的软件重启(Software Restart)。

▲ 评论区技术解析:异步抢占式调度与过载保护保障了关键任务
当 8 张办公桌全部塞满、触发1202 警报时,阿波罗的代码立刻跳进了一个叫 BAILOUT(跳伞逃生) 的例程。
它做了一件极其冷酷、却又极其聪明的事:主动掀桌子。
系统执行软件重启,丢弃未受重启保护的计算,并从预先登记的恢复点重建关键任务。同一任务积压的多个副本只恢复最新一份,导航、制导和控制由此继续运行。
它用局部的“故意崩溃”,换取了核心大脑的绝对清醒。
在整个惊心动魄的动力下降过程中,登月舱计算机其实足足经历了 5 次软件重启!重启保护帮助关键飞行计算继续进行,地面也持续检查轨迹是否正常。
但当时远在 38 万公里外的休斯敦地面飞控中心,并不知道天上发生了电源相位差。
当阿姆斯特朗在无线电里紧迫地呼叫“这是个 1202 警报,请告诉我们这是什么意思”时,地面飞控室空气都凝固了。
就在发射前几周的一次地面模拟演习中,教官曾故意触发过一次类似的计算机警报。当时值班的飞控官因为没见过这个代码,慌乱之下直接下达了“中止登月(Abort)”的指令。
那次演习把所有人惊出一身冷汗演习结束后,飞控中心里年仅 24 岁 的计算机支持工程师 杰克·加曼(Jack Garman) 不甘心,连夜把计算机所有可能出现的底层错误代码和触发条件抄在一张纸上,做成了一份 手写“作弊小抄(Cheat Sheet)”,死死压在自己控制台的透明玻璃板底下。
1969年7月20日,历史撞上了那张小抄。
当阿姆斯特朗报出 1202 时,年仅 26 岁 的导航控制官史蒂夫·贝尔斯(Steve Bales)瞬间扭头看向后排 24 岁的加曼。加曼低头扫了一眼玻璃板下的手写便签,脑子里飞速确认:只要警报出现的频率允许计算机恢复工作,且轨迹保持正常,就可以继续降落。
加曼立刻对着耳麦吼道:“没问题!”
26 岁的贝尔斯随即向飞行总指挥喊出了那句载入人类史册的口令:“Go on that alarm!(忽略警报,继续降落!)”
几分钟后,“鹰号”带着最后几十秒的余油,稳稳落在了月球静海基地。
04尾声:算力暴涨百万倍,我们却弄丢了当年的优雅
今天,当我们隔着屏幕,在 GitHub 上重新抚摸这几万行 57 年前的代码时,感受到的绝不仅仅是一场复古怀旧。
你会看到一种令人震撼的工程美学
半个多世纪前,一群年轻工程师,手里只有 4KB 内存,用针线织出只读代码,在泛黄的纸页上写下 BURN, BABY, BURN 和莎士比亚的诗句。他们在计算时间被硬件问题抢走的险境下,靠着“丢车保帅”的架构设计,把人类安全送上了另一颗星球。
反观今天,我们的电脑动辄 32GB、64GB 内存,算力暴涨了上百万倍;但我们手机里一个动辄几个 G 的日常 App,却常常因为加载不出一张广告弹窗、或者并发稍微高了一点,就整个页面卡死、闪退崩溃。
chrislgarry/Apollo-11 仓库里那 7.5 万颗星标,寄托着对老程序员幽默感与工程智慧的敬意。系统可靠性经受考验的时刻,是故障已经发生之后:代码能否舍弃次要任务,守住关键计算,关系着整段航程。















































































