miércoles, 3 de febrero de 2010

El Bug de 2038

He estado buscando información de un fenómeno que me pareció muy interesante cuando lo escuché hace tiempo en clase de MP1

Resulta que en el año 2038 tendremos que enfrentarnos a otro bug igual de serio que el pasado bug del famoso "efecto 2000" por el que algunos ordenadores fueron afectados.

Esta vez el fallo tiene que ver con la forma en la que se representan las fechas en POSIX: en segundos desde el 1 de Enero de 1970 a las 00:00:00. En sistemas de 32 bits este valor suele guardarse en variables de tipo entero con signo, siendo el valor máximo que puede representar este tipo 2.147.483.647, valor que se alcanzará a las 03:14:07 del 19 de Enero de 2038, exactamente.

Esta variable (int time_t) puede almacenar valores hasta el 2147483647. Un segundo después del indicado arriba, esta variable pasará a ser el mismo número pero en negativo (-2147483647) causado por un desbordamiento. Muchos programas, entonces, interpretarán que estamos en 1901 o en 1970 en vez de en 2038. Esto haría que muchisimos cálculos fallaran.


La solución sería cambiar esa variable a 64 bits pero esto no es nada facil, ya que se rompería la compatibilidad binaria para el software.

Si consiguieramos cambiar esa variable a 64 bits se retrasaría el problema unos 290 mil millones de años. Para entonces, el sol se habrá extinguido.

¿Donde estaremos en 2038? ¿Se habrá solucionado esto para entonces?¿Qué pasaría si no se soluciona?

3 comentarios:

Sonia dijo...

:O esto es peor que el "efecto 2000" creo yo... supongo que al final conseguirán cambiar la variable... o confiaremos en que lo hagan jajaja porque si no...menudo caoooos!! dioos 1901 o 1970 que paranoia!!!

Por cierto, te deje un comentario en la ultima actualizacion pero parece q no te ha llegado :S

Unknown dijo...

Si, creo que es un poco peor que lo del "efecto 2000" ya que en ese bug el problema era que las fechas se representaban de dos en dos cifras. Asi que cuando llegaba el 1999 en realidad era el "19-99"...y al llegar el 2000, ese último 99 se convertiria en un 00, ya que el 99 es el máximo numero de dos cifras. Entonces el año pasaba a ser "19-00" Algo parecido a lo de ahora pero más facil de arreglar.

No me llegó ese comentario que dices :S Me llegó en anterior al del Ipad que fue por lo que hice esa entrada :p

aremaku dijo...

NOOOOOOOOO VAMOS A MORIR TODOSSSS XDD. Bueno no parece mu xungo, de aqui al 2038 yo creo que da tiempo a evolucionar todos los kernel y ese tipo de cosas. De todas manera ire haciendo un bunker en mi casa por si estalla la guerra mujajaja xD. uff tio como vas?? yo ya casi e acabao, aver si apruebo :D