7 величайших фэйлов в истории, виной которым маленькие баги.
1) 1962 г. - Mariner I
Космический аппарат Mariner I стартовал по направлению к Венере. Корабль перешел на собственную систему пилотирования. Но эта система содержала обидный маленький баг. В результате аппарат полетел совсем не в ту сторону и его пришлось подорвать над Атлантическим океаном. Последующее расследование установило, что в процессе программирования системы навигации была совершена маленькая опечатка - при вводе одной из формул был пропущен один символ.
2) 1982 г. - Авария на Транссибирском трубопроводе.
Оперативники ЦРУ внедрили баг (отчет в формате PDF) в канадское программное обеспечение, управлявшее газовыми трубопроводами.
Советская разведка получила это ПО как объект промышленного шпионажа и внедрила на Транссибирском трубопроводе.
Результатом стал самый большой неядерный взрыв в истории человечества.
3) 1985–87 гг. Несколько человек получили смертельную дозу облучения во время сеансов радиационной терапии с медицинским ускорителем Therac-25.
Основанная на предыдущей версии ускорителя, «улучшенная» модель Therac-25 могла генерировать два вида излучения: слабое электронное бета-излучение и нормальное рентгеновское излучение.
Еще одно «улучшение» состояло в том, что вместо электромеханической защиты пациента в устройстве была реализована программная защита, якобы более надежная.
Обе новые функции были некорректно реализованы неопытным программистом, результатом чего стали как минимум пять смертей и огромное количество несмертельных случаев переоблучения.
4) 1993 г. Широко разрекламированный процессор Intel Pentium неправильно производил деление с плавающей запятой, ошибаясь на 0,006%.
Хотя эта проблема реально коснулась немногих пользователей, но стала настоящим кошмаром для имиджа Intel.
Поначалу фирма согласилась менять процессор только для тех пользователей, которые могли доказать, что им в вычислениях нужна подобная точность, но затем согласилась поменять процессор всем желающим.
Этот баг стоил Intel около $475 млн.
5) 1996 г. Новая ракета-носитель Ariane 5, результат многолетней работы европейских ученых взорвалась через 40 секунд после своего первого старта.
Только научное оборудование на борту ракеты стоило около $500 млн, не говоря о множестве побочных финансовых последствий.
Система автоподрыва ракеты сработала после остановки обоих процессоров в результате цепочки ошибок.
Началом этой цепочки послужило переполнение буфера, поскольку система навигации подала недопустимо большое значение параметра горизонтальной скорости.
В целях снижения нагрузки на рабочий компьютер инженеры сняли защиту от ошибок переполнения буфера в этом программном модуле, поскольку были уверены, что такого значения горизонтальной скорости не может быть в принципе — и просчитались.
6) 1990 г. Падение телефонной сети AT&T.
Ошибка в новой версии прошивки междугородних коммутаторов привела к тому, что коммутатор перезагружался, если получал специфический сигнал от соседнего коммутатора.
Но беда в том, что этот сигнал генерировался в тот момент, когда коммутатор восстанавливал свою работу после сбоя.
В один прекрасный день, когда какой-то коммутатор в Нью-Йорке перезагрузился, он подал тот самый злополучный сигнал — и началось.
Вскоре 114 соседних коммутаторов непрерывно перезагружались каждые 6 секунд, а 60 тыс. человек остались без междугородней связи на 9 часов, пока инженеры не установили на коммутаторы предыдущую версию прошивки.
7) 1988 г. Переполнение буфера в Berkeley Unix.
Первый в мире компьютерный червь (так называемый червь Морриса) заразил от 2.000 до 6.000 компьютеров менее чем за сутки, эксплуатируя уязвимость в реализации функции gets(). В ОС Berkeley Unix эта функция ввода/вывода не имела ограничения на максимальную длину.