Ошибки в программировании, которые стоили жизней, времени и денег
1. Самый защищенный на свое время Windows NT.
2. Элаи Херцберг попала в историю как первый человек, который погиб под колесами беспилотного автомобиля. Весной 2018 года в темное время суток машина Uber засекла преграду. В начале она подумала, что это мусор, потом — что животное, и только за пару метров поняла, что это человек.
К сожалению, машина не успела затормозить, что привело к смерти человека. Тестирование проходило на модифицированной Volvo XC90, у которой была отключена система экстренного торможения, чтобы не мешать ПО Uber управлять машиной. Не может быть два короля в одном королевстве. Задача тормозить в экстренных случаях была возложена на плечи водителя, который страховал автопилот. Он же в это время смотрел Netflix.
3. 25 февраля 1991 года установка ПВО Patriot не смогла перехватить ракету, пущенную со стороны сил Саддама Хусейна. Ракета попала в барак солдат США, что привело к 28 смертям. Расследование показало, что 24–битные процессоры перехватчика при переводе времени совершают ошибку в 0.013 секунды каждый час. Patriot не перезагружали более 100 часов, что привело к ошибкам вычисления положения ракеты на 600 метров. Вот уж где перезагрузка спасла бы жизни.
4. В 1992 году ошибки системы распределения маршрутов в Лондонской скорой помощи привели к смерти 30–45 человек (разброс большой, потому что не ясно, смогла бы скорая спасти того или иного человека). Все произошло, когда в Лондоне решили заменить людей операторов на компьютерную систему.
В результате система была введена в эксплуатацию без нагрузочного тестирования и с 81! известным багом. Добавьте к этому еще и то, что интегратор решил сэкономить и купил дешевое оборудование, которое сломалось через пару часов после активного пользования системой. Хаос был настолько безумным, что бывали случаи, когда человек, не дождавшись скорой, умирал, его увозили в морг, и только тогда приезжала скорая.
5. 1998 год, один из спутников Nasa, отправленный на Марс, достиг орбиты красной планеты и взорвался. Была ошибка в двух модулях ПО спутника: один ждал данные в метрической системе, а другой отдавал в имперской :) Не додебажили на 327 лямов.
6. Кибервойна, или взрыв, который было видно из космоса.
В 1982 ЦРУ внедрило шпиона в канадскую фирму по разработке софта для газопроводных систем, потому как знало, что этот софт будет использован СССР. Программист–шпион написал методы, из–за которых в 1982 году газопроводная труба взорвалась так сильно, что взрыв можно было наблюдать из космоса. К счастью, никто кроме оленей не пострадал.
7. Ракета Ариана 5, разработка которой стоила около 8! миллиардов долларов, должна была вывести на орбиту несколько спутников и другое оборудование. Полет ракеты завершился через 4 секунды после взлета. Она упала. Один из модулей системы попытался сконвертировать 64–битное число в 16–битное. Оно оказалось больше, чем влезало в память, и модуль завалился. Но ведь есть дублирующий модуль, которому было передано управление! На нем была та же версия ПО, которая попытался сделать то же самое.
8. 1982 год, миноносец морских сил Великобритании был поражен ракетой, выпущенной из аргентинского самолета. Противоракетная система не сработала, погибло 28 человек. Во время постройки миноносца произошел взрыв и погибло два строителя. Поврежденная часть корабля была заменена частью с идентичного аргентинского корабля. Когда система обнаружила ракету, она провела проверку на свой–чужой. А так как замененная часть корабля была аргентинская, ракета была определена как своя. Кэш — это не шутки :) Противоракетная оборона не сработала, потому как ожидала, что ракета пролетит. Но нет.
9.Новейший в свое время самолет F–18 «превращался в тыкву» для системы, когда пересекал зону смены часового пояса с разницей в день (к примеру, полет с Гаваев в Японию). Система не рассчитывала, что может попасть в прошлое, потому 127–миллионный самолет мог упасть в любой момент. Благо, помогал reset.
10. Фобос–1, спутник СССР, был направлен на изучение Марса. В 1988 году неправильная команда, запущенная с Земли, активировала тестирующий код, который никогда не должен был бы выполниться. Это привело к тому, что спутник потерял возможность ориентироваться в космосе. У него села батарея, и он был навсегда утерян. Смешно то, что тестирующий код оказался там из–за спешки, но программисты заверили, что он никогда не выполнится. Выполнился.
11. День, когда AT&T остановился. 1990 год, новый патч для свичей AT&T. Естественно, компания не может апдейтить сразу все свичи, иначе вся сеть упадет. Потому по новой версии софта, один из свичей в Нью–Йорке начал процедуру апдейта и отправил всем ближним сообщение об этом. После апдейта загрузился и сообщил, что на месте. Так уж получилось, что, получив второе сообщение от свича из Нью–Йорка, другие свичи начинали процедуру self–testа, о чем сообщали ближайшим свичам, и отключались. При включении делали то же самое. Вся сеть AT&T каскадом завалилась на 8 часов, отключая своих пользователей от телефонов, и не имея возможности обработать запросы.
12. 5 декабря 2010 года. Российский ракетоноситель Протон–М пошел на дно океана с тремя спутниками Глонасс–М. Причина — неправильная формула, которая превысила массу одного из заправленных баков на более чем полторы тонны. Как оказалось, формула была исправлена и даже была заведена в систему как изменения, запланированные для реализации. Но когда подошли сроки — многие задания закрывали как неважные. Дозакрывались.
13. В 2011 году более 400 заключенных были освобождены раньше срока из тюрем Калифорнии вследствие ошибки в ПО. Штат пытался освободить место в тюрьмах, где его, собственно, уже не хватало. Для выбора самых неопасных преступников был запущен скрипт, который в одной из внутренних систем брал состояние дел заключенного, и по этим делам выставлял «рейтинг опасности». Так как многие из заключенных были в различных бандах или наркокартелях, информации про них было немного, от чего скрипт решал, что заключенный не опасен. Потому 450 опасных преступников были выпущены на свободу раньше срока.
14. Lockheed Martin F–35 Lightning II. Истребитель бомбардировщик 5–го поколения, разрекламированный 26 октября 2001 года. Машина смерти в воздухе, которая должна была быть выпущена в 2008 году и стоить всего–ничего от 40 до 50 миллионов долларов.
Шел 2018 год. Самолет F–35 был использован в бою всего лишь дважды. Система управления, запланированная самолетом, настолько сложна, что пока не очень позволяет ему стрелять, получать координаты и вообще делать хоть что–то. На данный момент осталось починить всего лишь 263 высоко приоритетных бага, и тогда уже можно приступать к лабораторным тестам. Кстати, на разработку самолета потратили уже 133 миллиарда долларов.
15. Когда Steam выпустили на Linux и вы переносили папку с играми из дефолтного места, вы сильно рисковали потерять все данные из–за одного из скриптов в стиме, выполнявших команду rm –rf "$STEAMROOT/"*. Если вы переносили папку, то STEAMROOT оказывался равен пустой строчке, которая превращала все в команду rm –rf "/"*. Жертва зарепортила баг 14 января 2015 года :)
16. 1995 год, аэропорт Денвера представляет проект самой сложной в мире системы автоматической доставки багажа. Цена разработки системы — 200 млн долларов, время разработки — 2 года, рекламы — бесценна. Когда систему открыли, она внезапно начала вытворять с багажом такие непотребности — выкидывала багаж, выстреливала им на ленту доставки и просто зажевывала, — что ее назвали «baggage system from hell». Телевидение и репортеры яростно смаковали картинки разодранных чемоданов, раскиданных вещей и поломанных планов на отпуск.
Доработка системы заняла 16 месяцев, что стоило аэропорту Денвера более чем 1.1 млн долларов в год. Аэропорт открылся таки в 1995 году, но багаж доставлялся старым добрым методом рабочих, мата и тележки. Часть системы все же пользовалась, но была очень дорога в эксплуатации. Ежики кололись, плакали, но продолжали заниматься любовью. По итогу, потратив 600 миллионов вместо запланированных 200, система была заброшена и отключена аж в 2005 году.
17. И немного о будущем! Если вы думаете, что мы пережили баг 2000 года и все дальше будет хорошо — нет :) Нас еще ждет 2038 год. Так уж случилось, что время в Unix–системах отмеряется в секундах, прошедших от 1 января 1970 года.
А именно 19 января 2038 года пройдет ровно 2 147 483 647 секунд от стартовой даты, что не влезет в обычное 32–битное число. Казалось бы, все можно починить, но вы даже не представляете, сколько в мире всего работает на легаси системах. Собственно, меньше чем через 20 лет эта проблема затронет ну очень большое количество систем, устройств и даже структур данных, которыми мы пользуемся сейчас.
А Элаи Херцберга из второго пункта убило несоблюдение ПДД. Этот умник переходил в неположенном месте. То, что его сбил робот на колёсах - это ошибка не в программировании, а в проектировании этого самого робота, т.к. мало датчиков и всё такое.