Soudný den digitalizované civilizace

y2k-news-1

Blížeme se ke konci roku 1999, který je již plně zahalený stínem zkázy tehdejšího světa. Jsme v 90. letech minulého století, kde mnohé služby a lidské výdobytky využívají počítače. Internet je zde v počátcích, ale již přináší revoluci. Ale co kdybych vám řekl, že titulek dnešního článku není jen výplodem fantazie? Již v té době, kdy byly počítače ještě větší technomancie než dnes, hrozilo, že kleknutí mnoha počítačových systémů by mohlo mít katastrofální následky. Dnes se podíváme na tzv. "Year 2000 Problem," či jinak nazývaný Y2K (Year 2000 Kilo).

Na počátku bylo slovo... teda dvě cifry

Na počátku byl člověk anebo skupina lidí. Chytrých lidí kteří se hrabali v počítačích které v té době byli ještě větší technomancie než dnes. V té době bylo třeba šetřit pamětí, jak operační, tak diskovou. Jak to ilustruje slavný výrok "640 kB by mělo stačit každému."

Takovéto omezení vedlo k intenzivní optimalizaci, a to včetně ukládání pouze posledních dvou cifer v letopočtu.

Ale co se stalo, když jsme uložili rok 1999 jako 99 a přišel rok 2000? Měli bychom pouze 00. Co s tím teď udělat?

Důsledky a řešení

Problém, který jsme právě popsali, souvisí s tím, co jsme probírali v předchozím článečku Bombová legenda o číselném přetečení (integer overflow). Většině počítačům a programům se 20. století líbilo natolik že si ho chtěli zopakovat a tedy pracovali s tím že je rok 1900. Některé pak ignorovali to jak fungují čísla a prostě pracovali s rokem 19100.

Je zajímavé, že problém byl známý již ke konci 60. let, ale jeho řešení se intenzivně zabývalo až v 80. a 90. letech. V té době byly investovány ohromné finanční prostředky, a například burza cenných papírů v New Yorku utratila přes 20 milionů dolarů na řešení problému Y2K.

První problémy začaly vznikat především s daty datovanými po 1. lednu 2000. Například v roce 1997 měly problémy kreditní karty, terminály a pokladny kvůli expiračním datům karet právě v roce 2000.

Zajímavostí přiložím výstup JavaScriptové funkce Date.getYear(), která dostala záplatu. Dnes již odstraněna a nahrazena funkcí .getFullYear().

Rok 1882 1990 1995 2000 2023
.getYear() −18 90 95 2000 2023
.getFullYear() 1882 1990 1995 2000 2023

Pro vyřešení problémů nejen firmy ale státy vynaložili nemalé prostředky. Dle některých odhadů se celosvětově bavíme o 600 miliardách dolarů.

Jak to probíhalo u nás?

Podle archivních zpráv mnoha webů jsme mohli sledovat bezproblémový průběh, ale také zajímavé situace. Například web ČTK ukazoval čas aktualizace k 1. lednu roku 0, Xchat měl rok 100, a Novinky uváděly rok 19100. Telekomunikační společnosti zvládly vše bez větších obtíží.

Česká republika investovala desítky miliard korun do řešení tohoto problému. Úřad pro Státní Informační Systém (ÚSIS), který byl pověřen koordinací řešení Y2K problému, zvýšil svůj rozpočet na konci roku 1999 o 25 milionů korun.

Konec dobrý, všechno dobré

Co psát závěrem, jak vidno tak stále fungujeme. Tudíž zase tak velký průser to nebyl. Jak by řekl klasik "Sice se to nestalo, ale mohlo se to stát!".

Sem tam něco zakoktalo, ale software se opravil a hardware se brzy nahradil novým. Navíc dnes máme k dispozici tak velkou paměť, že nemusíme šetřit na pár bitech.


Bonus - Y38K

Podobné situace se v historii opakovaly a budou se pravděpodobně opakovat i v budoucnosti. Jako příklad můžeme uvést rok 2022, kdy jsme se opět potýkali s podobným problémem. Tento problém však hlavně postihl webové služby využívající webový server od společnosti Microsoft.

Většina operačních systémů a programů využívá tzv. Unixový čas, kdy se počítá od počátku unixové epochy. Tato epocha započala 1. ledna 1970 v 00:00:00 a od tohoto okamžiku jsou počítány uběhnuté vteřiny (přitom se přestupné vteřiny ignorují). Pro ukládání tohoto času se obvykle využívá 32bitové číslo, což nám umožňuje počítat 2 147 483 648 vteřin. To znamená, že se nám tento problém znovu objeví kolem 19. ledna 2038 v 3:14:07 hodin. V tomto bodě dojde opět k přetečení... V tento moment nám to zase přeteče...

Back to top