| |
Se avete pensato, anche solo per un
momento, che il racconto precedente avrebbe potuto essere vero, allora
siete fra quelle persone che hanno creduto che il Millenium Bug fosse
un virus.
Forse avete anche fatto provviste di cibo, medicinali e chissà
cos'altro, in attesa della fine del mondo.
Forse siete fra quelle persone che credono solo alla verità
televisiva. Se avete cliccato per queste ragioni,
andatevene.
... Se invece siete stati mossi dalla curiosità
e avete colto l'ironia celata tra le righe del racconto, siete i benvenuti.
Il mini racconto e le immagini sono opera di G.Deno.
Le immagini riproducono la serie DIGITAL BUG. Cosa
significa "Millennium Bug" ?
(da Comitato
Anno 2000 - Pres. Consiglio Ministri) "Bug",
nel gergo informatico di tutto il mondo, è parola inglese che
significa ‘errore di programmazione’, ed identifica quella
situazione per cui un computer produce risultati erronei, o inattesi,
o, non di rado, si blocca del tutto infilandosi in situazioni di stallo
senza uscita ("unended loop"); l’errore è costituzionalmente
inerente all’attività del programmatore, tanto è
vero che una fetta notevolissima del tempo di sviluppo dei programmi
è dedicata giusto al "debugging", cioè allo
scovare e togliere gli errori commessi, al "fare le pulci"
(diremmo noi) alle linee di codice di programma.
E’ ben noto che nessun programma nasce privo di errori, e non
di rado ci sono programmi che muoiono ancora pieni di difetti; è
altrettanto noto che spesso, con il "debugging", vengono
sì eliminati degli errori, ma ne vengono inavvertitamente introdotti
degli altri, per cui è quasi impossibile trovare un programmatore
sensato che si azzardi a garantire l’assoluta assenza di bug
nella propria creatura. Non poche aziende di software, poi, ritengono
che l’opera di ‘debugging’ , quantomeno per la fase
di scoperta e di segnalazione, competa anche all’utente finale
… ‘Bug’, però, nella lingua inglese,
sta a indicare soprattutto un generico insetto, e quel particolare
significato che la parola ha assunto nel gergo informatico è
connesso, come narrano le storie (o leggende) dell’informatica,
al fatto che, nel 1946, il progenitore degli attuali computer, l’ENIAC
(Electronic Numerical Integrator and Computor [proprio così!]
) cominciò a "dare i numeri", producendo risultati
inspiegabili, finchè non si scoprì che la causa degli
errori stava nei falsi contatti generati da una grossa cimice (altre
fonti parlano di una falena) che, attratta dal tepore dei valvoloni,
si era troppo avvicinata ed era finita carbonizzata sui circuiti.
Da allora si trovò comodo incolpare l’insetto, dare la
colpa al ‘bug’, anche per le disfunzioni dei programmi
che avevano tutt’altra origine…
Quanto al "Millennium", il riferimento è al 31 dicembre
1999, che dovrebbe essere la data finale del secondo millennio; in
realtà anche questa interpretazione è un "bug"
, in quanto, proprio come la prima decina inizia con 1 e termina con
il 10, e il primo centinaio termina con il 100, il secondo millennio
terminerà con il 31 dicembre del 2000.
Tuttavia ormai "Millennium Bug" è divenuto un termine
standardizzato, per cui converrà accettarlo così, senza
pretendere di combattere battaglie perse in partenza.
In conclusione "Millennium Bug" significa "l’errore
di programmazione connesso con il cambio di millennio" , e gli
anglofoni giocano spesso sul doppio significato errore/insetto per
presentare l’errore umano sotto forma di mostriciattoli vari.
In cosa consiste il "Millennium
Bug" ?
Si tratta in effetti di un "peccato originale" che, commesso
dai primi programmatori per vari e concomitanti motivi ma soprattutto
per fini di risparmio di preziosissima (allora) memoria, è
stato poi colpevolmente riprodotto e mantenuto dai loro successori,
per asserite esigenze di compatibilità ma anche per pigra ed
incosciente scarsoveggenza.
Esattamente come, nei moduli burocratici, laddove c’era da scrivere
una data, si trovava regolarmente prestampato il "19" del
secolo, per cui bastava indicare soltanto le due ultime cifre dell’anno,
così, i programmatori di un tempo, nel fissare il formato delle
date, decisero di memorizzare soltanto le due cifre variabili, lasciando
poi eventualmente al programma di presentazione o di stampa dei dati
il compito di prefiggere la costante "19".
La decisione consentì, allora, risparmi consistenti, ma risultò
ben presto evidente che il trucco poteva funzionare soltanto fino
al 1999; quando, a partire dalla mezzanotte del 31 dicembre 1999,
il contatore a due cifre degli anni da 99 fosse passato a 00, il programma,
se non opportunamente corretto, avrebbe continuato a premettere 19,
con il risultato di annunciare orgogliosamente la nascita del 1 gennaio
1900 !
Se tuttavia si istruisce il programma in modo che premetta 20, invece
di 19, in assenza di ulteriori indicazioni discriminanti si corre
il rischio di combinare guai anche peggiori, perché allora
tutte le date del 1999 diverrebbero 2099 e così via.
Le conseguenze, assurde e drammatiche, di questa incapacità
dei computer di gestire correttamente le date posteriori al 31 dicembre
1999 risultano a questo punto facilmente intuibili, quando si pensi
agli infiniti casi in cui c’è necessità di misurare
con precisione intervalli temporali ( periodi di servizio, scadenze
di mutui, prenotazioni di ogni genere ecc.), oppure di ordinare cronologicamente
degli eventi datati.
Se un intervallo di anni come, tanto per fare un esempio qualunque,
quello di 42 anni dal 1960 al 2002 viene invece calcolato come intervallo
dal 1960 al 1902, ne esce un numero negativo, un tempo che scorre
all’indietro, con tutte le conseguenze paradossali del caso.
Se un evento relativo al 2002, quindi al futuro, viene interpretato
come riferito al 1902, quindi al trapassato, ecco che può succedere
di tutto, e qualcosa è già in effetti successo e succederà
fino a che non saranno stati corretti tutti i computer del globo:
cibi in scatola o medicinali appena prodotti e quindi freschissimi
rifiutati perché considerati roba stravecchia e scadutissima,
da scartare; vecchietti centenari precettati per la frequenza dell’asilo
o, se ospedalizzati, sottoposti dai programmi computerizzati a terapie
specificamente infantili o addirittura neonatali; carte di credito
bloccate perché ritenute scadute da quasi cent’anni,
e così via con un’aneddotica paradossale ma non certo
tranquillizzante. Ci sono rimedi
al "Millennium Bug" ?
Certamente, e potremmo dire che ce ne sono "uno, nessuno e centomila".
Il rimedio principe è naturalmente quello di modificare la
memorizzazione delle date in modo da tenere conto anche del secolo
(attuabile con varie tecniche di implementazione), che però
richiede un intervento pesante non soltanto sugli archivi che memorizzano
i dati, con eventuali problemi connessi con l’eventuale incremento
dello spazio di memorizzazione, ma sull’intero programma che
utilizza e processa i dati, lavoro che può richiedere moltissimo
tempo e impegno di risorse qualificate, oltre naturalmente alla disponibilità
del testo sorgente originale del programma stesso (che può
consistere in varie decine o centinaia di migliaia di righe di codice
).
Naturalmente non bisogna poi dimenticare che la stessa attività
di correzione di errori ne introduce a sua volta, per cui il tempo
preventivato di test e di debugging può allungarsi a dismisura.
Di contro ci possono essere situazioni in cui, non essendo disponibile
per vari motivi il testo sorgente del programma, il mettere mano a
correzioni della logica programmatoria, anche se teoricamente ancora
possibile, sarebbe in realtà così oneroso e impegnativo
dal punto di vista del tempo richiesto e delle competenze tecniche
specialistiche necessarie, da non rendere economicamente proponibile
l’operazione, per cui risulta più conveniente abbandonare
il campo.
In mezzo ci sono molti trucchetti, che riscuotono il favore e il consenso,
e funzionano nelle situazioni in cui si devono elaborare intervalli
temporali inferiori al secolo, come quello del "windowing",
per cui si definisce un anno "pivot" e si istruisce il computer
ad interpretare gli anni uguali o superiori ad esso come appartenti
al secolo precedente, e quelli superiori come appartenenti al secolo
seguente. Ad esempio, fissato come pivot l’anno 30, le cifre
dal 30 in poi verranno interpretate come 1930 e così via, mentre
le cifre inferiori, come 20, verranno interpretate come 2020. E’
chiaro che un centenario nato nel 1905 si troverebbe, nell’anno
2006, con questo metodo, burocraticamente appena nato, dato che la
cifra degli anni della nascita verrebbe interpretata come 2005 !
Quanto appena detto presuppone comunque la possibilità di accesso
e di modifica del programma di gestione delle date; esistono poi situazioni
in cui questa possibilità si presenta del tutto remota, per
la difficoltà stessa di accedere non solo al software, ma allo
stesso hardware. Può essere il caso dei cosiddetti "embedded
chips", microprocessori programmati una volta per tutte con istruzioni
assolutamente specifiche e strettamente connesse con la macchina da
controllare; a differenza dei microprocessori dei comuni computer,
costruiti apposta per svolgere funzioni generiche ed ampiamente programmabili
e personalizzabili, gli "embedded" (microprocessori incorporati)
sono spesso costruiti con logiche proprietarie e non divulgate, per
cui ogni tentativo di operare su di essi senza il supporto del costruttore
può essere una decisione suicida. In questi casi non vi è
soluzione, se non quella di sostituire l’apparecchiatura (scheda)
di controllo, se disponibile il ricambio aggiornato, o diversamente
addirittura l'intero macchinario. |
|
|
|