Проблема 2000
Проблема 2000, она же Y2K (Year 2 kilos, то есть год 2 тысячи, иногда транслитерируется на расовый русский как «Удвак») — внезапное выпиливание всех компьютеров в мире, которое ожидалось в первую миллисекунду 2000 года.
Виной тому — жадные программисты прошлого тысячелетия, которые поскупились выделить лишний байт для хранения даты; в результате, 1999 год должен был смениться на 1900 или 19100[1], ставя человечество на грань временного парадокса и деления на ноль. Градус добавляли вполне реальные подобные баги в самых разнообразных программах, неоднократно вылезавшие боком.
Предчувствуя глобальную катастрофу и возможный попил бабла, лучшие умы человечества объединились, чтобы дать бой этой напасти. Был разработан хитрый план, отпечатаны более 9000 книг по борьбе с недостающим байтом, а число патчей к различному софту исчислялось миллионами. В результате «проблема 2000» была полностью побеждена, и человечество возликовало. Несколько омрачал радость тот факт, что ни единого разрыва не произошло даже в тех странах, которые с проблемой не боролись, правительственных комиссий не создавали, книг не печатали и патчей не выпускали. И главное, миллиарды денег за новые, проверенно-сертифицированные версии разнообразных маздаёв никому не платили. Но прогрессивным людям недосуг оглядываться на такие мелочи, ведь впереди ещё много трудностей, о разрешении которых нужно начинать думать уже сейчас. Например, проблема 10000, проблема 2100 года (исчерпание EUI-48) или хотя бы 2038.
Y1C
К 2011 году проблема возникла у жадных тайваньцев. Она связана с тем, что в Тайване в официальных целях используется календарь, ведущий отсчёт с 1912 года, поэтому 2011 год по нормальному белому календарю будет соответствовать сотому году по календарю узкоглазому, что могло вызвать проблемы в программах, в которых для хранения дат используются только две цифры, что на самом деле не редкость там. В итоге частный сектор не пострадал совсем, госучреждения же вовремя успели внести поправку на жадность.
Y2K38
А разгадка проста: на 32-битных системах тип time_t представляет собой знаковое 32-битное число, которое показывает количество секунд с начала 1970 года, поэтому его максимальное значение равно 2 147 483 647, а добавив к этому числу единицу, мы получим минус 2 147 483 648 из-за переполнения. Если проблема 2000 касалась больше пользовательских интерфейсов, то проблема 2038 затронет внутренние потроха системных программ, так как всякие таймауты и временные интервалы проще считать именно через Unix-время, чем любым другим способом. Это может вызвать уже гораздо более заметный пиздец, особенно если современные 32-битные программы без доработок доживут до того времени. Если не большинство, то заметная их доля написана без учёта проблемы 2038.
С переходом на 64 разряда этот сценарий конца света становится неактуальным (вернее, переносится на 4 декабря 292277026596 года. Это, конечно же, очень всех беспокоит, но ссылку на пока ещё пустой шаблон Проблема_292277026596_года в Википедии уже поставили).
Y21C
Очевидно, что не только быдла, но и быдлокода без учёта этой особенности 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 век.
IRL
У многих может возникнуть впечатление, что проблема была высосана из пальца и реально никакой угрозы, тем более глобальной, не существовало. Однако следует учитывать местную специфику. Пока в этой стране ударными темпами пытались построить коммунизм к 1980 году и клеили танчики, проклятые капиталисты пытались выкинуть на улицу без выходного пособия существовавший у них уже тогда офисный планктон, внедряя в стране эльфов, Цюрихе, Лондоне и прочих интересных местах, первые банковские компьютеры на базе мейнфреймов. Софт для этих монстров в связи с отсутствием 1С писался на таких интересных языках как COBOL, MUMPS и прочих радостях гиков, которые большинство современных программистов считают вымершими из-за отсутствия статей про них на хабре.
Так как со временем парк мейнфреймов естественным путём убывал, а денег и нервов на переиздание всего выводка программ на С++ было жалко, то очень часто принималось тупое и эффективное решение: выбывающий мейнфрейм заменялся современным сервером, внутри которого крутился виртуальный двойник того самого мейнфрейма со всеми программами 60-ых годов написания. Как известно, раньше трава была зеленее, тян чаще давали, а программы писались добротно, без всяких там переполняющихся буферов и утечек драгоценной памяти. А раз работает — не трогай. PROFIT??? Не совсем… В результате к 2000 году многие весьма известные и уважаемые организации (типа банков и страховых контор) подошли с наличием у них ПО, которое мало того, что поведет себя совершенно непредсказуемо, но и написанного 20 лет назад на непонятных языках, учебники по которым уже давно сдали на макулатуру, а документацию и исходные тексты отдали в музей. Поэтому во второй половине 90-ых наблюдался резкий рост зарплат и вакансий для специалистов, владеющих соответствующими языками. Бородатые гики 60-70-ых, которые к указанному времени не спились и не потеряли квалификации, смогли срубить немало бабла даже в качестве простых программистов.
В этой стране естественный выпил большинства мамонтов отечественного компьютеростроения произошел в начале 90-ых из-за проигрыша зарубежным аналогам в результате естественного отбора. Более того, всеобщее нищебродство оттянуло момент тотальной компьютеризации до того времени, как 640К памяти уже хватало далеко не всем. Тем не менее банковским ИТшникам пришлось оторваться от сапера, дабы разобраться с ДОСовскими программами, купленными в первой половине 90-ых у благополучно развалившихся наследников советских кооперативов.
Так что несмотря на то, что рядового анонимуса этой страны Y2K касался незначительно (в связи с отсутствием счетов в швейцарских банках), серьезный повод для беспокойства все же был. Но нельзя не признать, что основную часть внимания сабжу обеспечили маркетологи, надеявшиеся поиметь гешефт от продажи программ и оборудования с шильдочкой «Y2K compatible».
Спасибо за прочтение, впереди много интересного.