Проблема 2038 года: что делать, когда кончится время?
Первого января 1970 года началась «Эпоха Unix», а у разработчиков возникли новые проблемы. Рассказываем, что такое «Проблема 2038 года».
15К открытий19К показов
В полночь первого января 1970 года началась «Эпоха Unix». В Unix и других POSIX-совместимых ОС приняли систему описания моментов времени. Но одновременно с новой эпохой у инженеров и разработчиков возникли новые проблемы. Одна из них — «Проблема 2038 года». Рассказываем, что это такое и ждёт ли нас «Апокалипсис» через 18 лет.
Минутка истории
Ошибка Y2K заключалась в следующем. В 1950-х и 60-х годах, когда создавался софт для первых компьютеров, разработчики отображали год в дате двумя последними цифрами. Для экономии ресурсов. Поэтому они переживали, что 1 января 2000 года компьютеры, отображающие новую дату «00», ошибочно решат, что это 1900 год.
Это звучало правдоподобно, и многие люди сделали бизнес на консультациях по этому вопросу. Вырос спрос на COBOL-разработчиков — им приходилось исправлять старые приложения. По мере приближения Миллениума люди готовились к глупым коммунальным платежам, гаснущим фонарям и падающим самолётам
В конце концов, появились Y2K-совместимые системы, и 2000 год начался почти без шума. Но «проблема 2038 года» немного сложнее.
Что произойдёт в 2038 году
Время Unix — это количество секунд, начиная с полуночи 1 января 1970 года. Отсчёт начался с 0, и любое значение времени или даты выражается числом секунд, следующих за 0. Так, значение 919642718 равно 919 642 718 секундам после 00:00:00 часов 1 января 1970 года. То есть воскресенью 16:18:38 21 февраля 1999 года.
Это удобный формат, потому что если вы вычтете любые два значения, то получите количество секунд — то есть разницу во времени — между ними. Так можно определить, сколько минут, часов, дней, месяцев или лет прошло между двумя любыми датами.
Старые 32-разрядные процессоры способны считать только до 2 147 483 647. Таким образом, 19 января 2038 года в 03:14:07 по Всемирному времени (UTC) они достигнут максимальной мощности.
Проблема 2038 года приведёт к тому, что часы на некоторых устройствах перестанут работать. По одной из теорий, время обернётся назад к «началу» и будет храниться в виде отрицательных чисел. И из-за того, как написан код, компьютеры будут интерпретировать это время как происходящее 13 декабря 1901 года, а не 19 января.
Всё не так плохо
Большинство компьютеров и смартфонов, сделанных в последнее время, 64-разрядные и могут содержать числа размером 9 223 372 036 854 775 807. То есть будут отсчитывать время до 292 277 026 596 года. Так что их основная часть (за исключением действительно старых) не пострадает.
Что касается банкоматов, медицинской и военной техники и прочего, то к 2038 году, вполне вероятно, большинство (если не все) 32-битных устройств не будут использовать. Им на замену придут более современные системы, которые не нужно исправлять. Главной головной болью может стать модернизация оборудования. Но инженеров есть ещё 18 лет, чтобы с ней справиться.
15К открытий19К показов