Найти в Дзене
ТыжПрограммист

Проблема 2000. Как одна строка кода едва не остановила весь мир. Или как компании создали проблему и сами же ее решили

Новый год, переход из 1999-го в 2000-й. Помимо обычной новогодней суеты, в воздухе витало ощущение надвигавшегося апокалипсиса, который окрестили “Проблемой 2000” или “Y2K”. Говорили, что с первым ударом курантов отключится электричество, самолёты начнут падать с неба, а банковские счета обнулятся. В магазинах люди скупали тушёнку, свечи и гречку. А потом… ничего не произошло. Вернее, произошло самое настоящее чудо, о котором почему-то почти забыли. И это чудо было рукотворным. Чтобы понять суть проблемы, нам нужно ненадолго вернуться в 1960-е и 1970-е годы. Компьютеры тогда были размером с комнату, а их память драгоценным и невероятно дорогим ресурсом. Каждый килобайт был на вес золота. Представьте себе программиста, который пишет код для банковской системы или управления электростанцией. Ему нужно записывать даты. И он принимает, на первый взгляд, гениальное и экономное решение: чтобы не писать 1975 год, он будет хранить только две последние цифры - “75”. Все и так понимают, что речь

Новый год, переход из 1999-го в 2000-й. Помимо обычной новогодней суеты, в воздухе витало ощущение надвигавшегося апокалипсиса, который окрестили “Проблемой 2000” или “Y2K”. Говорили, что с первым ударом курантов отключится электричество, самолёты начнут падать с неба, а банковские счета обнулятся. В магазинах люди скупали тушёнку, свечи и гречку. А потом… ничего не произошло. Вернее, произошло самое настоящее чудо, о котором почему-то почти забыли. И это чудо было рукотворным.

Чтобы понять суть проблемы, нам нужно ненадолго вернуться в 1960-е и 1970-е годы. Компьютеры тогда были размером с комнату, а их память драгоценным и невероятно дорогим ресурсом. Каждый килобайт был на вес золота. Представьте себе программиста, который пишет код для банковской системы или управления электростанцией. Ему нужно записывать даты. И он принимает, на первый взгляд, гениальное и экономное решение: чтобы не писать 1975 год, он будет хранить только две последние цифры - “75”. Все и так понимают, что речь идёт о двадцатом веке. Эта практика стала стандартом де-факто. Две цифры вместо четырёх.

И эта маленькая, “бережливая” строка кода повторялась снова и снова. Она въелась в операционные системы, в программное обеспечение заводов, больниц, транспортных сетей. Она стала своего рода фундаментом, на котором рос цифровой мир. Никто не задумывался о будущем, ведь до 2000 года было ещё целых тридцать лет, целая вечность по меркам стремительно развивающейся тогда компьютерной индустрии. Ну как это обычно бывает, временное решение осталось надолго.

А потом будущее наступило. И в конце 90-х все разом осознали ужасающую логическую ошибку. Когда часы пробьют полночь 31 декабря 1999 года, дата сменится с “99” на “00”. И для всех этих старых, но критически важных систем, “00” будет означать не 2000-й год, а 1900-й. Например, программа, рассчитывающая проценты по вкладу, увидит, что вклад был открыт в “95” году, а сейчас наступил “00”. Она логично решит, что прошло минус 95 лет, и начислит проценты за целый век. Или, что хуже, спишет их. Система управления энергосетью, получив дату из прошлого века, могла бы счесть все свои данные неактуальными и аварийно отключиться. То же самое грозило системам навигации, диспетчеризации авиарейсов, работе насосных станций.

-2

Масштаб был катастрофическим. Проблема была вшита в самую основу, и была фундаментом всего. И её нельзя было просто “починить” одним патчем. Нужно было найти и проверить миллиарды строк кода по всему миру - в старом ПО, микросхемах, промышленных контроллерах.

И тут началось самое интересное. Мир совершил беспрецедентную вещь. Впервые в истории человечество, осознав грядущую техногенную катастрофу, которое оно же само и создало, не впало в панику, а дружно взялось за работу. Были созданы правительственные комиссии и международные рабочие группы. Компании, которые десятилетиями экономили на двух цифрах, теперь тратили миллиарды долларов на решение проблемы. Армии программистов, включая вышедших на пенсию ветеранов, знавших старые языки, сутками перелопачивали код. Они не просто исправляли “00” на “2000”, они создавали сложные алгоритмы, чтобы системы корректно интерпретировали даты.

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

-3

И вот настала ночь с 31 декабря на 1 января. По планете, вслед за часовыми поясами, катилась волна напряжённого ожидания. В ситуационных центрах по всему миру дежурили инженеры, готовые вручную взять на управление любые системы. Но волна прошла, не вызвав цунами. Свет не погас. Самолёты не попадали. Деньги не исчезли.

Почему? Потому что проблема была решена. Титаническими усилиями, колоссальными затратами и невероятной организацией. То самое “ничего”, которое все увидели утром 1 января, и было величайшим успехом IT-индустрии и человеческой кооперации. Конечно, нельзя сказать что вообще не возникло никаких проблем, какие-то локальные все же были, но в глобальном плане нет.

-4

“Проблема 2000” преподала нам несколько важных уроков. Во-первых, дешёвые решения сегодня могут породить астрономические затраты завтра. Во-вторых, мир способен объединиться перед лицом невидимой, но реальной угрозы. И в-третьих, самое главное: часто величайшие триумфы выглядят со стороны так, будто ничего и не произошло. Просто потому, что катастрофу удалось предотвратить. Так что в следующий раз, когда кто-то скажет, что Y2K была надувательством, вы точно будете знать - это была тихая, величайшая битва, которую человечество выиграло, даже не дав большинству людей услышать звук сражения.

Еще больше интересных материалов
НА МОЕМ САЙТЕ