V roce 2000 chyba Y2K přišla a odešla bez mnoha problémů. Navzdory předpovědím o rozsáhlém selhání byla krize odvrácena dlouhodobým plánováním i zásahy na poslední chvíli a žádný kritický systém neselhal. V následujících letech bylo těch několik operačních systémů a aplikací, které byly postiženy, ve většině případů aktualizováno, nahrazeno nebo vyřazeno z provozu.
Pokud používáte systém založený na Unixu nebo Linuxu, budete se muset obávat ještě jedné chyby související s datem – v roce 2038.
Všechny 32bitové systémy založené na Unixu/Linuxu interně ukládají čas systémových hodin jako počet sekund od epochy, neboli 00:00:00 1. ledna 1970. Tento interní datový typ, time_t, je ve většině případů 32bitové (4bajtové) celé číslo se znaménkem. Pokud se daný systém řídí standardem POSIX (jako většina systémů Unix a Linux), nejzazší čas a datum, které lze reprezentovat jako sekundy od epochy v tomto 32bitovém celém čísle se znaménkem, je 3:14:07 UTC v úterý 19. ledna 2038.
Po tomto čase a datu dosáhne interní reprezentace systémového času 2147483647, což je nejvyšší číslo, které lze uložit v 32bitovém celém čísle se znaménkem. Jednu sekundu poté se překlopí do záporného čísla -2147483648. Současné aplikace budou toto záporné číslo interpretovat buď jako starší rok (1901), nebo zmrazí systémové hodiny na 03:14:07 dne 19. 1. 2038. To pravděpodobně způsobí selhání aplikací a operačních systémů, protože nejsou navrženy pro práci se zavěšenými systémovými hodinami nebo hodinami, které ukazují rok 1901.
Neexistuje žádná použitelná oprava (která by neporušila stávající aplikace) pro systémy používající 32bitové procesory nebo operační systémy a aplikace běžící v 32bitovém režimu na 64bitových procesorech. Mnoho současných operačních systémů Unix/Linux již běží v 64bitovém režimu (s odpovídajícím „dlouhým“ time_t při 64bitovém procesoru; ve většině případů to problém řeší.
Operační systémy, které podporují dlouhý 64bitový time_t, nejsou s největší pravděpodobností chybou roku 2038 z hlediska vnitřních systémových hodin ovlivněny. Aplikace, které používají 32bitový time_t, však mohou selhat i v případě, že systém, na kterém aplikace běží, podporuje plně 64bitový provoz.
Tady je stručný přehled současného stavu podpory systému Unix 2038 v hlavních verzích systému Unix/Linux:
- Solaris 7 nebo vyšší na 64bitových procesorech UltraSPARC a SPARC64, stejně jako Solaris 10 na platformách x86-64, má 64bitový time_t.
- AIX verze 4.3.3 na 64bitových procesorech PowerPC a Power má 64bitový time_t.
- Jádro Linux běžící v 64bitovém režimu na procesorech IA64 nebo x86-64 má 64bitový time_t.
- Mac OS X verze 10.4 a novější má 32bitové jádro, ale aplikace mohou při běhu na procesorech PowerPC G5 nebo x86-64 používat 64bitový time_t.
- FreeBSD 6.0 a vyšší má při běhu na 64bitové platformě 64bitový time_t.
- OpenBSD 4.0 a novější má 64bitový time_t.
- OpenBSD 4.0 a novější má 64bitový time_t.1 a novější podporují 64bitový time_t.
- NetBSD zatím 64bitový time_t nemá, ale probíhají snahy o nápravu tohoto problému pro nadcházející vydání.
I když váš současný operační systém ještě není bezpečný pro Unix 2038, nebojte se! Lidé o tomto problému vědí již mnoho let a aktivně pracují na jeho řešení. Ve většině případů bude problém vyřešen tím, že operační systém a aplikace nakonec poběží v plně 64bitovém režimu.
Očekávám, že všechny hlavní desktopové operační systémy budou v příštích pěti až deseti letech plně 64bitové. Kromě toho pomůže trickle down efekt nahradit současné systémy 64bitovými konfiguracemi tam, kde to bude použitelné a nákladově efektivní.
O AUTOROVI: Bill Bradford je tvůrcem a správcem SunHELP a žije v Houstonu v Texasu se svou ženou Amy.