Problém roku 2038

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 4. srpna 2022; ověření vyžaduje 1 úpravu .

Problémem roku 2038 ve výpočetní technice  se očekává selhání softwaru v předvečer 19. ledna 2038 . Tento problém ovlivní programy a systémy, které používají standardní reprezentaci času POSIX ( čas UNIX ), což je počet sekund , které uplynuly od půlnoci 1. ledna 1970 . Tato reprezentace času je standardem pro operační systémy podobné Unixu (kvůli všudypřítomnému použití jazyka C ).

Popis

Starší 32bitové systémy (před polovinou 90. let) používaly datový typ time_tk ukládání sekund jako 32bitové celé číslo se znaménkem. Nejpozdější datum, které může být v tomto formátu reprezentováno ve standardu POSIX  , je 03:14:07, úterý 19. ledna 2038 UTC .

Pozdější čas způsobí, že se takové datové pole stane záporným, čímž se čas zacyklí (protože záporné číslo mohou programy interpretovat jako čas v roce 1970 nebo 1901, v závislosti na implementaci). V důsledku toho mohou jakékoli výpočty, které zahrnují datum pozdější než 19. ledna 2038, způsobit selhání programu nebo vést k chybným výpočtům.

Pro existující kombinace operačních systémů a aplikačního softwaru neexistuje jednoduché řešení problému Y2038 . Změna definice typu time_tna 64 bitů naruší binární kompatibilitu programů, existujících uložených dat a čehokoli jiného, ​​co používá binární reprezentaci času. A přetypování time_tna celé číslo bez znaménka může přerušit programy, které počítají časové rozdíly.

Většina operačních systémů pro 64bitové architektury již používá 64bitovou celočíselnou reprezentaci v time_t. Přechod na tyto architektury již probíhá a očekává se, že bude dokončen do roku 2038.

Kromě toho je 32bitový formát time_ttaké zahrnut ve specifikacích formátu souborů, jako je všudypřítomný formát archivu ZIP . Formát souboru může existovat po tolik generací počítačů, což znamená, že problém Y2038 zůstane relevantní.

Zavedení 64bitového formátu zavádí nové datum „zpětné smyčky“: protože maximální hodnota bude sekund, dojde k tomu asi za 292 miliard let [1] , což je mnohem déle než stáří vesmíru .

Microsoft Windows

Problém roku 2038 je také relevantní pro 32bitové verze Windows , protože značná část samotného OS a velké množství programů pro něj jsou napsány v C / C++ . Vývojáři Windows tvrdí [2] , že opravili většinu kódu ovlivněného tímto problémem, ale nemohou poskytnout žádné záruky ohledně softwaru třetích stran.

Linux

Od verze 5.6 linuxového jádra (kernel 5) byl problém vyřešen, ale od roku 2020 existuje obrovské množství softwaru, který je stále potřeba opravit [3] .

MySQL

Populární MySQL a SQL Server DBMS pro typ TIMESTAMP má určitá omezení: hodnoty, které obsahují datum a čas v TIMESTAMP, jsou v rozsahu od '1970-01-01 00:00:01 UTC' do '2038-01 -19 03:14 :07 UTC' [4] .

Viz také

Poznámky

  1. sekund je přibližně let
  2. Problém roku 2038 – GES na Windows 7 – Domovská stránka webu – Blogy MSDN . Datum přístupu: 5. ledna 2011. Archivováno z originálu 9. července 2011.
  3. Michael Larabel. Linux 5.6 je první jádro pro 32bitové systémy připravené ke spuštění v minulém roce 2038 (29. ledna 2020). Staženo 13. února 2020. Archivováno z originálu 6. února 2020.
  4. MySQL Dev . Získáno 9. ledna 2013. Archivováno z originálu 9. ledna 2013.