1969年7月20日,阿波罗11号宇航员尼尔·阿姆斯特朗踏上月球,说出那句“这是个人的一小步,却是人类的一大步”。很少有人知道,在登月舱“鹰”号缓缓下降时,一台仅有4KB内存的计算机——阿波罗制导计算机(AGC)正以每秒约1万次运算的速度,实时处理着导航、姿态控制与发动机点火等关键指令。半个多世纪后,这台计算机的原始源代码被完整上传至开源平台GitHub,瞬间引发全球程序员与航天爱好者的集体怀旧与深度解读。

代码中的“冷知识”与人性化注释

这份源代码包含指令舱(CM)与登月舱(LM)两个版本,由麻省理工学院仪器实验室的工程师们用汇编语言编写。最令当代开发者津津乐道的,是代码中那些极富人情味的注释。例如,登月舱着陆程序中有一段名为“BURN_BABY_BURN”的代码,直译为“烧吧,宝贝,烧吧”,这是工程师对发动机点火指令的幽默标注;而指令舱的初始化模块中,赫然写着“# 程序启动——别怪我,我只是个计算机”,仿佛在提前撇清责任。

还有一处经典注释:“我们在这行代码中花费了整整两天时间,只为了省下两条指令——因为内存不够了。”由于AGC的磁芯内存仅有2K词(约4KB),工程师们不得不像吝啬鬼一样对待每一条指令,甚至将数学常数π近似为355/113来节省存储空间。这种极端环境下的编程智慧,被今天的开发者视为“硬核优化”的鼻祖。

40岁“高龄”的代码如何载人登月?

阿波罗制导计算机由雷神公司制造,重量约32公斤,运算速度仅为0.043MHz——比现代电子贺卡上的微型芯片还慢。但它却要同时控制飞船的姿态、导航计算、发动机时序和显示接口等多项任务。为解决计算资源紧张,工程师发明了“核心内存”和“中断优先级”机制:当登月舱接近月面时,计算机必须优先处理来自雷达的高度数据,而非向宇航员输出显示信息——这意味着,阿姆斯特朗和奥尔德林在最后时刻几乎是凭目视和手动操控完成了着陆,因为计算机已经“忙得顾不上通知他们”。

源代码中另一个载入史册的模块是“DSKY”(display/keyboard的缩写),即宇航员与计算机交互的界面。它由数字显示器和数字键盘组成,宇航员通过敲入三位数代码来调用程序(如“V37”表示“返回地球轨道”)。你能在代码中看到对这些命令的详细处理逻辑——每个按键都对应着背后数百行的实时计算。

为什么这些代码值得被记住?

2016年,前NASA实习生克里斯·格里菲斯将部分源代码扫描件上传至GitHub,引发轰动。随后,一位名为“virtualagc”的开发者完成了代码的数字化和注释整理,使得任何人只需一台笔记本即可模拟运行“阿波罗制导系统”。这次完整版公开,不仅包含指令舱的“Comanche”(科曼奇)代码和登月舱的“Luminary”(发光体)代码,还附带了大量当年工程师的手写注释和调试笔记。

对于当代程序员而言,这份代码是一份极佳的历史教材:它展示了在内存比黄金还昂贵的年代,如何用最简洁的指令完成致命精确的任务;它提醒我们,人类最伟大的成就往往诞生于资源极度的限制之下。对于普通公众,这些由0和1构成的字符串,则是人类文明史上最浪漫的“诗篇”——它们曾让两个活生生的人离开了地球,抵达了另一颗星球,并安全返回。

开放源代码的“太空遗产”

如今,这份代码以CC0(公共领域)许可协议公开,任何人都可以自由复制、修改甚至用于商业项目。国际空间站上的宇航员已在公开场合表示,他们曾用这段代码来教育新一代航天工程师。更令人感慨的是,源代码中许多算法——如卡尔曼滤波、任务优先级调度——至今仍是现代航天器的基础。

“我们当年根本没有‘软件工程’这个概念。”当年参与编程的工程师约翰·米勒在访谈中笑道,“我们只是在车库一样的实验室里,用纸带打孔机写着人类历史上最重要的代码。如果它们错了,后果不堪设想。”幸好,这些代码几乎没有致命错误——尽管确实有一个著名的“1202警报”在登月时响起,但正是由于任务设计的冗余和宇航员的冷静,才让那句“程序正常——请继续”的反馈成为历史注脚。

当你今天在GitHub上打开「Apollo11」这个项目时,看到的不仅是枯燥的汇编语言。你会看见一份来自1960年代的、由人类智慧与勇气共同织就的“数字遗书”。它活着,并且在每一个模拟运行中,仍在向我们讲述那个夏天,当全世界都在仰望月亮时,一台4KB的计算机如何完成了不可能的使命。