Вряд ли в далеких сороковых годах инженеры, доставшие из чрева компьютера Mark II виновницу замыкания - крохотную мошку, могли предвидеть, какая судьба уготована брошенному ими мимоходом словечку «bug». В наши дни, когда не в меру расплодившиеся компьютерные «насекомые» встречаются чуть ли не на каждом шагу, некоторые из них в буквальном смысле начинают влиять на вопросы жизни и смерти, а порой - даже на ход мировой истории. Чего стоит, к примеру, десятка крупнейших багов всех времен и народов, недавно составленная обозревателями журнала Wired.
1. Ошибка в программе расчета курса ракеты-носителя Mariner 1 (1962, первый американский аппарат, направленный к Венере), которая после схода с намеченной орбиты была уничтожена над Атлантическим океаном. Причиной инцидента послужила крошечная небрежность при переводе в машинный код формулы, наскоро набросанной на бумаге карандашом.
2. Коварный баг, затесавшийся в канадский пакет софта, управляющего контрольной системой газопровода. Возможно, обеспечил отечественный взнос в коллекцию: произошедшую якобы по его вине в 1982 году аварию участка Транссибирской газомагистрали сопровождал крупнейший из когда-либо зарегистрированных на земной поверхности неядерный взрыв. Увы, единого мнения по поводу причин катастрофы нет до сих пор: американские обозреватели записывают этот инцидент в актив бравых хакеров из ЦРУ, а кое-кто из отечественных экспертов начисто отрицает вмешательство «мировой закулисы», кивая на традиционное российское головотяпство (см.).
3. Cбой в компьютерной системе настройки ускорителя Therac-25, используемого в радиационной терапии (1985-87). Оплошность при задании программных настроек привела к неверному размещению металлического защитного экрана, поглощающего электроны высоких энергий и генерирующего рентгеновское излучение (экран был подвижным, поскольку система предусматривала режим прямого облучения пациентов электронами низких энергий). В результате многие пациенты попали под высокоэнергетический электронный пучок ускорителя, получили удар электрическим током и сильные ожоги; по крайней мере пять человек умерло позже от лучевой болезни.
4. Ошибка переполнения буфера в берклиевской версии Unix при вызове функции gets(). Была использована при написании самого первого в истории компьютерного вируса - червя Морриса (1988). Просочившись в Сеть, всего за один день вирус-пионер отправил в нокаут примерно одну десятую часть тогдашнего Интернета (хотя червь Морриса и не содержал деструктивных функций, производительность пораженных им машин резко падала). С тех самых пор сквозь дыры, обнаруженные в фирменном софте, без помех шастают всевозможные черви и троянцы.
5. Дефект генератора ключей системы криптозащиты Kerberos - самый «долгоиграющий» баг, просуществовавший с 1988 по 1996 годы. Как выяснилось, грозный «Цербер» был лишен зубов: по программерскому недосмотру использованный в нем генератор случайных чисел оказался недостаточно «случайным». До сих пор неизвестно, удалось ли кому-нибудь из злоумышленников поставить этого «пса» себе на службу.
6. Девятичасовая авария, выведшая из строя системы американской компании AT amp;T (1990). Виной тому - обновление софта для коммутаторов, обслуживающих «дальнобойные» звонки: электронные «телефонисты» тут же принялись рассылать своим соседям сигналы перезагрузки с интервалом в несколько секунд, в результате чего телефонная сеть рухнула, как цепочка костяшек домино. Восстановить статус-кво удалось лишь после «даунгрейда» до предыдущей версии софта.
7. Ошибка в операции деления чисел с плавающей запятой в процессорах Pentium, ставшая настоящим проклятием для компании Intel (1993). Несмотря на то что даже в наихудших случаях точность вычислений «хромала» всего лишь на несколько тысячных долей процента, эти арифметические фокусы сильно подмочили репутацию микропроцессорного гиганта. В результате пришлось заменить миллионы дефектных чипов, а весь скандал обошелся Intel примерно в полмиллиарда «зеленых».
8. «The Ping of Death» (1995-96) - баг, связанный с неправильной обработкой некоторыми операционными системами слишком больших IP-пакетов (в частности, производимых командой Ping). Под раздачу попали Unix-системы многих производителей, а пользователям Windows пришлось созерцать на дисплее «синий экран смерти».
9. Глупейший баг в коде управляющей программы ракеты Ariane 5 (1996), вызвавший ее взрыв спустя какие-то сорок секунд после старта. Дело в том, что значительную часть софта эта модель унаследовала от своей предшественницы Ariane 4, однако один из модулей забыли переделать для новых условий. В результате ошибка переполнения регистра вызвала сбой системы ориентации в пространстве, неправильную коррекцию курса и разрушение корпуса под действием аэродинамических сил. При этом дублирующий модуль вышел из строя всего лишь на 0,05 секунды позже основного.
10. Фатальный глюк в графическом интерфейсе программы по управлению системой лучевой терапии в панамском Институте рака (2000). Экраны, защищавшие от радиации здоровые органы, отображались на мониторе в виде прямоугольных «кирпичиков». Оказалось, что программа была чувствительна к их расположению. В результате три десятка пациентов получили передозировку на изотопном источнике. По всей видимости, не меньше восьми человек умерли от лучевой болезни (за три года скончался 21 пациент, но часть смертей могла быть вызвана прогрессирующим раком).
Как можно заметить, летопись «великих жучков» прервалась на пороге нового столетия. Неужто прошедшие с тех пор полдесятилетия так и не добавили в кунсткамеру новых экспонатов? Не будем делать поспешных выводов: большое, как известно, видится на расстоянии. Тем более что новые сюрпризы не за горами: покуда в этом мире есть компьютеры и программисты, вопрос «Что баг грядущий нам готовит?» никогда не будет снят с повестки дня.