Il 2020 è un anno significativo per Unix: all'inizio dell'anno, il sistema operativo originale compie 50 anni. Il tempo Unix, conosciuto anche come "data dell'epoca", è il numero di secondi trascorsi dal 1 gennaio 1970. Ma cosa preoccupa gli sviluppatori del kernel in occasione del cinquantesimo anniversario di Unix?

Sebbene alcune delle prime implementazioni di Unix precedano l'inizio ufficiale della sua "epoca", il 1 gennaio 1970 rimane il punto zero nel tempo POSIX. Pertanto, a partire dal 1 gennaio 2020, la piattaforma ha ufficialmente compiuto esattamente 50 anni.
Tempo Unix contro il tempo umano
Dal punto di vista del tempo umano, 50 anni sono un lungo periodo. Dal punto di vista del tempo Unix, non c'è nulla di speciale in 50 anni, e 43 anni sarebbero altrettanto significativi. I sistemi Unix (incluso Linux) memorizzano valori di data e ora come il numero di secondi trascorsi dal 1970-01-01 00:00:00 UTC, registrati in 32 bit. Per determinare quanti secondi sono trascorsi da allora e quindi il valore attuale del tempo Unix, si può eseguire il comando:
$ date +%s
1576883876
L'argomento %s dopo il comando date definisce la visualizzazione della data e ora correnti come il numero di secondi dall'inizio del 1970-01-01.

Quale data massima possono memorizzare i sistemi Unix?
Per capire quanto tempo può contenere un sistema Unix, è necessario valutare la capacità del campo a 32 bit. Questo può essere calcolato in questo modo:
$ echo ‘2^32’ | bc
4294967296
Tuttavia, poiché Unix prevede la memorizzazione anche di numeri negativi, un bit è riservato per il segno, riducendo così il valore del tempo a:
$ echo ‘2^31’ | bc
2147483648
E poiché la numerazione Unix inizia da 0, ciò significa che abbiamo 2.147.483.648 valori, ma il più grande è 2.147.483.647: il valore della data e dell'ora Unix non può superare questo numero. Così come un contachilometri su un'auto non può mostrare più di 999.999 chilometri: aggiungi 1 e il valore si azzera.
Quanto dura un anno in secondi?
Il numero di secondi in un anno può essere calcolato nel seguente modo:
$ expr 24 * 60 * 60 * 365
31536000
In un anno bisestile viene aggiunto un giorno in più:
$ expr 24 * 60 * 60 * 366
31622400

Come visualizza Unix il suo 50° compleanno?
Il 1 gennaio 2020 alle 12:00 di mezzanotte, il tempo sarà 1577836800. Il calcolo diventa un po' più complicato poiché è necessario tenere conto degli anni bisestili. Dall'inizio dell'epoca Unix ci sono stati 12 di questi anni, a partire dal 1972 e terminando nel 2016. Quindi ci sono stati 38 anni normali.
Ecco come appare il comando expr per il conteggio dei secondi trascorsi negli ultimi 50 anni:
$ expr 24 * 60 * 60 * 365 * 38 + 24 * 60 * 60 * 366 * 12
1577836800
Oppure così, tenendo conto dei calcoli precedenti:
$ expr 31536000 * 38 + 31622400 * 12
1577836800
Questo modo di registrare il tempo ha reso i sistemi Unix insensibili al problema del Y2K, che preoccupava le persone alla fine del 1999, temendo che il passaggio all'anno 2000 potesse danneggiare i sistemi informatici. Le difficoltà si sono rivelate molto inferiori a quanto previsto. Infatti, solo le applicazioni che registravano gli anni in formato a due cifre hanno affrontato il problema dell'azzeramento delle date. Molti sviluppatori hanno fatto lavoro aggiuntivo per garantire che le loro applicazioni non fossero influenzate dal problema del Y2K.
Quando il tempo Unix affronterà problemi?
Difficoltà simili attendono i sistemi Unix non prima del 2038, quando le date salvate nel formato descritto sopra supereranno lo spazio a 32 bit. Mancano ancora 18 anni, ma i programmatori del kernel stanno già lavorando per evitare futuri malfunzionamenti.
Il problema del 2038 è talvolta chiamato problema Y2K38. Se non sarà risolto entro martedì 19 gennaio 2038, dopo questa data i sistemi potrebbero pensare che sia arrivato il 1901. Un modo per risolvere il problema è passare a una rappresentazione a 64 bit delle informazioni su data e ora. Alcuni ritengono che anche questo sarà molto più complesso di quanto possa sembrare.
In ogni caso, è troppo presto per entrare in panico. Ciò che è veramente importante oggi è il 50° anniversario dei sistemi Unix, considerati uno dei sistemi operativi più importanti della storia.
Fonte: 3dnews.ru
