Domande e risposte

Home Libri ? Slides ? Schede ? Indagini ? Test ?

 

FAQ

(Frequently Asked Questions)

a cura di Romano Oneda

 

I N D I C E
Cosa significa "Millennium Bug" ?
Cosa significa "Y2K" ?
Altre definizioni per "Millennium Bug" ?
In cosa consiste il "Millennium Bug" ?
Ci sono rimedi al "Millennium Bug" ?
Cos'è il calendario gregoriano ?

 

 

Cosa significa "Millennium Bug" ?

 

    "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.

<indice>

Cosa significa "Y2K" ?

 

 

La sigla, che non va pronunciata "ipsilonduecappa", pena l’occhiata di compatimento da parte degli informati/ci, va invece pronunciata "uaitukèi", con "uai" che è lo spelling della lettera Y, "tu" che è la pronuncia di two(2) e "kèi" che è lo spelling della lettera K.

Il tutto è poi l’acronimo di Y(ear) 2K(2000), cioè molto banalmente l’anno duemila, con la K delle migliaia che troviamo anche nei nostrani chilogrammi (Kg) etc.

Questa sigla è la preferita dagli informatici, sia per la sua brevità come per la sua cripticità (apparente), che può fare la differenza tra "chi se ne intende" e chi è profano.

Indica chiaramente l’anno duemila nei suoi riflessi di problematicità con il cambio della data.

Cosa degna di nota è che lo scrivere "Millenium" , anziché "Millennium", costituisce un ulteriore Bug, questa volta però ortografico-linguistico, non informatico ( "millennium" in latino deriva da "mille" e "annus", non chiaramente da "anus"...).

<indice>

 

Altre definizioni per "Millennium Bug" ?

 

Ne vengono utilizzate varie altre, anche piuttosto ad effetto, come "Time Bomb" , bomba a orologeria, "Millennium Bomb" , bomba programmata per esplodere al cambio di millennio,"Rischio 2000", dal significato piuttosto evidente, "Virus del 2000", per la sua capacità di contaminare o bloccare programmi sani attraverso la trasmissione di dati scorretti, anche se non si tratta affatto di un virus. Naturalmente le definizioni indicate non sono le sole, data la fertile produttività della fantasia giornalistica.

 

 

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.

<indice>

 

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.

<indice>

 

Cos’è il calendario gregoriano ?

 

 

    E’ il calendario che usiamo tutti i giorni, quello del "Trenta giorni ha novembre..." , quello del 2000 bisestile e del 2100 no, e naturalmente quello direttamente coinvolto con il Millennium Bug ; prende il nome di gregoriano da Papa Gregorio XIII, che ne stabilì le "regole tecniche" nel 1582.

    Il problema di molti calendari, tra i quali il gregoriano non fa eccezione, è sostanzialmente il fatto che, fondando la propria struttura su eventi ciclici naturali che hanno una evidenza e rilevanza immediata nella vita umana (il susseguirsi del giorno e della notte, le fasi lunari, le stagioni dell’anno) incontrano poi varie difficoltà nel raccordare questi cicli, la cui durata non è mutuamente rapportabile attraverso numeri interi.

    Così l’anno tropico (l’intervallo temporale tra due successivi equinozi vernali, o di primavera), costituisce il fondamento dell’anno civile (quello del nostro calendario), ma la sua durata non è un multiplo della durata del giorno; tra l’altro, per motivi che in questa sede non hanno rilevanza, la sua durata non è nemmeno costante, anche se, per i nostri fini, è assolutamente sufficiente un’approssimazione di 365,2422 giorni (anno tropico medio) e cioè quasi sei ore (0,2422 gg. = 5 ore, 48 minuti e 46 secondi) in più rispetto ai 365 giorni dell’anno civile.

    Per rimediare a questo divario, scartata subito l’idea di spostare indietro l’orologio di quasi sei ore ogni capodanno, per mettersi alla pari con l’anno tropico, il che sarebbe una soluzione peggiore del male, si comprende però che, qualunque correzione si voglia introdurre nel calendario, questa dovrà coinvolgere solamente giorni interi, e andrà quindi effettuata quando la somma dei singoli sfasamenti temporali avrà raggiunto le ventiquattro ore.

    E così tutta la storia del nostro calendario, da Giulio Cesare a Papa Gregorio, è la storia dei tentativi di raccordare con sempre maggiore precisione l’anno tropico con l’anno civile, giostrandosi con gli anni bisestili; storia non ancora finita, forse, perché c’è già qualcuno che, con encomiabile previdenza, propone una approssimazione ancora più stretta di quella raggiunta da Papa Gregorio, da conseguirsi con l’introduzione di una regola aggiuntiva per la quale non siano bisestili gli anni multipli di 4000!

    Ma vediamo brevemente le soluzioni adottate, in una sequenza di approssimazioni sempre meno grossolane:

La soluzione più semplice, e, manco a dirlo, la meno precisa, è quella di avvicinarsi alla durata dell’anno tropico allungando la durata media dell’anno civile a 365,25 giorni, cioè aggiungendo in modo virtuale sei ore (0,25 gg. sono un quarto di giorno, e cioè sei ore) ogni anno. Sommando gli sfasamenti virtuali annui si arriva a 24 ore in più nel quarto anno, e sarà quello il momento di aggiungere un giorno effettivo all’anno (anno bisestile, cioè di 366 giorni).

La semplicissima regola di questo calendario è che se un anno è divisibile per quattro, allora è bisestile.

Di quanto si discosta questo tipo di calendario dall’anno tropico medio? Possiamo fare quattro conti senza calcolatrice e senza ricorrere a carta e penna: è più lungo di 0,2500-0,2422 = 0,0078, e cioè 78 decimillesimi di anno, e cioè, arrotondiamo pure, 8 millesimi di anno, ossia 8 giorni ogni mille anni, ossia un giorno in eccedenza ogni 125 anni.

Su queste basi era stato impostato il calendario giuliano, introdotto da Giulio Cesare nel 45 a.C.

La seconda soluzione è quella accettare sì la prima regola, ma giusto con il correttivo di togliere un giorno. Tuttavia non proprio ogni 125 anni, che sarebbe scomodo, ma, arrotondando a cento, viene tolto il giorno in eccedenza all’anno finale di ogni secolo, al centesimo anno. In pratica poi non si tratta di togliere realmente un giorno ad un qualche mese dell’anno centesimo, ma, cosa che produce lo stesso effetto, di non aggiungerlo al mese di febbraio, e cioè di non considerare bisestile un anno che invece lo sarebbe secondo la regola precedente. Di conseguenza la regola di questo calendario è : se un anno è divisibile per quattro, è bisestile; se però è anche divisibile per cento, allora NON è bisestile.

Di quanto si discosta questa soluzione dall’anno tropico medio ?

Qui dobbiamo considerare che la nuova regola stabilisce dei cicli di cento anni, anziché di quattro, in ognuno dei quali (dall’anno 1 all’anno 100) abbiamo 24 anni bisestili (100/4=25, ma dobbiamo togliere l’anno centesimo che non è più bisestile). Ricorrendo a carta e penna, questa volta, sommiamo i giorni dei 24 anni bisestili (24*366=8784) ai giorni dei 76 anni normali (76*365=22.740), ottenendo 36.524, che, diviso per i cento anni considerati, dà 365,24 ossia la durata media di ogni anno all’interno del secolo. Il distacco dall’anno tropico è nettamente diminuito, 0,2400-0,2422 = -0,0022, 22 decimillesimi di anno, vale a dire 2 giorni, sempre arrotondando, ogni mille anni, ossia un giorno ogni 500 anni.

La terza soluzione perfeziona (e complica) ulteriormente la regola di assegnazione della bisestilità. Innanzitutto non sarà certamente sfuggito, al lettore attento, che l’ultima differenza risultava negativa, con il segno meno, ad indicare che questa volta la correzione al calendario dovrebbe aggiungere, e non togliere dei giorni. A questo punto lo stesso attento lettore può già prevedere la regola futura: i 500 anni si arrotondano a 400, e, dovendo aggiungere un giorno, si stabilisce una deroga alla precedente deroga, cosicché l’anno quattrocentesimo ritorna ad essere bisestile!

Ecco allora la nuova regola : se un anno è divisibile per quattro, è bisestile; se però è anche divisibile per cento, allora NON è bisestile; se però è anche divisibile per quattrocento, allora E’ bisestile.

Di quanto, nuovamente, si discosta questa soluzione dall’anno tropico medio ?

Stavolta viene introdotto un ciclo di 400 anni, in cui i primi tre secoli sono immutati rispetto alla regola precedente, e quindi ogni secolo sarà di 36.524 giorni, mentre il quarto secolo avrà un giorno in più, e quindi avremo (36.524*4+1)/400=365,2425.

La differenza sarà 0,2425-0,2422 = 0,0003, tre giorni in più ogni ben diecimila anni!

Quest’ultima soluzione è appunto quella adottata dal calendario gregoriano, come definito e sancito nel 1582 da Papa Gregorio XIII, con la Bolla "Inter gravissimas" del 24 febbraio. Il motivo principale che spinse il Papa a provvedere fu che l’allontanamento della data effettiva dell’equinozio vernale (di primavera) dalla data canonica del 21 di marzo aveva raggiunto distanze tali (10 giorni) da minacciare di vanificare tutto il complesso sistema di calcolo della Pasqua e del calendario liturgico connesso. Difatti Papa Gregorio stabilì, con la stessa Bolla, che, nel mese di ottobre dello stesso anno 1582, al giorno 4 seguisse immediatamente il giorno 15, consentendo così il recupero dello sfasamento che si era venuto a creare nei secoli precedenti, e ricollocando al 21 marzo l’equinozio vernale del 1583. Da allora non è stata più introdotta alcuna correzione alle regole del calendario definite da Papa Gregorio.

Per i più curiosi (o increduli) faccio seguire il paragrafo 9 della Bolla papale, laddove sono chiarissimamente esplicitate le regole di bisestilità e le novità introdotte.

 

Dalla Bolla "Inter gravissimas" (1582) di Papa Gregorio XIII :

"9. Deinde, ne in posterum a XII Kalendas Aprilis æquinoctium recedat, statuimus bissextum quarto quoque anno (uti mos est) continuari debere, præterquam in centesimis annis; qui, quamvis bissextiles antea semper fuerint, qualem etiam esse volumus annum MDC, post eum tamen qui deinceps consequentur centesimi non omnes bissextiles sint, sed in quadringentis quibusque annis primi quique tres centesimi sine bissexto transigantur, quartus vero quisque centesimus bissextilis sit, ita ut annus MDCC, MDCCC, MDCCCC bissextiles non sint. Anno vero MM, more consueto dies bissextus intercaletur, Februario dies XXIX continente, idemque ordo intermittendi intercalandique bissextum diem in quadringentis quibusque annis perpetuo conservetur. "

Traduco, per i più pigri:

"E infine, ad evitare per il futuro che l’equinozio si allontani dal 21 di marzo, stabiliamo che (come già si fa) si continui ad avere un anno bisestile in ogni gruppo di quattro anni, a meno che non si tratti dell’anno terminale di ogni secolo (il centesimo): questi anni finali di secolo, anche se prima d’ora sono sempre stati bisestili , e così vogliamo che rimanga ancora l’anno 1600, successivamente però non lo saranno tutti, ma per ogni gruppo di quattrocento anni i primi tre anni centesimi non saranno bisestili, mentre lo sarà il quarto, cosicché gli anni 1700, 1800 e 1900 non lo saranno e invece l’anno 2000 sarà un anno bisestile, col mese di febbraio di 29 giorni, e questo stesso modello dovrà ripetersi identico ogni quattrocento anni, per sempre."

Parola di Papa !

Che, per fortuna nostra, come fanno argutamente notare Peter de Jager e Phil Dodd nelle loro simpaticissime "Laws of the Year 2000" (http://www.year2000.com/y2klaws.html), non era un programmatore ( "45. Pope Gregory wasn’t a programmer") !

Anche se, per sfortuna nostra, appunto alcuni programmatori si sono scordati di quanto il Papa aveva così esplicitamente dichiarato a proposito del febbraio del 2000!

Concludo ricordando una versione più semplice e pratica della regola di bisestilità del calendario gregoriano: "Un anno è bisestile se sono divisibili per quattro le ultime due cifre o, nel caso siano due zeri, le prime due".

<indice>

 

<seguiranno altre FAQ>

Home