【為什麼我們要挑選這篇文章】50 年前,阿姆斯壯踏上月球,留下了「人類的一大步」。當時 NASA 電腦的演算能力,還比不上現在的一支 iPhone,到底是怎樣的程式碼,可以讓性能不強的電腦執行運算,讓太空船順利發射升空,脫離地球軌道,抵達月球軌道,登陸月球表面,完成人類史上的壯舉?(責任編輯:郭家宏)
「《科技報橘》徵才中!跟我們一起定位台灣產業創新力 >> 詳細職缺訊息
快將你的履歷自傳寄至 [email protected]」
50 年前的 7 月 20 日,美國宇航員尼爾森.阿姆斯壯從阿波羅 11 號飛船登月艙走出,在月球表面留下了人類登月的第一個腳印。
美國總統甘迺迪 1961 年就設定了登月目標。阿波羅計劃歷時 9 年,經歷了十次失敗,Apollo 11 號才終於將人類的蹤跡帶到了月球。在登陸前,躲開了隕石坑和巨石,太空人阿姆斯壯和艾德林在著陸點周圍探索了兩個多小時,他們採集了土壤和岩石樣本、插上美國國旗、留下了紀念阿波羅 1 號宇航員的獎章和寫著「我們為全世界和平而來」的牌子。
從缺乏飛行經驗到第一次在月球上邁出人類探索的腳步,Apollo 11 記錄的是從 0 到 1 的重大轉折。
而現在,完成這場宏大登月計劃的控制電腦(AGC)所有程式碼,你都可以在 Github 上找到了!
程式碼傳送門
耗時三年,整理 14 萬行的阿波羅任務登月原始碼
這份原始碼的開放工作從三年前就已經開始。通過轉錄 MIT 博物館收藏的紙質拷貝文件,Paul Fjeld 完成了程式碼的數位化工作,並由專門研究技術和科學史的學者 Deborah Douglas 完成整理。
Paul Fjeld 本身也是一名空軍藝術家,曾作為阿波羅 17 號的觀察員,為阿波羅登月任務創作了一些列文章和插畫。在執行阿波羅 17 號任務時,他遇到了一些阿波羅計劃的飛行教練,「在夜間維護期間,我花了大約 20 個小時學習飛行宇宙飛船。方便的時候,我會在晚上用他們暫時不用的模擬器。」
整理這些原始碼是一件費時費力的事情,如果不是憑著對於宇宙探索的熱愛,很難想像會有人堅持了三年將這 14 多萬行的程式碼耐心數位化並整理公佈出來。
有了程式碼,我們就能「飛向宇宙」嗎?
每個無人飛船都需要導引系統。在所有阿波羅計劃任務中,都有兩個阿波羅的導引系統(簡稱 AGC),一個用於指揮艙,一個用於登月艙。這次開源的就是這兩個部分的原始碼。
擁有了這些程式碼我們就能「飛向宇宙,浩瀚無垠」嗎?這次 Apollo 11 登月原始碼的開放在 reddit 上面引發了激烈討論,Github 的程式碼倉庫也慘遭注水。
「雖然軟體可以,但是硬體真的是要了老命了」,reddit 上網友評論,說已經有人用 Arduino 和 Raspberry Pi 開始嘗試了(Arduino 是一個微控制器主機板。微控制器是一種簡單的電腦,可以一次運行一個程式。Raspberry Pi 是一種通用電腦,通常帶有 Linux 操作系統,能夠運行多個程式)。
也有熱心網友潑冷水,「私自登月是非法的」。但是科羅拉多州是個例外,因為美國的下一次登月將由私人公司而不是美國宇航局進行,而科羅拉多有兩家公司(Lockheed Martin 和 Deep Space Systems )入圍。
虛擬 AGC:重現阿波羅登月的導引系統指揮場景
雖然用這段程式碼我們不能真的「飛向宇宙」,但是文摘菌(本文作者)為大家找到了一個網站。
這是 NASA 聯合 The Instrumentation Laboratory、MIT、劍橋以及 MASS 共同資助的一個專案,為了給阿波羅計劃登月任務中使用的機載導引電腦提供電腦仿真。
如果對編譯阿波羅原始碼感興趣,不妨去看看。從網站可以獲取各種版本的原始 AGC 軟體,真的可以在電腦上重現當年阿波羅登月時的導引系統指揮場景,在自己的電腦上體驗一下登月的快樂。
網站傳送門
同時,網站也有 AGC 的電氣原理圖和機械圖紙,以及大量關於阿波羅計劃的文件。對阿波羅計劃感興趣的、想要做研究的朋友們一定不要錯過!

程式碼背後的英雄們
從這次公開的程式碼,可以看見阿波羅專案程式碼量非常的大。一部分原因是因為要實現的指令複雜,還有一部分原因是限於當時的電腦水平,使用的是彙編語言,而三行彙編語言的程式碼才抵得上一行 C 語言程式碼。
曾提名第 89 屆奧斯卡最佳影片的《隱藏人物》,就是以三位為美國登月計劃做出過巨大貢獻的黑人女性工程師為原型。她們負責水星計劃(美國第一個載人航天計劃)的運算工作,常因膚色和性別受到刁難和歧視,但仍不放棄自己的理想和本分,在那個電腦運算能力不夠的年代,幫助 NASA 讓約翰.格倫成為首位進入地球軌道的美國太空人。
同樣,負責阿波羅號電腦飛行軟體的「程式碼女皇」瑪格麗特.漢密爾頓在人們還不知道軟體到底是怎麼一回事的時候,就開始和同事一起為世界上第一部便攜式電腦寫程式碼了,他們也創造了電腦編寫程式的核心理念。

在公開的 Apollo 11 登月原始碼裡,也有瑪格麗特編寫的程式碼,這段以彙編語言編寫的程式碼即使是對今天的工程師來說,也是教科書級別的存在。
有趣的是,當時阿波羅號的工程師們寫程式碼時還加入了自己的吐槽,它們就像是上世紀 60 年代的 Geek 們留給我們的時光膠囊。
變的是時間,不變的是我們人類對於宇宙和自身生生不息地探索。
(本文經合作夥伴 大數據文摘 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為〈耗时三年,14万行,50年前阿波罗11号登月的全部代码都能在GitHub找到了!〉。首圖來源:維基百科)
更多有趣的程式碼
一鍵脫衣 App DeepNude 引爆爭議!GitHub 熱榜文解析背後技術
【稱霸 GitHub 熱門榜】菜鳥也懂的 Python 教學,手把手打造「哄女友回話神器」
GitHub 最強 AI 數學解題神器!拍照上傳秒給答案,連微積分都難不倒他