Tempo Unix e scrittura ISO 8601
Unità fuori SI · grandezza: un istante come numero intero di secondi dal 1970
Il diciannove gennaio 2038, alle tre ore quattordici minuti e sette secondi di tempo universale, un contatore di secondi largo trentadue bit giungerà a 2 147 483 647 — il massimo numero che sia capace di contenere. L'impulso successivo alzerà il bit più alto, e la medesima parola binaria si leggerà ormai come negativa: gli orologi che tengono il tempo proprio con questo conteggio si ritroveranno non nel 2038, ma nel dicembre del 1901. Curiosità di un futuro lontano non è — un automa industriale o un contatore d'acqua serve più a lungo dei dodici anni che restano.
Il conteggio è congegnato nel modo più semplice: i secondi corrono di seguito dalla mezzanotte del primo gennaio 1970, e un giorno vi contiene sempre esattamente 86 400 secondi. È proprio questa semplicità la sorgente di entrambe le sue peculiarità. Da un lato, dal numero discende all'istante una data del calendario e viceversa, sicché ogni registro degli eventi, ogni base di dati e ogni sistema di file tengono il tempo con esso. Dall'altro, un secondo intercalare in un conteggio simile non si può esprimere affatto, il che significa che, a dispetto del nome, esso non numera secondi bensì giorni con le loro frazioni, ed è in verità una funzione lineare della scrittura UTC e non un contatore del tempo trascorso.
01 · Definizione
Il tempo Unix è il numero di secondi trascorsi dalla mezzanotte del primo gennaio 1970 in tempo universale coordinato, ammesso che ogni giorno tenga esattamente 86 400 secondi. La scrittura ISO 8601 enuncia la medesima cosa altrimenti: con data del calendario, ora del giorno e indicazione dello scostamento dal meridiano d'origine, con i campi che corrono rigorosamente dal grosso al fine.
La riserva degli 86 400 secondi non è un dettaglio, bensì la cosa più essenziale della definizione. Un secondo intercalare, annunciato dal servizio della rotazione terrestre, il conteggio non lo può accogliere, e perciò nell'istante dell'inserimento il sistema o ripete due volte un solo e medesimo valore, oppure porta indietro l'orologio. Ne discende una cosa importante: la differenza di due numeri unix non è il numero di secondi realmente trascorsi fra due eventi se fra essi è caduto un inserimento — lo scarto dalla scala atomica è già salito a ventisette secondi.
Il limite, per contro, non dipende dalla definizione bensì dalla larghezza della memorizzazione. Trentadue bit con segno danno come valore massimo 2 147 483 647, che cade il diciannove gennaio 2038; l'incremento successivo porta a uno il bit più alto e rende il numero negativo, scagliando l'orologio al tredici dicembre 1901. Sessantaquattro bit spingono il confine avanti di duecentonovantadue miliardi di anni, ma i nanosecondi interi in quegli stessi sessantaquattro bit si esauriscono già nel 2262.
La scrittura secondo la norma risolve un altro compito — lo scambio e non la memorizzazione — e perciò in essa pesano cose che il numero non ha affatto: lo scostamento orario, il separatore fra data e ora, e la regola che a pari lunghezza di stringa l'ordine lessicografico coincide con quello cronologico. È proprio quest'ultima proprietà che ha reso il formato il fondamento dell'ordinamento nei nomi di file e nei registri.
Conduca il tempo con il cursore e guardi il registro riempirsi: i bit si accendono da destra a sinistra, e finché il più alto, quello del segno, resta scuro, il numero è positivo e la data cresce. Non appena il contatore oltrepassa 2 147 483 647, il bit più alto avvampa di rosso, l'intero numero diviene negativo e l'orologio salta al 1901.
La retta verde è la scala atomica, dove ogni secondo è davvero un secondo. Quella rossa a gradini è il tempo Unix, che a ogni inserimento consegna due volte una sola e medesima marca, sicché la linea si arresta sul posto. Lo scarto ammonta già a ventisette secondi e cresce, e perciò il conteggio serve per una data del calendario, ma non per misurare durate in fisica.
02 · Conversione
Immetta una marca temporale o una data
Fra tutti i multipli del conteggio — secondi, millisecondi, micro- e nanosecondi — le conversioni sono esatte, poiché differiscono solo per un fattore. Approssimata è una sola riga: la conversione alla scala atomica esige di sapere quanti secondi intercalari si siano accumulati fino all'istante dato.
L'analisi di una stringa normalizzata la scheda la compie nella scrittura estesa con la lettera Z; la forma di base senza separatori è rimandata alle impostazioni fini.
Il problema dell'anno 2038 non sta nella norma, bensì nell'apparato e nel vecchio codice: marche di trentadue bit siedono nel firmware dei contatori, negli automi industriali, nei formati dei sistemi di file e nelle basi di dati dove il campo è già dichiarato di quattro byte. Cambiare il tipo nei sorgenti è abbastanza facile; passare in rassegna milioni di apparecchi installati nei dodici anni che restano è un compito dello stesso genere di quello che si poneva prima dell'anno 2000.
| Valore | Nota | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Ordini di grandezza
scala logaritmica: dal secondo al limite dei sessantaquattro bit04 · Strumenti di misura
Con che cosa si marca nel tempo un evento
Un chip a parte, con pila, che tiene il conteggio finché l'apparecchio è spento. Conserva di regola non una marca unix, bensì i campi del calendario separatamente, e la larghezza del suo campo dell'anno è la sua propria, sicché sulle vecchie schede il discorso sul 2038 comincia dalla domanda fino a quale anno conti il chip stesso.
Il protocollo NTP porta l'orologio di una macchina al tempo comune con una precisione di pochi millisecondi, ed è esso stesso ad avvertire di un inserimento con un contrassegno proprio un giorno prima. Un confine proprio ce l'ha anche, e giunge prima: il conteggio corre dal 1900 in trentadue bit senza segno e traboccherà nel febbraio 2036.
In un registro la marca si scrive o come numero, o come stringa secondo la norma, e la seconda è preferibile per una sola ragione: in stringhe di pari lunghezza l'ordine alfabetico coincide con quello cronologico, sicché le voci si ordinano senza analizzare la data. Proprio per questo il formato si è diffuso ben oltre i confini dell'informatica.
La prontezza di un apparecchio per l'anno 2038 si può provare in un modo solo — portargli l'orologio oltre il confine fatale e vedere che ne sia dei registri, dei certificati e del calcolo degli intervalli. Così si sono già trovati guasti nella fatturazione, nei sistemi di controllo degli accessi e nelle durate di validità delle chiavi, dove una data futura si forma per addizione e trabocca ben prima del confine stesso.
05 · Regole di scrittura
Dal grosso al fine, e sempre con lo scostamento
La norma esige ordine decrescente dei campi, quattro cifre dell'anno, il trattino come separatore della data e la lettera T davanti all'ora; lo scostamento orario si indica o con la lettera Z per il meridiano d'origine, o come più-meno ore e minuti. La marca unix si scrive come numero intero senza separazione delle migliaia, e il multiplo va sempre precisato, poiché un fattore mille separa i secondi dai millisecondi e per la grandezza del numero li si confonde con facilità.
La prima scrittura si legge in modo diverso in paesi diversi ed è perciò inammissibile nello scambio di dati. La seconda tralascia sia il separatore sia lo scostamento, sicché l'istante resta indeterminato di un giorno da una parte e dall'altra. La terza perde gli zeri iniziali, per cui le stringhe cessano di ordinarsi alfabeticamente — ed è proprio per questa proprietà che il formato è apprezzato. La quarta pone il segno di uguale fra il conteggio unix e la scala atomica, mentre fra loro stanno ventisette secondi di inserimenti accumulati.
06 · Unità vicine
Accanto stanno tutti i conteggi congegnati secondo il medesimo principio, ma da un altro inizio: il tempo NTP dal 1900, la data giuliana dal mezzogiorno dell'anno 4713 avanti la nostra era, la scala del sistema satellitare dal gennaio 1980. Differiscono solo per epoca e unità, e perciò si convertono sottraendo una costante.
secondi con segno
il suo limite cade già nel 2036
secondi intercalari contati con onestà
Fra le schede di Simetrium stanno accanto la data giuliana, da cui è tratta la costante di conversione, le scale UTC, TAI e UT1, che spiegano i secondi intercalari scomparsi, secondo come unità del conteggio, e il bit, la cui larghezza è ciò che fissa il limite.
07 · Sezione storica
Un'epoca scelta per mancanza di bit
Nel primo manuale di Unix il tempo si contava in sessantesimi di secondo dall'inizio del 1971, e in trentadue bit un conteggio simile conteneva appena un paio d'anni. Si esaurivano così in fretta che l'epoca avrebbe dovuto essere spostata a ogni edizione del sistema, e si rinunciò alle frazioni di secondo a favore di quelle intere.
Passando ai secondi interi, gli sviluppatori guadagnarono una riserva di centotrentasei anni e poterono scegliere l'inizio per comodità e non per necessità. Si prese il primo gennaio 1970 — la data tonda più vicina nel passato, fin dove le registrazioni delle macchine comunque non arrivavano — e da allora non la si è mutata neppure una volta, benché il sistema sia stato riscritto da capo più d'una volta.
L'Organizzazione internazionale per la normazione ricondusse a uno i formati nazionali divergenti e ne pose a fondamento una regola semplice: i campi vanno dal grosso al fine, tutti con gli zeri iniziali. L'effetto collaterale si rivelò più importante dell'intento — stringhe siffatte si ordinano come numeri, e il formato si diffuse nei nomi di file, nei registri e nei protocolli di scambio.
I sistemi da scrivania e da server sono passati ai sessantaquattro bit da tempo, e là il confine è spinto oltre ogni orizzonte ragionevole. Il pericolo è rimasto altrove: nel firmware di strumenti con vent'anni di vita utile, nei formati di file dove il campo è dichiarato di quattro byte, e nei calcoli di scadenze future, che traboccano già oggi non appena si aggiungano quindici anni alla data presente.
Un conteggio che, a dispetto del nome, non conta secondi
La definizione del tempo Unix suona come un conteggio di secondi, ma l'esigenza di 86 400 secondi tondi al giorno ne fa qualcosa d'altro: una funzione lineare della scrittura UTC e non una misura del tempo trascorso. Ogni volta che il servizio della rotazione terrestre annuncia un inserimento, il conteggio deve ripetere due volte un solo e medesimo valore oppure saltare indietro, e alla differenza di due marche si perde proprio quel secondo. In mezzo secolo di simili perdite se ne sono accumulate ventisette, e perciò nei compiti che richiedono una durata vera si prende la scala atomica e non questa.
La seconda peculiarità non sta affatto nella definizione, bensì nel modo della memorizzazione, e ciò ne fa l'unico limite del nostro catalogo che non è fissato né dalla natura né da una convenzione, ma dalla larghezza di una parola macchina. La data giuliana non finisce mai, perché è un numero; il tempo Unix finisce il diciannove gennaio 2038, perché è un campo di quattro byte. La differenza fra una grandezza e la sua rappresentazione occupa di solito poco i metrologi, e qui è proprio essa a decidere tutto.
Catalogo · unità di misura
Una scheda per ogni grandezza
Sette unità di base del SI, ventidue derivate con nome proprio e grandezze fuori sistema senza le quali non funzionerebbero né la tecnica né il calendario.