sábado, 15 de diciembre de 2012

¿Y por qué el fin del mundo no podría ser el 19 de enero de 2038? Apocalipsis por un desbordamiento de entero...

Andaba yo trabajando, obteniendo informes de mi SIEM, cuando de repente al indicar el periodo de obtención de datos obtuve el siguiente error:


Mientras, en otras partes del mundo, esa fecha se sigue mostrando también en miles pantallas y seguro que a ti también te suena, ¿verdad?. Pero, ¿por qué 1 de enero de 1970?, veamos:

En la década de los 60, las primeras versiones de Unix medían el tiempo del sistema en intervalos de 1/60s, debido a los 60 Hz de la frecuencia de los osciladores en aquella época. Esto significaba que un entero sin signo de 32 bits sólo podía representar un lapso de tiempo inferior a 829 días. Por esta razón, el tiempo representado por el número 0 (llamado la época o epoch) tuvo que ser aplicado en el pasado muy reciente: 01/01/1971. De hecho, la primera edición del Manual del Programador de Unix del 3 de noviembre de 1971 define el tiempo Unix como "el tiempo desde las 00:00:00 de 1 de enero de 1971 medido en sexagésimos de segundo".

Más tarde, los intervalos se incrementaron a un segundo (1HZ DC), lo que aumentó el lapso de tiempo que podría ser representado a alrededor de 136 años y, como el periodo de representación era más amplio, el epoch se redondeó a 01/01/1970. Haciendo cálculos, un entero con signo de 32 bits puede representar números enteros entre -2147483648 y 2147483647, es decir, el rango representable en el tiempo Unix va desde las 20:45:52 GMT del 13 de diciembre de 1901 a 03:14:07 GMT del 19 de enero de 2038...


Seguro que lo acabas de pensar: a partir de esa fecha todos los equipos que aún utilizan 32 bits y miden así el tiempo sufrirán un desbordamiento de entero...
 


Esto se conoce como el "problema del año 2038" y algunos creen que será más importante que el del año 2000. La solución ya está en la mayoría de sistemas operativos de 64 bits: el uso de un signo de 64-bit presenta una nuevo periodo medible veinte veces mayor que la edad estimada del universo, aproximadamente 292 mil millones de años (tranquilos, no necesitaremos tanto tiempo para destruir la Tierra antes).

Pero muchos de ellos no serán actualizados en esa fecha... Hoy, miles o millones de sistemas embebidos utilizan Unix/Linux y, seguramente, muchos de ellos no serán actualizados en esa fecha... Muchos quieren e insisten en hacer coincidir el fin del mundo con el calendario Maya pero, ¿por qué no con el fin del "tiempo Unix"?...

Seguro que, a partir del 21 de diciembre, el 19 de enero de 2038 será más importante. ¿Qué no te gusta? pues sólo tienes que relajarte y elegir en esta lista tu fecha del apocalipsis favorita. Por el momento, que tengas buen fin de semana! ;)

No hay comentarios:

Publicar un comentario