Что такое «Проблема 10000 года»?

АНДРЕЙ ГЛИНКА

Студент бизнес-информатики НИУ ВШЭ. Фрилансер. Философствующий прокрастинатор. Администратор сообщества «Философия города». Задрот современной поп-культуры. Стажер TheQuestion.

Ну, заявление о том, что эта проблема так уж прямо станет причиной сбоев через 8000 лет, - чересчур поспешно. У нас все-таки есть достаточно времени для её устранения, поэтому «проблема 10000 года» представляется скорее теоретической, нежели практической.

Для тех, кому не терпится узнать, что же это за монстр такой, объясняю: большинство операционных систем и сторонних программ сейчас заточены под «четырёхцифровое» представление года, а от пяти цифр в году польются баги, ошибки и всё вот это вот. Да, такая, казалось бы, безобидная проблема, которая может погубить все информационные процессы компаний и домашних пользователей ПК через несколько тысяч лет. Хотя сомнительно, что в то время, когда наступит 9999 год, мы всё ещё будем пользоваться программным кодом, который в настоящее время заложен в программное обеспечение, но решение проблемы потребует перенастройки всех систем мира, что обойдётся государствам планеты в большие суммы денег. Это заявление не баснословно, и сейчас я объясню почему.

Дело в том, что «проблема 10000 года» - не единственная. Существует ещё как минимум две, одну из которых мы успешно пережили, а со второй нам ещё придётся столкнуться. Я говорю о «проблеме 2000 года» и «проблеме 2038 года».

В конце 90-х началось массовое обсуждение «проблемы 2000 года»: суть проблемы заключалась в том, что большая часть программного обеспечения, созданного в XX веке, использовала две цифры для представления года (то есть 1999 год превращался в 99, а 2000 должен был стать 00, то есть 1900). Проблема, на самом деле, стала актуальна гораздо раньше: для многих компаний, занимающихся, предположим, прогнозированием, пришлось искать решения задолго до наступления 2000 года. Так или иначе, было понятно, что избежать проблемы не получится; вопрос стал решаться на уровне государств. В России, например, была создана правительственная комиссия по «проблеме 2000». В сухом остатке во всём мире было потрачено более $300 млрд. на подготовку к вхождению в новое столетие.

Та самая «проблема 2000 года»: табло показывает 3 января 1900 года, хотя должно показывать 3 января 2000 года.

Касаемо «проблемы 2038 года», она представляется наиболее опасной из всех названных выше. Всё дело в «эре UNIX» - так называют время с 1 января 1970 года. Именно с этой даты ведётся отсчёт секунд практически во всех современных операционных системах. Таким образом, например, достигается удобство сравнения дат компьютером. Но вот в чём загвоздка: 19 января 2038 года в 03:14:08 значение переменной, которая хранит это самое количество секунд, прошедших с начала 1970 года, станет равным двойке в 31 степени. В двоичном представлении это аналогично единице и 31 нулю, отчего компьютер может ошибочно воспринять число как отрицательное (как это происходит см. здесь). Дальше простая арифметика: 1970 год 1 января (считаем за 0) вычесть двойку в 31 степени – получается минус двойка в 31 степени. Итог: время отскакивает назад и все мы мгновенно переносимся в 1901 год. Учитывая, насколько сильно IT сейчас внедрены во все государственные и негосударственные процессы, это будет без преувеличения катастрофой. Решение, конечно, есть: нужно заменить 32-битное представление секунд в системах на 64-битное, тогда можно будет отсрочить дату очередной проблемы на 292 млрд. лет. Но учитывая то, что сейчас продолжают разрабатываться и повсеместно использоваться 32-битные системы, возникают сомнения: а хватит ли времени на то, чтобы заменить их все к 2038 году?