В конце 90-х мир оказался в шаге от технического коллапса. Банковские системы могли перепутать века и обнулить расчёты, системы бортовых вычислений - получить неверные данные, а критическая инфраструктура - дать сбой в самую неподходящую ночь.
1 января 2000 года ничего не произошло. Не потому что опасности не существовало, а потому что за несколько лет до этого компании и государства потратили около $300 миллиардов, переписав миллионы строк кода и проверив каждую систему, где год хранился в двух цифрах.
Это история о том, как незаметная техническая деталь едва не стала самой дорогой ошибкой в истории - и почему сегодня мы снова рискуем повторять те же решения.
Откуда взялись две цифры
В 60-х и 70-х годах память компьютеров стоила безумных денег. Каждый байт был на вес золота. Программисты экономили везде, где могли.
Год хранили двумя цифрами: не 1975, а 75. Не 1982, а 82. Экономия всего два байта на запись, но если таких записей миллионы - это существенно.
Никто не думал, что эти программы проживут до 2000 года. Тогда казалось, что через 20-30 лет появятся новые системы, всё перепишут. Но не переписали.
COBOL - язык программирования, на котором писали банковские и правительственные системы в 60-70-х, работал до конца 90-х. И работает до сих пор в некоторых банках.
Когда приближался 2000 год, стало ясно: компьютеры воспримут "00" как 1900 год, а не 2000. И начнётся хаос.
Что могло пойти не так
Банк рассчитывает проценты по кредиту. Дата выдачи: 15.12.1999. Дата погашения: 15.01.2000. Компьютер видит: 99 и 00. Считает, что между датами прошло минус 99 лет. Система выдаёт ошибку или начисляет абсурдные суммы.
Авиационные системы управления полётами получают неверные данные о времени. Навигационные системы сбиваются. Автопилоты могут получить некорректные команды.
Электростанции, водоснабжение, системы связи - везде компьютеры с датами. Если они одновременно дадут сбой в новогоднюю ночь, последствия непредсказуемы.
Пенсионные фонды могли решить, что людям минус 99 лет, и прекратить выплаты. Медицинское оборудование - выдать ошибочные диагнозы из-за неправильных дат анализов.
Паника нарастала. СМИ писали про конец света. Люди скупали воду, консервы, генераторы. Некоторые всерьёз готовились к апокалипсису.
Как решали проблему
Правительства и компании создали целые команды программистов для поиска и исправления багов Y2K. Задача была колоссальной: найти каждую строчку кода, где год хранится двумя цифрами, и переписать.
В США выделили $100 миллиардов на решение проблемы. Великобритания - $20 миллиардов. Австралия - $3 миллиарда. Корпорации тратили сотни миллионов каждая.
Программисты на COBOL, которых считали устаревшими специалистами, внезапно стали самыми востребованными. Их зарплаты взлетели. Пенсионеров возвращали, чтобы они исправляли код, который сами писали 30 лет назад.
Проверяли всё: банковские системы, больницы, электростанции, аэропорты, военные объекты. Некоторые компании нанимали сотни временных программистов только для аудита кода.
К концу 1999 года было исправлено больше 300 миллионов строк кода по всему миру. Проведены тысячи тестов. Критическая инфраструктура готова.
Что случилось 1 января 2000
Ничего. Мир встретил новый год без катастроф. Банки работали. Самолёты летали. Электричество не отключилось.
Несколько мелких сбоев всё же было. В Австралии сломались автобусные билетные системы. В некоторых странах неправильно отобразились даты на сайтах. Но ничего критического.
СМИ начали писать: "Y2K - раздутая паника. Миллиарды потрачены зря". Появились конспирологи: "Проблемы вообще не было, это заговор IT-компаний".
Но правда в том, что катастрофы не случилось именно потому, что потратили эти миллиарды. Проблема была реальной. Её решили заранее.
Уроки Y2K
Главный урок: технический долг дорого обходится. Программисты 60-х сэкономили два байта. Мир заплатил $300 миллиардов 40 лет спустя.
Краткосрочная экономия превращается в долгосрочную катастрофу. Костыли в коде, написанные "на скорую руку", живут десятилетиями. Потом их исправление стоит в миллионы раз дороже.
Ещё урок: старые системы умирают медленно. COBOL до сих пор работает в банках и госструктурах. Код, написанный 50 лет назад, обрабатывает платежи прямо сейчас.
Миграция на новые технологии - это не прихоть, а необходимость. Но мир ленив. Пока система работает, никто не хочет её менять. Пока не грянет гром.
Y2K повторится
В 2038 году нас ждёт проблема Unix Time. Это счётчик секунд с 1 января 1970 года, который хранится в 32-битном числе. 19 января 2038 года это число переполнится и обнулится.
Многие системы на Linux, старые серверы, встроенное ПО используют 32-битный Unix Time. Если их не обновить, в 2038 году они подумают, что сейчас 1901 год.
Решение есть: перейти на 64-битный счётчик. Но для этого нужно переписать код, обновить системы, протестировать. Звучит знакомо?
Пока до 2038 года далеко, никто особо не напрягается. Точно так же, как в 70-х не думали про 2000 год.
Y2K - это не история про паранойю. Это история про цену технического долга и важность предусмотрительности. Программисты 60-х не были глупыми - они решали проблемы своего времени с доступными ресурсами. Но их решения стали миной замедленного действия. Сейчас мы пишем код, который будет работать в 2050, 2070, 2100 годах. Какие мины закладываем мы? Узнаем через 30 лет.