Keď nejaký program nefunguje tak, ako by mal a spôsobuje chyby, je to otravné a mrzuté. Nezostáva vám nič iné len čakať, že sa  všetko napraví v jeho nasledujúcej verzii. História však pozná aj smutný príbeh o tom, ako jeden softvérový bug svojich používateľov zabíjal. Spoznajte s nami retročriepku o stroji Therac-25.

Predstavte si, že prídete do nemocnice, kde vás čaká liečba zákernej nádorovej choroby. Pomôcť má  stroj na radiačnú terapiu, ktorý sa v tejto oblasti používa už roky. Jeho úlohou je s pomocou lúča elektrónov, alebo výkonného röntgenového fotónového žiarenia, poškodzovať rakovinové bunky. V spojení s ďalšími metódami ako je chemoterapia pritom dúfate, že sa podarí nádor zahubiť skôr, než zahubí on vás.

Ľahnete si na stôl a technik zamieri aparatúru na malý nádor na vašom chrbte. Doktor vám predpísal radiačnú dávku 180 radov a vzhľadom na to, že za posledné mesiace si pod daný stroj líhate už po deviaty krát, viete, že ide o bezbolestný proces.

Technik opúšťa miestnosť a stroj sa rozbieha. Z ničoho nič cítite na chrbte veľké teplo a ostrú bolesť. Vykríknete a snažíte sa postaviť, avšak zvuk stroja zosilnie a ste zasiahnutý druhým pulzom, ktorý bolí ešte viac. Kričíte a bežíte k dverám na ktoré zdesilo s plačom búchate. Voláte o pomoc. Nikto nevie čo sa deje. Ste hospitalizovaný s príznakmi vysokého radiačného ožiarenia.

Umierate v bolestiach o 5 mesiacov neskôr.

STROJ ZO ŽIARIVEJ BUDÚCNOSTI

Therac-25 bol nemocničný prístroj na radiačnú terapiu, ktorý sa dostával do služby behom 80. rokov minulého storočia.

Stroj bol vyrábaný kanadskou spoločnosťou AECL (Atomic Energy of Canada Limited), ktorá v oblasti nebola žiadny nováčik a stála za hojne používanými strojmi Therac-6 a Therac-20, ktoré sa používali v nemocniciach po celej Severnej Amerike.

Stroj Therac-6 v zdravotnom stredisku v americkom Texase /Foto: Public Domain/

Firma stroje navrhla a postavila v spolupráci s Francúzkou spoločnosťou CGR, avšak pri návrhu Therac-25 od spolupráce upustila a vypustila ho na trh na vlastnú päsť.

Dizajn zariadenia priamo vychádzal z predošlých modelov. Používal rovnaký typ ovládacieho minipočítača, PDP-11, čo bol 16-bitový stroj od firmy DEC, pričom v základe fungoval na rovnakom princípe a totožnými módami činnosti.

Hlavným rozdielom bolo, že počítač ako taký bol pri strojoch Therac-6 a Therac-20 len pomocným zariadením, pomocou ktorého ich bolo možné efektívnejšie ovládať. Stroje ako také mohli fungovať aj bez neho. V takomto prípade technik v nemocnici vykonával nastavenie ručne a pred jednotlivými úkonmi manuálne posúval komponenty do správnej pozície.

V základe šlo o dve nastavenia ústrojenstva.

Prvým bola elektrónová terapia, pri ktorej sa na konkrétne miesto pacientovho tela nasmeroval slabý lúč vysoko energetických elektrónov (5 až 25 MeV). Druhý režim pozostával z odlišnej liečby pomocou zacieleného röntgenového žiarenia (25 MeV).

Röntgenové žiarenie sa v medicíne štandardne produkuje ostreľovaním volfrámovej platničky vysoko energetickými elektrónmi. Inak povedané, stroj ktorý zvládne vykonávať elektrónovú terapiu môže byť použitý aj na produkciu röntgenového žiarenia, ak danému lúču do cesty postavíme prekážku z volfrámu.

Keďže väčšina energie sa pri tomto procese premení na teplo, pre dostatočne silné röntgenové žiarenie je nutné platničku, ktorá stojí v stroji medzi lúčom a telom pacienta, ostreľovať viac ako stonásobne silnejším elektrónovým lúčom, ako sa používa „na holo“ pri elektrónovej terapii.

Všetok hardvér strojov Therac bol navrhnutý tak, aby nemohlo dôjsť k omylu a stroj sa nerozbehol so zlým alebo nebezpečným nastavením a polohou jednotlivých komponentov.

Slúžili k tomu najrôznejšie mechanické a elektronické hardvérové zámky, ktoré neumožňovali spustenie vysokovýkonného elektrónového lúča v prípade, že röntgenový medzikus v podobe volfrámu nebol na mieste. Akákoľvek snaha to násilne urobiť by viedla k spáleniu poistky a znefunkčneniu stroja.

Ku strojom Therac-6 aj Therac-20 bol v priebehu času pridaný počítač PDP-11, automatická ovládacia mechanika a terminál VT-100. Počítač mal naprogramované sekvencie a mechanické príkazy na nastavenie stroja a technikovi stačilo, aby na klávesnici zvolil režim liečby.

Vybral teda elektrónovú terapiu, alebo röntgenovú terapiu, zvolil čas ožarovania a jeho silu, pričom počítač stroj pomocou elektronických príkazov a servomotorov správne nastavil a spustil.

Terminál VT-100 používaný na zadávanie príkazov stroju Therac-25 /Foto: Jason Scott, CC/

Šlo o veľkú výhodu, pretože softvér a mechanika všetko vykonala omnoho rýchlejšie, ako technik svojimi rukami. Nemocnica tak mohla behom dňa vybaviť omnoho viac pacientov a stroj za milióny dolárov bol využívaný omnoho efektívnejšie.

Významným faktorom, ktorý si je potrebné uvedomiť je to, že stroje Therac-6 aj Therac-20 mali všetky hardvérové bezpečnostné prvky prítomné bez ohľadu na to, či ich nastavoval človek alebo počítač.

Napojené servomotory totiž komponenty mechanicky posúvali rovnako ako človek. Len rýchlejšie. Stroj ako taký nevedel, čo ho nastavuje a v prípade akéhokoľvek zlého nastavenia sa nespustil. Akákoľvek softvérová chyba sa teda prejavila rovnakým spôsobom ako chyba človeka a bolo ju možné dodatočne napraviť.

Pri návrhu Therac-25 však firma AECL zvolila iný prístup a rozhodla, že stroj už nebude ovládaný manuálne, ale len elektronicky počítačom. Manuálne ovládanie zmizlo, čo ušetrilo náklady, pričom zmizla aj väčšine mechanických zámkov, ktoré zabraňovali spusteniu stroja pri zlom nastavení. Počítač mal predsa naprogramovanú správnu sekvenciu, ktorá bola mnohokrát overená a skontrolovaná, takže na rozdiel od ľudskej práce nemohlo dôjsť k omylu.

Softvér všetko kontroloval a v prípade zlého nastavenia stroj nespustil a nebezpečnej situácii zabránil. Nová a žiarivá budúcnosť bola tu. Nepotrebné mechanické komponenty, ktoré zbytočne zvyšujú komplexnosť a poruchovosť mohli ísť do dôchodku. Softvér ich svojou stálosťou a neúnavnosťou mnohonásobne prevýšil. Veď ako inak by to mohlo byť?

PRIMITÍVNA AKTIVÁCIA BUGU Z PEKLA

Therac-25 začal byť nasadzovaný do prevádzky v rôznych nemocniciach v USA aj Kanade v roku 1983. V tej dobe štartovala skutočná PC revolúcia, pri ktorej sa počítače začali dostávať do domácností medzi bežných ľudí a otvárali celkom novú éru a elektronickú budúcnosť.

V prvých mesiacoch nebol zaznamenaný žiadny problém. Stroje mali veľký úspech a behom krátkej doby pomáhali v liečbe stoviek a následne tisícok pacientov. Všetko sa zmenilo na začiatku júna 1985, v Kensstonskom regionálnom onkologickom centre v americkej Georgii.

Žene, ktorá sa liečila s rakovinou prsníku, bola predpísaná dávka 200 radov. Ako náhle sa stroj zapol, ucítila obrovské, skoro až nevydržateľné teplo. Nikto nevedel čo sa stalo. Stroj fungoval normálne. V tej dobe to ešte nikto netušil, ale v realite bola ožiarená dávkou 10 000 až 20 000 radov, čo napokon viedlo k amputácii jej ľavého prsníka a ľavej ruky.

Stroj Therac-25 na dobových propagačných materiáloch /Ilustrácia: AECL/

K podobnému prípadu došlo o mesiac neskôr v Ontárijskej nadácii pre liečbu rakoviny v Kanade a v decembri v americkom štáte Washington, kde stroj radiačne popálil pacientku na bedrách tak silno, že behom pár dní musela podstúpiť transplantáciu kože.

Po každom výskyte zvláštneho správania stroja nemocnice kontaktovali výrobcu zariadenia a takisto bezpečnostné a regulačné orgány, aby situáciu vyhodnotili.

AECL sprvu zaujala celkom popieravý postoj, pričom poukazovala na to, že stroj nie je schopný ožarovať pacientov vyššou ako nastavenou bezpečnou dávkou. Softvér a zariadenie má toľko bezpečnostných kontrol, že nastavenia stroja do vyššieho výkonu nie je možné.

Počet bezpečnostných procedúr bol pritom už taký veľký, že stroj naopak zastavil proces aj pri tej najmenšej a často neškodnej nezrovnalosti.

Technici v Ontárijskej nemocnici si však uvedomili, že aj keď stroj fungoval so štandardným výkonom, potenciálne by mohol extrémnu dávku žiarenia vyprodukovať tak,  že by röntgenová podložka nebola na mieste a stroj by tak na pacienta namieril lúč s plným výkonom priamo, bez akejkoľvek prekážky slúžiacej na rozptyl.

AECL túto možnosť zvážilo a vo svojich laboratóriách vykonali obrovský zástup testov. Chybu sa im však nikdy nepodarilo reprodukovať. Stroj skrátka podložku vždy umiestnil na miesto a ak sa podložka pri pohybe zasekla a nezapadla, alebo sa ju niekto pokúsil manuálne odobrať, stroj sa skrátka nikdy nespustil.

Došli tak k záveru, že jediné čo sa mohlo stať, bola nejaká raritná chyba, pri ktorej tri mikroprepínače, merajúce jej polohu, poskytli súčasne chybné dáta. Systém tak bol prepracovaný a navrhnutý tak, aby boli neustále testované a akákoľvek nezrovnalosť v práci čo i len jediného z nich bola okamžite reportovaná počítaču a ten ju kategorizoval rovnako, ako nesprávnu polohu podložky (a stroj teda nespustil).

Nová bezpečnostná modifikácia bola rýchlo nainštalovaná na všetkých strojoch, avšak výskytu nasledovných nehôd nijako nezabránila.

Radiačné popáleniny /Ilustrácia: wikihow/

Všetko vyvrcholilo v roku 1986 v onkologickom centre v Texase. Nemocnica liečila muža s nádorom na chrbte, ktorí mal v apríli naplánovanú už v poradí deviatu dávku žiarenia o sile 180 rad, do oblasti veľkej zhruba ako dlaň ruky.

Skúsený operátor, ktorý použil stroj už na stovkách pacientov, zadal na ovládacom terminály omylom príkaz „X“ pre röntgenovú terapiu, namiesto „E“ pre elektrónovú. Svoju chybu si hneď uvedomil a nastavenie prepísal na E. Keďže všetky ostatné parametre boli nastavené dobre, príkaz potvrdil. Softvér vykonal bezpečnostné testy, verifikoval všetky dáta a zobrazil správu, že stroj je pripravený. Operátor stlačil klávesu B pre spustenie stroja (Beam on) a stroj sa spustil s podobným priebehom, ako ste videli v príklade na začiatku článku.

Pacient mal na chrbte zranenie, ktoré pripomínalo zásah elektrickým prúdom. Po ošetrení nejavil žiadne ťažkosti a bol poslaný domov. V tej dobe nikto netušil, že ho zasiahla dávka 16 500 až 25 000 radov, v dôsledku ktorej o niekoľko mesiacov zomrie.

Nemocnica skontrolovala stroj a uvoľnený vodič či iný zdroj „elektrického zranenia“ nikde nenašla. Po kontrole trvajúcej niekoľko dní začala stroj znovu prevádzkovať bez akýchkoľvek problémov na ďalších desiatkach pacientov. O mesiac neskôr sa však zvláštna situácia na rovnakom pracovisku zopakovala.

Stroj obsluhoval rovnaký operátor, ktorý vykonával terapiu na kožnom rakovinovou nádore v oblasti ucha. V okamihu ako sa stroj spustil pacient zakričal, že vidí veľké záblesky svetla a počuje zvuk smažiacich sa vajec. Cítil pritom, akoby mu na tvár vyšľahol oheň. Zomrel o tri mesiace neskôr na následky vážnych radiačných popálenín a veľký nádor, ktorý sa objavil v jeho mozgu.

Krátko po týchto udalostiach z apríla a mája 1986 všetko zostávalo záhadou (obaja pacienti boli ešte na žive). V tej dobe našťastie všetko zastavila neústupnosť nemocničného technika Fritza Hagera, ktorý sa rozhodol, že na vyhodnocovanie už druhej anomálie na svojom pracovisku nebude čakať na AECL a príčinu nezvyčajného chovania stroja odhalí sám.

V oboch prípadoch si všimol, že stroj nakrátko zobrazil na monitore správu „Chyba 54“, čo sa inak nikdy nestávalo. V manuáli nebola spomenutá a AECL mu podalo vysvetlenie, že bliknutie tejto chyby značí len to, že stroj behom činnosti na malý okamih prišiel o schopnosť merať okolitú intenzitu žiarenia. Tieto senzory boli ale len doplnkové a informačné a nijako sa nepodieľali na funkcii. Interne stroj fungoval a reportoval, že vytvárané žiarenie bolo v norme, inak by sa nespustil. Ako sa neskôr ukázalo, dôvodom prečo informačné senzory na krátko nefungovali bolo, že produkované žiarenie bolo natoľko veľké, že boli celkom oslepené.

Fritz Hager sa nedal odradiť a spolu so svojou asistentkou zostali v nemocnici celú noc, pričom stroj opakovane na prázdno spúšťali, v snahe reprodukovať a vyvolať danú chybu znova. Nad ránom pritom na niečo prišli.

Konzola VT-100, do ktorej zadávali príkazy, sa ovládala klávesnicou. Ak technik zvolil röntgenový mód, napísal do textového okienka písmeno X. Stroj sa pritom začal pripravovať, pričom celé nastavenie mechaniky trvalo asi 8 sekúnd. Ak sa ale technik splietol a uvedomil si, že stroj musí nastaviť do elektrónového módu, písmeno X prepísal na E, čím sa stroj začal nastavovať zas pre tento režim.

Vo väčšine prípadov sa nič nestalo a stroj sa prestavil správne. Ak sa však prepis v danom osemsekundovom okne vykonal v konkrétny časový moment, stroj pri spustení krátko zobrazil „Chybu 54“ a stratil možnosť reportovať o  sile žiarenia, ktoré práve prebehlo.

Problém sa v laboratóriu AECL nepodarilo nikdy reprodukovať, pretože všetky testy boli robené systematicky, pomaly a pod veľkým dohľadom. Nikdy nedošlo k tomu, že niekto v zhone, ako sa v práci bežne dialo, začal stroj z dôvodu omylu prestavovať počas prebiehajúceho nastavovania.

Fritz Hager v nemocnici trénoval natoľko, aby sa mu po hodinách skúšania podarilo nájsť správny zlomok sekundy v 8 sekundovom procese, ktorý chybu spôsobil a následne ju už bol schopný vyvolať kedykoľvek.

Po extrémne dlhých telefonátoch a podrobnej inštruktáži bolo AECL napokon schopné chybu reprodukovať vo svojom laboratóriu a odhaliť hrôzostrašnú pravdu.

Softvér pri nastavovaní na röntgenovú terapiu (X) začal posúvať volfrámovú platničku na miesto, aby ju následne mohol zasiahnuť vysoko energetickým lúčom elektrónov a vyprodukovať röntgenové žiarenie. Ak v momente jej pohybu technik zmenil nastavenie na elektrónovú terapiu, podložka sa začala hýbať opačným smerom a odstraňovať mimo trasy lúča.

Problémom bolo, že softvér mal bezpečnostný mechanizmus, ktorý nastavil silu lúča až v momente, kedy mal potvrdené, že podložka je zapadnutá na správnom mieste. Štandardne to fungovalo tak, že dostal správu, že režim X posúva podložku na miesto a pripravil si hodnoty pre silu elektrónového lúča. Následne dostal správu „podložka je na mieste“ a hodnoty lúča nastavil.

V stroji však neexistoval žiadny mechanizmus, ktorý by rozpoznal, ktorým smerom sa podložka hýbe. Softvér tak dostal správu, že režim X posúva podložku a pripravil si hodnoty sily lúča. Ak sa technik v tomto krátkom časovom okne trvajúcom zlomok sekundy trafil so zmenou príkazu a stroju zadal prestavenie na režim „E“, platnička sa počas pohybu na miesto začala posúvať zas nazad. V okamihu ako došla na miesto, softvér dostal informáciu „Podložka je na mieste“, čo ale platilo už pre režim E.

Softvér skrátka dostal potvrdenie, že podložka je na správnom „E“ mieste a vložil jej hodnoty lúča. Bohužiaľ nemal ako zistiť, že hodnoty ktoré držal, boli vložené v čase, kedy bol režim ešte nastavený na X a tie „správne“ hodnoty teda patrili röntgenovému režimu, ktorý vyžadoval prakticky stonásobnú intenzitu sily lúča.

Tento problém v programovaní a v rámci návrhu elektronických komponentov nazývame ako „race condition“ či v preklade súbeh.

V rámci súbehu sa jednotlivé komponenty obvodu alebo programu odvíjajú od sekvencie a načasovania udalostí, ktoré z dôvodu nezvyklých okolností môžu prebehnúť v inom ako očakávanom poradí alebo podobe, čo vedie k neočakávaným výsledkom a stavom.

V tomto prípade bug viedol k tomu, že na pacienta zamierila dávka žiarenia určená pre volfrámový terč. A keďže lúču žiadny terč v ceste nestál, pacienti boli zasiahnutí dávkami žiarenia za hranicami mnohých nukleárnych havárii, alebo laboratórnych radiačných nešťastí.

LEKCIE PÍSANÉ KRVOU

Softvérové chyby často zostávajú celkom skryté, až do momentu, keď ich vyvolá nejaká neočakávaná udalosť, na ktorú nikto nemyslel.

Keď príčina problému vyšla na povrch, Frank Borger, technik z centra pre liečbu rakoviny v americkom Chicagu, ju na základe popisu prekvapivo pokusne reprodukoval aj so starším strojom Therac-20.

V danom prípade však hardvérový mechanizmus stroja všetkému zabránil. Komponenty vo fyzicky nesprávnej polohe totiž vždy viedli v prípade zvýšenej energie lúča k spáleniu poistky a vypnutiu celého stroja.

Poistky, ktorá bola v stroji Therac-25 odobraná, pretože softvér skrátka NEMOHOL nastaviť polohu daných komponentov nesprávne.

Zdrojový kód strojov nikdy nebol zverejnený, avšak vyšetrovatelia, na čele s programovou expertkou Nancy Levesonovou, k nemu dostali plný prístup. Vo svojom reporte, vedúcej k žalobe AECL, následne poukázali na šokujúci stav.

Podľa ich analýzy bol softvér písaný programátorom so žiadnymi, alebo veľmi malými vedomosťami z oblasti ovládania strojov, ktoré pracujú v reálnom čase. Bolo zrejmé, že by pri písaní kódu nebola vykonávaná nijaká časová analýza postupnosti realizácie príkazov.

Softvér Therac-25 bol napísaný v assamblery počítača PDP-11, nízkoúrovňovom programovacom jazyku, čo vyžadovalo extrémnu pozornosť a podrobné testovanie, z dôvodu ľahkého vzniku chýb a nezrovnalostí v inštrukciách.

AECL uviedlo, že program napísal jediný programátor, pričom ho vytvoril pre stroje Therac-6 a Therac-20. Vo firme už pritom nepracuje a nepodarilo sa ho kontaktovať. Firma softvér vďaka dobrej skúsenosti a bezproblémovej prevádzke použila aj pri stroji Therac-25, bez hardvérových bezpečnostných mechanizmov, neuvedomujúc si, že v predošlých strojoch neviditeľne potláčali akékoľvek bugy v softvéry.

Americký ústav pre kontrolu liečiv (FDA) po danej analýze označil stroj Therac-20 za defektný a zakázal jeho používanie pri liečbe pacientov. AECL v nasledujúcich mesiacoch vyprodukovalo niekoľko hardvérových aj softvérových úprav, ktoré chybu odstránilo, čo umožnilo stroju vrátiť sa do prevádzky. Žaloby boli vyriešené súkromným finančným vyrovnaním mimo súdu.

Všetko šlo pár mesiacov dobre až do 17. januára 1987, kedy bol v Yakimskej nemocnici v štáte Washington smrteľne ožiarený ďalší pacient.

Problém zapríčinil celkom nový bug v podobe dátového pretečenia čítača. Ak operátor poslal nevedomky riadiaci príkaz presne v moment, kedy k pretečeniu došlo, stroj preskočil niektoré nastavenia, vrátane správneho nasmerovania odrazového zrkadla, zacieľujúceho lúč. Výsledkom bola nekontrolovaná dávka žiarenia. Pacient zomrel o tri mesiace neskôr a spolu s ním aj celá prevádzka strojov Therac-25, ktorý sa už nikdy viac nerozbehli.

Tento príbeh zostáva dodnes ako obrovské varovanie, ktoré sa často používa na univerzitách a v laboratóriách ako príklad toho, ako softvérová a programátorská lajdáckosť, rovnako ako neprítomnosť dostatočnej kontroly vedie k obrovským nešťastiam.

Ďalšie drobné čriepky z IT histórie hľadajte na našom webe v štvrtok večer a takisto pod rovnomenným kľúčovým slovom.

František Urban

František Urban
Zameriavam sa najmä na prehľadové a analytické články z oblasti najrôznejších technológií a ich vývoja. Nájdete ma takisto pri diagnostike HW a SW problémov.

2 komentáre

  1. Tieto criepky citam velmi rad. Este by ma zaujimalo, co sa stalo s tym technikom. Pacoval dalej pre nemocnicu? Ja by som ho zamestnal ako de-bugera.