in

El problema del año 2038 (Efecto Y2K38)

Una limitación técnica en el tipo de dato utilizado para representar el tiempo en la mayoría de los sistemas informáticos actuales, podría convertir en chatarra inútil una buena parte de los ordenadores y equipos electrónicos actuales. El problema se presentaría a las 03:14:07 (UTC) del 19 de enero de 2038, y tiene su origen en una variable interna utilizada para contar el tiempo en los sistemas de 32 bits.

El Problema del año 2038 (Efecto Y2K38)

Muchos de los que tuvieron la suerte de utilizar alguno de los viejos ordenadores de 8 bits, como el primer IBM PC o las home computers anteriores, todavía se maravillan con el poder de procesamiento disponible en los modernos sistemas basados en procesadores de 32 bits. Es que el numero de bits que puede manejar el microprocesador de turno define en buena medida la potencia del sistema que controla y, al tratarse de una función del tipo “2 a la n”, donde “n” es el número de bits, las plataformas de 32 bits son mucho más que cuatro veces más poderosas que las de 8.

Como saben los programadores (o aquellos que leyeron nuestro cursillo de programación en Visual Basic o de microcontroladores) en una variable de 8 bits se pueden almacenar números comprendidos entre 0 y 255 (“2 a la 8” combinaciones posibles), mientras que en una de 32 bits el rango va de 0 a 18446744073709551615 (“2 a la 32”). En ambos casos, cuando se necesita trabajar con números con signo, se divide en dos el rango completo para incluir los números negativos, así que los extremos pasan a ser -128 / 127 y -2147483648 / 2147483647. Como puede verse, las plataformas de 32 bits son mucho más poderosas que las de 8. Sin embargo, puede que sean las responsables de una supuesta catástrofe informática conocida como “el efecto 2038”.

efecto 2038
En algo más de 68 años la variable se “desbordará”

Para comprender el origen del problema necesitamos conocer un poco más a fondo la forma en que se gestionan internamente las fechas en los ordenadores, aclarando que por “ordenadores” también se entienden los sistemas integrados, como aquellos responsables de mantener tu casa calefaccionada, el piloto automático de un avión o tu teléfono móvil conectado a la red. La gran mayoría de estos sistemas informáticos funcionan con  software escrito en uno de los más populares y robustos lenguajes de programación de todos los tiempos: el lenguaje C. En la mayoría de sistemas de 32 bits se utiliza el tipo de dato time_t – entero de 32 bits con signo- para guardar el valor de un contador de segundos interno.

Básicamente, el funcionamiento es el siguiente: se toma una fecha como base y el sistema en cuestión cuenta los segundos que han pasado desde ese momento hasta el actual. El resultado es almacenado en la variable de 32 bits que es utilizada cada vez que alguna aplicación necesita conocer la fecha y hora para poder hacer su tarea. El valor de la variable, que expresa el  número de segundos transcurridos desde las 00:00:00 horas del 1 de enero de 1970, se convierte en la fecha completa (hora-minuto-segundo; día-mes-año) mediante un algoritmo muy simple, y todos contentos.

Un minuto tiene 60 segundos, una hora tiene 60 minutos (o 3600 segundos), un día 24 horas (o 86400 segundos), y un año tiene aproximadamente 365.25 días (o 31557600 segundos). Como puede verse, a medida que pasan los años el valor almacenado en la bendita variable de 32 bits se hace más grande. Mucho más grande. No es muy difícil dividir el máximo valor de esta porción de la memoria (2147483647) por el número de segundos de un año (31557600), para darse cuenta que en algo más de 68 años la variable se “desbordará”. Esto significa que exactamente a las 03:14:07 UTC del 19 de enero de 2038, el contador interno de casi todos los sistemas informáticos programados en C llegará a 2147483647 y, un segundo después, saltará al valor -2147483648.

2038

Concretamente, el problema afecta a los programas que usan la representación del tiempo basada en el sistema POSIX, que es el explicado en el párrafo anterior.  Es la representación estándar en los sistemas tipo Unix y en todos los programas escritos en el lenguaje de programación C. La mayoría del software actual cae dentro de ese grupo y fallarán, dependiendo de como estén implementados,  como si estuviesen funcionando en 1901 ó 1970, en vez de en 2038.

A pesar de ser un problema bien conocido (los programadores conocen esta limitación desde la implementación misma del lenguaje C), no existe una forma sencilla de solucionar este problema. Podría cambiarse el tipo de variable empleado por un entero de 32 bits sin signo, pero esto haría que todos los programas que  hacen cálculos con diferencias de tiempo fallen. Y reescribir por completo esas aplicaciones es un trabajo enorme, que a veces ni siquiera puede encararse. También puede creerse (erróneamente) que, utilizando una variable de 64 bits podríamos salir del paso, pero al igual que con las de 32 bits sin signo, se perdería la compatibilidad binaria con el resto del software.

Es posible que la plataforma “PC” (o lo que sea que utilicemos como ordenador personal en 2038) esté exenta del problema. Actualmente los procesadores de 64 bits están convirtiéndose en la norma, y la mayoría de sistemas operativos para arquitecturas de 64 bits utilizan enteros de 64 bits para time_t. La migración a estos sistemas seguramente estará lista mucho antes del “Día D”. Sin embargo, varios cientos de millones de pequeños y anónimos dispositivos que hoy funcionan con núcleos de 32 bits todavía estarán dando vueltas en 2038, y ocasionaran algún que otro problema. A diferencia de los SO como Linux o Windows, los programas de muchos de esos sistemas son escritos por particulares o empresas pequeñas, que quizás ni siquiera sigan en el negocio dentro de 30 años, por lo que difícilmente reescriban sus aplicaciones.

Seguramente te estés preguntando cuándo volveremos a estar en esta situación si, en lugar de una variable de 32 bis, utilizamos una de 64. La diferencia entre el rango que pueden manejar es tan grande, que el efecto se retrasaría unos 290 mil millones de años. Si logramos pasar sin problemas el 2038, el próximo evento de este tipo ocurriría el 4 de diciembre del año 292 277 026 596 a las 15:30:08 UTC, arruinándoles el domingo a más de cuatro usuarios de ordenadores.

Reportar

¿Qué te pareció?

Escrito por Ariel Palazzesi

44 Comments

Leave a Reply
  1. Si no lo he entendido mal, solo los ordenador de 32bits sufriran este problema no? o alomejor no he pillado nada, pero de todas formas me suena a cuento chino para alarmar a la gente como paso con el "efecto 2000" y lo mas que provoco fue un Capitulo de los Simpson.

    • Estoy de acurdo con vos. Me parece puro amarillismo.
      Lo que parecería que es el principal problema son los artefactos pqueños del hogar, pero para aquella epoca ya habremos renovado nuestros telefonos celulares, y no costará mucho actualizar los demas. Por ejemplo en aquella epoca no tendremos que instalar una nueva calefacción, simplemente cambiamos el termostato, tampoco tendremos problemas para ve peliculas porque usaremos Blu-ray o lo que esté de moda, etc.

  2. Según su "año" de 365.6 días, en realidad seria el efecto Y2K37, y pasaría (si no me equivoco) el viernes 25 de diciembre de 2037 a la 22:26:07.

    Según el año real, 365.25 días, el resto de las cuentas están bien. 😛

    • Fail!
      Nos equivocamos al considerar las aproximadamente 6 horas que se suman cada año (y que cada 4 se "solucionan" agragando un dia a febrero en los años bisiestos) como ".6" en lugar de ".25".
      Gracias por el aviso. Corrigiendo y en penitencia por burros. 🙂

  3. Jajajajjajaja, como en el 2038, como creen que en el 2038 se van a seguir usando los ordenadores actuales, jajaja, y además para esa fecha ya tendrás cosas más actuales con el firmware actualizado, yo programo micros y ese problema me lo tomaron para solucionar en un parcial en la UBA, es un problema conocido y fácil de solucionar para los que sabemos 😛 Ya que no necesitamos más de 32 bits para crear variables de 64, hay técnicas para ello.

  4. NO importa si se sigue implementando C se debrá actualizar a 64 bits, pero estos ordenadores de 32 bits siguen molestando y por ellos no se puede imponer definitvamente los 64 bits, sin embargo se podría con unos cambios en el nucleo cambiar la fecha base

    • Tienes razón. Pero es posible que el problema mas grande esté en las aplicaciones que si bien son masivas, no son facilmente actualizables, como los ordenadores embebidos en radares, equipos de medicina, industria, etc, que en muchos casos tienen una vida util de decadas…

  5. la extraña seducción de lo apocalíptico bajo cualquier forma en estos tiempos. Casi como si pensar en ello……………………..

  6. Ni más ni menos que le paso a la dinosaurica arquitectura de los 8 bits y 16 bits le sucedera a la de 32 bits, y posiblemente para el 38 los 64 bits sean un cuento para asustar chamacos.

    Ah sí, 128 bits, ahora nos parecera un exceso, pero estoy seguro que para ese tiempo será un estandard para que la holored transfiera holoconferencias desde marte y la ingente cantidad de datos nos saturen los sentidos.

    Quizá para ese tiempo ni siquiera dependamos tanto de las máquinas.

  7. Jejejejeje de risa. Pero alguien tiene intención de vivir en la tierra todavía????. Estaremos utilizando sistemas de 32bits???. Bueno si te descuidas todavía estarás actualizando windows vista cada dos por tres

  8. si, para el 4 de diciembre del año 292 277 026 596 estaremos utilizando sistemas de exacubit s y no ocurrira el problema, quiza historicamente 2038 sera la ultima vez que la humanidad sufrira ese problema.

    ¿porque cuatro usuarios de ordenadores para el año 292 277 026 596?

  9. Derepente ya no existiran procesadores normales sino hibridos como los GPGPU es decir chips de video integrados con procesadores standares y voila … segundo derepente cuda se salteara todos esos problemas corriendo los antiguos software en una especie de virtualizacion …

  10. Ya para ese día muy posiblemente la computación como la conocemos hoy haya evolucionado tanto que esto no supondrá el mínimo problema.

  11. Es verdad. Me enferman las noticias que hablan de hechos de aca a más de 20 años. No tienen IDEA de cómo será el mundo para esas fechas. No critico la intención de esta noticia, pero hay muchas otras (especialemnte provenientes de la NASA) que son totalmente innecesarias.

  12. En el primer pie de foto indican lo siguiente:
    "En algo más de 68 años la variable se “desbordará”"
    lo correcto son 29 años (2038-2009), cuidado con esos detalles compañeros.

    • Se referia a 68 años, a partir de 1970……que es desde cuando comienzan a sumar los segundos los sistemas…en 68 años colapsa el sistema…el tema que ya pasaron 39…jejeje…

  13. jeje… no hay de que preocuparse!!
    a mi me dijeron cuando era chico que en el año 2000 vamos a vivir en la luna y vamos a tener autos voladores y robots que nos hagan todos los trabajos. Quizas les podamos decir a nuestros robots que (apretando un boton) nos reescriban nuestros codigos de aplicaciones viejas para que funcionen hasta el año 3000 o mas si queremos!! No me imagino dentro de 38 años sin mi actual sistema de facturacion! que horror! je je je… El ser humano es un animal de costumbres…

    • pues tendríamos exactamente el mismo problema que se puede ver desde 2 puntos de vista:
      1- Entramos en un ciclo infinito el cual finalmente tendrá que ser reseteado: puesto que mandamos a alguien al pasado, el cual corrige el error. Al corregir el error, en el futuro ya no tenemos necesidad de mandar a alguien al pasado, por lo que en el pasado nuevamente se equivocan y vuelta a tener que mandar a alguien.
      2- En nuestra línea temporal quedará la grande… En otra línea temporal con el error corregido, otra cosa ocurrirá; quizás aún más grave.

      De todas maneras, y respondiendo de forma seria, si bien es cierto existe equipamiento médico médico que puede verse des-ajustado, tendrá (de aquí a 20 años más) dos posibles opciones: o actualizan o lo arreglan xD

    • Si alguien vuelve a 1970 y previene este futuro error, se abriría una nueva línea de tiempo que no tendría ese problema, pero nosotros seguiríamos con él. No queda otra que volver todos a 1970, prevenir el error y en esa línea volver todos al año 2038 XD

  14. Podrian hacer notas mas serias no ?! acaso no piensan que para esa epoca todos vamos a tener 64 bits ( quiza se retrase un poco con la reseción y las netbooks pero la mayoria va a tener en el 2030 maquinas de 128 bits y ya seguramente estaran laburando en las de 256 si no es que toda la tecnologia cambia a otra cosa y dejamos de contar en bits…

    ACASO NO SABEN QUE 30 AÑOS SON SIGLOS PARA LA COMPUTACIÓN????!!!!

  15. es cierto… John Titor no mentia en ese aspecto… Windows basado en ASCII muchiisimo mas rapido… jaja deben visitar las paginas de ese tipo loco… que solo se transtorno por el viaje jaja…

  16. Realmente lo del efecto del año 2000 tenia mas de mistico que de otra cosa, sin embargo, lo del "efecto 2038" esta explicado y tiene una base cientifica, podria llegar a ser un gran problema llegado el momento ya que muchas de las maquinas, que por ejemplo, se usan en las industrias sons sistemas de 32bits que estan pensadas para durar decadas e incluso dependiendo del mantenimiento realizado y de la politica de la propia empresa, podrian durar lustros.

    Tambien pienso que llegado el momento, si no se ha hecho nada por evitarlo el problema sera facilmente aislado, ya que la mayoria de PC, mainframe, etc…. deberian de estar funcionando bajo sistemas de 64bits, de hecho mi actual equipo es de 64bits ^^.

    En fin, tampoco hay que preocuparse demasiado conciendo de antemano el problema, lo malo seria que nos pillara por sorpresa.

    Por cierto, lo del john titor ese, vaya broma no? podria haberse llamado tambien John connitor xD

  17. iba super emocionado leyendo la noticia hasta llegue a los parrafos finales donde me dieron a cononcer que esto nunca iba a ocurrir….

  18. dentro de 30 años no voy a poder usar mi 486 ?
    espero tener algo mejor dentro de 30 años
    y espero ke dentro de 30 años estemos arriba de los 64b

  19. Oigan, no se dan cuenta, si hubieran mandado a alguien al pasado en el 2038, ya no tendriamos el error corregido? :p:p:p:p:p:p

    Me hace acordar, una cojudez que vi una vez en un blog, dijeron que habian construido una maquina del tiempo, pero no se usaria hasta en un futuro remoto donde regresarian a la epoca que se construyo (2005 o 2007 no recuerdo), la pregunta para esos genios seria, no creen que si el tiempo no es una sucesion sino una condicion, al instante de construir dicha maquina, no apareceria su hombre del futuro, jajajajajaja, que ilusos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Nuevo retraso en el LHC (y van…)

Apple y el rechazo de C64 iPhone (Nostalgia)