Nuestra sociedad actual se rige y se mueve gracias a toda
clases de dispositivos, programas, aplicaciones y sistemas operativos que nos ayudan a gerenciar, facilitar y
administrar las actividades mas sencillas hasta las mas importantes y delicadas
de nuestra sociedad, desde jugar un juego en nuestra computadora, hasta guía y ubicacion
gps de vuelos comerciales, operaciones
bancarias, telecomunicaciones, operaciones financieras y control sobre armas
nucleares, si estos sistemas que hoy en dia son pilares para la existencia, éxito
y progreso de la humanidad. No podríamos
imaginarnos las consecuencias y alcances catastróficos que le harían al mundo
tal cual como lo conocemos.
En el campo de la informática, el problema del año 2038 o Y2K38, podría provocar una falla masiva en parte del software en ese
año. El problema afecta a los programas que usen la representación del
tiempo basada en el sistema POSIX, que se encarga en contar el número
de segundos transcurridos desde el 1 de de enero de 1970 a las 00:00:00. Cada
segundo que pasa en el ordenador posee un código único y propio.
Esta representación es un estándar en los sistemas tipo Unix
y también en los programas escritos para muchos otros OS debido al gran alcance
del lenguaje de programación C. El problema solo afecta a los equipos de 32
bits ya que usan el tipo de dato time_t que guarda el contador de segundos que
es un entero de 32 bits, siendo así, realizando varios cálculos, este contador
solo puede llevar un rango de números
entre -2.147.483.648 y 2.147.483.647 (los códigos asignados a cada segundo
mencionados anteriormente). Si todo esto es cierto, en el año 2038, el 19 de
enero a las 03:14:07 a.m. UTC , este contador llegara a su ultimo
valor(2.147.483.647) de vida, un segundo después todo el sistema se caerá y
esto provocara que de un salto al valor -2.147.483.648 y esto causara el mas
grande fallo informático haciendo que todas las personas en sus computadoras
estén en 1901.
En la siguiente imagen se presenta una animación del efecto Y2K38:
Como se puede ver cuando el reloj de arriba muestra el
tiempo según el sistema POSIX y el de abajo el tiempo real, cuando el reloj de
arriba llega al año 2038 el 19 de enero a las 03:14:07, un segundo después este
se reinicia y vuelve a 1901.
El problema hace que los dispositivos Android (al menos
algunas versiones) se bloqueen y no reinicien cuando se cambia la fecha a esa
fecha. Para comprobar esto se puede ir a la configuración de fecha y hora en el
dispositivo, y al tratar de cambiar la fecha y hora al 2038; se encontrará con
la sorpresa de que solo le permite cambiarlo hasta el 31 de diciembre de 2037.1
En los dispositivos iOS 7 y Windows Phone el sistema permite
cambiar la fecha hasta el 1 de enero de 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 o 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.