Pare che su alcuni telefoni arrivino SMS dal futuro, precisamente dal 2016, una stranezza che può essere accolta con un’alzata di spalle e una risata. Anche una banca australiana, però, riceve transazioni con carta di credito datate 2016 e ci sono problemi simili in Germania. Qui la cosa si fa un po’ più seria, perché, se la carta di credito scade prima del 2016, i sistemi informatici della banca si rifiutano di sganciare il conquibus, e il malcapitato utente non può pagare la calza della befana per i bimbi, o il pieno dell’auto, o la cena con l’amorosa al ristorante chic.
Perché proprio il 2016? Hacker quaedisti all’opera per destabilizzare il capitalismo occidentale? Virus informatici a scoppio anticipato? Interruzione imprevista del continuum spazio-temporale? Complotto pippoplutomassonico? Macché: è un baco, il famigerato Y2.01K bug, il baco del 2010, uno strascico inatteso del famoso millenium bug.
Per capire cosa sta succedendo, bisogna ricordare perché gli informatici di tutto il mondo erano così preoccupati del passaggio fatidico dal 1999 al 2000. All’epoca molti programmi memorizzavano l’anno delle date a due cifre, e lo facevano soprattutto per risparmiare memoria. Per memorizzare un intero da 0 a 255, infatti, è sufficiente un byte di memoria, mentre per numeri maggiori — come per l’appunto l’anno a quattro cifre — ne servono almeno due. Decidere di risparmiare un byte per volta può sembrare una scelta micragnosa, ma se si pensa, che so, al numero di transazioni giornaliere di una banca o di un operatore di telefonia, il risparmio può essere di diversi milioni di byte al giorno, che in un’epoca in cui le memorie dei sistemi informatici costavano ancora parecchio, ed erano molto meno capaci rispetto a oggi, significava risparmiare un bel po’ di quattrini.
Questo sistema poteva funzionare egregiamente fino al 1999, perché, non esistendo transazioni elettroniche memorizzate prima del 1900, una data come 01/01/00 poteva essere interpretata a colpo sicuro come primo gennaio 1900. Dal 2000 in poi, però, l’interpretazione sarebbe diventata ambigua. Gran parte dei programmi furono così aggiornati per memorizzare l’anno a due byte, spostando il problema al 65535, abbastanza avanti per evitare guai legali e richieste di danni ai produttori di software attivi nel 1999.
Non tutti i sistemi informatici, però, potevano permettersi un byte in più per memorizzare le date. I telefoni cellulari, per esempio, avevano capacità di memoria limitate a poche migliaia di byte, e impiegarne uno in più per le date non era fattibile, senza contare che milioni di telefonini in circolazione avrebbero continuato a trasmettere date con l’anno a due cifre, che in qualche modo andavano pur gestite. In casi come questi la scelta più diffusa fu quella di inserire nei programmi un limite convenzionale al di sotto del quale l’anno a due cifre sarebbe stato assegnato al ventunesimo secolo. Per esempio, impostando questo limite a 30, una data come 01/01/29 sarebbe stata interpretata come primo gennaio 2029, mentre 01/01/30 sarebbe stato il primo gennaio 1930. Un modo come un altro per mettere una toppa in attesa di tempi migliori.
Ok, dice il lettore volenteroso, ma anche ammettendo che i sistemi di qualche operatore telefonico e di banche australiane o tedesche siano fra quelli rattoppati, il problema avrebbe dovuto manifestarsi nel 2030, mentre adesso siamo nel 2010. Qualcosa non torna.
Già, manca un tassello: il sistema esadecimale, ovvero un sistema di calcolo in base 16 molto utilizzato nella scrittura di software perché è più semplice tradurlo in numeri binari, che sono gli unici leggibili dai processori dei computer. Da 0 a 9 i simboli hanno lo stesso significato in entrambi i sistemi, ma da 10 in poi la conversione da esadecimale a decimale procede in questo modo A=10, B=11, C=12, D=13, E=14, F=15, 10=16: bingo! Quando si calcola in base sedici, il simbolo 10 non rappresenta il dieci, ma per l’appunto il sedici.
Per scatenare il putiferio è sufficiente che in qualche punto di antichi codici il programmatore di turno abbia preso fischi per fiaschi, decidendo che l’anno a due cifre proveniente da un terminale POS o da un telefono cellulare sia un numero esadecimale, mentre in realtà il dispositivo lo trasmette come un più banale e apparentemente innocuo numero decimale. Ed ecco che il dieci diventa sedici, il 2010 diventa 2016, e col cavolo che riesci a comprare i pantaloni in saldo o l’anello di fidanzamento.
Riusciranno i nostri eroi a risolvere il problema? Certo che sì, anche se una soluzione stabile significherà una revisione a tappeto di tutte le applicazioni esposte a ricevere date con l’anno a due cifre. Un lavoretto che in sistemi complessi potrebbe richiedere qualche mese. Per questo è un po’ preoccupante la notizia che le banche colpite dal problema abbiano annunciato la soluzione a tempo di record. C’è da temere che la soluzione lampo sia in realtà una toppa sulla toppa: accettare transazioni postdatate e, nel caso delle carte di credito, fregarsene della data di scadenza…
Tags: bachi, informatica, millenium bug, Y2.01K bug
[…] di tedeschi, in Germania e all’estero, colpiti dal “Baco del 2010”. A quanto pare il problema non riguarda solo i tedeschi e – soprattutto – non è del tutto […]