Przegląd kodu źródłowego Apollo 11

O ile kod źródłowy komputera AGC Apollo 11 został upubliczniony w Internecie jeszcze w 2003 roku, dopiero lipiec 2016 będzie datą początku zdobywania przez niego ogromnej popularności. Stało się tak za sprawą byłego stażysty pracującego w NASA, Chrisa Garry'ego, który 7. lipca wrzucił pliki Command Module i Lunar Module na GitHub.

 

Od tej pory społeczność zaczęła aktywnie przeglądać kod, zarówno z czystej ciekawości, jak i w poszukiwaniu błędów. 

Obecnie repozytorium ma już 3 tysiące forków i ponad 20 tysięcy oznaczeń gwiazdką, a liczby te stale rosną. Udostępnioną dokumentację poddaliśmy szybkiej analizie w poszukiwaniu najciekawszych błędów programistycznych oraz po to, aby ocenić jakość kodu.

 

Kod na GitHub jest kopią upublicznienia z 2003 roku, kiedy to Ron Burkey linia po linii przepisał ręcznie kod ze skanów wydruków udostępnionych przez MIT. Patrząc na zdjęcie poniżej można sobie uzmysłowić skalę projektu oraz ogrom pracy wykonanej przez Rona.

 

 

Margaret Hamilton (odpowiedzialna za projekt) wraz z wydrukiem kodu.  

Źródło: https://upload.wikimedia.org/wikipedia/commons/2/2e/Margaret_Hamilton.gif

 

Ron Burkey stworzył także symulator komputera AGC, który dostępny jest pod adresem https://github.com/rburkey2005/virtualagc

Przeglądanie kodu na pewno nie będzie łatwym zadaniem. Jest on napisany w specjalnej wersji Assemblera, która powstała w NASA z myślą o programie Apollo. Skalę trudności najlepiej oddają niektóre komentarze użytkowników, którzy podjęli próbę analizy: "Koduję od 20 lat. Ale jak widzę coś takiego, to czuję się jak ostatni kretyn."

Sam kod nie jest jedyną interesującą rzeczą, którą znajdziemy w repozytorium. Bardzo twórcze i ciekawe są też komentarze i nazwy poszczególnych sekcji, pozostawione przez twórców. 

Przykładowo sekwencje odpowiedzialne za uruchamianie silników rakietowych zostały nazwane "BURN_BABY_BURN—MASTER_IGNITION_ROUTINE". Wyjaśnienie, co było inspiracją, można znaleźć w początkowym komentarzu:

Źródło: https://github.com/chrislgarry/Apollo-11/blob/master/Luminary099/BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc#L33

 

Znajdziemy tam też bardzo kulturalne i uprzejme przywitanie i pożegnanie z programistą analizującym dany fragment kodu: Hello there... Goodbye. Come again soon. ...

Źródło: https://github.com/chrislgarry/Apollo-11/blob/master/Luminary099/BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc#L904

 

…oraz jakże prawdziwy fragment opisujący zaimplementowane tymczasowe rozwiązanie:

Źródło: https://github.com/chrislgarry/Apollo-11/blob/master/Luminary099/LUNAR_LANDING_GUIDANCE_EQUATIONS.agc#L179

 

Bardzo interesujący jest także komentarz do niektórych funkcji pomocniczych w pliku LUNAR_LANDING_GUIDANCE_EQUATIONS.agc, który prawdopodobnie miał służyć jako bardzo dokładny opis ich działania.

Źródło: https://github.com/chrislgarry/Apollo-11/blob/master/Luminary099/LUNAR_LANDING_GUIDANCE_EQUATIONS.agc#L1375

 

Widać, że poczucie humoru dopisywało programistom podczas tworzenia kodu. Sekwencje odpowiedzialne za obsługę klawiatury i wyświetlacza nazwali „PINBALL_GAME_BUTTONS_AND_LIGHTS”, natomiast w funkcji do odpowiedniego ustawienia anteny dla LR (landing radar) mamy:

Źródło: https://github.com/chrislgarry/Apollo-11/blob/dc4ea6735c464608d704fa183f3e3d08b013c42f/THE_LUNAR_LANDING.s#L245#L249

 

Ciekawe tylko jak zareagowałaby załoga Apollo 11, czytając dokumentację systemu i widząc w niej coś takiego:

Źródło: https://github.com/chrislgarry/Apollo-11/blob/master/Comanche055/RESTART_TABLES.agc#L237

 

Społeczność znalazła także pierwsze błędy, gdzie w komentarzach do jednego z nich nawiązała się bardzo ciekawa i zabawna dyskusja. Chodzi o błąd w działaniu kriogenicznych zbiorników z tlenem w specyficznej sytuacji oraz możliwość jego reprodukcji. 

 

Po 199-ciu wpisach wątek zamknięto, uznając problem jako sprzętowy.

Jako że kreatywność i zaangażowanie społeczności nie zna granic, pojawił się też pull request z plikiem MATTDAMON.s i sekwencją pozwalającą uratować Mattaa Damona z Marsa. 

Sprawdźcie repozytorium i zobaczcie, czy uda Wam się znaleźć coś ciekawego. 

Repozytorium dostępne jest tutaj >>

 

Autor: Michał Buczek

 

 

 

Najbliższe terminy szkoleń

Partnerzy

Narzędzia testerskie