Pravděpodobně si pamatujete na zděšení Y2K. Média s radostí předpověděla globální kolaps, když hodiny odbily rok 2000. Ale zatímco mnoho starších systémů bylo nataženo, na pozadí velké části moderního internetu stále tiká jiný časovač. Říká se tomu problém 2038. A je to zakořeněné ve způsobu, jakým programovací jazyky C zvládají čas.

Většina lidí se mylně domnívá, že problém souvisí s dvoucifernými roky, jako tomu bylo v případě Y2K. Ve skutečnosti to není pravda. Kořen problému leží hlouběji v kódu. Konkrétně ve způsobu, jakým programy C ukládají data data.

Omezení 32bitové architektury

Toto je technická realita. Standardní časová knihovna v C používá ke sledování času 4bajtové celé číslo se znaménkem. Toto je 32 bitů. Tento formát definuje „čas epochy“ začínající 1. ledna 1970 v 00:00:00 UTC. Každá sekunda po tomto bodě je uložena jako prvočíslo.

Například časové razítko 919642718 představuje 919 milionů sekund od začátku epochy. To odpovídá 21. únoru 1999. To je užitečné, protože odečtením jednoho časového razítka od druhého získáte přesný počet sekund mezi dvěma událostmi. Knihovny pak tyto sekundy převedou na minuty, hodiny nebo roky.

Ale je tu tvrdá hranice.

Maximální hodnota 32bitového celého čísla se znaménkem je 2 147 483 647. Jakmile tento čítač dosáhne nuly sekund po 1. lednu 1970, dojde k přetečení (překročení nuly).

K tomuto přetečení dojde 19. ledna 2038.

Po tomto datu celé číslo přeteče. Promění se v záporné číslo. Pro systém spoléhající na tento formát je tato záporná hodnota neplatné datum. Je to v podstatě chyba v matrici pro jakýkoli software, který nebyl aktualizován.

Proč je to jednodušší než problém Y2K

Dobrá zpráva? Oprava tohoto problému není tak chaotická jako noční můry sálových počítačů z konce 90. let.

V případě Y2K mnoho systémů nestandardizovalo způsob ukládání dat. Někteří používali formát MM-DD-RR. Ostatní – RR-MM-DD. Neexistence univerzálního formátu znamenala, že vývojáři museli hledat kód v každé aplikaci a ručně měnit logiku data.

Problém roku 2038 je čistší.

Standardní časová knihovna zapouzdřuje celý proces sledování času. Definuje své vlastní typy a funkce. Dobře napsané programy lze tedy jednoduše překompilovat. Inženýři potřebují pouze nahradit knihovnu verzí, která používá větší velikost bajtů.

Například přechod ze 4bajtového celého čísla na 8bajtový značně rozšiřuje rozsah. 8bajtové celé číslo se znaménkem může počítat daleko za rok 2038, aniž by došlo k přetečení. Toto je aktualizace softwaru. Nejedná se o výměnu hardwaru. Žádné přepisování kódu. Jen výměna knihovny.

Windows a Mac: různé časovače, různé problémy

Ne všechny systémy používají 32bitový formát C. Různé operační systémy mají své vlastní vlastnosti.

Windows NT například používá 64bitové celé číslo. Sleduje čas v krocích po 100 nanosekundách. Ale odpočítávání nezačíná od roku 1970, ale od 1. ledna 1601. To posouvá datum přetečení mnohem dále. Windows pravděpodobně dosáhnou svého limitu kolem roku 2184.

Apple se vydal jinou cestou. Podle oficiální dokumentace Apple je macOS navržen tak, aby zůstal v pořádku do 29 940. To je přibližně za 27 000 let. Pokud tedy používáte Mac, nemusíte se bát, že by se vám v roce 2038 rozbil kalendář.

Kdo další je v ohrožení?

Hlavní nebezpečí představují systémy založené na Unixu. Ale nejsou sami.

Vestavěné systémy jsou také zranitelné. Mnoho zařízení IoT, průmyslových řadičů a starších databázových serverů se spoléhá na stejný 32bitový formát času. Pokud nebyly aktualizovány, začnou chybně interpretovat data po 19. lednu 2038.

Krátkodobá řešení mohou zahrnovat záplatování softwaru, aby správně zpracovával záporné časy. Jde ale pouze o dočasné opatření. Trvalé řešení vyžaduje přepnutí na 64bitový formát času.

Otázkou není, zda se kód prolomí. Otázkou je, zda se systémy s tímto kódem aktualizují, než vyprší čas.

Velká část infrastruktury, na kterou se spoléháme, již přechází na 64bitové měření času. Ale ne všechno. Staré servery. Zastaralé průmyslové vybavení. Nějaká vestavěná logika. To jsou slabé články.

Když přijde 19. leden 2038, hodiny dosáhnou svého limitu. Pro některé systémy to bude nepostřehnutelná událost. Pro ostatní je to těžká zastávka. Pokud budete čekat na poslední chvíli, nebudete mít moc času na opravu kódu.