Открывает наш топ багов случай, произошедший в 1945 году с учеными Гарварда во время тестирования электромеханического компьютера. Тогда они обнаружили между двумя контактами реле застрявшего мотылька, из-за которого машина начала работать неправильно.
Насекомое извлекли и вклеили в дневник, а в сопроводительной надписи нарекли этот случай первым обнаруженным реальным багом. Bug с английского переводится как «насекомое» – вот откуда пошло это слово. А день происшествия с тех пор стал днем тестировщика.
Разработчики программного обеспечения в 20-м веке чаще всего обозначали год не четырьмя цифрами, а только двумя последними. Т.е. 6 марта 1995 года, например, записывалось так: «06.03.95».
Это позволяло хранить информацию более эффективно — тогда-то нужно было экономить каждый байт, а в БД могли храниться несколько тысяч дат. Вот почему сокращение являлось самым мудрым решением. Или все-таки нет?
1.01.2000 года во всем мире стали случаться сбои в работе систем и локальные конфликты. Так, в некоторых населенных пунктах пропадало электричество, отключалось отопление, зависали различные вычислительные центры. Причиной всему был как раз сокращенный формат записи года. Для людей после 1999 года шел, конечно же, 2000, но машины воспринимали его с позиции своей логики – как 1900, а иногда и как 19100. Из-за такой ошибки многие системы попросту зависли.
К счастью, мировой катастрофы не случилось, так как разработчики вовремя задумались о возможной проблеме. Есть данные, что подготовка к 2000-му году, т.е. меры по предотвращению Y2K, обошлись миру в 300 миллиардов долларов.
Она появилась в 1990-х гг. и подразумевала следующее: компьютеру-жертве отправлялся особенный эхо-запрос (пинг), после получения которого машина бесповоротно зависала. Многие ОС оказались подверженными этой уязвимости, в том числе Windows, Linux и др.
Согласно стандарту интернет-протокола IPv4, 65 535 байта – это максимальный допустимый вес передаваемого пакета. Если указанный размер превышался, сетевой стек принимающего компьютера оказывался переполненным. Поэтому такая возможность была ограничена.
Тем не менее, лазейка была найдена: сначала пакет искажали и делили на части, и только потом отправляли. Система, подвергшаяся атаке, пыталась собрать вместе все поврежденные пакеты, и это приводило к переполнению стека. Во второй половине 90-х эту уязвимость устранили.
Во времена зарождения Amazon в заказе можно было указать отрицательное количество позиций. Тогда деньги за товар не списывались с карты клиента, а наоборот, зачислялись на нее. Эта глупейшая ошибка возникла потому, что Джефф Безос – создатель магазина – пытался слишком часто выпускать обновленные версии сервиса и не уделял достаточно времени отладке.
По словам разработчика, это его любимый баг. Получилось так, что они отправляли покупателям деньги за продукцию, а потом ждали, когда те пришлют им товар.
Но не Amazon-ом единым: на других подобных сайтах тоже случались примитивные ошибки. Например, пользователи писали в графе «Количество товара» число 0,01 и в результате получали скидку в 99%. Также известно, что некоторые сервисы раньше хранили персональные данные пользователей в cookie, благодаря чему можно было вносить изменения в ID покупателя, а потом делать покупки от третьих лиц.
У AT&T было 114 коммутаторов, и вот однажды один из них получил механическое повреждение. Он выслал сообщение о своей неисправности другим АТС, которые передавали его соседним. В итоге запущенная цепная реакция вывела из строя всю телефонную сеть, и 60 000 пользователей в течение 9 часов оставались без мобильной связи.
Причиной стало последнее обновление программного обеспечения для АТС. Оно подразумевало, что в случае поломки коммутатор отправлял об этом уведомление соседним коммутаторам, дабы те начали перехватывать трафик. Они, в свою очередь, чтобы перейти в новый режим работы, перезагружались, и время от времени должны были проверять, не вернулся ли в строй первый.
Но из-за недочета в коде сломавшийся коммутатор отправлял сразу 2 сообщения. Второе соседние коммутаторы получали как раз в момент перезагрузки. Поэтому они начинали полагать, что тоже стали неисправными и посылали уведомление дальше – остальным звеньям цепи. В итоге, как домино, упала вся сеть, и компания понесла убытки на сумму около 60 миллионов долларов.
Эта авария случилась в 1996 году. Полет ракеты «Ариан-5» длился всего 40 секунд, а потом ракета разрушилась из-за некорректного функционирования бортового ПО. Данная ошибка – самая дорогая в нашем рейтинге и в целом в мире (по оценкам ущерб составил 360-500 млн. долларов). Кроме того, были потеряны четыре спутника Cluster.
Программисты во время работы над новым ПО определенные фрагменты кода взяли из предыдущей удачной версии Ariane-4. Но тестированием полученного результата пренебрегли. Когда ракета стартовала, ее модуль начал делать расчеты с учетом горизонтальной скорости аппарата. Но у Ariane-5 она намного больше, чем у Ariane-4, из-за чего случилось переполнение переменной и связанные с этим дальнейшие ошибки. Запасная бортовая система была идентичной, с похожим ПО, поэтому ошибка повторилась.
Эту ракету строили в течение 10 лет и потратили на ее разработку 7 миллиардов долларов.
Была такая операционная система — Microsoft Bob, которая обладала очень простой графической оболочкой. Она, по сути, являлась виртуальным домом, в котором были самые обычные комнаты: гостиная, коридор, кухня. Предметы, находящиеся в доме, соответствовали разным приложениям, например, ручка и лист бумаги предоставляли доступ к текстовому редактору, часы – к настройкам времени и т.д. В общем, сплошные удобства и уют.
Но, к сожалению, в системе безопасности все было не так гладко. Если пользователь трижды безуспешно предпринимал попытки авторизоваться, система спрашивала, не забыл ли он свой пароль, и если ответ был утвердительным, ОС позволяла просто установить новый. А это значит, что любой злоумышленник без проблем мог получить доступ к «защищенной» системе.
В СМИ прокатился шквал критики Microsoft Bob. ОС заняла 7 позицию из 25 в антирейтинге продуктов всех времен журнала
Завершающей в нашем топе будет ошибка, связанная с котиком. Случилось следующее: однажды пользователь отлучился от компьютера, чтобы пообедать, и заблокировал экран. Вернувшись, он обнаружил, что система зависла, а кошка топчется по клавиатуре.
На ПК был установлен LightDM – дисплейный менеджер для входа в ОС. Эта программа появляется в момент запуска и предлагает указать пользователя и пароль. Когда кошка села на клавиатуру, какие-то клавиши оказались зажатыми, что стало причиной зависания системы.
Наверное, это происшествие никогда не стало бы настолько известным, если бы не признание бага со стороны разработчиков после обнаружения череды точно таких случаев.