Когда-то я заинтересовался вопросом ответственности в IT. К финансовым потерям мы уже привыкли. Не проданный продукт, ошибка в расчете и недовольный клиент — это те последствия, о которых мы в курсе. Но что, если наши ошибки приведут к непоправимым последствиям. Я несколько раз читал лекции на тему ошибок в программировании, которые привели к человеческим жертвам.
Собственно, мои исследования привели меня к мысли написать об этом книгу. Но в начале мне захотелось протестировать, насколько эта идея интересна и необходима публике. Твиттер оказалсяотличной площадкой для этого. Результат этого теста перед вами.
1 Элаи Херцберг попала в историю как первый человек, который погиб под колесами беспилотного автомобиля. Весной 2018 года в темное время суток машина Uber засекла преграду. В начале она подумала, что это мусор, потом — что животное, и только за пару метров поняла, что это человек.
К сожалению, машина не успела затормозить, что привело к смерти человека. Тестирование проходило на модифицированной Volvo XC90, у которой была отключена система экстренного торможения, чтобы не мешать ПО Uber управлять машиной. Не может быть два короля в одном королевстве. Задача тормозить в экстренных случаях была возложена на плечи водителя, который страховал автопилот. Он же в это время смотрел Netflix.
2 Аппарат Therac-25 стал самым резонансным случаем в истории программирования для медицинских девайсов. В силу ошибки race condition, при быстром переключении между магнитным и рентгеновским режимами работы девайса заслонка для рентгеновских лучей не успевала установиться. Из-за этого у 10 пациентов диагностировали лучевую болезнь, что привело к смерти или ампутации зараженных частей тела.
3 25 февраля 1991 года установка ПВО Patriot не смогла перехватить ракету, пущенную со стороны сил Саддама Хусейна. Ракета попала в барак солдат США, что привело к 28 смертям. Расследование показало, что
4 В 2016 году актер Антон Ельчин был раздавлен собственной машиной при въезде домой. Антон многим запомнился как актер, сыгравший навигатора Чехова в полнометражках «Start Trek». Причиной смерти послужил не интуитивный дизайн ручки передач, представленный Jeep в новых моделях машин.
В отличие от стандартных ручек передач, где положение ручки показывает режим работы двигателя, у новых ручек местоположение выбиралось скорее как рычажок в меню. Антон вместо паркинга выбрал нейтральное положение, от чего машина скатилась и задавила невнимательного хозяина.
5В 1992 году ошибки системы распределения маршрутов в Лондонской скорой помощи привели к смерти
В результате система была введена в эксплуатацию без нагрузочного тестирования и с 81! известным багом. Добавьте к этому еще и то, что интегратор решил сэкономить и купил дешевое оборудование, которое сломалось через пару часов после активного пользования системой. Хаос был настолько безумным, что бывали случаи, когда человек, не дождавшись скорой, умирал, его увозили в морг, и только тогда приезжала скорая.
6 1979 год. Пенсильвания чуть не стала еще одним Чернобылем, и это самый большой прецедент в истории атомной энергетики США. Внешний дизайн датчиков системы там был очень плохо продуман и был расположен по кругу комнаты. Смена, которая следила за состоянием, не заметила всех показателей, которые указывали на то, что есть утечка, и значение температуры реактора приблизилось к критическому значению. Ситуацию спасла следующая смена, которая выходила на вахту и начинала считывать показания датчиков.
Чтоб считать показатели, надо было пройти по круглой комнате и отдельно смотреть на каждый показатель во многих разных местах. Утечку нашли, реактор отключили, но еще 14 лет проводили работы по очищению территории. Это стало поводом огромных протестных митингов и очень поменяло общественное мнение про «мирный атом».
7 1992 год, самолет под управлением опытной команды потерпел крушение возле Страсбурга. 87 из 92 человек погибли. Анализ черного ящика показал, что опытные пилоты перепутали настройки автопилота: угол и скорость снижения.
Дизайнер приборной панели очень стремился сэкономить место и расположил эти два индикатора друг возле друга. При том, что даже не смотря на то, что единицы измерения совершенно разные (пилоты хотели задать 3.3 градуса спуска, а задали 3300 фунтов в минуту).Но для экономии места оба показателя показывались как 3.3. Кому в голову придет показывать 3300 как 33?
8 Моя любимая история. Станислав Петров в 1983 году спас мир, не сделав ничего. Во время разгара холодной войны между США и СССР он служил в штабе антиракетной обороны. Так как две страны обладали атомным оружием, между ними была заключена доктрина полного уничтожения. Это значило, что как только одна ракета полетит со стороны одной страны в другую, другая может ответить, как хочет. Грубо говоря — начало третьей мировой.
Станислав Петров в 1983 году как раз наблюдал за системой раннего обнаружения ракетного удара. И как же он удивился, когда увидел на экране 5 ракет, которые летели со стороны США в сторону СССР. По всем правилам Петров должен был отдать указания полномасштабного ракетного удара по США. Но, как он сказал: «У него была чуйка». Он предположил, что нападать на СССР всего лишь 5 ракетами — не логично, и решил подождать. Внезапно ракеты пропали, он сделал рапорт.
Расследование определило, что эти 5 ракет — edge case того, как лучи солнца падают на спутник на орбите Молния. Таким образом, Петров, не сделав ничего, подарил нам с вами мир, в котором мы живем. Хотя злые языки говорят, что он тогда был в стельку пьян. Но это не отменяет того, что даже будучи пьяным, ты можешь спасти миллиарды людей.
9 Пациентка Jenny (имя заменено в отчетах) погибла от обезвоживания после химиотерапии. Причина оказалась до ужаса идиотской. Дизайн медицинской системы был настолько плох, что опытные медсестры просто не заметили пункта, который говорил, что для этого пациента необходимо вводить дополнительные элементы сразу после операции.
10 Шестеро велосипедистов сошли с дистанции гонки в Осло в 2014 году. Оказалось, что велосипедисты выпили жидкость для мытья пола, решив, что это энергетик. Дизайн упаковки тоже имеет значение.
11Два солдата армии США погибли во время учений артиллерийских подразделений. Солдаты понадеялись на данные тактической системы, но не знали, что, если не задать высоту цели — система считает ее равной 0. Вот тебе и рокетджамп.
121994 год, борт авиакомпании China Airlines потерпел крушение и унес жизни более чем 250 человек. При приземлении второй пилот случайно включил автопилот, который начал вносить коррективы в действия пилотов. При снижении пилоты заметили это и смогли выключить автопилот, но, к сожалению, рассинхронизация действий людей и автопилота привела к крушению. При расследовании также была найдена ошибка, патч для которой уже был написан. Борт, потерпевший крушение, был запланирован на апдейт системы сразу после окончания рейса, который, к сожалению, так и не закончился удачно.
13Knight Capital в свое время перепутали деплои и вместо тестового енва задеплоили новую версию на продакшен. Система думала, что тратятся виртуальные доллары, а на самом деле Knight потеряла 460 миллионов долларов за 45 минут. Скидывались на спасение Knight всем селом.
142015 год, грузовой самолет испанских военно-воздушных сил потерпел крушение около Севильи. Авария была вызвана ошибкой ПО и унесла жизни 4 человек. Airbus после этого случая отозвала все самолеты A400 на проверку. Проблема заключалась в новой версии софта по контролю топлива в двигателях. Система подавала топливо, но очень медленно, от чего 3 из 4 двигателей отключились.
151998 год, один из спутников Nasa, отправленный на Марс, достиг орбиты красной планеты и взорвался. Была ошибка в двух модулях ПО спутника: один ждал данные в метрической системе, а другой отдавал в имперской :) Не додебажили на 327 лямов.
16Как рассказывает SIG, один из самолетов F-14 разбился вследствие того, что случилась системная ошибка, но программист не обернул ее в catch. Это привело к полному отключению бортового компьютера. Пилот катапультировался, но самолет, конечно же, не спасли.
17Кибервойна, или взрыв, который было видно из космоса. В 1982 ЦРУ внедрило шпиона в канадскую фирму по разработке софта для газопроводных систем, потому как знало, что этот софт будет использован СССР. Программист-шпион написал методы, из-за которых в 1982 году газопроводная труба взорвалась так сильно, что взрыв можно было наблюдать из космоса. К счастью, никто кроме оленей не пострадал.
18Ракета Ариана 5, разработка которой стоила около 8! миллиардов долларов, должна была вывести на орбиту несколько спутников и другое оборудование. Полет ракеты завершился через 4 секунды после взлета. Она упала. Один из модулей системы попытался сконвертировать
19Ночь живых мертвецов. 2003 год, St. Mary’s Mercy Hospital. Из-за ошибки случайно «убило» все 8500 пациентов. Система была умна, и как только пациент умирает — она сразу оповещает все службы: от полиции до страховой. Не странно, что все немного перепугались от внезапной масакры.
201982 год, миноносец морских сил Великобритании был поражен ракетой, выпущенной из аргентинского самолета. Противоракетная система не сработала, погибло 28 человек. Во время постройки миноносца произошел взрыв и погибло два строителя. Поврежденная часть корабля была заменена частью с идентичного аргентинского корабля. Когда система обнаружила ракету, она провела проверку на свой-чужой. А так как замененная часть корабля была аргентинская, ракета была определена как своя. Кэш — это не шутки :) Противоракетная оборона не сработала, потому как ожидала, что ракета пролетит. Но нет.
211994 год, вертолет модели Chinook разбился, даже не смотря на управление очень опытным пилотом. Погибли 29 человек. Расследование очень долго пыталось скинуть всю вину на пилота, но в результате были найдены ошибки в системе управления двигателями. Также были проблемы в работе датчика высоты с одновременно включенным радио вертолета. А мне не верили, что в Samsung компанс со спотифай не работает :)
22Панама-Сити, докторам радиологам доставили новое медицинское оборудование, которое позволяло выставлять 4 блока, защищающие человека от радиации, и делать очень точные снимки. Система разрешала использовать не более 4 блоков, но доктора решили, что могут обмануть систему, если совмещать 5 блоков, с дыркой посередине. Но только никто не сказал медикам, что в зависимости от того, в какую фигуру складываются блоки — такой силы луч используется для снимков. Как результат — 10 смертей и 19 человек получили сильнейшее отравление радиацией.
23Новейший в свое время самолет F-18 «превращался в тыкву» для системы, когда пересекал зону смены часового пояса с разницей в день (к примеру, полет с Гаваев в Японию). Система не рассчитывала, что может попасть в прошлое, потому
24Фобос-1, спутник СССР, был направлен на изучение Марса. В 1988 году неправильная команда, запущенная с Земли, активировала тестирующий код, который никогда не должен был бы выполниться. Это привело к тому, что спутник потерял возможность ориентироваться в космосе. У него села батарея, и он был навсегда утерян. Смешно то, что тестирующий код оказался там из-за спешки, но программисты заверили, что он никогда не выполнится. Выполнился.
25День, когда AT&Tостановился. 1990 год, новый патч для свичей AT&T. Естественно, компания не может апдейтить сразу все свичи, иначе вся сеть упадет. Потому по новой версии софта, один из свичей в Нью-Йорке начал процедуру апдейта и отправил всем ближним сообщение об этом. После апдейта загрузился и сообщил, что на месте. Так уж получилось, что, получив второе сообщение от свича из Нью-Йорка, другие свичи начинали процедуру self-testа, о чем сообщали ближайшим свичам, и отключались. При включении делали то же самое. Вся сеть AT&T каскадом завалилась на 8 часов, отключая своих пользователей от телефонов, и не имея возможности обработать запросы.
261997, американский авианосец USS Yorktown остановился и отказался плыть дальше. Пришлось вызывать буксир. Оказалось, что программист ввел в базу один параметр как 0. Все остальные системы пытались пользоваться этой переменной, что вызывало деление на 0. Смешно, но система обновления базы тоже смотрела на этот параметр.
271962 год, спутник Mariner 1 внезапно полетел совсем не в ту сторону, куда ожидалось. Центру полетов пришлось самоуничтожить его над Атлантическим океаном. Расследование показало, что формула была запрограммирована неправильно, потому как у ученого, писавшего ее на доске был плохой почерк, и программисты неправильно ее закодили :)
28Баг в ПО Toyota вызывал внезапную остановку транспорта, что привело к смерти 89 человек. Самое интересное, что, когда начали расследование, эксперт заключил, что код у Toyota — совсем говно, разобраться нереально, и все держится на честном слове. Оказалось, что у Toyota использовалось около 350 ассемблерных функций, которые выполнялись при переключении операций, которые никак не синхронизировались. В определенных случаях это приводило к полной остановке автомобиля.
295 декабря 2010 года. Российский ракетоноситель Протон-М пошел на дно океана с тремя спутниками Глонасс-М. Причина — неправильная формула, которая превысила массу одного из заправленных баков на более чем полторы тонны. Как оказалось, формула была исправлена и даже была заведена в систему как изменения, запланированные для реализации. Но когда подошли сроки — многие задания закрывали как неважные. Дозакрывались. Подумайте в следующий раз, когда таску в Jira закрываете :)
30Один из самых известных блогеров Джошуа Браун взорвал в свое время интернет своими видеообзорами Теслы. И, конечно же, фанател от автопилота, пока в один день Тесла на полной скорости не врезалась в фуру. Джошуа погиб на месте. Как оказалось, машина с прицепом, ехавшая впереди Теслы, перестраивалась в другую полосу, от чего сбросила скорость. И тут в нее прилетела Тесла под управлением автопилота. Как выяснилось, Джошуа совершенно не следил за дорогой, а автопилот не заметил прицеп, и смешал его с небом. Тесла рекомендовала, что автопилот нужен для помощи водителям, но никак не замены их полностью.
31Индиана, 2003 год. Инженер, который занимался поддержкой энергооборудования сети, заметил небольшую поломку. Его прям очень раздражал звуковой сигнал, которым система оповещала о проблеме. Недолго думая, инжинер отключил звук оповещения и спокойно окончил работу. Конечно же, он забыл ее включить обратно и никому не сказал. После этого дерево, упавшее на линию передач в Огайо, порвало линии электропередач, отключив и соседние регионы. Система оповещения пыталась мигать красным, но звуку не издавала. Результат? 55 миллионов человек без электричества. А ведь могли включить звук хотя бы через полчаса трезвона :)
327 октября 2008 года самолет, совершавший рейс Singapore — Perth, внезапно начало трясти. На самом деле нет, но все так казалось. Через 3 часа полета внезапно отключился автопилот, и пилотов засыпало ошибками. Через 5 минут капитан корабля отключил автопилот и попытался разобраться, что же случилось. Внезапно нос самолета накренился на 8.4 градуса, от чего пассажиры в салоне, которые не были пристегнуты в тот момент, встретились головой с потолком самолета. Результат — 112 человек получили ранения.
Расследование показало, что один из процессоров, которые отвечали за обнаружение критических ситуаций, внезапно выдавал неправильно значение, вероятнее всего, из-за производственного брака, но сразу же после него выдавал верное. Система, получив неправильное значение, выставляла его как неверное, но, сразу же получив верное значение, ставила предыдущее в верное. Из-за этого самолет косплеил сериал «Крутое Пике».
3314 сентября, 2004 года. Без какого-либо предупреждения радиорубка управления перелетами в аэропорту Лос-Анджелеса потеряла голосовую связь с более чем 800 самолетами. Запасная система связи отвалилась через минуту после запуска.
Как оказалось, в основной системе были тики таймеров, которые начинались с самого высокого числа (2 в 32 степени). Служили они для идентификации сообщений и синхронизации. Каждое новое сообщение просто уменьшало таймер на 1. Когда же количество тиков достигло 0, оказалось, что система не может дальше продолжать отсылать сообщения. Чтобы отправить 2 в 32 степени сообщений, необходимо около 50 дней. Теперь, процедура безопасности требует перезагрузку системы каждые 30 дней :)
34American Airlines допустили ошибку в разработке системы планирования отпусков для пилотов. Оказалось, что кто-то забыл поставить лимит на взятие отпусков в Рождественский период. Чем и воспользовались пилоты. Кому летать 15 000 запланированных перелетов — стало большим вопросом для компании, и пришлось торговаться. Каждый пилот, который вышел на работу в этот праздничный сезон, получил в полтора раза больше отпуска :)
35Про Хитроу вы, наверное, слышали, но там все, что только могло, пошло не так. Просто реальный пример закона Мэрфи. Но почитайте, конечно же.
36Конечно же, нельзя обойти вниманием известный баг Y2K, при котором до
37В 2011 году более 400 заключенных были освобождены раньше срока из тюрем Калифорнии вследствие ошибки в ПО. Штат пытался освободить место в тюрьмах, где его, собственно, уже не хватало. Для выбора самых неопасных преступников был запущен скрипт, который в одной из внутренних систем брал состояние дел заключенного, и по этим делам выставлял «рейтинг опасности». Так как многие из заключенных были в различных бандах или наркокартелях, информации про них было немного, от чего скрипт решал, что заключенный не опасен. Потому 450 опасных преступников были выпущены на свободу раньше срока. А мы для этого Савченко спасали! :)
38Не баг, а раздолбайство. У меня просто истории про баги заканчиваются :) 2014 год, случай назвали Murder in the Amazon Cloud. Code Spaces была компанией, которая предоставляла разработчикам возможность создавать свои репозитории, хостить код и минимальный софт для PM.
Вся инфраструктура системы была хощена на Амазон. Нет, Cloud Space не взломали, а просто получили доступ к админке AWS. После чего начали требовать выкуп, чтоб вернуть доступ. Code Spaces постарались своими силами вернуть доступ к админке, вследствие чего захватчик начал удалять ресурсы, бакеты в S3 и так далее. Code Spaces надеялись восстановить все с бекапов, но, к сожалению, бекапы тоже управлялись все с той же консоли. От полученных травм Code Spaces так и не отошли и после не долгих разбирательств канули в Лету.
39Студент Роберт Моррис (один из сооснователей Y-combinator и вообще достаточно известная личность) в 1988 году во время обучения в Cornell University написал программу, которая впоследствие стала известна под именем Morris Worm. Сама программа была написана, как утверждал автор, для вычисления размера интернета! Червь использовал сразу несколько дырок в Unix-системах и распространялся по сети. В черве была проверка — или система уже заражена. Но Моррис был уверен, что некоторые администраторы будут обманывать червь, всегда говоря, что система заражена, поэтому в 14% случаев червь копировал сам себя.
Моррис немного промазал, и червь начинал настолько нагружать систему, что ею стало невозможно пользоваться. 7 марта 1991 года оценка ущерба от червя составляла более чем 100 миллионов долларов. Моррис получил штраф в 10 500 долларов, 400 часов общественных работ и 3 года условки. А я еще над Януковичем смеялся.
40Lockheed Martin F-35 Lightning II. Истребитель бомбардировщик
Шел 2018 год. Самолет F-35 был использован в бою всего лишь дважды. Система управления, запланированная самолетом, настолько сложна, что пока не очень позволяет ему стрелять, получать координаты и вообще делать хоть что-то. На данный момент осталось починить всего лишь 263 высоко приоритетных бага, и тогда уже можно приступать к лабораторным тестам. Кстати, на разработку самолета потратили уже 133 миллиарда долларов. Что вы знаете про долгострои?
41Самый большой случай потери персональных данных — это, конечно же, взлом Equifax. Во фреймворке Apache Struts был обнаружен баг, который так же быстро был починен, а именно 6 марта. Баг привел к тому, что можно было выполнять так называемые RCE атаки (remote code execution). Сразу же после фикса хакеры начали бомбить сайты в интернете в поисках затупивших админов, которые забыли обновить версию Struts. Взлом Equifax был как раз сделан с помощью этого бага.
Но есть одно «но». Взлом был сделан в середине мая. Что приводит нас к тому, что админы Equifax за два месяца не удосужились накатить патч. На секундочку, Equifax занимались кредитной историей, а значит знали вот прям самые-самые персональные данные своих пользователей. Как взлом Equifax аукнется в ближайшие годы, еще совсем неизвестно.
42Самый защищенный на свое время Windows NT.
43Сингапур, 2017 год, 15 ноября. Многие слышали, что метро в Сингапуре практически полностью автоматизировано. Шутка ли — лучшая транспортная система в мире! Но 15 ноября два поезда не договорились. Вернее, баг в системе коммуникации двух поездов привел к тому, что поезд, который подъезжал к остановке, неправильно определил поезд, который на остановке, собственно, стоял. Вместо
44Когда Steam выпустили на Linux и вы переносили папку с играми из дефолтного места, вы сильно рисковали потерять все данные из-за одного из скриптов в стиме, выполнявших команду rm -rf "$STEAMROOT/"*
. Если вы переносили папку, то STEAMROOT оказывался равен пустой строчке, которая превращала все в команду rm -rf "/"*
. Жертва зарепортила баг 14 января 2015 года :)
45ВВС США вообще очень любят жить на широкую ногу. Начало 2000 года ознаменовалось тем, что был запланирован гигантский проект по разработке новой ERP системы, которая должна была заменить более чем 200 устаревших систем. И вообще сделать жизнь работников, если уж не раем, то с кисельными берегами и молочными реками.
2005 год, на разработку системы было уже потрачено более чем 1 миллиард долларов. Как раз, чтобы спикер ВВС США заявил, что с оценкой проекта немного промазали, и необходимо еще более чем 1.2 миллиарда, чтоб запилить четверть от запланированного объема, до 2020 года. Вы только вдумайтесь в горизонт планирования IT-проекта на 20 лет вперед. Промазали они, наверное, потому, что скрам не использовали :)
46И немного о будущем! Если вы думаете, что мы пережили баг 2000 года и все дальше будет хорошо — нет :) Нас еще ждет 2038 год. Так уж случилось, что время в Unix-системах отмеряется в секундах, прошедших от 1 января 1970 года.
А именно 19 января 2038 года пройдет ровно 2 147 483 647 секунд от стартовой даты, что не влезет в обычное
47В самолетах модели Boeing-787-Dreamliner был баг, который мог отключить подачу энергии на самолет, в независимости от фазы, в которой самолет находился. Но только после 248 дней работы. Причина — все то же
481995 год, аэропорт Денвера представляет проект самой сложной в мире системы автоматической доставки багажа. Цена разработки системы — 200 млн долларов, время разработки — 2 года, рекламы — бесценна. Когда систему открыли, она внезапно начала вытворять с багажом такие непотребности — выкидывала багаж, выстреливала им на ленту доставки и просто зажевывала, — что ее назвали «baggage system from hell». Телевиденье и репортеры яростно смаковали картинки разодранных чемоданов, раскиданных вещей и поломанных планов на отпуск.
Доработка системы заняла 16 месяцев, что стоило аэропорту Денвера более чем 1.1 млн долларов в год. Аэропорт открылся таки в 1995 году, но багаж доставлялся старым добрым методом рабочих, мата и тележки. Часть системы все же пользовалась, но была очень дорога в эксплуатации. Ежики кололись, плакали, но продолжали заниматься любовью. По итогу, потратив 600 миллионов вместо запланированных 200, система была заброшена и отключена аж в 2005 году.
492013 год, обычный парень Крис Рейнольдс, торгующий запчастями для BMW, утром 13 июня проснулся и проверил свой счет в PayPal. Всего лишь за одну ночь бедняга Крис стал в 1000 раз богаче, чем вся человеческая цивилизация. Счет PayPal показывал ему чудесную цифру в 92 квадриллиона долларов. Естественно, в PayPal быстро нашли и исправили ошибку, вернув Криса на землю, но он сыскал не абы какую популярность и был приглашен на многие телешоу! Когда же у него спросили, что бы он сделал со всеми этими деньжищами, Крис скромно ответил, что выплатил бы государственный долг :) Жаль, только виртуальными деньгами пока не принимают.
50Считайте юбилейная! Расскажу вам байку из своего опыта. В году так
Так работало большинство устройств, но некоторые настраивались через так называемые MIB деревья, или же просто через меню по SSH соединению. Так вот, чтобы что-то менять в устройствах по SSH, мы посылали команды: стрелка вниз, вверх, энтер. Прям как комбинации в Mortal Combat.
Цель, конечно же, была — добраться до пункта меню: скачать файл. Собственно, комбинации подгружались с шаблонов команд в зависимости от модели сетевого устройства. Итак, история :) Пишет нам заказчик: «Я администратор в аэропорту. Пользуюсь вашим софтом и пытаюсь настроить один роутер. Но когда я пытаюсь скачать конфиг, ваше приложение перегружает главный роутер, и весь терминал аэропорта погружается в интернет-тьму. И даже пропадает связь с самолетами...». Суть до дела, был неправильный конфиг :) Но, к счастью, обошлось без жертв. Пронесло!
Дамы и господа, это было невероятное путешествие и моя первая проба пера в таком марафоне! Надеюсь, вам понравилось!