12 diciembre 2020

El temido Efecto 2038 o Y2K38

Linux iba a tener un problema en 2038, pero lo ha retrasado 450 años, va a recibir una nueva actualización de kernel 5.10 que va a solucionar el problema del Efecto 2038 o Y2K38. El Efecto 2000 fue el primero de una larga ristra de fallos relacionados con la fecha que pueden llegar a sufrir los sistemas operativos y cualquier dispositivo que cuente con una mala programación. Incluso este año hemos visto cómo algunos dispositivos han sufrido fallos a raíz de los hechos para minimizar los del efecto 2000, y ahora Linux se ha protegido contra otro que iba a ocurrir dentro de unos años. Hablamos del Efecto 2038, o Y2K38. El Efecto 2000 (Y2K) estuvo causado porque algunos sistemas usaban dos dígitos para la fecha, asumiendo que un año acabando en dos ceros sería el 1900, por lo que al dar el salto a 2000 las fechas se revertían 100 años, causando graves problemas. En el caso del efecto 2038 la causa es distinta, ya que deriva por la forma en la que los sistemas basados en Unix y similares, como las distros de Linux, cuentan la fecha a partir del 1 de enero de 1970.

 
Los enteros de 32 bits tienen un límite

La fecha se calcula a raíz de ese día en segundos usando enteros de 32 bits. El problema es que, llegado el 19 de Enero de 2038 a las 3:14:07 de la noche, el número de segundos alcanzará la cifra de 2.147.483.647. Esa cifra es el número positivo máximo que se puede alcanzar usando enteros positivos de 32 bits. Pasada esa fecha, los números usados pasarán a ser negativos, y lo más probable es que la fecha que pase a verse en los sistemas afectados pase a ser el 13 de Diciembre de 1901 a las 20:45:53, que es la fecha a la que llegamos si restamos 2.147.483.647 segundos desde el 1 de Enero de 1970.

Por suerte, el trabajo para evitar que esto ocurra en los sistemas operativos basados en Linux, como Android, ya ha empezado, y en el kernel Linux 5.10, el desarrollador de sistema de archivos de Oracle, Darrick J.Wong, ha enviado código afirmando que "habrá soporte para fechas hasta el año 24862".

Muchos móviles Android pueden quedar inutilizados en 2038 

Por tanto, si Linus Torvals sigue lanzando el nuevo kernel de Linux cada ocho semanas como hace normalmente, el fallo estará arreglado en Navidad de este año, algo más de 17 años antes de que ocurra. Los dispositivos que no actualicen y estén usando una función time_t basada en 32 bits se verán afectados por este problema.

Por ejemplo, si tienes un móvil Android que ya se haya quedado sin actualizaciones, y utilice un kernel anterior a la versión 5.10 con un time_t de 32 bits, a partir del año 2038 puede que vayas a tener problemas. Si te fijas en los ajustes de fecha y hora, el sistema no te deja elegir una fecha posterior al 31 de Diciembre de 2037. En versiones anteriores de Android se podía elegir una fecha posterior, pero, aunque se viese bien, el sistema volvía a 1903, por lo que se decidió limitarlo para evitar que hubiera graciosos que cambiasen la fecha.

A modo de anécdota, en 2014, Gangnam Style fue el primer vídeo de YouTube en superar esa cifra de visualizaciones, lo que obligó a Google a prepararse meses antes y utilizar enteros de 64 bits para aceptar cifras más altas de visualizaciones.

No hay comentarios:

Publicar un comentario