A 2020-as év jelentős a Unix számára: az év elején az eredeti operációs rendszer 50 éves lett. A Unix idő, más néven "epoch idő", az eltelt másodpercek számát jelenti 1970. január 1-je óta. De mi aggasztja a kernel fejlesztőit a Unix fél évszázados évfordulója kapcsán?

Bár a Unix korai fejlesztései megelőzik az "epoch" hivatalos kezdetét, 1970. január 1-je továbbra is a POSIX idő nullapontja. Így tehát 2020. január 1-jével hivatalosan pontosan 50 éves lett a platform.
Idő Unix az emberi idővel szemben
Emberi időszempontból 50 év hosszú időszak. Unix időszempontjából azonban semmi különös nem van 50 évben, 43 év sem lenne kevésbé jelentős. A Unix rendszerek (beleértve a Linuxot is) az időpontok és dátumok értékeit a 1970-01-01 00:00:00 UTC óta eltelt másodpercek számaként tárolják, 32 bites formátumban. Annak meghatározásához, hogy hány másodperc telt el azóta, és így a jelenlegi Unix idő értéke, az alábbi parancsot lehet végrehajtani:
$ date +%s
1576883876
A date parancs utáni %s argumentum a jelenlegi dátum és idő megjelenítését jelöli másodpercek számaként 1970. január 1. óta.

Milyen maximális dátumot tárolhatnak a rendszerek Unix?
Ahhoz, hogy megértsük, mennyi időt tud tárolni egy Unix rendszer, értékelnünk kell a 32 bites mező kapacitását. Ezt így lehet kiszámítani:
$ echo '2^32' | bc
4294967296
Mivel azonban a Unix lehetőséget biztosít negatív számok tárolására, egy bitet fenntartanak a jel számára, ezáltal csökkentve az időértéket a következőre:
$ echo '2^31' | bc
2147483648
Mivel a Unix számlálása 0-val kezdődik, ez azt jelenti, hogy 2 147 483 648 értékünk van, de a legnagyobb 2 147 483 647 – a Unix dátum és idő értéke nem haladhatja meg ezt a számot. Ugyanúgy, ahogy az autók kilométerórája sem mutathat többet 999 999 kilométernél – ha 1-et ad hozzá, az érték nullázódik.
Hány másodperc egy év?
Az évben eltelt másodpercek száma a következőképpen számítható ki:
$ expr 24 * 60 * 60 * 365
31536000
Leap évben még egy napot hozzáadunk:
$ expr 24 * 60 * 60 * 366
31622400

Hogyan jeleníti meg a Unix az 50. születésnapját?
2020. január 1-jén 12:00-kor az időpont 1577836800 lesz. A számítást kissé bonyolítja, hogy figyelembe kell venni a szökőéveket. A Unix idő kora óta 12 ilyen év volt, kezdve 1972-től 2016-ig. Tehát 38 normál év telt el.
Így néz ki az expr parancs az elmúlt 50 év másodperceinek számításához:
$ expr 24 * 60 * 60 * 365 * 38 + 24 * 60 * 60 * 366 * 12
1577836800
Vagy így, figyelembe véve a korábban végzett számításokat:
$ expr 31536000 * 38 + 31622400 * 12
1577836800
Ez a időmérték használat módja tette a Unix rendszereket immunissá a Y2K problémával szemben, ami miatt az emberek 1999 végén aggódtak, hogy a 2000-re való átállás kárt okozhat a számítógépes rendszerekben. A nehézségek sokkal kevesebb volt, mint amire számítottak. Valójában csak azok az alkalmazások szenvedtek, amelyek két számjegyű formátumban tárolták az éveket, találkoztak a dátumok nullázásával. Sok fejlesztő végzett extra munkát, hogy biztosítsa, hogy alkalmazásaik ne érintettek a Y2K problémában.
Amikor a Unix problémákkal fog szembesülni?
Hasonló nehézségek várnak a Unix rendszerekre legkorábban 2038-ban, amikor a fent említett formátumban tárolt dátumok túllépik a 32 bites teret. Még 18 év van hátra, de a kernel fejlesztői már dolgoznak a következő hibák elkerülésén.
A 2038-as probléma néha Y2K38-problémaként is említik. Ha ezt nem oldják meg 2038. január 19-én, a dátum után a rendszerek úgy gondolhatják, hogy 1901 van. Egyik módja a probléma megoldásának az, hogy 64 bites dátum- és időinformációt használunk. Néhányan azt mondják, hogy ez sokkal bonyolultabb lesz, mint amilyennek látszik.
Mindenesetre még korai pánikba esni. Ma igazán fontos dolog az Unix rendszerek 50. évfordulója, amelyeket a történelem egyik legfontosabb operációs rendszerének tartanak.
Forrás: 3dnews.ru
