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