Код
#подборки

Fatality: 5 самых дорогих багов в истории

Иногда ошибки в программах стоят миллионов долларов и даже уносят жизни людей. Расскажем о самых дорогих багах в истории IT.

Иллюстрация: Meery Mary для Skillbox Media

Закон Мёрфи гласит: если что-то может пойти не так, это обязательно произойдёт. Яркий пример — фильм Стэнли Кубрика «2001: Космическая одиссея». По сюжету военные зашили в бортовой компьютер HAL 9000 жёсткую инструкцию, которая должна была скрывать от астронавтов истинные цели экспедиции. В результате искусственный интеллект перебил почти всех членов команды и сорвал операцию.

Но такие сюжеты встречаются не только в кино — в реальности дорогие компьютеры не раз сходили с ума и даже убивали людей. Расскажем о самых громких ошибках в ПО.

Как убить iPhone, или Ошибка 1.1.1970

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

В 2016 году резвые пользователи reddit.com пронюхали фичу: если в 64-битной версии iOS установить время на 00:00:00 часов 1 января 1970 года, а потом перезагрузить смартфон, он больше не включится. Устройство буквально превращалось в кирпич: пользователь видел только логотип Apple, а повторная перезагрузка не помогала.

Шутка разлетелась по интернету, и даже незнакомые с Reddit пользователи стали экспериментировать. Кто-то разыгрывал знакомых владельцев айфонов и айпадов.

Во «ВКонтакте» и на форумах моментально появились «добрые» розыгрыши:

Подписчики «Двача» и МДК одними из первых в России протестировали «новую фичу» :) Скриншот: МДК

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

Причина «окирпичивания» яблочной техники — UNIX-время и некачественное тестирование. Время в iOS отсчитывается от 1 января 1970 года — это условный ноль в UNIX-подобных системах.

В зависимости от часового пояса устройства добавляют смещение — прибавляют или отнимают необходимое количество часов. По одной из версий, когда пользователи из регионов с отрицательным смещением устанавливали злосчастную дату, время «уходило в минус». Например, в Нью-Йорке iPhone показывал бы −4 часа.

В итоге iOS не понимал, что делать с отрицательным временем, а инструкции, которые используют время, выкидывали белый флаг и просто-напросто ломались.

Но этой версии противоречат несколько фактов:

  1. На баг жаловались и в регионах с положительным смещением времени.
  2. Проблема вскрылась только на 64-битной версии.
  3. Неужели разработчики Apple могли не поставить элементарную проверку на отрицательные значения? WTF?!

По другой версии, операционная система «подавилась» слишком большим числом. Главная программа использует переменную времени при настройке окружения и действительно вычитает из неё какие-то константы.

И когда пользователи устанавливают время в ноль, оно не попадает в отрицательный диапазон, а становится равным 18 446 744 073 709 551 616 — это максимальное целое положительное число в 64-битной операционной системе.

Чёрный понедельник

В индекс Доу Джонса заложена стоимость акций 30 самых больших американских компаний — например, Apple, Coca-Cola и Intel. Ещё есть индекс S&P 500 — в него входит 505 компаний. По этим показателям оценивают «здоровье» экономики США: индексы «зеленеют» — экономика растёт, «краснеют» — экономика падает.

В октябре 1987 года индекс Доу Джонса упал на 22,6%, а S&P 500 — на 20,5%. Это вызвало эффект лавины на мировом фондовом рынке. Вслед за США обвалились Гонконг (на 46%), Австралия (на 42%), Канада (на 23%) и другие развитые экономики. Событие стало финансовой трагедией, а вину опять повесили на разработчиков.

Так выглядит чёрный понедельник инвестора. Скриншот: Ycharts

Эксперты всё ещё спорят об истинных причинах падения, но, по официальной версии, к кризису привела ошибка программного трейдинга. Специальная программа автоматически заключала сделки, чтобы инвесторам не приходилось постоянно следить за котировками и проводить все операции вручную. Машины ориентировались на движение рынка: индексы растут — закупаем, падают — продаём. Алгоритмами пользовались только крупные инвесторы вроде пенсионных фондов и центральных банков, поэтому объёмы программного трейдинга были велики.

Когда рынок немного качнуло, машины одновременно стали продавать акции на миллионы долларов. Но покупать их было некому, а потому программа ещё больше снижала цену. Случилось настоящее восстание машин: за один день американский рынок акций потерял около 500 млрд долларов. Вслед за американцами паника перекинулась и на другие страны — их экономики тоже просели на десятки процентов.

«Чёрный понедельник» ударил по развитым экономикам даже сильнее Великой депрессии. Зато государства и финансовые организации разработали правила для защиты частных инвесторов. Теперь биржи прекращают торги при падении S&P 500 на 7%, 13% и 20%, чтобы дать инвесторам принять взвешенное решение.

P. S. Объяснения рыночных воротил звучат красиво и убедительно, но мы-то с вами знаем, что на самом деле виноваты не разработчики, а рептилоиды с иллюминатами :)

Как потратить полмиллиарда долларов за сорок минут

Хотя финансовые игроки многому научились в 1987 году, история с «взбесившейся» программой повторилась спустя 25 лет.

Knight Capital была одной из крупнейших финансовых компаний в мире — с её помощью на фондовом рынке торговали страховщики, пенсионные фонды и банки. Через компанию проходила каждая шестая ценная бумага с бирж NYSE и NASDAQ. К тому же Knight Capital торговала собственными акциями и неплохо росла из года в год.

В начале 2010-х стала популярной высокочастотная торговля с помощью роботов. Они совершали сотни и тысячи сделок в секунду по заранее составленному алгоритму и помогали неплохо зарабатывать на минимальных скачках цены. Человек просто физически не мог выставлять столько ордеров в такие короткие сроки.

В 2012 году Knight Capital запустила своего робота — и сразу же всё пошло наперекосяк. Из-за ошибки в коде алгоритм за сорок минут умудрился провести более 2 млн сделок — а это недельная норма для рынка. Менеджеры компании смотрели и ничего не могли сделать: у программы просто не было «выключателя».

Кадр: фильм «Предел Риска»

За сорок минут робот успел потратить полмиллиарда долларов. Правда, из них только 365 млн принадлежало Knight Capital, а остальные деньги были заёмными. Вы удивитесь, но банки и фонды скинулись и спасли компанию от банкротства. Паники на фондовом рынке тоже не случилось — помогли защитные механизмы, которые придумали после «чёрного понедельника».

Ракета Ariane 5 и копипаста за 7 миллиардов долларов

Первый полёт самой надёжной европейской ракеты Ariane 5 был неудачным. Гордость космической программы взорвалась через 40 секунд после старта из-за ошибки в управляющей программе. Этот баг признан самым дорогим в истории.

В течение 10 лет 10 стран Евросоюза потратили на проект 7 млрд долларов, половину из которых дала Франция. Ракета должна была вывести на геостационарную орбиту спутники для изучения магнитного поля Земли.

4 июня 1996 года миллионы европейцев в прямом эфире наблюдали, как в небе буквально сгорают их налоги. На высоте 4 тысяч метров Ariane 5 отклонился от прямой траектории и самоуничтожился. Оказывается, разработчики скопировали код из управляющей программы предыдущей модели ракеты, которая успешно взлетала больше сотни раз. Только они не учли, что Ariane 4 летел по другой траектории и с другой горизонтальной скоростью.

Фрагмент кода ракеты с ошибкой. Скриншот: moscova — Inria

Скопированный программный модуль неверно прочитал ситуацию и преобразовал 64-битное значение в 16-битное безо всякой проверки. Да, программа перехватила исключение — а вот отреагировала на него неадекватно и отправила на бортовой компьютер сигнал аварийного завершения. При этом с технической точки зрения полёт был абсолютно нормальным.

Евросоюз потерял год исследований и более 500 млн долларов. После аварии страны-участники провели открытое расследование и нашли все «золотые» баги. А спутники быстренько отправили в космос на российском «Союзе». Злополучный код для Ariane переписали на Ada, и ракета успешно стартовала в 1997 году.

Двойная доза радиации в Национальном институте рака

Иногда баги приводят к смерти. В Национальном институте рака в Панаме из-за компьютерной ошибки погибли восемь человек и как минимум двадцать получили лучевую болезнь.

Врачи управляли камерой для облучения с помощью специальной программы: устанавливали дозу радиации, длительность терапии и положение четырёх защитных плит, которые укрывали здоровые ткани пациентов. Радиолог попросил добавить пятую плиту для дополнительной защиты, но программа разрешала ставить не больше четырёх. Тогда операторы придумали хитрость: фактически установить две плиты, а программе показать, что она всего лишь одна.

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

За это время через аппарат прошло 28 человек. Восемь из них скончались почти сразу, а остальные умерли в течение нескольких лет от различных осложнений. Врачей приговорили к тюремным срокам за убийство пациентов и нанесение тяжкого вреда здоровью.

Вывод

Идеальных программ не бывает, и все сценарии предугадать невозможно. Хакеры каждый день находят уязвимости в приложениях и устройствах, «ломают» небезопасные сайты. Но ошибки можно свести к минимуму, если правильно тестировать приложения и не вносить в них правки или «рацпредложения» по своему усмотрению, без попытки проверить последствия.



Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована