El principi de la fi
A mida que va avançant el temps, es descobreixen més limitacions dels sistemes informàtics estàndards que controlen el nostre món.
Primer va ser el bug de l’any 2000, en què els ordinadors compatibles amb el PC d’IBM (creat el 1981) sols tenien a la ROM de la BIOS (és on hi ha la configuració bàsica de l’ordinador i on se li diu com ha d’actuar) 6 dígits, o sigui, 2 per al dia, 2 per al mes i 2 per a l’any: DD/MM/AA. El problema venia en arribar al 31 de desembre de 1999, perquè l’ordinador, després del 99 es posava a 00 (1900) amb la qual cosa es preveia un gran perill en ordinadors que gestionessin algun sistema important (per exemple una central nuclear, algun sistema bancari o algun aparell que hi hagués a l’espai). Va ser més gran la por que el resultat, segurament perquè els tècnics responsables es van posar les piles i van solucionar (com van poder) aquest embolic.
Ara, segons sembla, n’hi ha un altre, de bug, concretament per a l’any 2038. Tot i que segons per aquelles dates estarà solucionat, és interessant de saber-ne alguna cosa.
A diferència del bug del 2000 que estava basat en el hard (el maquinari: la ROM de la BIOS es guarda normalment en un xip), el nou problema del 2038 el tenen els sistemes operatius que usen la representació del temps basada en POSIX, que conta el número de segons transcorreguts des de l’1 de gener de 1970 a les 00.00.00 (obviant els segons intercalars). Aquesta representació és més comuna als SO tipus Unix i també en els programes escrits per a molts altres SO, per la gran expansió del llenguatge de programació C. En la majoria de SO de 32 bits, el tipus de dada usat per guardar el contador de segons és un número enter de 32 bits amb signe, és a dir, que pot representar els números entre -2.147.483.648 i 2.147.483.647 (-231 i 231-1; 1 bit per al signe, i 31 per al valor absolut), o sigui que l’últim segon representable amb aquest format seria a les 03:14:07 UTC (temps universal coordinat) del 19 de gener de 2038, o sigui, quan el contador de segons arribi a 2147483647. Un segon després, el contador es desbordarà (overflow) i saltarà al valor 2.147.483.648, i això causarà l’error dels programes, que interpretaran el temps com que estan a 1901 o 1970, depenen de la implementació, en lloc de 2038.
![]() |
| Simulació del desbordament del contador intern de segons, en arrivar al segon 03:14:07 UTC del 19 de gener de 2038. |
No hi ha, ara per ara, una solució senzilla per a les combinacions existents de SO/CPU. Canviar la definició de time_t (que és la funció que en C gestiona el temps) per passar a 64 bits trencaria la compatibilitat binària per al soft, emmagatzemament de dades i amb tot el que tingui a veure amb la representació binària del temps.
La majoria de sistemes operatius per a arquitectures de 64 bits usen aquesta funció time_t de 64 bits, és a dir, amb un SO a 64 bits. Aquest problema del desbordament de la data s’allargaria “només” uns 290 milions d’anys. xD

