Верите ли вы в магию? Конечно, нет - это против логики! Программисты - серьезные и образованные люди с реалистичным мировоззрением. Ну, в детстве ты тоже не любила сказки? Хорошо, я не буду отвечать за вас. Просто приготовьте себе чашку чая, очистите мандарин от кожуры, посмотрите на падающие за окном снежинки и только потом продолжайте читать эту Историю.

То, что вы собираетесь прочитать, - это история о злом жуке и его многочисленных попытках испортить сочельник и новогоднюю ночь. Неоднократно ей удавалось осуществить свои зловещие планы, но, к счастью, в каждой настоящей сказке злу всегда противопоставляется добро.

Елочный вирус

17 декабря 1987 года студент Технологического университета Клаусталя в бывшей Западной Германии, в то время начинающий программист, придумал гениальное рождественское поздравление для своих друзей. Он послал им елку! Конечно, он не срубал его в лесу и даже не покупал в магазине. Он был программистом, помнишь? Он просто написал программу на языке сценариев REXX для VM / CMS, которая рисовала бы красивую елку на экране и печатала несколько теплых слов.

Рисунок 1 - Рождественский червь

Герой нашей истории, конечно, имел в виду добро, но Злой Баг вмешался, перегрузив сеть и использовав самовоспроизводящуюся рождественскую программу, чтобы парализовать частную почтовую сеть IBM Vnet по всему миру на два дня (цепочка была такой: университетская сеть - ЗАРАБОТАТЬ - BitNet - IBM Vnet). Герой подозревался в антигерое, а его трогательное приветствие - в червяке. Злонамеренный умысел программиста так и не был доказан, но Злой Баг, несомненно, был замешан в этой истории.

Шоу беспрецедентной щедрости

Традиционно в канун Рождества и Нового года люди обмениваются подарками. Красиво упакованные коробки под елкой или милые сувениры в рождественских чулках, развешанные у камина - так выглядят традиционные рождественские и новогодние подарки. Однако сюрпризы бывают особенно приятными.

Amazon был одним из первых интернет-сервисов, в котором ежедневно продавались и покупались десятки тысяч всевозможных товаров. Идеальное место для подарков! Именно так поступали посетители сайта 12 декабря 2014 года. Огромный ажиотаж вызвал тот факт, что тысячи товаров продавались по чудесной цене всего в 1 копейку (источник). Бесконечно благодарные Amazon за такой великолепный рождественский подарок, покупатели с энтузиазмом наполняли свои тележки. Тем временем Злой Жук наблюдал и ухмылялся, ожидая реакции продавцов, которые еще ничего не знали об огромных потерях, которые они понесли.

Баг скрывался в программе RepricerExpress, отвечающей за синхронизацию цен в интернет-магазинах. Это программное обеспечение способствует конкуренции, позволяя продавцам оперативно реагировать на колебания цен на аналогичные товары.

Что сделал Злой Баг? Он проник в RepricerExpress, когда только находился на стадии разработки и тестирования, но так и не появился до тех пор, пока… один из продавцов, охваченный предпраздничной суматохой, случайно не установил единую цену - 1 пенни - для всех своих запасов. Программное обеспечение приняло эту стоимость за минимальную цену и соответственно снизило цены на аналогичные товары других продавцов.

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

Рисунок 2 - Фиксированный интерфейс (с новым столбцом "Ваша минимальная цена")

День, когда ошибка обнаружилась, надолго запомнится продавцам Amazon. В тот день они потеряли тысячи долларов, а многие чуть не обанкротились (источник). Если бы не оперативные действия Amazon, которой удалось отменить большинство заказов, размещенных на затронутые товары, репутация крупнейшего интернет-магазина была бы серьезно подорвана.

Разработчики RepricerExpress извинились за ошибку в заявлении, опубликованном в их официальном блоге.

Apple VS Новый год

Помните фильм Как Гринч украл Рождество? Похоже, что Evil Bug взяли его за источник вдохновения при разработке плана атаки на устройства Apple. В феврале 2016 года пользователи Apple обнаружили интересную ошибку. В социальных сетях ходила легенда о том, что если вы измените дату на 1 января 1970 года на своем iPhone или iPad и перезапустите его, система полностью выйдет из строя, и вы получите кирпич с логотипом Apple. Процедура была объявлена ​​необратимой. Сообщалось, что ошибка обнаружена на устройствах с 64-разрядными процессорами, таких как Apple A7, A8, A8X, A9 и A9X: iPhone 5S и новее, iPad Air и iPad Mini 2 и новее, а также iPod Touch 6-го поколения. . Номер версии операционной системы не имел значения.

Кто-нибудь пробовал? Конечно! По миру прокатилась волна убийств Apple-гаджетов. К счастью, некоторые мастера нашли способ вернуть «кирпичи» к жизни. Apple так и не раскрыла официальную причину ошибки, но подтвердила, что она могла произойти при ручном изменении даты на май 1970 года или ранее на устройстве iOS.

Пользователи провели собственное расследование и пришли к следующему объяснению: ошибка могла быть вызвана переменной с отрицательным значением, используемой для хранения времени в формате UNIX. Как значение могло стать отрицательным?

Версия 1. Поскольку время хранилось в формате UNIX, отсчет времени будет начинаться с 1 января 1970 года, то есть эта дата имела нулевое значение. При смене часовых поясов значение может уменьшиться ниже нуля.

Версия 2. Ошибка была типична для 64-битных устройств, поэтому, возможно, сначала вычислялась 32-битная метка времени, а затем, после изменения часовых поясов, приводилась к размеру указателя, что приводило к неверно заполнить значащие биты и… Добро пожаловать в XXII век!

Спи долго с iPhone

Долгий-долгий сон, который не прерывает будильник - разве не об этом мечтает большинство из нас? Хотя iPhone не является «Газпромом», но все же воплощает в жизнь мечты своих владельцев! Все, кто планировал начать первый день 2013 года свежо и рано и поставил на свои устройства будильник к 1 января, «счастливо» проспали. Очевидно, Evil Bug должен был превратить огромное количество пользователей в «спящих красавиц», поскольку будильник на iPhone не работал до 3 января.

Apple предпочла снова промолчать. Однако слухи о возможной причине ошибки все равно распространились. Apple использует стандарт Дата недели ISO, который широко используется финансовыми компаниями, поскольку он обеспечивает удобное планирование финансового года. Особенностью этого стандарта является то, что новый год считается таковым только с недели, на которую выпадает первый четверг года. Календарь с недельными датами ISO содержит 52 или 53 недели (364 или 371 день), поэтому оказалось, что iPhone все еще жили в предыдущем году и перешли в новый (2013 год) 7 января, когда началась первая неделя года. .

Было также альтернативное объяснение, в котором Стив Джобс взял на себя роль Злого Бага. Основатель Apple якобы любил поспать, отсюда и эта особенность. Шутка, конечно, но последствия этого, казалось бы, безобидного бага были далеко не смешными: люди опаздывали на работу, не успевали на важные встречи, теряли деньги (источник).

Рейс отменен

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

12 декабря 2014 г. в британском центре управления воздушным движением Национальной службы воздушного движения (NATS) произошел сбой программного обеспечения, из-за которого перестали работать некоторые аэропорты, в том числе такие сильно загруженные гиганты, как Хитроу, Гатвик, Станстед, Бирмингем. , Кардифф и Глазго, остановились. Проблема усугублялась тем временем, которое Evil Bug выбрал для атаки. Был день пятницы, канун Рождества.

Ошибка сохранялась немногим дольше получаса - 36 минут - но цена ошибки была высокой, о чем свидетельствуют следующие цифры, которыми Evil Bug может гордиться:

  • 92 рейса отменены
  • 170 рейсов приостановлены
  • 10 самолетов переведены в запасные аэропорты
  • 125 000 пассажиров испытывают неудобства
  • 623 миллиона фунтов понесенных убытков

Подобная ситуация не могла пройти незамеченной. Было проведено расследование. В своем окончательном отчете Управление гражданской авиации (CAA) и NATS описали ошибку, обнаруженную в программном обеспечении System Flight Server (SFS). SFS отвечает за доставку данных в реальном времени на контроллеры рабочих станций в системе управления NATS. Есть две идентичные SFS: первичная и вторичная. Оба вычисляют одни и те же данные. Когда первичная SFS выключается, вторичная начинает работать. Система действительно обеспечивала аппаратные сбои, но по какой-то причине не имела защиты от программных исключений.

Максимально допустимое количество работающих рабочих станций (то есть терминалов, с которых осуществляется контроль и мониторинг трафика), работающих одновременно, составляло 193 - ну, по крайней мере, теоретически. На самом деле код SFS проверял другое значение, 151. Вот почему, когда 153 рабочих станции пытались подключиться одновременно, система перезагружалась с последующим сбоем. Позже выяснилось, что «скрытая программная ошибка» присутствовала еще с 1990 года. Удивительно, что ее не проявили раньше.

Проблемы 2000 и 2038 года

Новый 2000 год был одним из самых ожидаемых. Как полагали некоторые всевозможные эксперты, рубеж тысячелетий определенно должен был сопровождаться Апокалипсисом или, что не менее ужасающе, подъемом машин.

Какие аргументы они приводили в пользу своего страха перед терминаторами? Логика! Первые компьютеры были медленными, поэтому программисты, не желающие тратить драгоценную производительность на пустяки, решили использовать две цифры для обозначения года в датах. Например, 23 марта 1991 года было представлено как 23.03.91. Эти обозначения приятны и приятны для глаз. Однако с компьютерной точки зрения все не так просто. Годы 2000 и 1900 были закодированы одной и той же парой цифр 00, поэтому, когда начнется Новый 2000 год, их внутренние часы будут установлены обратно на 1900 год.

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

Что ж, приближается 2017 год, а значит Апокалипсиса не было.

Тем не менее, некоторые ошибки действительно проявились, когда наступило новое тысячелетие:

  • Компьютерные сети British Telecom были парализованы, и инженерам пришлось проанализировать около миллиона строк кода, чтобы вернуть их к жизни. Это обошлось British Telecom в довольно большую сумму - около 0,5 миллиарда долларов.
  • В Испании на 9 АЭС наблюдались аварийные состояния - к счастью, без серьезных последствий.
  • В Монголии «проблема 2000 года» коснулась работы железных дорог и билетных касс.

Некоторые ошибки были довольно забавными:

  • Срок заключения в одной испанской тюрьме был увеличен / сокращен на 100 лет
  • В некоторых греческих магазинах покупатели получали товарные квитанции, датированные 1900 годом.
  • В южнокорейской больнице программа наблюдения за пациентами объявила годовалого ребенка стариком 99 лет.
  • Жители небольшого городка в США получили просроченные на 100 лет счета за электричество

«Проблема 2000 года» - яркий пример того, какое огромное влияние СМИ оказывают на человечество. Следующая волна массовой паники по той же причине ожидается в 2038 году. 19 января 2038 года в 03:14:07 по Гринвичу компьютеры и другие устройства, использующие 32-битные операционные системы, больше не смогут правильно измерять время. На многих устройствах системное время измеряется в секундах, начиная с 1 января 1970 года. Секунды хранятся в 32-битном значении типа signed int (32-битное целое число со знаком). Вскоре после начала 2038 года счетчик обновится до 2 147 483 648 секунды, которую система не сможет сохранить, и переключится на отрицательное значение.

Как избежать последующей системной ошибки? Замените все 32-битные процессоры на 64-битные.

Как помочь хорошему?

Традиционно Добро всегда побеждает зло, но борьба не прекращается ни на минуту. Есть ли шанс навсегда искоренить всех злых жуков? Это маловероятно, но у нас определенно есть все шансы нанести огромный урон их войскам. Для этого программисты, сражающиеся на стороне Добра, то есть за качественный код, должны с умом подбирать инструменты, которые помогут им в борьбе. Вооружитесь статическим анализатором PVS-Studio! И обязательно посмотрите этот короткометражный фильм ужасов про Unicorn PVS-Studio, спасающий Penguin Linux от Evil Bug.

Чувствуете вдохновение? Тогда давайте поможем Хорошо вместе! Команда PVS-Studio уже сделала большой шаг вперед, предложив вам бесплатную версию нашего анализатора.

Уважаемые программисты, удачи в ваших проектах и ​​пусть в ваших зловещих историях всегда побеждает Добро! Веселого Рождества и счастливого нового года!