アポロ11号のソースコード、GitHubでパブリックドメイン公開
人類を月に送り届けたコンピュータの全コードが、誰でも読み、ダウンロードし、コンパイルできる状態で公開されている。アルテミスIIが帰還したいま、57年前のコードが投げかけるものは大きい。
人類を月に送り届けたコンピュータの全コードが、誰でも読み、ダウンロードし、コンパイルできる状態で公開されている。アルテミスIIが帰還したいま、57年前のコードが投げかけるものは大きい。
月面着陸を支えた全コードが公開
NASAの元インターン、クリス・ギャリーが2016年にアポロ11号の誘導コンピュータ(AGC)のソースコードをGitHubにパブリックドメインとして公開した。アルテミスII計画と時を同じくして、このリポジトリに改めて注目が集まっている。コードは2つの大きなリポジトリに分かれており、司令船用のComanche055と月着陸船用のLuminary099で構成される。
いずれもMIT博物館が保管していた紙のハードコピーから、Virtual AGC(仮想アポロ誘導コンピュータ)プロジェクトのチームがデジタル化したものだ。つまり、1969年に実際に月へ飛んだマシンコードそのものが、現代のバージョン管理システム上で誰でも閲覧できる状態になっている。
https://github.com/chrislgarry/Apollo-11
リポジトリにはすでにスターが6万4,700件以上集まり、208人のコントリビューターが参加している。30を超える言語に翻訳されたREADMEが、このコードへの世界的な関心の高さを物語る。
リポジトリの承認欄には、プログラミングリーダーのマーガレット・ハミルトンをはじめ、MITの計装研究所に所属した技術者たちの署名が残されている。日付は1969年3月28日。
MIT博物館に眠っていた紙の束が、現代のバージョン管理システムの上で息を吹き返した。プルリクエストで原本との差異を修正できるという事実が、このプロジェクトの性格をよく表している。
30行で月へ向かう ── 三角関数の実装
このコードが改めて注目を集めたきっかけのひとつが、学術論文の注釈プラットフォームFermat's Libraryによる投稿だ。4月9日のX投稿では、アポロ11号の航法に不可欠だった正弦・余弦関数の実装がわずか30行のアセンブリで書かれていたことが紹介された。
現代のプログラマが数行のライブラリ呼び出しで済ませる処理を、1960年代のエンジニアは多項式近似と16ビット固定小数点演算で手作りしていた。AGCが扱える数値の範囲は-1から+1未満。cos(πx)を計算するには、まず1/2を加えてsin関数に変換し、さらに多項式展開で近似するという手順を踏む。
AGCのRAMはわずか約4KB(2,048ワード)、ROMは約74KB(3万6,864ワード)。クロックは1.024MHz。現代のスマートウォッチの数百万分の1以下の性能で、人類史上最も野心的なミッションを完遂した。
重さ約31.8kg、サイズはデスクトップPCほど。操作にはDSKY(ディスプレイ&キーボード)と呼ばれるインターフェースを使い、宇宙飛行士は数字のコマンドで誘導コンピュータと対話した。制約が極限まで厳しかったからこそ、ソフトウェアの設計思想は驚くほど洗練されている。
たとえばLuminary099のディレクトリには「BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc」というファイルがある。点火制御ルーチンにこんな名前をつけるユーモアが、コメント欄のあちこちに散りばめられている。
アルテミスIIの「現代的な」トラブル
このコード公開が特別な意味を帯びるのは、タイミングだ。NASAのアルテミスII計画で、オライオン宇宙船「インテグリティ」に乗った4人の宇宙飛行士が月周回飛行を完遂し、4月10日にサンディエゴ沖に着水した。1972年のアポロ17号以来、約54年ぶりに人類が深宇宙へ旅立ったミッションだ。
しかし話題をさらったのは、月の裏側のフライバイではなかった。打ち上げからわずか数時間後、宇宙船のトイレのファンが故障。尿の排出ができなくなり、乗組員はアポロ時代と同じ方式——つまりバッグに頼る羽目になった。
さらに、船長のリード・ワイズマンがヒューストンの管制室に報告した一言が、世界中のエンジニアの共感を呼んだ。
「Microsoft Outlookが2つ起動しているんだが、どっちも動かない。リモートで入ってもらえないか」
管制室はリモートアクセスでSurface ProのOutlookを再設定し、問題を解消した。57年前、AGCは4KBのRAMで月面着陸をやり遂げた。2026年、月周回軌道上ではメールソフトが2つ起動して両方フリーズしていた。
コードに刻まれた設計哲学
アポロ11号のAGCコードを読むと、現代のソフトウェア開発とは根本的に異なる世界が見える。AGCのプログラマたちは、1ワードのメモリすら無駄にできなかった。ソフトウェアはROMに「織り込まれる」——文字通り、磁気コアに銅線を通すか通さないかで0と1が決まるコアロープメモリだ。打ち上げ後のアップデートは事実上不可能で、すべてのバグは地上で潰すしかなかった。
この制約が、結果的にソフトウェアの品質を極限まで高めた。アポロ11号の月面着陸時に発生した有名な「1202アラーム」は、AGCのリアルタイムOSが過負荷を検知し、優先度の低いタスクを切り捨てて着陸を続行した事例だ。障害ではなく、設計通りの動作だった。
現代のソフトウェアは、アップデートできることを前提に設計される。バグはパッチで直せばいい。その柔軟さは巨大な恩恵だが、「最初から完璧に動かす」という規律を薄めてもいる。
公開コードで何ができるのか
GitHubで公開されたコードは、眺めるだけのものではない。Virtual AGCプロジェクトが提供するツールを使えば、実際にコンパイルしてエミュレータ上で動かすことができる。対応環境はLinux、Windows、Mac OS Xなど。自分の手で、月面着陸のシミュレーションを走らせることも不可能ではない。
組み込みエンジニアにとっては、これ以上ない教材だ。リソースが極端に限られた環境でのソフトウェア設計、リアルタイムOS、固定小数点演算、優先度ベースのタスク管理——現代の組み込みシステムやロボティクスにも直結する概念が、このコードには凝縮されている。
4KBで月に行けた時代のコードが、いまGitHubで6万スターを集めている。足りないのはメモリではなく、あの頃の設計規律なのかもしれない。
参照元
関連記事
- アルテミスII帰還、「宇宙は誰のものか」4つの未来シナリオ
- アルテミスII、月周回で54分の日食とEarthsetを撮影
- アルテミスIIが月からレーザーで4K映像を届ける——O2O通信システムの意義
- アルテミスII宇宙船でOutlookが二重起動——NASAが月への旅でMicrosoftトラブル対応
- アルテミスII打ち上げ成功——53年ぶり、人類が再び月へ向かう
- Linuxカーネル、AI生成コードを条件付きで容認へ
- アルテミスII、太平洋に帰還──50年ぶりの月周回有人飛行が完了
- Redox OSがLLM生成コードを全面拒否、議論の余地なし
- NASA予算23%削減案、アルテミスIIが記録を塗り替えた日に発表される
- アポロ13号を超えて、人類は月の裏側へ──Artemis IIが56年ぶりに最遠記録を更新