El “Efecto 2038” es otro “bug” relativo, en este caso, a la codificación del tiempo en los sistemas de 32 bits (el reloj que usan), que nos afectaría en enero del año 2038.
En la época de 1999, la amenaza de un colapso a nivel tecnológico por el temido “Efecto 2000” o “Error del milenio” provocó un temor generalizado en la sociedad ante el fallo que provocaría que tras el 31 de diciembre de 1999, los sistemas informáticos pasarían al 1 de enero de 1900 en vez de al 1 de enero de 2000 debido a que muchos sistemas codificaban el año en dos dígitos.
Este “Efecto 2000” que se corrigió con unos miles de millones de euros, nos sirve para explicar el “Efecto 2038” o “Y2K38”.
Y es que el reloj que tienen muchos equipos se basa en POSIX, un simple contador de segundos que va ascendiendo con cada segundo que pasa y que tiene como fecha de referencia el 1 de enero de 1970; por tanto, el tiempo es igual al número de segundos transcurridos desde esta fecha de referencia.
Sin embargo, como en los sistemas de 32 bits los tiempos se codifican con un número entero y un signo, llegará un momento en que el contador llegará al número máximo que es capaz de almacenar en positivo y comenzará a contar en negativo (volveremos a 1901).
Mientras los sistemas que cuentan la hora desde (21:00 31/12/1969) provocarían el error de cálculo a las 00:14:07 del 19 de enero de 2038, ya que confundirán la fecha con el 13 de diciembre de 1901.
El “Efecto 2038” afectará principalmente al sistema operativo Unix, sobre el que se asientan tanto Android como iOS así como muchos servidores de Internet, puntos de acceso Wi-Fi o routers.
Casi todos los sistemas operativos que se utilizan hoy en día se remontan a UNIX. Cuando los ingenieros desarrollaron el primer sistema operativo para máquinas UNIX en la década de 1970, decidieron arbitrariamente que el tiempo se representaría como un entero de 32 bits con signo y se mediría como el número de segundos desde las 12:00:00 am del 1 de enero de 1970. Los sistemas de fecha y hora de bits solo pueden contar hasta 2,147,483,647, lo que se traduce en el 19 de enero de 2038 (3:14:08 am), comentó Muy Interesante.
En esta fecha, cualquier programa en C que utilice biblioteca time_t estándar de 32 bits tendrá problemas para calcular la fecha.