viernes, 14 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 tengáis buen fin de semana! ;)

6 comentarios:

  1. Interesante reflexión. La verdad es que cuando empece en esto de la informatica el 2038 parecía que estaba lejos pero ya lo tenemos practicamente aqui encima.

    Tal vez los mayas sabian que se inventaria Unix pero se confundieron de fecha ;D

    ResponderEliminar
  2. En algunos cisco, solo se puede configurar la fecha entre 1993 y el 2035. Lo interesante es que no muere el clock al pasar los segundos (ya lo probé), pero si alguien llega a cambiar la hora, nunca más podrá configurar el tiempo real.

    ResponderEliminar
  3. Santa Brígida de Suecia (1873)predijo:
    “Cuando la fiesta de San Marcos, caiga en la Pascua, la fiesta de San Antonio el día de Pentecostés, y la de San Juan en Corpus Christi, todo el mundo gritará: ‘¡Ay’”. En 2038, la fiesta de san marcos (25 de Abril) coincidira con domingo de pascua: http://www.divvol.org/recursos/fecha_pascua.htm
    Yo crei que el "AY" era por el fin del mundo, pero ahora veo que es porque se nos descuadraran las computadoras!!

    ResponderEliminar
  4. vengo del futuro:
    2014 (en referencia a los comentarios del 2012) y la mayoria de los programas y software o todos estan programados en C.
    lo cual quiere decir que en 2038 habra el verdadero fin del mundo, debido que ahora 2014 dependemos 100% de la tegnologia, solo queda esperar y dejarle este trabajo a la gente del futuro...
    ...Sise puede evitar claro...

    ResponderEliminar
  5. y ha esperar si no que pasa he nada grave

    ResponderEliminar