El problema del año 2038 (Efecto Y2K38)

Ariel Palazzesi . Vista 12111 veces

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.


  • 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”.

    En algo más de 68 años la variable se “desbordará” 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.

    Quien sabe, quizás podríamos volver a la edad de piedra. Quien sabe, quizás podríamos volver a la edad de piedra.

    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.

    Visto en  wikipedia

¿Y tú, qué opinas?

  • #1 Niko
    Niko martes, 23 de junio de 2009, 16:23

    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.

    Responder >> Attention Minus Plus Votos: 0 de 2
  • #2 <a href="../../foro/member.php?u=15905" target="_self">juan jose</a>
    juan jose martes, 23 de junio de 2009, 16:46

    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. :P

    Responder >> Attention Minus Plus Votos: -1 de 3
  • #3 juancruz90
    juancruz90 martes, 23 de junio de 2009, 17:04

    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 :-P Ya que no necesitamos más de 32 bits para crear variables de 64, hay técnicas para ello.

    Responder >> Attention Minus Plus Votos: 0 de 2
  • #4 <a href="../../foro/member.php?u=6721" target="_self">marshall_260</a>
    marshall_260 martes, 23 de junio de 2009, 17:08

    #2Fail!
    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. :)

    Responder >> Attention Minus Plus Votos: 3 de 3
  • #5 JuXnCxRlOs
    JuXnCxRlOs martes, 23 de junio de 2009, 17:08

    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

    Responder >> Attention Minus Plus Votos: 0 de 2
  • #6 matt
    matt martes, 23 de junio de 2009, 17:11

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

    Responder >> Attention Minus Plus Votos: 0 de 2
  • #7 <a href="../../foro/member.php?u=6721" target="_self">marshall_260</a>
    marshall_260 martes, 23 de junio de 2009, 17:11

    #5Tienes 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...

    Responder >> Attention Minus Plus Votos: 2 de 2
  • #8 <a href="../../foro/member.php?u=15985" target="_self">josedaivd</a>
    josedaivd martes, 23 de junio de 2009, 17:19

    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.

    Responder >> Attention Minus Plus Votos: 1 de 1
  • #9 JURJAR
    JURJAR martes, 23 de junio de 2009, 17:26

    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

    Responder >> Attention Minus Plus Votos: 1 de 1
  • #10 fuegopazion
    fuegopazion martes, 23 de junio de 2009, 17:41

    El tema es simple: en el 2038... AL IGUAL hay pc's de 32 bits.

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #11 afdhdah
    afdhdah martes, 23 de junio de 2009, 18:19

    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?

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #12 smodd
    smodd martes, 23 de junio de 2009, 18:20

    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 ...

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #13 BioX
    BioX martes, 23 de junio de 2009, 19:28

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

    eso era un chiste y por lo visto no lo pescaste =P

    Responder >> Attention Minus Plus Votos: 1 de 3
  • #14 kiefer
    kiefer martes, 23 de junio de 2009, 20:27

    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.

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #15 <a href="../../foro/member.php?u=11650" target="_self">florenciah</a>
    florenciah martes, 23 de junio de 2009, 20:53

    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.

    Responder >> Attention Minus Plus Votos: -1 de 3
  • #16 Juan
    Juan martes, 23 de junio de 2009, 20:58

    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.

    Responder >> Attention Minus Plus Votos: 0 de 4
  • #17 Kiltro
    Kiltro martes, 23 de junio de 2009, 20:59

    Con la foto, prefiero de lejos la edad de piedra, ya me tiene harto la tecnología!!!

    Responder >> Attention Minus Plus Votos: 1 de 1
  • #18 Sebas
    Sebas martes, 23 de junio de 2009, 21:15

    #16Se 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...

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #19 grafick
    grafick martes, 23 de junio de 2009, 21:20

    en esos años estaremos conectados y viviremos en la "nube".

    Responder >> Attention Minus Plus Votos: 1 de 1
  • #20 jsmith
    jsmith martes, 23 de junio de 2009, 21:38

    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...

    Responder >> Attention Minus Plus Votos: -1 de 1
  • « «« Anterior123Siguiente »» »
    Cargando...Cargando...

  • nuevo comentario
    Nombre

    Campo obligatorio

    Email

    Escriba una dirección de correo electrónico con el formato sunombre@ejemplo.com.

    Campo obligatorio

 
Ir arriba