4歳の子供が発見した障害モード
Apolloのフライトソフトウェア主任エンジニアであるMargaret Hamiltonの娘、4歳のLauren Hamiltonは、MITのコマンドモジュールシミュレーターにおける重大な欠陥を偶然発見しました。彼女は遊びの中で、シミュレーション上の宇宙船が「飛行中」であるにもかかわらず、打ち上げ前の調整ルーチンである「P01」を選択しました。
この一見無害な操作(誤った運用状態での有効なコマンド)は、即座にシミュレーターの航法データを破壊し、システムクラッシュを引き起こしました。Laurenの入力は、飛行中に打ち上げ前手順を実行することに対する保護機能がソフトウェアに欠けているという、危険なエッジケースを明らかにしました。
Margaret Hamiltonは直ちにこの発見の重大さを認識しました。彼女は飛行中のP01実行を禁止するソフトウェア修正を提案し、defensive programming(防御的プログラミング)の重要な形態を実装しようとしました。しかし、高度な訓練を受けた宇宙飛行士を信頼していたNASAの管理職は、プログラムによる解決策を却下し、代わりにフライトマニュアルに簡単な警告を記載する道を選びました。彼らは、宇宙飛行士がそのようなミスを犯すはずがないと信じていたのです。
Apollo 8が警告を証拠に変えた
Lauren Hamiltonの発見を当初退けていたNASAは、1968年12月のApollo 8ミッション中に厳しい現実に直面しました。コマンドモジュールパイロットのJim Lovellは、宇宙船の誘導システムを操作中に誤って打ち上げ前ルーチンのP01を選択してしまい、シミュレーターで確認されていた危険性を正確に再現してしまったのです。
この偶発的な入力により重要な航法データが消去され、宇宙船はまるで発射台にいるかのように空間認識をリセットしてしまいました。ヒューストンのミッションコントロールは、MITのHamiltonのチームと緊密に連携し、ミッションに不可欠なテレメトリを復旧させるために緊急で新しいベクトルデータを計算してアップロードし、Apollo 8の軌道を維持しました。
このインシデントは、乗組員の訓練やフライトマニュアルの警告だけに頼ることは、モードエラーを防ぐには不十分であるという重要なエンジニアリングの教訓を浮き彫りにしました。当初却下されていたHamiltonのソフトウェアレベルでの保護要求は、否定できない説得力を持つようになりました。その後、エンジニアたちはこれらの重要な安全策を、将来のすべてのミッションのApolloフライトソフトウェアに組み込みました。この転換は、高度なスキルを持つ宇宙飛行士であっても人間はミスを犯すという前提に立ち、堅牢なシステムを構築するというdefensive programmingへの初期の重要な一歩となりました。
1202アラームと、動き続けたコード
Apollo 11の月面着陸では、これとは異なる、しかし同様に重要なソフトウェアの課題が発生しました。Eagleの着陸の3分前、Apollo Guidance Computer (AGC)が1202および1201プログラムアラームを発しました。これはエグゼクティブ・オーバーフローを示しており、コンピュータがタスクで溢れかえっていることを意味していました。
この過負荷は、誤った位置に設定されたランデブーレーダースイッチが原因で、不必要なカウンターパルスを絶えずAGCに送り込んでいたことによるものでした。このハードウェアの故障はコンピュータの処理能力の13〜15%を消費し、月面着陸を危うくする恐れがありました。
しかし、AGCの設計にはMargaret Hamiltonのチームが開発した堅牢な機能であるpriority scheduling(優先度スケジューリング)が組み込まれていました。このシステムは、重要度の低いバックグラウンドタスクを動的に削除または延期し、スロットル制御や航法といった不可欠な誘導・制御機能を中断させることなく継続させました。コンピュータはミッションに不可欠な作業を優先し、着陸を成功へと導いたのです。
P01バグとは異なりますが、どちらのインシデントも、フライトソフトウェアにおいて予期せぬ入力や競合する要求を予測する必要性を浮き彫りにしました。P01のエピソードは、高度な訓練を受けた宇宙飛行士でさえミスを犯す可能性があることを示し、ヒューマンエラーの要素を浮き彫りにしました。対照的に、1202アラームはハードウェアの異常に対するシステムの回復力を示しました。どちらのシナリオも、防御的プログラミングの原則と洗練されたエグゼクティブ・アーキテクチャの有効性を証明し、ミッションの成功に不可欠なものであることが確認されました。宇宙ソフトウェアのパイオニアについて詳しくは、Margaret Hamilton - NASA Scienceをご覧ください。
この記事が気に入ったら、毎朝同じようなものをメールで受け取れます。
1日1通 · 2クリックで解除 · サードパーティのトラッキングなし
Apolloの教訓:現代のシステムにも依然として必要なもの
Hamiltonの発見は、ユーザーの理想的な行動を前提とするのではなく、ヒューマンエラーを予測し軽減するというパラダイムシフトである防御的プログラミングに直接的な影響を与えました。彼女が提案した修正案(システム状態に基づいてコマンドを検証し、危険な操作を制限する)は、完璧さではなく現実を設計することで致命的なシステム障害を防ぐという中核的な原則となりました。
Apolloの革新的な優先順位付け戦略は、ロードシェディング(負荷遮断)やグレースフルデグラデーション(縮退運転)といった現代の信頼性概念の青写真も提供しています。Apollo 11の月面着陸時、Apollo Guidance Computerが過負荷に陥った際、MITのエンジニアHal Laningと共に開発した非同期エグゼクティブ・アーキテクチャが、優先度の低いタスクを破棄することで中核機能を維持しました。これにより、ミッションに不可欠な操作が妨げられることなく継続されました。
このインシデントは極めて重要ですが、Hamiltonのより広範な功績の一側面に過ぎません。Apolloのフライトソフトウェア開発のリーダーとして、彼女はソフトウェアを工学分野として厳格に扱うことを提唱しました。彼女の業績は、堅牢なシステムは予測不可能なヒューマンエラーを考慮しなければならないという基本原則を確立し、これは今日の複雑なシステムにおいても依然として不可欠な教訓となっています。
よくある質問
ApolloのP01ソフトウェアバグとは何ですか?
飛行中にP01プリローンチルーチンを開始すると、ナビゲーションデータが上書きされ、Apollo Guidance Computerの状態が混乱する可能性がありました。
Margaret Hamiltonの娘はどのようにしてその問題を発見したのですか?
コマンドモジュールのシミュレーターを使用中、4歳のLaurenがシミュレーション飛行中にP01を選択したことで、シミュレーションがクラッシュしました。
Apollo 11の1202アラームの原因は何ですか?
月面着陸の降下中、ランデブーレーダーに関連する過剰な処理によってガイダンスコンピューターが過負荷状態になり、アラームがトリガーされました。
Apollo 11のソフトウェアは1202アラームにどのように対応しましたか?
優先順位スケジューリングにより、コンピューターは優先度の低いタスクを破棄し、着陸に必要な計算と制御機能を継続することができました。

