Проблема 2000
...Загорятся реки, взорвутся дороги, калькуляторы превратятся в ядерные боеголовки.
Футурама о проблеме 2000
...Из-за не устранённых вовремя ошибок, связанных с «проблемой 2000 года», корпорация Microsoft отложила выпуск Windows 2000 до 1-го квартала 1901 года
Компьютерра о проблеме 2000
Проблема 2000, она же Y2K (Year 2 kilos, то есть год 2 тысячи, иногда транслитерируется на расовый русский как «Удвак») — внезапное выпиливание всех компьютеров в мире, которое ожидалось в первую миллисекунду 2000 года.
Виной тому — жадные программисты прошлого тысячелетия, которые поскупились выделить лишний байт для хранения даты; в результате, 1999 год должен был смениться на 1900 или 19100[1], ставя человечество на грань временного парадокса и деления на ноль. Градус добавляли вполне реальные подобные баги в самых разнообразных программах, неоднократно вылезавшие боком.
Предчувствуя глобальную катастрофу и возможный попил бабла, лучшие умы человечества объединились, чтобы дать бой этой напасти. Был разработан хитрый план, отпечатаны более 9000 книг по борьбе с недостающим байтом, а число патчей к различному софту исчислялось миллионами. В результате «проблема 2000» была полностью побеждена, и человечество возликовало. Несколько омрачал радость тот факт, что ни единого разрыва не произошло даже в тех странах, которые с проблемой не боролись, правительственных комиссий не создавали, книг не печатали и патчей не выпускали. И главное, миллиарды денег за новые, проверенно-сертифицированные версии разнообразных маздаёв никому не платили. Но прогрессивным людям недосуг оглядываться на такие мелочи, ведь впереди ещё много трудностей, о разрешении которых нужно начинать думать уже сейчас. Например, проблема 10000, проблема 2100 года (исчерпание EUI-48) или хотя бы 2038.
Y1C
К 2011 году проблема возникла у жадных тайваньцев. Она связана с тем, что в Тайване в официальных целях используется календарь, ведущий отсчёт с 1912 года, поэтому 2011 год по нормальному белому календарю будет соответствовать сотому году по календарю узкоглазому, что могло вызвать проблемы в программах, в которых для хранения дат используются только две цифры, что на самом деле не редкость там. В итоге частный сектор не пострадал совсем, госучреждения же вовремя успели внести поправку на жадность.
Y2K38
Ещё одна люто, бешено ожидаемая ошибка, связанная с инкрементирующим оверлоудом счётчика секунд, прошедших с начала эпохи C. Все программы, использующие 32-разрядное время библиотеки <time.h>, 19 января 2038 в 3:14 удивят юзера кто во что горазд: одни больше не станут запускаться, другие упадут, третьи заглючат, четвёртые покажут 13 декабря 1901 года и лишь немногие продолжат нормально работать.
А разгадка проста: на 32-битных системах тип time_t представляет собой знаковое 32-битное число, которое показывает количество секунд с начала 1970 года, поэтому его максимальное значение равно 2 147 483 647, а добавив к этому числу единицу, мы получим минус 2 147 483 648 из-за переполнения. Если проблема 2000 касалась больше пользовательских интерфейсов, то проблема 2038 затронет внутренние потроха системных программ, так как всякие таймауты и временные интервалы проще считать именно через Unix-время, чем любым другим способом. Это может вызвать уже гораздо более заметный пиздец, особенно если современные 32-битные программы без доработок доживут до того времени. Если не большинство, то заметная их доля написана без учёта проблемы 2038.
С переходом на 64 разряда этот сценарий конца света становится неактуальным (вернее, переносится на 4 декабря 292277026596 года. Это, конечно же, очень всех беспокоит, но ссылку на пока ещё пустой шаблон Проблема_292277026596_года в Википедии уже поставили).
Y21C
2100 хоть и делится на четыре, но этот год не будет високосным, так как в григорианском календаре года, делящиеся без остатка на 100, не являются високосными, если не делятся без остатка на 400 (таким был 2000). Для быдла это будет выражаться в том, что праздник по случаю Октябрьской революции и Рождество будут выпадать на 8-ой день календаря, а 8 марта станет 9-ым марта.
Очевидно, что не только быдла, но и быдлокода без учёта этой особенности over 9000. Да кстати стоит добавить то, что в Windows XP времяисчисление ограничено до 2099 года, следовательно, когда настанет 2100 год, ваш компьютер покажет, что сейчас 1985 год, и вы нахрен в прошлое улетели. Что характерно, ошибка 2100 не исправлена ни в Висте, ни в семёрке и даже не в 8 и 8.1. В Windows 10 таки поправили. Этакая проблема Y21C (Year Twenty-One Hundred, Year Twenty-One Centoes, отсюда и Y21C, C = cento, сто, 100 (ну как K = Kilo, кило, 1000), неправильно Y2K100, Y2K1C, ибо 2100 — Twenty-One Hundred, двадцать одна сотня, но никак не две тысячи сто) актуальна в некоторых версиях Windows. Но актуальна она не только лишь для операционок, но и для программ, использующих и по сей день число года двумя цифрами. Как бы не захотели, после 99-го года (XXI века только!) 100 не будет, будет 00 и программа решит, что снова наступил Миллениум, грубо говоря комп вас вернёт на сто лет назад, в 2000 год, хотя на самом деле наступил новый, XXII век.
Y21C07
2107-й год является последним годом, поддерживаемым файловой системой FAT (включая новомодную проприетарную до мозга костей exFAT). Эта файловая система используется на флэшках, отформатированных под Windows.
Y22C86
20 ноября 2286 количество секунд, прошедших с начала эпохи Си, перевалит за 10 миллиардов. Тогда потребуется уже 11 цифр, чтобы хранить это значение. Соответственно, полетит весь софт, который сейчас тупо проверяет, что таймштапмы содержат 10 цифр. Плюс к этому обломаются все, кто хранит секунды тупо в виде числа в таблице с ограничением в 10 цифр.
30828
В 30828-м году происходит переполнение времени в формате FILETIME, который используется повсеместно в Windows, включая файловую систему NTFS. Поэтому в 30828 году нас ждёт катастрофа. Но кто тогда будет пользоваться виндами? Впрочем, с Adeptus Mechanicus станется.
Y2C7BIT
Ну и наиболее вероятная ошибка(про которую благополучно забыли настолько, что до её срабатывания от вписки про неё сюда осталось меньше суток, а неиллюзорно доставит она всем олдфагам как минимум. В особенности своей "невыпиливаемостью") связана с тем, что в самой топологии микросхемы таймера, так широко раскомунизженного по всем физическим электронным часикам во всём мире простой копипастой фрагмента кристалла чуть менее чем полностью, у счётчика года в этом кристалле разрядность тоже ограничена. Поэтому в обычных наручных, настенных, настольных и других электронных часах "с цифирьками вместо стрелок" после 2019-го наступает...не, даже не надейтесь... 1980-й год(в чём усмотрена шикарнейшая пасхалка т.к. это - год разработки этой топологии). Ну а поскольку посадить такую микросхему на материнку какого-нибудь компучера, смартфона или бытового устройства, де будильник играет хоть какую-то роль, тоже вполне так могли - не удивляйтесь особым чудесам на кухне, в ванной,...и т.п. в новом 2020-м/1980м году ;) Это как раз нормально.
Так что если в Новом Году у Вас при взгляде на ГОД на любимых часиках возникнет стойкое ощущение, что явилась Белка и пора бежать сдаваться - не пугайтесь. Баг не у Вас, а у Этой Реальности. И даже скажу больше - Это не баг - это фича!(с)Nokia.
Високосная секунда
Иногда так бывает, что сутки заканчиваются не в 23:59:59, а в 23:59:60 (либо же в 23:59:58), дабы учесть влияние Луны на скорость вращения Земли. Но увы, не всякое ПО способно корректно переварить лишнюю секунду. Особенно этим грешат прыщесерверы, которые попросту зависают, приводя к локальным пиздецам в банковской и не очень сфере. В последний раз такой пиздец случился в ночь с 31 декабря 2016 на 1 января 2017 года. ЦБ РФ нервничает.
31 февраля
Ещё одна пасхалка в микросхеме таймера (которой можете лично глумонуться над знакомыми в конце февраля) связана с сигналами сброса счётчика дней и инкремента счётчика месяцев. Делается таким образом:
1. Ставим на часах високосный год.
2. Выставляем 29 февраля.
3. Возвращаем реальный год...
Результатом таких нехитрых манипуляций получим то, что часы педантично отсчитают в феврале от 31 до 39 дней, при этом всерьёз считая, что их совсем не глючит и март реально будет позже.
IRL
У многих может возникнуть впечатление, что проблема была высосана из пальца и реально никакой угрозы, тем более глобальной, не существовало. Однако следует учитывать местную специфику. Пока в этой стране ударными темпами пытались построить коммунизм к 1980 году и клеили танчики, проклятые капиталисты пытались выкинуть на улицу без выходного пособия существовавший у них уже тогда офисный планктон, внедряя в стране эльфов, Цюрихе, Лондоне и прочих интересных местах, первые банковские компьютеры на базе мейнфреймов. Софт для этих монстров в связи с отсутствием 1С писался на таких интересных языках, как COBOL, MUMPS и прочих радостях гиков, которые большинство современных программистов считают вымершими из-за отсутствия статей про них на хабре.
Так как со временем парк мейнфреймов естественным путём убывал, а денег и нервов на переиздание всего выводка программ на С++ было жалко, то очень часто принималось тупое и эффективное решение: выбывающий мейнфрейм заменялся современным сервером, внутри которого крутился виртуальный двойник того самого мейнфрейма со всеми программами 60-ых годов написания. Как известно, раньше трава была зеленее, тян чаще давали, а программы писались добротно, без всяких там переполняющихся буферов и утечек драгоценной памяти. А раз работает — не трогай. PROFIT??? Не совсем… В результате к 2000 году многие весьма известные и уважаемые организации (типа банков и страховых контор) подошли с наличием у них ПО, которое мало того, что поведет себя совершенно непредсказуемо, но и написанного 20 лет назад на непонятных языках, учебники по которым уже давно сдали на макулатуру, а документацию и исходные тексты отдали в музей. Поэтому во второй половине 90-ых наблюдался резкий рост зарплат и вакансий для специалистов, владеющих соответствующими языками. Бородатые гики 60-70-ых, которые к указанному времени не спились и не потеряли квалификации, смогли срубить немало бабла даже в качестве простых программистов.
В этой стране естественный выпил большинства мамонтов отечественного компьютеростроения произошел в начале 90-ых из-за проигрыша зарубежным аналогам в результате естественного отбора. Более того, всеобщее нищебродство оттянуло момент тотальной компьютеризации до того времени, когда 640К памяти уже хватало далеко не всем. Тем не менее банковским ИТшникам пришлось оторваться от сапера, дабы разобраться с ДОСовскими программами, купленными в первой половине 90-ых у благополучно развалившихся наследников советских кооперативов.
Так что несмотря на то, что рядового анонимуса этой страны Y2K касался незначительно (в связи с отсутствием счетов в швейцарских банках), серьезный повод для беспокойства все же был. Но нельзя не признать, что основную часть внимания сабжу обеспечили маркетологи, надеявшиеся поиметь гешефт от продажи программ и оборудования с шильдиком «Y2K compatible».
Y2K в играх
В игре Metal Gear Solid 2: Sons of Liberty проблема Y2K была обыграна довольно занятно. Патриоты под видом патчей, решающих эту проблему, подсунули всем программы-цензоры, дабы получить полный контроль над информацией.
В винрарнейшей игре SkiFree начиная ровно с дистанции 2000 метров за тобой начинает гоняться снежный человек.
Целая инди-игра YIIK названа в честь этого феномена. А жаль.
Y2K в кино
- В мультсериале «Царь Горы» есть целая серия, посвящённая этому событию (4 сезон 10 серия).
- В мультсериале «Симпсоны» Гомер забывает устранить баг на АЭС, связанный с проблемой Y2K, что приводит к гибели большей части населения (230 эпизод, 11 сезон, 4 серия, 3 часть).
- В мультсериале «Гриффины» только Питер озаботился проблемой Y2K и спас свою семью от мутаций. Но ненадолго.
- В мультсериале «Футурама» отец Фрая озабочен проблемой 2000.
- В сериале «Меня зовут Эрл» Эрл и компания спрятались в подвал от Y2K, прожив там месяц.
- В фильме «Превосходство / Transcendence [2014]» упоминается «проблема 2000».
- В культовом «Офисное пространство / Office Space [1999]» главный герой упоминает, что решением этой проблемы его софтверная компания и занимается.
Ссылки
- Resign patterns. См. паттерн «детонатор».
- xkcd
См. также
Примечания
- ↑ Особо криворукие быдлокодеры для облегчения всякого рода сортировок и прочих работ с датой ещё в середине 70-х гг. заложили кучу самых невероятных ляпов в свои программы и библиотеки. Типичное решение — дату хранить в int с отсчетом от 1900-го года, поэтому после 1900+99=1999 ожидался 1900+100, да ещё не «плюс» в смысле арифметики, а в смысле «дописать в строку при выводе», и хорошо ещё если догадывались оставить два символа, а не всунуть как есть. Расово верный ArtMoney for DOS всовывал как есть. К 2000 году большинство подобного творчества благополучно скончалось естественным путем от древности, но есть смена же.