如何看待阿波羅11號操作系統源碼公布?
阿波羅11號是人類第一次載人登月任務,阿姆斯特朗和奧爾德林於1969年7月20日走上月面。本周,登月計算機系統的源代碼被實習生上傳到GitHub,面向全球開放。GitHub - chrislgarry/Apollo-11: Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules. 對於技術開發人員,有什麼地方值得挖掘和學習?
這是我翻譯的一篇,可能不是很好,僅供參考一下。
作者:Intech-Porter
鏈接:實現人類登月夢想的代碼 - Intech-Porter的文章 - 知乎專欄
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
實現人類登月夢想的代碼
前幾天Github上發布了曾經帶領美國踏上月球的代碼,它猶如一顆時間膠囊,將人們帶入到了20世紀60年代。
20世紀60年代中期,在麻省理工學院(MIT)儀器實驗室的程序員們開始為阿波羅11號太空計劃研發飛行軟體的時候,世界上還不存在任何登月必需的技術。因此他們不得不自己去發明。
程序員們提出了一種新的存儲計算機程序的方式,叫「磁心線存儲器」,並且創建了一種特別版彙編語言。如今很多程序員都不清楚彙編是什麼東西。彙編語言讀起來非常困難,但是計算機容易理解。為了研發阿波羅導航計算機(AGC),MIT的程序員們寫了成千上萬行這種難懂的代碼。
讓我們通過數據可視化看看在20世紀60年代他們到底寫了多少代碼——下面這位女士是Margaret Hamilton,太空計劃的軟體工程主管,正站在一堆寫滿代碼的紙邊上。
AGC代碼已經公開了有一段時間了——第一次是由技術研究人員Ron Burkey在2003年上傳的,他根據MIT放到網上的原始硬拷貝的掃描圖片謄抄了一份。也就是說,他是手動一行一行地敲出來的。
「是科羅拉多州的一名叫Gary Neff的飛行員掃描的,」 Burkey在郵件中說道。「MIT手裡有這些掃描件,然後把它們以頁面圖片的形式放到了網上,不幸的是在這過程中一些地方殘損了,難以辨識。」Burkey利用自己的工程技能填補了這些空白,修復了這些殘損的部分。
「後來過了很長時間,難讀的部分,我從Gary Neff那裡得到了一些替代掃描件,幸運的是,我發現我填的那部分完全正確。」他說。
這使得這些代碼可供任何想要研究它的研究人員或者業餘愛好者使用。Burkey他自己甚至利用這軟體創建了一個模擬AGC(simulation of the AGC)。
雖然和Burkey的計劃一樣龐大和成功,但是代碼本身對於許多今天的軟體開發者而言仍然有些難懂。直到上周四(7月7日),前NASA實習生Chris Garry將軟體完整地上傳到了 GitHub,一家目前有數百萬程序員訪問的代碼分享網站。
數小時內,開發者們就開始仔細分析這一軟體。AGC以前的程序員編寫的注釋受到了特別關注。在編程中,注釋是對某一定點執行任務的易懂的英語描述。但是正如在Reddit的r/ProgrammerHumor 中一貫敏銳的笑話偵探發現的那樣, 在AGC代碼中,許多注釋遠遠不止是軟體本身無趣的解釋,反而充滿了漫不經心的笑話和留言以及極具20世紀60年代特色的引用。
比如,一個源代碼文件叫BURN_BABY_BURN - - MASTER_IGNITION_ROUTINE,公開注釋(opening comments)是這麼解釋的:
【這要追溯到1965年,洛杉磯暴亂,其靈感來自於非凡的唱片騎師(DJ)兼廣播電台老闆Magnificent Montague。在搓盤最受歡迎的新唱片的時候,Magnificent Montague就會說「燃燒吧,寶貝,燃燒起來!」 在20世紀50年代中期到60年代中期,Mangificent Montague 是芝加哥、紐約和洛杉磯黑人樂的魅力之音。】
子程序有900多行,從下面這段代碼的第一條和最後一條注釋就可以看出原編程團隊多麼有趣。
【嗨,你好.......再見,再來啊。】
在LUNAR_LANDING_GUIDANCE_EQUATIONS.s文件中,兩行代碼是臨時的意思,最後結束卻是永久的意思,與程序員的希望完全相反。
【臨時的,我希望....;臨時的,我希望...;准許X-AXIS覆蓋】
在同一個文件中,也有代碼似乎是命令宇航員「啟動周圍的這笨傢伙」(「crank the silly thing around」)。
【宇航員:請啟動這個笨傢伙】
「代碼全是為LR(登錄雷達)定位天線的,」 Burkey解釋道。「我猜這顯示的代碼是提醒宇航員重新定位。」
在PINBALL_GAME_BUTTONS_AND_LIGHTS.s文件(被稱為鍵入和顯示系統計劃...AGC和計算機操作人員之間交流)中,有一個很特殊的莎士比亞名言引用(Shakespeare quote):
【以下引文承蒙作者提供。(後文大意就是)「事實將會當面向你證明,你那些人常談論的名詞、動詞,這一些令人厭惡的字眼,基督徒是沒法忍受的。」】
這可能是對AGC編程語言本身的引用,就像一位Reddit用戶指出(pointed out)的那樣。 語言使用了預定的「名詞」和「動詞」來執行操作。比如,動詞37意思是「運行計劃」,然而名詞33意思是「點火時間」。
既然代碼在Github上都有了,程序員們實際上就可以提建議更改和提問題了。當然,他們也已經這麼做了 (they have)。一個開發者提了一個問題,「一名客戶遇到了很嚴重的問題,攪拌低溫貯罐的時候出現了電路故障。」並且列出了重現該問題的步驟。「注意,這對嘗試的測試者可能會造成危險,」他補充說。下面獲得了大量回答。
一個用戶提議說可能不是代碼的問題,而是其它問題。
【是只有在超月軌道線(sol-3-a)有問題,還是月球岸線也有?可能月球的問題。只管試圖縮小問題範圍吧。】
另外一個人給了一個基礎性的回答:
【你有沒有再試試開關?】
另有開發者覺得可能是軟體需要更新(updated):
【(更新到)阿波羅14號就沒問題了】
翻譯:李法見 from 程序員客棧 http://www.proginn.com/?fzh=porter
原文章:http://qz.com/726338/the-code-that-took-america-to-the-moon-was-just-published-to-github-and-its-like-a-1960s-time-capsule/
--------------------------------------------------------我是分割線---------------------------------------------------------------
今天知乎私信我了:
我覺得非常有趣!
這篇回答是我自己翻譯的,我自己轉載我自己的翻譯難道不可以??
我不知道舉報我轉載不合規範,是不是因為莎士比亞那句翻譯?的確我翻譯的第一版本,這句我是不會翻譯的,然後下邊有人評論給了回答。畢竟初版翻譯並不是很完善,所以今早上我就對照原英文進行了一次校對,把莎翁的這句翻譯也加上了。然後到了下午就收到了知乎的舉報信息。好了,就當是莎翁這句翻譯導致的吧。現在那句莎翁的翻譯,我自己翻譯了。
至此,全文沒有一句是採用別人的翻譯,甚至不包含別人的任何翻譯意見,全是我自己的。
我不知道我的回答會被封閉多久......(7月14日13:52)
好了,知乎回復我了。我到現在都不知道什麼原因。封了兩個多小時。
說要用代碼上天的算了吧...這個代碼運行的時候出過好多bug...
包括中央操作系統失靈(啊,突然就警報失靈了或者出bug不能用了。於是nasa指導著宇航員現編代碼修系統...好幾次呢),導航系統失靈(不僅是能不能到月球,而且有能不能回家的問題了...宇航員利用六分儀的原理解決...)等等。這些都是代碼的鍋。當然不全是在11上發生的
宇航員會編代碼會修電腦,軟硬兼修,還會上天,比你們碼農不知道高的哪裡去了
溫度設備和電力設備也出過問題,忘了是不是也和系統有關聯。看宇航員修設備是件有趣的事...最嚴重的一次,氧氣罐漏了(不過和系統無關了,是意外事故),沒有足夠的氧氣和電力,於是萬能的宇航員自己拆了其他設備現做了制氧設備...
現做的制氧設備...
這就是在13號的星期五發射的阿波羅13...唯一一次登月失敗
上天是件excited的事,一般人不要學。
明年學弟學妹的微機原理與介面技術考試又有新題目了(逃。。。
作為一個實習生,我感覺到了差距
掃了一圈代碼,發現連指令集都看不懂,卻回頭髮現一大堆pull requests
全是typo,233333333
如果有人再問你:
你咋不上天呢?
可以把這個代碼給他發個好玩的改進issue。
如何更新軟體可以抵達火星呢。
原來一切這麼簡單。
我確定,對於技術人員沒有任何意義!否則NASA不會允許有人把代碼發出來。
首先先不說幾十年前寫下的彙編語言代碼是不是能看懂,當時的general management演算法(現代OS實現的那一套)肯定過時了。
導航的演算法或許沒變但是已經是全世界皆知了。
所以已經沒用了,唯一的用途就是在幾十年後我們看著它,嘗試理解當時工程師的思維,嘗試腦補Apollo 11在遠離地球384,400km的地方曾經執行過這段代碼,然後體會人類宇航學和計算機科學的偉大之處。
用的是某種特殊設計的指令集,估計採用這種指令集的處理器已經絕跡了。要想跑起來,還得先搞一個虛擬機。。
至於具體的演算法,現代的航天器控制演算法比阿波羅時代精確多了。畢竟在196x年,卡爾曼濾波才剛剛發明出來,計算機領域的很多演算法還沒有誕生。
現代人看這個,主要就是驚嘆:古代人好厲害,用這麼弱的計算機系統居然也能實現登月啊。大概就是我們看到兩千年前的越王劍還沒有生鏽的感覺吧。
不過我有一個想法,如果真有能夠運行這套指令集的虛擬機,搞一個控制飛船登月的遊戲應該很好玩。
大概翻看了下....學習就算了....直接膜就可以了...
感覺像是:學霸終於公布了自己的研究成果了,結果竟然是很多年前的小學奧林匹克競賽作業!而且還是鉛筆寫的,很多地方由於年代久了,筆跡都看不清楚。
=======
ps:「MIT手裡有這些掃描件,然後把它們以頁面圖片的形式放到了網上,不幸的是在這過程中一些地方殘損了,難以辨識。」
對大部分人來說只是 my star +1 ……
基本都點了一下,作為一個準程序員,看懂代碼是不可能了(手動再見),但是注釋真的值得學習啊,應該是經過了很長世間的維護,包括時間內容聯繫方式,個人覺得這才是我們應該學習的啊。
過了保密期限當然就可以公開了。沒什麼研究的價值。
issue的各種神問題和回復要炸了
這個項目的Issues非常有意思, 比代碼好看多了.
那些回答然並卵的同學,你們知道什麼叫學習嗎?
學習能力最大的體現於你有什麼,能做什麼。
把你帶入到當時的那個年代背景,能做出這套架構嗎?
這套代碼最大的作用就是在於把自己代入當時時代背景,從中獲取主人公當時的思考,獲取她演變的過程。
只能驚嘆美帝的牛X與自信!
pr 裡面全是 fix typo
和100年後微軟才把 Windows 7 開源差不多。
推薦閱讀:
※火箭構型主要是由什麼來決定的?
※火箭可否認為是一個大型的竄天猴呢?為何製造難度如此大,甚至發射失敗呢?
※如何評價俄美同意在月球建新空間站名為「深空通道」?
※為什麼會是煤油?
※如何評價巴斯·奧爾德林博士的Live以及在極客公園GIF的演講與訪談?