Astronauci misji Apollo mogli zostać pierwszymi ofiarami błędu w oprogramowaniu. Mija 50 lat od lotu na Księżyc
20 lipca 1969 roku, w momencie gdy moduł lądownika księżycowego misji Apollo 11 rozpoczynał podejście do lądowania, komputer pokładowy wskazał błędy numer 1201 oraz 1202, następnie sam się zrestartował.
![Astronauci misji Apollo mogli być pierwszymi ofiarami błędu w oprogramowaniu](/_next/image?url=https%3A%2F%2Focs-pl.oktawave.com%2Fv1%2FAUTH_2887234e-384a-4873-8bc5-405211db13a2%2Fspidersweb%2F2019%2F07%2F1119px-Apollo_11_lunar_module.jpg&w=1200&q=75)
Dziś, nawet na naszych domowych komputerach oglądanie niejasnych i tajemniczych kodów błędów jest stresujące. Jednak dla astronautów przebywających w małej puszce w zimnej przestrzeni kosmicznej kod błędu oznaczał zagrożenie życia. Nic dziwnego, że dopytywali bazę w Houston o wyjaśnienia.
Gdyby Neilowi Armstrongowi i jego kolegom wtedy coś się stało, staliby się pierwszymi ofiarami błędu w oprogramowaniu, byliby pierwszymi zabitymi przez „buga“ w software. Na szczęście skończyło się dobrze - Neil Armstrong przejął stery i wylądował samodzielnie - bez komputerowego wspomagania.
![class="wp-image-973102"](/_next/image?url=https%3A%2F%2Focs-pl.oktawave.com%2Fv1%2FAUTH_2887234e-384a-4873-8bc5-405211db13a2%2Fspidersweb%2F2019%2F07%2F767px-Dsky.jpg&w=1200&q=75)
Po udanym lądowaniu autorzy oprogramowania zaczęli poszukiwać źródła błędów 1201 oraz 1202. Okazało się, że pokładowy radar uaktywniał się w nieodpowiednim momencie i zasypywał komputer danymi. Jedna z procedur w systemie zakładała rekonstrukcję stanu pamięci (co można nazwać „restartem“), w warunkach jej przeładowania danymi. To właśnie nastąpiło tuż przed lądowaniem.
Uaktywnienie się radaru w końcu również udało się wytłumaczyć - jeden z astronautów przesunął jego włącznik w nieodpowiedniej chwili i uruchomił go, gdy nie powinien być używany.
Komputery pokładowe programu Apollo nosiły oficjalną nazwę Apollo Guidance Computer. W trakcie misji lotu na Księżyc wykorzystano dwa urządzenia: jeden na pokładzie modułu dowodzenia, a drugi na pokładzie modułu księżycowego. W swoich czasach były najnowszą zdobyczą techniki informatycznej dzięki bardzo mocnej miniaturyzacji. Podczas gdy typowy komputer zajmował całe pomieszczenie, komputer AGC ważyły zaledwie 32 kg i miały rozmiary 61 na 32 na 17 centymetrów. Pobierana przez nie moc wynosiła 55 W - w warunkach lotu kosmicznego trzeba było liczyć się z każdym wydatkiem energetycznym.
![class="wp-image-973105"](/_next/image?url=https%3A%2F%2Focs-pl.oktawave.com%2Fv1%2FAUTH_2887234e-384a-4873-8bc5-405211db13a2%2Fspidersweb%2F2019%2F07%2FAgc_rope.jpg&w=1200&q=75)
Komputery te nie posiadały żadnego znanego nam dziś nośnika pamięci masowej. Wykorzystywały jednak rdzeń ferrytowy, utkany ręcznie z pierścieni ferrytowych nanizanych na nitki. Pojemność pamięci wynosiła 74 kilobajty, które służyły do przechowywania programu nawigacyjnego i innych podprogramów potrzebnych w trakcie lotu i lądowania.
Apollo Guidance Computer były pierwszymi przenośnymi (!), wielozadaniowymi, programowalnymi, interaktywnymi komputerami. Były też pierwszymi komputerami o tych cechach które były ogólnego zastosowania - nie były przeznaczone do konkretnego rodzaju obliczeń bądź rodzaju przetwarzanych danych.
W trakcie misji Apollo po raz pierwszy ludzkość zawierzyła oprogramowaniu, a nie sprzętowi. Po raz pierwszy nie tylko zaczęto budować nowe funkcje za pomocą oprogramowania, ale i postanowiono powierzyć mu życie i zdrowie astronautów. Na pewno musieli mieć wątpliwości wobec takiego podejścia - epoka wszechobecnego software jeszcze nie nadeszła.
David C. Brock, dyrektor działu oprogramowania w Computer History Museum komentuje to w ten sposób:
Kod, który był uruchamiany na obu komputerach (były one praktycznie identyczne ale miały inne oprogramowanie), można dziś oglądać i analizować na popularnym GitHubie. Znajdują się tam oba moduły - zarówno ten z jednostki głównej, jak i z lądownika. Całość zajmuje około 145 tysięcy linijek kodu. Porównajmy to na przykład to Facebooka, którego kod źródłowy dziś ma około 62 milionów linijek kodu, do tego w języku wyższego poziomu niż assembler używany w Apollo Guidance Computer.
![class="wp-image-973108"](/_next/image?url=https%3A%2F%2Focs-pl.oktawave.com%2Fv1%2FAUTH_2887234e-384a-4873-8bc5-405211db13a2%2Fspidersweb%2F2019%2F07%2F579px-Margaret_Hamilton_-_restoration.jpg&w=1200&q=75)
Przeglądając jego kod, można natrafić zarówno na interesujące nazwy jak i komentarze. Na przykład procedura uruchamiania zapłonu silników nosi nazwę BURN_BABY_BURN
. Z kolei sprawdzenie, czy pozycja anteny, ustawianej ręcznie przez astronautę nosi komentarz: SEE IF HE’S NOT LYING
(ang. sprawdź czy nie kłamie).
Od misji, podczas której astronauci otrzymali błędy 1201 i 1202, mija właśnie 50 lat. To nie tylko pół wieku rozwoju badań kosmosu, ale i pół wieku rozwoju inżynierii oprogramowania.