Проблема 2038 года, или как операционная система 1970-х годов повлияет на каждый компьютер

Многие слышали или помнят об ошибке Y2k — программной проблеме 1990-х годов: некоторые системы могли сломаться 1 января 2000 года, когда дата и время должны были переместиться на год, заканчивающийся 00. Программисты и инженеры работали над решением этой проблемы, чтобы избежать катастрофы. И им это удалось.

Однако на горизонте замаячила еще одна техническая причуда, представляющая угрозу для старых систем, — 03:14:07 UTC, 19 января 2038 года.

часы

Что такое Unix-время

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

ОС, которая стала использоваться по умолчанию в 1970-х годах, была UNIX. Она разработана Bell Labs в 1960-х годах, и в ее первоначальном варианте были элементы, которые встречаются и сегодня.

Почти все ОС, используемые сегодня, восходят корнями к UNIX. Например, Linux, по сути, переделанная система Unix. MacOS выступает наследником NeXTStep, которая базировалась на BSD, а та в свою очередь основана на Unix. Даже в Windows есть ее следы. И суть в том, что для отсчета времени компьютерами используется так называемое «время UNIX».

В UNIX время отсчитывалось с помощью 32-битной системы исчисления. Она остается стандартом для современных компьютеров и ведет отсчет времени с 00:00:00 UTC 1 января 1970 года.

Все 32-битные системы на базе Unix/Linux хранят внутреннее время системных часов как количество секунд, прошедших с «эпохи», или 00:00:00 1 января 1970 года. Этот внутренний тип данных в большинстве случаев представляет собой 32-битное (4-байтовое) знаковое целое число. Оно выглядит как большая строка из единиц и нулей длиной 32 символа, например 01001011011101011001011010001100.

Для исчисления времени договорились делать так: берем количество секунду в 1 дне (их 84600) и записываем в одно число, а потом, чтобы считать разные даты, или прибавляем, или вычитаем секунды.

Так, полночь 1 января 1970 года считается нулем, 2 января — 86400, 3 января —172800 и т.д. Для сравнения: 1 марта 2024 года — это уже 1709251200. Именно столько секунд прошло с 1 января 1970 года.

В чем суть проблемы 2038 года

В чем проблема подхода Unix-времени? Для 32-битной системы, считающей по двоичному основанию два, наибольшее число, которое она может представить, равно (2 в степени 31) -1, что равно 2 147 483 647. Самое позднее время и дата, которые могут быть представлены как секунды с момента «эпохи» в этой 32-битной системе, — это 3:14:07 UTC, 19 января 2038 года.

проблема 2038

После этого внутреннее представление системного времени достигнет 2147483647 секунд, то есть наибольшего числа, хранимого в 32-битном знаковом целочисленном формате. 2 млрд секунд могут показаться целой жизнью (и так оно и есть), но и этому отсчету придет конец. Через секунду после этого система уйдет в минус и станет -2147483648.

Текущие приложения либо интерпретируют это отрицательное число как более старый год (1901), либо заморозят системные часы на 03:14:07 1/19/2038. Это может привести к сбоям в работе приложений и операционных систем, поскольку они не рассчитаны на работу с зависшими системными часами или с часами, показывающими 1901 год.

Это и есть проблема 2038 года, которая известна как Unix Millennium Bug или Y2K38 (по аналогии с проблемой Y2K). Она ознаменует конец времени UNIX и также может привести к хаосу, если не принять меры.

Как это может повлиять на мир

Проблема 2038 года похожа на аналогичную в 2000 году, но она потенциально более опасна, поскольку сейчас существует гораздо больше электронных устройств. Если общее для всех устройств время окажется неисправным, вся цифровая инфраструктура может рухнуть.

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

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

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

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

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

Другие примеры хаоса из-за проблем со временем

Похожая проблема была в 2000 году, но там все обошлось. Несмотря на предсказания о повсеместном сбое, кризис удалось предотвратить благодаря долгосрочному планированию и вмешательству в последнюю минуту, и ни одна критически важная система не вышла из строя. За прошедшие годы те немногие ОС и приложения, которые были затронуты, в большинстве случаев обновлены, заменены или отправлены на пенсию.

Еще один пример — високосный год. Недавно было 29 февраля, и выяснилось, что многие компьютерные системы к нему не готовы, так как в году появляется один неучтенный день. Вот несколько сбоев, которые произошли в тот день:

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

А ChatGPT писала, что «день неправильный». Нейросеть выдала такой ответ: «29 февраля может быть только в високосные годы, которые являются годами, кратными 4, за исключением тех, которые делятся на 100, но не на 400. Поскольку 2024 год делится на 4, а не на 100, он является високосным, однако 29 февраля 2024 года не существует, потому что в этом високосном году в феврале всего 28 дней».

Как избежать проблему 2038 года на практике

Единственное реальное решение — переход на 64-битные процессоры, операционные системы, приложения и форматы файлов. Использование 64-битного значения даст новую дату обхода около 292 миллиардов лет.

Для устройств, подключенных к Интернету, все можно решить простым обновлением ПО, так что большинство вычислительных устройств будут в порядке, поскольку революция IoT подключает к Интернету все больше и больше устройств (смарт-часы, бытовую технику, автомобили и т. д.).

Наиболее проблемными будут устройства, которые не подключены к Интернету и которые не получится обновить.

Более совершенные вычислительные системы уже приходят на смену 32-битной системе, поскольку в новой электронике используются 64-битная система. Для времяисчисления это дает 2^63 степени секунд, а это несколько миллиардов лет.

Этот вариант решает проблему на гораздо более длительный срок: системы смогут вести отсчет времени в 20 раз больше текущего возраста Вселенной, что составляет около 292 миллиардов лет. Так решают проблему Windows и Linux: еще с 2010 года они записывают время как 64-битное число.

64 бит

Итак, чек-лист:

  • Убедитесь, что ваша операционная система и другое приобретенное ПО поддерживают четырехзначные годы и подписанные 64-битные временные переменные.
  • Запросите у поставщиков ПО подтверждения, что продукт «совместим» с 2038 годом. Попросите их подкрепить свой ответ доказательствами.
  • Все поля базы данных, в которых даты хранятся в формате двузначного года, должны быть преобразованы в формат четырехзначного года. Если даты хранятся как целые числа отдельно от времени, добавление 693975 преобразует поле в четырехзначный формат 20-го века (693975 / 365.25 = 1900). Если в вашей системе используется 32-битное знаковое целое число даты, могут возникнуть проблемы с годами, начиная с 2038.
  • Если ваше приложение не требует ввода дат с разницей в столетие, возможно, стоит написать процедуру, позволяющую пользователям продолжать вводить двузначные годы, но сразу же преобразовывать их в четырехзначный формат.
  • Протестируйте ПО, установив системную дату на 2038 год, и запустите его. Предупреждение: сначала сделайте полную резервную копию системы.

Проблема не кажется слишком срочной — у нас есть 5000 дней, чтобы ее решить. Остается надеятся, что технологическая индустрия не будет игнорировать проблему 2038 года до тех пор, пока это не станет слишком дорого, то есть в самый последний момент. В любом случае паниковать не стоит, так как это вопрос, над которым работают. Любые реальные проблемы, которые возникнут в результате 2038 года, будут вполне преодолимы.

Что будем искать? Например,ChatGPT

Мы в социальных сетях