Astronauci misji Apollo mogli zostać pierwszymi ofiarami błędu w oprogramowaniu. Mija 50 lat od lotu na Księżyc

Artykuł/Nauka 18.07.2019
Astronauci misji Apollo mogli zostać pierwszymi ofiarami błędu w oprogramowaniu. Mija 50 lat od lotu na Księżyc

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ł.

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.

Tajemniczy błąd 1201

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.

Moduł wyświetlacza i klawiatury AGC

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.

74 kilobajty powinny każdemu wystarczyć

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.

Moduł pamięci ferrytowej AGC

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.

Czy można ufać zerom i jedynkom

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:

Umieszczono komputer w centrum bardzo ambitnego projektu. Było to prawdziwy test dla technologii i związanych z nią ludzkich przekonań i aspiracji.

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.

Margaret Hamilton przy wydrukowanym kodzie źródłowym AGC

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.

Dołącz do dyskusji