Úvod Novinky Hodiny tikajú: Koniec sveta sa blíži!

Hodiny tikajú: Koniec sveta sa blíži!

47

Koniec sveta sa pomaly, ale zato nezvratne približuje. Teda aspoň podľa hodín operačných systémov založených na systéme UNIX, medzi ktoré sa nepochybne radí aj Android.

Hodiny týchto systémov totiž dotikajú presne 19. januára 203803:14:07 UTC (04:14:07 stredoeurópskeho času). Uznávam, že prirovnanie ku koncu sveta je trošku pritiahnuté za vlasy, no tento tzv. problém roku 2038 môže spôsobiť nemalé komplikácie v informatickom svete, aj vďaka ktorému ten bežný svet funguje tak ako funguje. Kam sa pozriete, všetko v podstate riadia počítače, ktoré bežia na UNIXovom jadre – od rozvodných sietí až po reklamné obrazovky v hypermarketoch.

Jadrom tohto problému je spôsob, ako tieto systémy ukladajú čas. Ten je uložený ako počet sekúnd, ktoré ubehli od začiatku „epochy“, teda od 1.1.1970 00:00:00 UTC a tieto sekundy sú uložené v dátovom type  Integer. Integer je celočíselný formát uložený na 32 bitoch (1bit = 1 alebo 0), z ktorých prvý bit reprezentuje znamienko + alebo , takže na číslo nám zostáva 31 bitov. Z toho ľahko vyrátame maximálnu hodnotu tohto čísla ako 231-1 = 2147483647, keďže sa ráta od nuly. No a jeho kapacita sa naplní presne už spomínaného 19. januára 2038 o 03:14:07. Nasledujúcu sekundu sa čas a dátum prehupne naspäť na 13.12.1901 20:45:52, čo môže spôsobiť pády systémov.

Možno ešte máte v čerstvej pamäti, že podobný problém nedávno riešili aj programátori YouTube, kedy toto magické číslo prekonal počet zhliadnutí známeho Gangnam style.

Year_2038_problem

Riešenie tohto bugu sa priam ponúka a na prvý pohľad vyzerá triviálne jednoduché – zmeniť typ premennej time_t, v ktorej sa čas ukladá, napríklad na 64-bitové celé číslo alebo na 32 bitové číslo bez znamienka. To by však vyústilo do problémov s kompatibilitou zdrojových kódov a dát uložených všetkými dotknutými systémami, či už ide o dátum zmeny alebo vytvorenia súboru, alebo o čas odoslania e-mailu. Univerzálne riešenie zatiaľ neexistuje, no kým to bude akútne, nejaké riešenie sa hádam nájde.

Ako ideálne sa zatiaľ javí zaobalenie time_t do 64-bitového celého čísla so znamieknom, ktoré by tento problém odsunulo na krásnu nedeľu 4. decembra 292 277 026 596 15:30:08, čo by na nejaký čas mohlo stačiť. Niektoré systémy s týmto sôsobom už začali experimentovať.

Ako to však dopadne sa nechajme prekvapiť. Možno dovtedy stihne koniec sveta prísť v inej a bolestivejšej podobe… Bojíte sa?

Foto: Jan Wellman
Zdroj: Wiki