☰ Menu

08.10.2026 · Signal Titans Editorial

Six surdosages massifs : comment le Therac-25 a confié au logiciel le rôle des verrouillages de sécurité matériels

Un terminal DEC VT100 beige dans une composition éditoriale façon plan technique sur les accidents de radiothérapie du Therac-25.

Le 21 mars 1986, à l’East Texas Cancer Center de Tyler, un patient était allongé sur le ventre sur la table de traitement pour sa neuvième séance de radiothérapie. Hors de la salle blindée, l’opératrice a saisi sa prescription, a remarqué qu’elle avait tapé « x » pour rayons X au lieu de « e » pour électrons, a remonté le curseur et a corrigé. L’écran affichait « beam ready ». Elle a appuyé sur « B ».

La machine s’est arrêtée et a affiché « Malfunction 54 ». Le moniteur de dose indiquait un sous-dosage. Dans la salle, le patient a ressenti quelque chose comme une décharge électrique. Des reconstitutions ultérieures ont suggéré qu’il avait pu recevoir entre 16 500 et 25 000 rad en moins d’une seconde. Une dose de traitement unique typique tournait autour de 200 rad.

La machine était un Therac-25. Entre juin 1985 et janvier 1987, elle a été impliquée dans six surdosages massifs connus aux États-Unis et au Canada. Nancy Leveson et Clark Turner, qui ont ensuite reconstitué les accidents, les ont qualifiés de pire série d’accidents d’irradiation de l’histoire des accélérateurs médicaux jusqu’alors.

Chronologie

Juin 1985, Marietta, Géorgie : un patient est gravement brûlé. Le physicien de l’hôpital demande au fabricant, Atomic Energy of Canada Limited (AECL), si la machine pourrait être en cause. AECL répond que non, et l’accident ne fait jamais l’objet d’une enquête sérieuse.

Juillet 1985, Hamilton, Ontario : un deuxième surdosage. AECL met en cause un microcontact du plateau tournant, le remplace et annonce à ses clients que son analyse montre une sécurité améliorée d’au moins cinq ordres de grandeur.

Décembre 1985, Yakima, Washington : un patient présente une brûlure en stries. En février 1986, AECL répond par écrit que les lésions n’ont pu être causées ni par la machine ni par une erreur de l’opérateur.

21 mars 1986, Tyler, Texas : le surdosage du « Malfunction 54 ». Les ingénieurs d’AECL ne parviennent pas à le reproduire et évoquent un problème électrique. La machine reprend du service le 7 avril.

11 avril 1986, Tyler : même machine, même opératrice, même message, nouveau surdosage.

17 janvier 1987, Yakima : un sixième surdosage, provoqué par un autre bug logiciel.

Février 1987 : les autorités de réglementation américaines et canadiennes demandent aux utilisateurs de cesser les traitements de routine jusqu’à ce que la machine soit corrigée.

La décision de conception sous-jacente

Le Therac-25 avait deux aînés, le Therac-6 et le Therac-20. Sur ces machines, l’ordinateur était une commodité ajoutée à un matériel capable de fonctionner seul en toute sécurité. Elles disposaient de verrouillages électriques et mécaniques indépendants.

Le Therac-25 a été conçu dès le départ pour être piloté par ordinateur. Selon Leveson et Turner, AECL a décidé de ne pas dupliquer l’ensemble des mécanismes de sécurité matériels existants et s’en est remise au logiciel. Une partie de ce logiciel était reprise du Therac-6, et certaines routines venaient du Therac-20.

Ce choix pèse lourd dans la suite. Le logiciel avait été écrit en grande partie par une seule personne, en assembleur PDP-11, avec peu de documentation. Il exécutait simultanément plusieurs tâches qui partageaient des variables sans synchronisation correcte.

Cause racine 1 : la fenêtre de huit secondes

Après le second accident de Tyler, le physicien de l’hôpital, Fritz Hager, a travaillé avec l’opératrice pour reproduire exactement ce qu’elle avait fait. Ils ont découvert que le déclencheur était la vitesse. Si un opérateur expérimenté modifiait la prescription assez vite, l’erreur apparaissait.

Le mécanisme, tel qu’AECL l’a ensuite décrit à la FDA, était le suivant. Une fois la saisie terminée, une routine commençait à régler les aimants de déviation, ce qui prenait environ huit secondes. Pendant ce temps, une sous-routine devait vérifier si l’opérateur avait modifié quelque chose. Mais un flag était effacé après le premier passage, si bien que les passages suivants ne cherchaient plus de modifications.

Si l’opérateur passait du mode rayons X au mode électrons et ramenait le curseur en bas de l’écran dans ces huit secondes, l’écran affichait le nouveau réglage. La machine, elle, ne l’appliquait pas entièrement. Elle pouvait tirer un faisceau de haute puissance prévu pour le mode rayons X sans que la cible de rayons X et l’équipement de mise en forme du faisceau soient en place.

Une feuille fixée sur le côté de la machine indiquait que « Malfunction 54 » correspondait à une erreur « dose input 2 ». Rien de ce dont disposaient les opérateurs n’expliquait ce que cela signifiait.

Cause racine 2 : un compteur revenu à zéro

L’accident de Yakima de 1987 avait une autre cause. Pendant la préparation, une variable d’un octet appelée Class3 était incrémentée à chaque passage dans une routine de test. Une valeur non nulle signifiait « vérifier la position du collimateur avant d’autoriser le traitement ».

Un octet ne peut compter que jusqu’à 255. Tous les 256 passages, il repassait à zéro, et la vérification était sautée. Si l’opérateur appuyait sur « set » à cet instant précis, la machine pouvait activer le faisceau alors que le plateau tournant était mal positionné. Le correctif d’AECL était simple : donner à la variable une valeur fixe non nulle au lieu de l’incrémenter.

Pourquoi cela n’a pas été détecté

Rien de tout cela n’exigeait de mauvaises intentions. Il a suffi que plusieurs hypothèses d’apparence raisonnable s’alignent.

L’analyse de sécurité d’AECL de 1983 considérait de fait le logiciel comme fiable et se concentrait sur les défaillances matérielles. Les messages d’erreur étaient cryptiques, et la machine s’arrêtait si souvent pour des raisons anodines que les opérateurs avaient appris à appuyer sur « P » pour continuer. Un opérateur a déclaré dans son témoignage qu’il n’était pas inhabituel que quelque chose arrête la machine.

Le signe le plus clair est venu de l’ancien modèle. Après les accidents de Tyler, un physicien de l’université de Chicago a découvert que le Therac-20 présentait une erreur logicielle similaire. Sur cette machine, elle ne faisait que griller des fusibles, car les verrouillages matériels arrêtaient le faisceau. Les fusibles grillaient depuis des années. Le matériel avait masqué le bug.

Le coût

Leveson et Turner rapportent que des patients sont morts des complications de leur surdosage et que d’autres ont subi des blessures graves, dont une paralysie et la perte d’un sein. Les machines ont été retirées de l’usage courant au début de 1987. Le plan correctif final d’AECL, publié en juillet 1987, ajoutait des protections matérielles indépendantes, comme un circuit de coupure sur impulsion unique et une surveillance du plateau tournant, ainsi que plus de vingt modifications logicielles.

Ce qui l’aurait détecté

  • Des verrouillages matériels indépendants qui arrêtent le faisceau, quoi que croie le logiciel.
  • Traiter le code réutilisé comme du code neuf lorsqu’il passe dans un système aux hypothèses de sécurité différentes.
  • Une synchronisation correcte de l’état partagé entre tâches concurrentes.
  • Des messages d’erreur qui indiquent aux opérateurs la dangerosité d’une panne, et des arrêts de sécurité impossibles à lever d’une seule touche.
  • Un processus qui examine chaque blessure signalée comme une possible défaillance du système.

Leveson et Turner ont mis en garde contre une lecture du Therac-25 comme l’histoire d’un seul bug. Se focaliser sur des bugs logiciels particuliers, écrivaient-ils, n’est pas la manière de rendre un système sûr. La question à se poser sur ses propres systèmes est plus tranchante : si le logiciel se trompe, qu’est-ce qui tient encore debout entre l’erreur et la personne à l’autre bout ?

Sources