Программный код начал убивать людей при помощи машин еще в 1985 году.
История, конечно, не новая, но на мой взгляд полезно узнать каждому.
Баг-убийца. Фигак, фигак и Therac-25
Типичная разовая терапевтическая доза радиации составляет до 200 рад.
1000 рад — смертельная доза. Восставшая машина фигачила в беззащитных землян 20 000 рад.
Рассмотрим случай, когда поэтапное, но не согласованное внедрение улучшений софта привело к системной ошибке. К худшей в истории программной ошибке.
В Therac-25 аппаратная защита была убрана и функции безопасности были возложены на программное обеспечение.
Убийца
Therac-25 — аппарат лучевой терапии, медицинский ускоритель созданный канадской государственной организацией Atomic Energy of Canada Limited.
Убийство
С июня 1985 года по январь 1987 года этот аппарат стал причиной шести передозировок радиации, некоторые пациенты получили дозы в десятки тысяч рад. Как минимум двое умерли непосредственно от передозировок.
"Медсестра вспомнила, что в тот день она заменяла "x" на "e". Выяснилось, что, если сделать это достаточно быстро, переоблучение случалось практически со 100-процентной вероятностью."
Сотрудникам больниц нравилось, что компьютер настраивает всё быстрее, чем человек. Чем меньше времени уходило на настройку, тем больше пациентов можно было принять за день.
Когда пришло время сделать Therac-25, AECL решили оставить только компьютерное управление. Они отказались от устройств ручного управления и от аппаратных механизмов блокировки. Компьютер должен был следить за настройками устройства и, в случае обнаружения неполадок, должен был отключать питание всей машины.
Ну ну.
В программном обеспечении Therac-25 были найдены как минимум четыре ошибки, которые могли привести к переоблучению.
- Одна и та же переменная применялась как для анализа введённых чисел, так и для определения положения поворотного круга. Поэтому при быстром вводе данных через терминал Therac-25 мог иметь дело с неправильным положением поворотного круга (состояние гонки).- Настройка положения отклоняющих магнитов занимает около 8 секунд. Если за это время параметры типа и мощности излучения были изменены, а курсор установлен на финальную позицию, то система не обнаруживала изменений.- Деление на величину излучения, приводящее в некоторых случаях к ошибке деления на ноль и к соответствующему увеличению величины облучения до максимально возможной.- Установка булевской переменной (однобайтовой) в значение "истина" производилось командой "x=x+1". Поэтому с вероятностью 1/256 при нажатии кнопки "Set" программа могла пропустить информацию о некорректном положении диска.- Были выявлены потенциальные ошибки — в многозадачной операционной системе не было никакой синхронизации.
Тонкости расследования и последствий уже не так впечатляют, так что на JoyReactor им не место.
...а вот ссылочку на полную версию честно стыренного мной контента оставлю.
Отличный комментарий!