# Therac-25

Therac-25 est le nom d'une machine de radiothérapie développée conjointement par l'Énergie atomique du Canada Limitée (EACL, Canada) et CGR MeV (France). Il s'agissait d'une évolution des modèles Therac-6 et Therac-20.
Entre 1985 et 1987, le Therac-25 est impliqué dans au moins six accidents durant lesquels des patients reçurent des doses massives de radiation, parfois de l'ordre de plusieurs centaines de grays. Au moins cinq patients décèdent des suites de l'irradiation.
La cause directe du dysfonctionnement était d'ordre informatique. La machine est depuis souvent citée dans les documents qui traitent de la sécurité et de la validité des logiciels destinés à des applications sensibles où la vie peut être mise en danger.

## Description de la machine

Le premier prototype fut produit en 1976. La version commerciale, contrôlée par un ordinateur PDP-11 et à l'origine des accidents, fut disponible dès 1982. Elle fonctionnait selon deux modes de traitement :
* thérapie basée sur un faisceau concentré d'électrons avec une énergie comprise entre 5 et 25 MeV durant de courtes périodes ;
* thérapie aux rayons X obtenus à partir du flux d'électrons (25 MeV) qui était converti grâce à un dispositif nommé la « cible » (voir l'article Tube de Coolidge).
Lorsqu'il travaillait dans le premier mode, le Therac-25 émettait un faisceau d'électrons dont l'intensité était réglée par des aimants. Dans le mode rayons X, trois composants se mettaient en rotation pour intercepter le flux d'électrons et modifier son intensité et sa forme. La cible convertissait les électrons en rayons X, un filtre générait une intensité uniforme et finalement un ensemble de blocs mobiles (le collimateur) focalisait les rayons. L'intensité du rayonnement était mesurée grâce à une chambre d'ionisation.

## Accidents

Les accidents se produisaient quand le faisceau d'électrons était activé sans que la cible soit correctement mise en place. Le logiciel qui pilotait le Therac-25 ne détectait pas ce mauvais fonctionnement qui engendrait une irradiation massive et potentiellement mortelle pour le patient. Celui-ci recevait directement le faisceau d'électrons qui, avec sa très forte énergie, produisait des brûlures thermiques et radiologiques ainsi qu'une sensation proche d'un intense choc électrique. Plusieurs personnes qui furent exposées allaient décéder par la suite.

### Incident de juin 1985

Le 3 juin 1985, à Marietta, Georgie, une femme de 61 ans atteinte d'un cancer du sein commença un traitement avec le Therac-25. La machine était en fonctionnement depuis six mois et n'avait pas posé de problèmes. Les opérateurs dirigèrent le faisceau de 10 MeV vers la clavicule de la patiente. Celle-ci ressentit alors une intense chaleur.
Peu après le traitement, la patiente souffrit de douleurs dans la région irradiée. Celles-ci furent imputées au traitement par radiothérapie. Mais la peau commençait à présenter les signes d'une brûlure radioactive. Les spécialistes estimèrent par la suite qu'elle avait reçu une dose comprise entre 15 000 et 20 000 rads (alors que ce type de traitement utilise des doses d'environ 200 rads). Elle continua à souffrir de ses brûlures et son bras resta paralysé.
Le cas ne fut pas signalé au constructeur avant mars 1986.

### Autres incidents

Les autres incidents furent similaires avec des atteintes profondes de la peau avec des nécroses, des dégâts au niveau des articulations ainsi que de fortes douleurs dans la zone irradiée.
Au Canada, une autre patiente de 40 ans, traitée par radiothérapie avec le Therac 25 en juillet 1985 pour un cancer du col de l'utérus fut également victime d'une erreur de la machine. Lors de sa séance du 26 juillet, après que l'opérateur eut activé le Therac, celui-ci s'arrêta en indiquant NO DOSE, TREATMENT PAUSE. Le manipulateur suivit la procédure recommandée et réessaya de mettre en fonctionnement la machine, à 4 reprises avec le même message d'erreur à chaque fois. À la 5e tentative, la machine s'arrêta et un technicien fut appelé qui ne retrouva rien d'anormal. La patiente se plaignit de brûlure dans les hanches dès le 29 juillet et fut hospitalisée le 30. Elle décéda le 3 novembre de la même année. L'autopsie révéla que la mort était due à son cancer, toutefois l'irradiation avait atteint de manière importante la partie inférieure de son corps et un remplacement complet de sa hanche aurait été nécessaire si elle avait survécu. Un technicien de l'EACL estima ensuite qu'elle avait reçu entre 13 000 et 17 000 rads.

## Causes

Les chercheurs ouvrirent une enquête afin de déterminer les causes de ces accidents. Plusieurs problèmes de gestion du projet informatique furent découverts :
* l'Atomic Energy of Canada Limited (AECL) ne disposait pas d'un organisme indépendant pour l'évaluation du code source ;
* l'AECL avait négligé certaines étapes liées au test du logiciel ;
* la documentation du système n'expliquait pas de manière adéquate les codes indiquant des erreurs ;
* le personnel de l'AECL, au début, n'avait pas tenu compte des plaintes ou n'y croyait pas.
D'autres problèmes, liés à la conception et la technique, furent également révélés par l'enquête :
* la machine ne possédait pas de dispositif physique pour bloquer le flux d'électrons en mode « haute énergie » si la cible n'était pas en place. La sécurité, à ce niveau, reposait ainsi uniquement sur le logiciel ;
* les ingénieurs avaient réutilisé des morceaux de code provenant d'autres modèles. Ces modèles possédaient des sécurités physiques et n'étaient donc pas autant vulnérables aux erreurs logicielles ;
* le matériel ne proposait aucun moyen au logiciel pour que celui-ci puisse vérifier l'état des capteurs et leur bon fonctionnement (contrôle en boucle ouverte) ;
* la tâche qui gérait le contrôle du matériel souffrait de problèmes de concurrence avec la tâche qui gérait l'interface destinée à l'opérateur. Une condition de concurrence (race condition) apparaissait si l'opérateur changeait les paramètres trop rapidement. Ce problème ne fut pas détecté lors des tests puisqu'il fallait un certain temps aux opérateurs avant qu'ils ne parviennent à utiliser l'interface de manière aisée ;
* le logiciel utilisait un fanion et l'incrémentait. Des dépassements de capacité se produisaient et engendraient la désactivation de certains tests de sécurité ;
* l'ensemble était programmé en assembleur, un langage courant à l'époque mais difficile à analyser et déboguer par rapport aux langages de plus haut niveau.