web analytics

Kernel Linux: risolto il bug dell’anno 2038

bug dell anno 2038 linux 5.10

Il kernel Linux 5.6 è stato rilasciato pochi giorni fa da Linus Torvalds e, nel frattempo, la FSFLA ha rilasciato Linux-libre 5.6, il fork completamente free approvato dalla Free Software Foundation, distribuito con a bordo solo codice libero ed open source. Vi ho raccontato delle numerose novità introdotte da questa nuova versione del kernel, su tutte  l’integrazione della VPN WireGuard v1.0.0 e di una prima implementazione del supporto per l’USB4. Mi è sfuggita però una novità molto interessante, la risoluzione dell’annoso “bug dell’anno 2038“. Questa è la prima versione del kernel che permetterà ai sistemi a 32-bit di funzionare correttamente anche dopo il 19 gennaio del 2038.

Il bug dell’anno 2038

Per chi non lo sapesse il bug dell’anno 2038 è un problema che riguarda programmi che usano la rappresentazione POSIX per calcolare il tempo. La data del sistema è calcolata come il numero di secondi trascorsi dallo Unix Epoch Time 1º gennaio 1970. Questo tipo di sistema è lo standard per i sistemi Unix, e colpisce anche software per altri sistemi operativi che siano stati sviluppati in C. Sulla maggior parte dei sistemi a 32 bit, il valore del dato time.h usato per questo calcolo è un numero intero a 32 bit di tipo signed.

Tra 18 anni non saranno molti i sistemi a 32 bit ancora attivi. Potrebbero però esserci dispositivi che svolgono compiti dedicati – magari device embedded – che per adempiere alle loro funzioni useranno una futura versione di Linux.Di qui l’importanza di gestire il bug

bug dell anno 2038 linux 5.6

L’istante più lontano rappresentabile scoccherà alle ore 03:14:07 del 19 gennaio 2038 (UTC) momento in cui i dispositivi raggiungeranno il valore 231 (231-1 = 2,147,483,647 secondi dopo il 1° gennaio 1970). Dopo questo momento, il contatore supererebbe il valore massimo, e verrebbe considerato come un numero negativo. I computer leggeranno la data non come 2038, ma come 1901 (precisamente, le 20:45:52 UTC di venerdì 13 dicembre 1901), causando errori di calcolo.

Il problema è stato risolto nel kernel Linux 5.6 grazie alle modifiche apportate da Bergmann con una serie di patch dedicate a questo scopo. Le patch prevedono la rimozione dei tipi time_t/timeval/timespec e di alcune funzioni. Il time_t sarà a 64 bit ed è richiesto l’uso di Musl libc 1.2 e GNU C Library 2.32 (o superiori).

sharing-caring-1Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.

Altre storie
clapper fullscreen
Clapper: vi presento uno dei migliori Video Player del panorama Linux