Therac-25

Therac-25 var en strålbehandlingsmaskin som på grund av mjukvarufel utsatte minst 6 patienter för strålningsöverdoser mellan juni 1985 och januari 1987, med strålsjuka och i vissa fall död som följd. Maskinen återkallades 1987 och genomgick genomgående designändringar, bland annat tillägget av hårdvaruskydd för att hantera mjukvarufel.

Mjukvarufelen i Therac-25 inkluderades 2005 i den amerikanska tidskriften Wireds lista över historiens värsta datorbuggar.

Bakgrund
Under tidigt 1970-tal fram till 1981 samarbetade det kanadensiska federala företaget Atomic Energy of Canada Limited (AECL) med det franska företaget CGR med att tillverka medicinska linjäracceleratorer för strålbehandling av tumörer. Man vidareutvecklade CGR:s tidigare maskinmodeller Neptune och Sagittaire, bland annat genom att lägga till stöd för datorstyrning via minidatorn PDP-11, med de resulterande maskinerna:
 Therac-6: Röntgenstrålningaccelerator på 6 MeV.
 Therac-20: Dubbellägesaccelerator på 20 MeV med möjlighet till elektronstålning, utöver röntgenstrålning.
Både Therac-6 och Therac-20 fungerade fristående från minidatorns mjukvara, samt hade hårdvarusäkerhetsanordningar och elektromekaniska förreglingar för att förhindra eller avbryta strålbehandlingen om något gick fel.

AECL hade på egen hand sedan mitten av 1970-talet utvecklat ett nytt "två-pass"-koncept för elektronacceleration, vilket innebar att acceleratorn kunde göras mindre och ändå producera samma energimängd, samt produceras till ringare kostnad, då det nya konceptet använde en magnetron istället för en klystron som energikälla. Therac-25 producerades för att dra fördel av det nya konceptet. Till skillnad från sina föregångare Therac-6 och Therac-20 byggdes Therac-25 inte som en fristående maskin som senare skulle göras styrbar via en dator. Istället togs datorstyrningen via mjukvara för given från början, vilket innebar att många hårdvarusäkerhetsanordningar inte ansågs behövas, eftersom dessa kontroller istället kunde göras i mjukvara.

AECL producerade den första prototypen av Therac-25 1976 och lanserade den slutliga produkten i slutet av 1982. Totalt installerades 5 stycken i USA och 6 stycken i Kanada.

Maskinbeskrivning
Therac-25 var en dubbellägesaccelerator med möjlighet att generera antingen fotonstrålning (röntgenstrålning) på 25 MeV, eller elektronstrålning på valbar nivå. Framför acceleratorns strålbana fanns en vändskiva monterad. Vändskivans syfte bestod i att ändra maskinens läge, vilka var:
 Elektronläge: för behandling med elektronstrålning.
 Fotonläge: för behandling med fotonstrålning.
 Lysläge: för precis patientpositionering under strålen före en behandling i antingen elektronläge eller fotonläge.

Den grundläggande säkerhetsaspekten med dubbellägesacceleratorer är att se till att vändskivan är på rätt plats vid rätt sorts behandling. Vilket läge vändskivan befann sig i hanterades av tre mikrobrytare (en för varje läge) som via en trebitarssignal meddelade datorn om vändskivans läge. Acceleratorn styrdes av en PDP-11-minidator som använde ett specialskrivet realtidsoperativsystem, utvecklat i PDP-11:ans assemblyspråk, som interagerade med en VT100-videoterminal som hanterade inmatning.

Gränssnitt
Vid varje behandling matades via ett textbaserat gränssnitt bland annat följande parametrar in: läge, energinivå, stråldos och tidslängd. Om ett fel upptäcktes av mjukvaran fanns två fellägen: avstängning eller pause. Vid avstängningfel krävde maskinen en omstart och alla parametrar fick matas in på nytt, medan pausefel löstes genom en knapptryckning, vilket möjliggjorde fortsatt behandlingen utan att mata in parametrarna på nytt. Felmeddelanden bestod ibland endast i ordet "malfunction" (engelska: "fel"), följt av en siffra mellan 1 och 64, vars innebörd ej fanns noterad i maskinens manual.

Buggar
Therac-25 hade minst två konkurrenstillståndsbuggar.

Tyler-buggen
Om en tekniker efter textinmatning upptäckte att fel läge hade angetts, fanns möjlighet att flytta markören och ändra läget. Om textinmatningen och ändringen skedde inom loppet av 8 sekunder (tiden det tog för maskinen att förbereda sig inför behandling) återspeglades ändringen endast på operatörens skärm, men inte hos Therac-25. Vändskivan var då inte korrekt positionerad vid behandlingsögonblicket, vilket inträffade minst två gånger i Tyler, med strålningsöverdos som följd. Efter den andra Tyler-olyckan upptäcktes att buggen även fanns i Therac-20, men att den ej upptäckts på grund av hårdvarusäkerhetsanordningarna som fanns på Therac-20.

Yakima-buggen
Systemet inkrementerade en enbytesvariabel för många gånger, vilket orsakade heltalsöverskridning (engelska: integer overflow) där variabeln i vissa stunder felaktigt hade ett nollvärde. Då nollvärdet var tänkt att signalera en avsaknad av fel uppstod ett konkurrenstillstånd där tidpunkten för teknikerns slutgiltiga knapptryck kunde sammanfalla med ett felaktigt nollvärde på variabeln. En felkontroll hoppades då över, vilket i minst ett fall i Yakima ledde till en strålningsöverdos, när en strålningsbehandling genomfördes trots att vändskivan fortfarande befann sig i lysläge.

Olyckor

Juni 1985: Kennestone Regional Oncology Center i Marietta, Georgia
Vid en uppföljningsbehandling efter en bortopererad bröstcancertumör skulle en 61-årig kvinna få smärtfri elektronstråle på 10 MeV genom en lymfknuta i nyckelbensregionen. Vid behandlingen upplevde hon en kraftig rödglödgad känsla. Hon meddelade teknikern att hon blivit bränd, men teknikern svarade att det inte var möjligt. Kvinnan hade inga märken på kroppen, men behandlingsytan kändes onaturligt varm. Fysikern Tim Still, som jobbade på Kennestone, ringde tillverkaren AECL för att fråga om det var möjligt för Therac-25 att verka i elektronläge utan att sprida strålen. Ingenjörerna på AECL ringde tillbaka tre dagar senare för att meddela att något sådant ej var möjligt.

Juli 1985: Ontario Cancer Foundation i Hamilton, Ontario
Vid sin 24:e Therac-25-behandling av Carcinom i livermoderhalsen fick en 40-årig patient en strålningsöverdos, trots att maskinen vid upprepade försök meddelade att ingen dos hade givits. AECL lyckades inte hitta det specifika felet, men åtgärdade andra fel som kunde uppkomma med maskinen, i hopp om att det specifika felet var ett av dessa. Åtgärderna påstods av AECL göra maskinen fem gånger säkrare än före olyckan. En oberoende konsult fastslog att det krävdes datoroberoende system, till exempel en potentiometer, för att verifiera vändskivans position.

December 1985 och januari 1987: Yakima Valley Memorial Hospital i Yakima, Washington
I december 1985 utvecklade en kvinna randiga erytem på ena höften efter en Therac-25-behandling. Att Therac-25 låg bakom framkom först vid en annan strålningsöverdos av en annan patient i januari 1987, då det framkom att patienten från december 1985 nu led av konstant smärta och nekros under huden. Patienten från januari 1987 avled i april 1987.

Mars och april 1986: East Texas Cancer Center (ETCC) i Tyler, Texas
En manlig patient fick i mars 1986 en strålningsöverdos under sin nionde Therac-25-behandling för en tumör i ryggen. Vid behandlingen hade teknikern först skrivit in fel parameter, men snabbt åtgärdat felet. Maskinen hade sedan givit felmeddelanden som gick att trycka bort, men ändå påvisat en för låg dos. Patienten beskrev känslan som att han fått en elektrisk stöt eller som att någon hällt hett kaffe på hans rygg. En ingenjörsfirma verifierade att maskinen ej var kapabel att ge en patient en elstöt, och en fysiker kontrollerade maskinens kalibrering utan att hitta några anmärkningar. Patienten avled av skadorna fem månader senare.

I april 1986 fick en manlig patient Therac-25-behandling för hudcancer på sidan av ansiktet. Samma tekniker som vid mars-olyckan och samma fel uppstod. Patienten uppgav sig ha känt "eld" på ansiktet. Teknikern tog kontakt med ETCC-fysikern Fritz Hager och berättade att ännu en patient hade blivit bränd. Patienten avled tre veckor senare. Hager och teknikern arbetade tillsammans för att försöka återskapa felet, vilket till slut lyckades.

Källor

Datorbuggar