Softwarové chyby přístroje Therac-25 vedly k několika případům smrtelného ozáření
Mezi lety 1985 a 1987 ozářil kanadský lineární urychlovač Therac-25 šest pacientů dávkami až stokrát vyššími, než měli dostat. Nejméně dva z nich na následky zemřeli.
Obsah článku
Příběh Theracu-25 se obvykle vypráví jako varování před jedinou chybou v kódu. Jenže skutečnost je složitější a děsivější. Stroj nezabil proto, že programátor udělal překlep. Zabil proto, že jeho tvůrci z kanadské firmy Atomic Energy of Canada Limited (AECL) vsadili na to, že software dokáže sám uhlídat bezpečnost přístroje schopného dodávat smrtelnou energii. A pak neměli dost pojistek pro případ, že se software zmýlí.
Stroj, který nahradil fyzické zábrany kódem
Therac-25 byl počítačem řízený lineární urychlovač určený k radioterapii nádorů. Uměl pracovat ve dvou režimech: fotonovém pro hlubší tkáně a elektronovém pro povrchové léze, s energií až 25 MeV. Na americký trh vstoupil přes zjednodušenou cestu 510(k); FDA ho v březnu 1983 uznala za „v podstatě ekvivalentní“ starším přístrojům. Celkem bylo instalováno jedenáct kusů, pět v USA a šest v Kanadě.
Klíčový rozdíl oproti předchůdcům Therac-6 a Therac-20 nespočíval ve výkonu. Starší modely měly nezávislé hardwarové interlocky, tedy fyzické pojistky, které nedovolily spustit svazek v nebezpečné konfiguraci, ať už software říkal cokoli. Therac-25 tyto vrstvy z velké části odstranil. Bezpečnostní logika přešla do softwaru. A bezpečnostní analýza z roku 1983, jak později ukázali výzkumníci Nancy Levesonová a Clark Turner ve své zásadní rekonstrukci případu, pracovala s předpokladem, že „reziduální softwarové chyby“ se do hodnocení rizik nezahrnují.
Osm sekund, které rozhodovaly o životě
Běžná léčebná frakce představovala kolem 200 radů. Pacienti ošetřovaní přístrojem Therac-25 při nehodách dostali do úzce vymezeného místa odhadem 4 000 až 25 000 radů prostřednictvím vysoce koncentrovaného elektronového svazku bez správných rozptylových prvků.
Došlo k tomu dvěma různými cestami, které měly společný základ: software běžící bez nezávislé kontroly.
V texaském Tyleru šlo o takzvanou race condition, chybu souběhu. Zkušená operátorka zadala na konzoli režim X-ray, pak si rychle uvědomila chybu, kurzorem se vrátila a přepsala volbu na elektronový režim. Celá editace trvala méně než osm sekund. Jenže software mezitím už začal nastavovat magnety pro fotonový režim. Obrazovka ukazovala elektrony, zatímco vnitřní stav stroje odpovídal fotonům. Výsledek: plný výkon bez terčíku a rozptylovacích filtrů, přímo do těla pacienta.
V Yakimě ve státě Washington se projevila jiná softwarová chyba. Jednobajtová proměnná v kódu se při každém průchodu zvýšila o jedničku. Každých 256 cyklů přetekla na nulu, a v tu chvíli software jednorázově přeskočil kontrolu polohy horního kolimátoru. Stačilo, aby operátor stiskl tlačítko přesně v tom zlomku sekundy.
Proč nikdo nezasáhl dřív
První nehoda se stala v červnu 1985 v Kennestone ve státě Georgia. Pacientka přežila, ale přišla o prs a funkci ramene. Příčina byla připsána poruše mikropřepínače. V prosinci 1985 zemřela pacientka v kanadském Hamiltonu, oficiálně na agresivní rakovinu, přestože předávkování jí zničilo kyčel. AECL přesto uživatelům sdělovala, že předávkování „není možné“.
Proč jí nemocnice věřily? Konzole po každé nehodě zobrazovala matoucí hlášku „Malfunction 54″ a údaj o nulové nebo minimální dávce. Kalibrace po incidentu vycházela normálně. Chyba se projevovala jen při specifickém načasování rychlého zadání; stroj byl tisíce hodin v provozu bez problémů. Operátoři si zvykli na časté neškodné pauzy a chybové kódy považovali za provozní obtíž, ne za signál katastrofy. V Tyleru navíc při první nehodě nefungoval kamerový ani zvukový dohled nad pacientem.
Teprve po druhé tylerské nehodě v dubnu 1986, kdy pacient zemřel, se podařilo chybu reprodukovat; fyzik z nemocnice systematicky zkoušel rychlé editace, dokud stroj selhání nezopakoval. Přesto následovaly ještě další dvě nehody, než byl Therac-25 definitivně odstaven.
První provizorní „oprava“ po Tyleru? Mechanická blokace klávesy kurzor nahoru, aby operátor nemohl editovat příliš rychle. Softwarový problém řešený lepicí páskou na klávesnici.
Co se změnilo a co ne
Po sérii nehod FDA nařídila stažení třídy I a AECL musela do všech jednotek vrátit to, co tam mělo být od začátku: nezávislé hardwarové interlocky, potenciometr pro kontrolu polohy kolimátoru, omezení na jeden pulz při detekci chyby, srozumitelné chybové hlášky. Software sám nestačil.
Žaloby pozůstalých a zraněných skončily mimosoudním vyrovnáním; z veřejných zdrojů nevyplývá, že by byl kdokoli trestně stíhán. Příčiny selhání byly rozptýleny mezi pochybení výrobce, nedostatečnou dokumentaci, místní provozní návyky a slabý tehdejší systém hlášení incidentů.
Regulatorní důsledky ale byly hmatatelné. V roce 1990 přijal americký Kongres Safe Medical Devices Act, který zdravotnickým zařízením uložil povinnost hlásit úmrtí a závažná zranění spojená s přístroji. FDA dnes vyžaduje validaci softwaru přiměřenou riziku zařízení, detailní dokumentaci už ve fázi schvalování a uznává mezinárodní standard IEC 62304 pro celý životní cyklus medicínského softwaru. Nejnovější pravidla řeší i kybernetickou odolnost přístrojů.
Lekce, která přežila čtyři dekády
Therac-25 se nestal nejcitovanějším případem v dějinách softwarového inženýrství proto, že šlo o velkou katastrofu; šest předávkování je v kontextu průmyslových havárií malé číslo. Stal se jím proto, že dokonale obnažil systémové selhání: výrobce, který věřil vlastnímu kódu víc než fyzice, regulátor, který neměl nástroje na audit softwaru, a nemocnice, které neměly komu hlásit podezření.
Dnes se pacienti podstupující radioterapii mohou ptát na akreditaci pracoviště, pravidelné fyzikální kontroly přístrojů a systém hlášení incidentů; nepřímé, ale nejpraktičtější signály toho, že se poučení z osmdesátých let skutečně promítlo do praxe.
Therac-25 nezabil jedním řádkem kódu. Zabil rozhodnutím, že jeden řádek kódu stačí.