Как одна ошибка превратила настройку аппарата в опасную гонку

Therac-25 был медицинским ускорителем, который направлял на опухоль либо электронный пучок, либо рентгеновское излучение. Режим и параметры задавал оператор через компьютер. Проблема заключалась не только в сбое программы, но и в том, что аппаратное устройство, которое могло бы физически остановить опасную подачу, в этой модели убрали: безопасность в основном зависела от программных проверок.

Что означает «ошибка гонки»

Оператор мог быстро изменить параметры лечения, пока программа ещё обрабатывала предыдущую команду. Две операции — обновление настроек и проверка выбранного режима — иногда происходили в неожиданном порядке. Такая зависимость от того, какая операция «успеет» первой, называется ошибкой гонки.

В одном из опасных сценариев программа путала состояние аппарата и не включала нужные защитные ограничения. Ускоритель мог выдать мощный электронный пучок в конфигурации, не рассчитанной на такую подачу. Пациент получал дозу, многократно превышавшую назначенную; сообщения об отказе, включая «Malfunction 54», не объясняли оператору, что именно произошло и насколько это опасно.

Почему сбой оказался трудным для обнаружения

Обычная проверка программы могла не воспроизвести аварию: для неё требовались определённые действия оператора и очень быстрое переключение параметров. Кроме того, отсутствие независимой аппаратной блокировки означало, что ошибка в программной логике не встречала второго, физического барьера.

Этот случай стал важным уроком для проектирования систем, от которых зависит жизнь: программная проверка не должна быть единственной защитой от опасного режима. Если сбой может причинить тяжёлый вред, необходимы независимые ограничения — такие, которые остановят аппарат даже тогда, когда программа неверно поняла команду.