On 03. 03:14:08 greenwichi középidő (GMT, más néven koordinált világidő) 2038. január 19-én (ez egy kedd), a világnak vége. Nos, nem a bibliai Jelenések könyve értelmében. Hanem az fog történni, hogy a 32 bites Unix-alapú operációs rendszerekben, például a Linuxban és a macOS régebbi verzióiban az idő értéke kifogy a számokból, és negatív számokkal kezdi számolni az időt. Ez nem jó. Számíthatunk arra, hogy az ilyen operációs rendszereket futtató 32 bites számítógépeken rohamokat kapunk. Szerencsére a Linux fejlesztői már készen álltak a javítással.
A probléma ott kezdődik, hogy a Unix hogyan számolja az időt. A Unix és rokonai — a Linux, a macOS és más POSIX-kompatibilis operációs rendszerek — az idő kezdetét az 1970. január 1-jei 00:00:00 GMT időponttól datálják. A Unix család az időt a korszak óta eltelt másodpercek számával méri.
Eddig minden rendben. De mivel a Unix és családja 32 bites operációs rendszerként indult, az idő értékét egyetlen előjeles 32 bites egész számként tartják nyilván. Ezek sok másodpercek, de akárcsak a múlt századi Y2K bug, ez sem elég.
A Linux fejlesztők már évtizedek óta látták, hogy ez bekövetkezik. Ezért a Linux kernel fejlesztője, Arnd Bergmann és mások már dolgoztak a javításon. Ezek a javítások már a hamarosan megjelenő Linux 5.6-os kernelben vannak. Bergmann kifejtette: “A Linux-5.6, illetve az 5.4-es verzióhoz készült javítások backportjaimnak kell lennie az első olyan kiadásnak, amely alapként szolgálhat egy olyan 32 bites rendszerhez, amelyet a 2038-as év utánra terveztek.”
Van néhány kikötés:
- Minden felhasználói területet 64 bites time_t-vel kell fordítani, amit a következő musl-1 támogatni fog.2 és glibc-2.32 kiadások, valamint a Linux-5.6 vagy magasabb verziójú telepített kernel fejlécek.
- A rendszerhívó interfészeket közvetlenül használó alkalmazásokat úgy kell portolni, hogy a meglévő rendszerhívások helyett a Linux-5.1-ben hozzáadott time64 syscallokat használják.
- A kernel uapi fejlécfájlok privát másolatát vagy azok tartalmát használó alkalmazásoknak frissíteniük kell a Linux-5.6-os verzióra.
- Egy pár fennmaradó interfészt nem lehet úgy módosítani, hogy 64 bites time_t-t adjon át kompatibilis módon, ezért ezeket úgy kell beállítani, hogy CLOCK_MONOTONIC időket használjanak.
- A 64 bites gépeken előforduló összes Epoch probléma a 32 bites gépekre is vonatkozik. Különösen érinti ez azokat a fájlrendszereket, amelyek lemezen lévő időbélyegzőket használnak aláírt 32 bites másodpercekkel: ext4 az ext3 stílusú kis inode-okkal, ext2, xfs (hamarosan javításra kerül) és ufs.
Röviden, még az alapvető probléma kijavítása után is sok takarítási munka vár ránk.
A MacOS már több mint egy évtizede távolodik a 32 bites szoftverektől. De, tt csak a macOS Catalina 2019 végi kiadásában volt, hogy az Apple megadja a 32 bites alkalmazásoknak a bootot.
Most azon tűnődhetsz – mivel manapság már mindannyian 64 bites számítógépeket futtatunk -, hogy miért van ez egyáltalán téma. Nos, ez a következő. Először is, sok beágyazott rendszer és tárgyak internete (IoT) eszköz még mindig 32 bites operációs rendszert futtat. Sőt, 2038-ra valószínűleg még mindig érkeznek majd új 32 bites eszközök a piacra.
A 2020-ban újra felbukkanó Y2K hibának köszönhetően azt is tudjuk, hogy a rendszerek, amelyekről feltételezhetjük, hogy 18 év múlva a szeméttelepekre kerülnek, még mindig élni fognak, és jól vannak — és csúnyán rosszul viselkednek majd az eljövendő korszakban.
De nézzük meg így: Miután ezt kijavítottuk, nem kell aggódnunk amiatt, hogy a 64 bites Linux kifogy a másodpercekből december 4., 29,227,702,659 vasárnap 15:30:08 GMT-ig. Én személy szerint nem fogok emiatt aggódni.
Kapcsolódó történetek:
- Az Y2K bug visszatért, ismét fejfájást okozva a fejlesztőknek
- Dél-Korea kormánya a Windowsról a Linux desktopra való áttérést vizsgálja
- Kellemetlen Linux, macOS sudo bugot találtak és javítottak