Ariane 5 havarovala po chybě při převodu čísel ve svém řídicím softwaru
Čtyřicet sekund po startu se nejdražší evropská raketa rozlomila ve vzduchu. Příčinou byl jediný nechráněný převod čísla ve funkci, která po startu vůbec nemusela běžet.
Obsah článku
Bylo úterý 4. června 1996, 12:33 místního času v Kourou ve Francouzské Guyaně. Ariane 5 odstartovala ke svému vůbec prvnímu letu s nákladem čtyř vědeckých družic mise Cluster. Prvních 36 sekund vypadalo všechno normálně. Pak se raketa prudce naklonila, aerodynamické síly ji rozlomily a bezpečnostní systém dokončil destrukci. Na zem dopadly trosky za miliardy. A vyšetřovací komise brzy zjistila, že celý řetězec katastrof spustilo číslo, které bylo příliš velké pro proměnnou, do které ho software zkoušel nacpat.
Co přesně se stalo v 37. sekundě
Srdcem navigace Ariane 5 byl inerciální referenční systém (SRI), zařízení, které raketu informuje o její poloze, rychlosti a náklonu. Na palubě byly dvě identické jednotky: aktivní a záložní. Obě běžely na softwaru napsaném v jazyce Ada, převzatém prakticky beze změn z předchůdkyně Ariane 4.
Uvnitř SRI běžela takzvaná funkce zarovnání. Její úkol byl jednoduchý: před startem srovnat gyroskopy a akcelerometry s přesnou polohou rampy. U Ariane 4 dávalo smysl nechat ji běžet ještě chvíli po startu: kdyby se odpočet přerušil, nebylo nutné opakovat 45minutovou kalibraci. U Ariane 5 tento požadavek neplatil. Funkce ale zůstala aktivní ještě asi 40 sekund po zvednutí z rampy.
A právě v ní se skrýval problém. Funkce počítala proměnnou nazvanou BH (horizontální zkreslení) jako 64bitové číslo s plovoucí desetinnou čárkou. Výsledek pak převáděla na 16bitové celé číslo se znaménkem, tedy do rozsahu maximálně 32 767. Ariane 4 létala po mírnější trajektorii a hodnota BH nikdy tento strop nepřekročila. Ariane 5 měla výrazně vyšší horizontální rychlost. V 36,7. sekundě po startu hodnota přetekla a procesor vyhodil výjimku typu Operand Error.
Dvě zálohy, jedna slepá ulička
Tady přichází detail, který z technické chyby dělá systémové selhání. Záložní SRI neběžela na jiném softwaru ani s jinou ochranou. Měla identický kód. Selhala kvůli témuž přetečení, dokonce o padesát milisekund dříve než aktivní jednotka. Automatický přepínač, který měl v případě poruchy přeskočit na zálohu, neměl kam přejít.
Obě jednotky přestaly posílat platná navigační data. Místo nich odeslaly diagnostický bitový vzor, interní hlášení o chybě. Palubní počítač (OBC) ale tento vzor interpretoval jako skutečná letová data. Vyčetl z nich obrovskou odchylku od kurzu a vydal povel k prudké korekci. Trysky boosterů i hlavního motoru Vulcain se vychýlily na maximum.
Mezi 37. a 39. sekundou se raketa naklonila tak, že aerodynamický tlak ji doslova roztrhl. V 39. sekundě aktivoval neutralizační systém autodestrukci. Celá fatální sekvence od prvního přetečení až po rozpad trvala necelé tři sekundy.
Proč to nikdo nezachytil
Vyšetřovací zpráva komise vedené profesorem J. L. Lionsem zveřejněná 23. července 1996 je v tomto bodě nemilosrdná. Problém nebyl v objemu testů, těch proběhly tisíce. Problém byl v tom, co se testovalo a jak.
- Specifikace SRI neobsahovaly trajektorii Ariane 5. Nikdo neověřil, jaké hodnoty bude alignment funkce zpracovávat při reálném letu nového nosiče.
- V systémových simulacích se místo skutečného SRI použil simulovaný výstup. Reálný hardware v uzavřené smyčce chyběl.
- Jiné konverze v témže kódu byly chráněné a měly ošetřené přetečení. Zrovna u proměnné BH někdo usoudil, že ochrana není potřeba. Komise to označila za chybu v analýze.
- Alignment funkce po startu neměla žádný provozní důvod běžet. Stačilo ji vypnout v okamžiku zvednutí z rampy.
Nejdražší na celé havárii nakonec nebylo samotné přetečení. Bylo to přesvědčení, že software ověřený na Ariane 4 je automaticky bezpečný i na Ariane 5, přestože nová raketa létala po zásadně odlišné trajektorii.
Co přišlo vniveč a co se změnilo
ESA v září 1996 vyčíslila finanční dopad havárie na 288 milionů ECU (zhruba 7,5 miliardy Kč v tehdejším kurzu). K tomu přibyla obnova vědecké mise Cluster, vyčíslená v březnu 1997 na dalších 214 milionů ECU. Na vývoji Ariane 5 pracovalo přes 6 000 lidí ze stovky firem z dvanácti evropských zemí.
Komise vydala 14 doporučení. ESA a CNES přijaly všechna. Klíčová opatření:
- Alignment funkce se vypíná okamžitě po startu.
- Kritický vestavěný software prochází samostatnou kvalifikací, ne jen jako součást hardwaru.
- Systémové testy musí zahrnovat reálný hardware v uzavřené smyčce s realistickými trajektoriemi.
- Každá proměnná v bezpečnostně kritickém kódu musí mít explicitně definovaný a ověřený rozsah.
- Nově vznikla role softwarového architekta, který hlídá systémové dopady kódu napříč celým nosičem.
Třicet let stará lekce, která pořád platí
Přetečení celého čísla není historická kuriozita. Katalog MITRE CWE ho vede jako samostatnou kategorii bezpečnostních slabin dodnes. Podobné chyby v předpokladech stály za ztrátou Mars Climate Orbiter v roce 1999 i Mars Polar Landeru téhož roku; pokaždé šlo o jiný typ omylu, ale vždy o totéž jádro: nikdo neověřil, že software funguje v reálném provozním kontextu, ne jen v tom původním.
Dnešní evropská kosmonautika staví na standardech ECSS, které přímo odrážejí poučení z letu 501. Letecký průmysl má DO-178C, zdravotnické přístroje vlastní validační rámec FDA. Princip je pokaždé stejný: znovupoužitý kód není ověřený kód, dokud neprojde testy v novém prostředí.
Letos v červnu uplyne třicet let od chvíle, kdy se nad Kourou rozpadla raketa za miliardy. Stačilo k tomu jedno číslo, které bylo o trochu větší, než s čím počítal programátor u předchozí generace nosiče.