Amiga e l'anno 2000 ------------------- Da qualche tempo il cosiddetto "bug dell'anno 2000" e' diventato un argomento di grande interesse anche al di fuori del mondo dell'informatica. Data la semplicita' con cui puo' essere esposto il problema, ne hanno parlato ampiamente persino i telegiornali e la stampa non specializzata. Evidentemente l'idea che tutti i computer del mondo possano "andare in tilt" proprio all'inizio del nuovo millennio fa molta presa sulla fantasia dei giornalisti e dei lettori. Si tratta in sostanza di una versione rivisitata della fine del mondo che era prevista, in chiave biblica, anche per l'anno mille. Il problema viene spesso enunciato in questo modo: alla mezzanotte del 1 Gennaio 2000 tutti i computer del mondo andranno in tilt perche' i programmi usano soltanto due cifre per memorizzare l'anno e quindi l'orologio tornera' indietro all'anno 1900. Il problema viene spesso chiamato "Il Bug del Millennio", ma un'analisi leggermente piu' attenta rivela che le ultime due cifre dell'anno si riazzerano regolarmente all'inizio di ogni secolo, quindi sarebbe piu' corretto, anche se di gran lunga meno affascinante, parlare di "Bug del Secolo". Comunque sia, le cose non sono esattamente semplici come vengono descritte ai non addetti ai lavori. Innanzitutto non e' vero che i computer rappresentano le date utilizzando due cifre per l'anno. La maggior parte dei sistemi operativi, compreso AmigaOS, misura internamente il tempo usando un unico numero (a 32 o 64 bit) che contiene il numero dei secondi trascorsi a partire da una data iniziale. In UNIX per esempio, il tempo 0 e' fissato alla mezzanotte dell'1 Gennaio 1970, ora di Greenwich. Questa data di riferimento viene chiamata in gergo "The Epoch" perche' segna l'inizio dell'era di UNIX. L'aritmetica dei numeri binari garantisce che prima o poi il numero dei secondi trabocchera', riazzerandosi (overflow e wrap-around). Ma questo non accadra' in una data affascinante come la mezzanotte di Capodanno dell'anno 2000. Il numero dei secondi viene utilizzato internamente in tutti i calcoli svolti dal sistema operativo, ma esistono delle funzioni apposite per convertire questo numero in una data in forma leggibile per esseri umani, cioe' qualcosa come "giorno-mese-anno ore:minuti:secondi"). I programmi applicativi se ne avvalgono tutte le volte che necessitano di stampare una data. Queste funzioni di sistema potrebbero essere fonte di problemi "estetici", ma non possono provocare errori di calcolo che possano influenzare il comportamento dei programmi. Il problema dell'anno 2000, noto anche con il nome in codice "Bug Y2K", riguarda in particolar modo alcuni database che utilizzano formati proprietari per rappresentare le date, oppure i programmi che gestiscono l'e-mail ed i newsgroups di Internet. Il formato standard con cui viene trasferita la posta elettronica e' particolarmente soggetto al problema perche' le intestazioni dei messaggi contengono date scritte per esteso, come nel seguente esempio: Date: Fri, 4 Dec 98 01:17:22 -0100 Un client e-mail potrebbe presentare malfunzionamenti in presenza di un anno "00", ed e' molto probabile che in conseguenza ad un bug alcuni messaggi verranno ordinati in modo errato all'interno delle cartelle. Anche la tecnologia FidoNet e' piuttosto soggetta al problema dell'anno 2000. Alcuni mesi fa su Aminet e' stata rilasciata una versione corretta di Spot, il celebre programma per point FidoNet. E' probabile che i software per le BBS come anche i mailer ed i mail processor manifesteranno qualche problema a causa di una cattiva gestione delle date. Per questi casi la raccomandazione Single UNIX Specification richiede che i numeri da 0 a 68 siano interpretati come 2000-2068 mentre quelli da 69 a 99 continueranno ad essere tradotti come di consueto in 1969-1999. AmigaOS si discosta leggermente da questa specifica spostando il discriminatore da 69 a 78. Un criterio analogo dovrebbe essere applicato dai lettori di carte di credito presenti nei negozi nel verificarne la data di scadenza, ma per precauzione VISA, Mastercard ed American Express hanno preferito emettere carte di credito con scadenza 11/99 finche' e' stato loro possibile. Recentemente Olaf Barthel, un celebre programmatore Amiga che attualmente sta lavorando all'OS 3.5, ha svolto un'accurata indagine sulla compatibilita' Y2K di AmigaOS. Ne e' risultato che l'attuale versione del sistema operativo, pur essendo stata rilasciata nel 1993, non presenta problemi di rilievo in relazione all'anno 2000. Olaf ha invece scoperto un bug nel comando SetClock distribuito con l'ormai obsoleto Workbench 1.3, per il quale viene fornita una versione corretta sul sito Internet di Amiga Inc. Questo bug riguarda la rappresentazione a due cifre dell'anno all'interno degli orologi con batteria tampone presenti in tutti i modelli di Amiga. Si tratta di due diversi chip: Ricoh RP5C01 (A3000, A4000 e A1200) e Oki MSM6242RS (A2000 e A500), presenti anche in molte motherboard per PC. In entrambi gli orologi l'anno viene memorizzato in formato BCD utilizzando due cifre di 4bit ciascuna (nibble). Alcuni BIOS per PC interpretano erroneamente l'anno 00 come 1900 anziche' 2000, mentre il Kickstart di Amiga, a partire dalla versione 2.0 prodotta nel 1989, legge l'orologio ad ogni reset autonomamente (senza cioe' ricorrere al comando SetClock presente nel Workbench 1.2/1.3). Il codice contenuto nella ROM e' predisposto per aggirare questo limite hardware interpretando i valori da "00" a "77" come 2000-2077. Esiste tuttavia un bug piuttosto subdolo che affligge il comando Version, anche nell'attuale OS 3.1. Questo comando ricerca una speciale stringa di identificazione presente all'interno dei programmi e delle librerie. La stringa ha il seguente aspetto: $VER: Format 40.105 (11.4.95) come si vede, l'anno e' espresso con due cifre. Quando nel 2000 verranno rilasciati i primi programmi, il comando Version interpretera' in modo errato l'anno "0" riportando, curiosamente, una data spostata nel futuro di ben 36 anni. E' prevedibile che questo piccolo problema non abbia alcuna conseguenza disastrosa. In ogni caso Olaf Barthel e' stato avvertito ed ha garantito che una versione corretta del comando Version sara' certamente disponibile "in tempo". Un altro problema, forse meno conosciuto ma non meno temibile, affliggera' i computer che saranno scampati all'olocausto del giorno 1-1-00. Questa seconda piaga riguarda il mese bisestile di Febbraio 2000. Questo mese dovra' infatti avere 29 giorni perche' costituisce una tripla eccezione alla regola. Come tutti sanno, Febbraio ha 28 giorni tranne che negli anni divisibili per 4, che si dicono bisestili. Tuttavia, pochi sanno che gli anni divisibili per 100 (1700, 1800, 1900...) fanno eccezione: non sono cioe' bisestili. Gli anni che sono divisibili per 400 devono pero' essere considerati bisestili ed il 2000 e' il primo anno in cui questa eccezione verra' applicata. Usando l'editor di preferenze Time e' facile verificare che AmigaOS considera, correttamente, il 2000 un anno bisestile. Anche se e' piuttosto prematuro, possiamo comunque speculare fin da ora sulle date in cui AmigaOS incontrera' seri problemi legati alla rappresentazione del tempo. In AmigaOS il "tempo zero" e' stato fissato alle ore 00:00:00 dell'1 Gennaio 1978, otto anni piu' tardi di UNIX. Il 19 Gennaio del 2046, alle 3:14:07, i secondi accumulati dal contatore raggiungeranno il numero piu' grande che si possa rappresentare usando un intero a 32bit con segno: 2,147,483,647. Aggiungendo un altro secondo si ottiene un traboccamento che produce una quantita' negativa: -2,147,483,648. Tuttavia questo non costituisce un problema per tutti i programmi che manipolano il numero dei secondi utilizzando operazioni aritmetiche che non tengono conto del segno. In particolare, i numeri negativi non influenzano il funzionamento del timer.device, che in AmigaOS e' il modulo software designato alla gestione di tutte le temporizzazioni del sistema operativo e delle applicazioni. Tuttavia le funzioni della dos.library e della locale.library non saranno piu' in grado di convertire il numero dei secondi in una data corretta a causa di un bug che produce date spostate in avanti di due anni. Il problema e' comunque risolvibile aggiornando queste funzioni. Il 7 Febbraio 2114 alle ore 6:28:16 il numero dei secondi superera' il massimo numero rappresentabile da un intero a 32bit senza segno, riazzerandosi. In pratica l'orologio tornera' indietro all'1 Gennaio del 1978, con conseguenze decisamente disastrose. Per allora e' previsto che tutti i sistemi operativi saranno da tempo stati aggiornati all'uso di numeri a 64bit e pertanto la discussione di questo problema e' da considerarsi puramente accademica. Pare dunque che il tanto temuto anno 2000 non sara' poi cosi' catastrofico, almeno per quanto riguarda il sistema operativo di Amiga che, teniamo a ricordare, non e' stato piu' aggiornato dal 1993. Forse allora e' il caso di domandarsi come mai molti produttori di noti sistemi operativi siano dovuti correre ai ripari per rappezzare qua e la' il loro codice in vista del prossimo millennio. Tra questi spiccano Microsoft, che ha dovuto fornire ben tre service-pack per rattoppare Windows NT 4.0, Hewlett Packard, che fornisce un numero consistente di patch per correggere vari aspetti di HP-UX e Sun Microsystems, che ha raggiunto la compatibilita' Y2K solo con il recente rilascio di Solaris 7. La situazione e' analoga per quanto riguarda Netware (Novell), SCO, AIX (IBM) e IRIX (Silicon Graphics). Sul fronte dell'Open Source Software, NetBSD e' dichiarato compatibile con l'anno 2000 a partire dalla versione 1.3.1, mentre lo stato di compatibilita' di Linux dipende dalle versioni dei package GNU installati nella distribuzione.