Loading AI tools
problema técnico de almacenamiento de datos de 32 bits De Wikipedia, la enciclopedia libre
En informática, el problema del año 2038 (conocido también por el numerónimo Y2K38) amenaza que podría causar que una gran parte del software falle en ese año. El problema afecta mucho a los programas que usen la representación del tiempo basada en el sistema POSIX (Tiempo Unix), que se basa en contar el número de segundos transcurridos desde la noche del 1 de enero de 1970 a las 00:00:00 (ignorando los segundos intercalares).[1]Sí
Esta representación es un estándar de facto en los sistemas tipo Unix y también en los programas escritos para muchos otros sistemas operativos debido al gran alcance del lenguaje de programación C. En la mayoría de sistemas de 32 bits, el tipo de dato time_t usado para guardar el contador de segundos es un entero de 32 bits con signo, es decir, que puede representar un rango de números entre -2 147 483 648 y 2 147 483 647 (-231 y 231-1; 1 bit para el signo, y 31 para representar su valor en complemento a dos), por lo que el último segundo representable con este formato será a las 03:14:07 UTC del 19 de enero de 2038, cuando el contador llegue a 2 147 483 647. Un segundo después, el contador se desbordará y saltará al valor -2 147 483 648, que causará el gran fallo de programas que interpretarán el tiempo como que están en 1901 (dependiendo de la implementación), en vez de en 2038. A su vez, esto causaría cálculo y procesamiento incorrecto y causaría un gran problema mundial.
No hay una forma sencilla de arreglar este problema para las combinaciones existentes de CPU/SO. Cambiar la definición de time_t para usar un tipo de 64 bits rompería una gran parte de la compatibilidad binaria para el software, almacenamiento de datos y, por lo general, cualquier cosa que tenga algo que ver con la representación binaria del tiempo. Cambiar time_t a un entero de 32 bits sin signo afectaría a los programas que hacen cálculos con diferencias de tiempo.
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 está todavía en proceso y se espera que se complete mucho antes de 2038. Usar un entero de 64 bits retrasaría la fecha del problema a unos 292 mil millones de años (2,9 × 1011). Es decir, 22 veces la edad aproximada del universo.
El problema hacía que los dispositivos Android se bloquearan y no reiniciaran cuando se establecía la fecha límite.[17] 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. En la versión 4.0.4 se agregó esta característica, en las versiones anteriores, el calendario mostraba fechas hasta 2104, pero al seleccionar una fecha más adelantada a la fecha límite, el calendario volvía a la fecha actual. El selector de fechas mostraba correctamente los años a simple vista, pero al poner un dedo sobre alguna fecha no contable, este marcaba su negativa, es decir, el 19 de enero de 2040 por ejemplo, a simple vista se veía correcto, pero el sistema marcaba 13 de diciembre de 1903, ya que al reiniciarse, la primera fecha mostrable es 13 de diciembre de 1901. Un dato curioso es que de esta forma el sistema no se tildaba ni reiniciaba, la única manera era dejando que el contador llegara al límite por sí mismo.[17]
En los dispositivos iOS el sistema permite cambiar la fecha hasta el 1 de enero de 2038; sin embargo, desde el iPhone 5s en adelante se solucionaría, ya que estos modelos recientes de iPhone poseen un procesador de 64 bits que lo deja fuera de este problema. Igualmente Android ya está disponible en variantes de 64 bits desde la versión 5.0 por lo que gradualmente dejará atrás este problema. Los dispositivos con Android de 32 bits, Ubuntu Phone, Ubuntu Touch o Firefox OS llegan hasta el 31 de diciembre de 2037. Los dispositivos con Windows Phone 7 permiten llegar hasta el 1 de enero de 2040. Los dispositivos Windows Phone 8 no están afectados, y cuentan fechas desde el año 1601 hasta el 3000, concretamente el 1 de enero, al llegar a las 23:59, el contador regresa 24 horas y vuelve a marcar las 00:00 01/01/3000.
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 solo puede evitarse migrando a los 64 bits.
La tecnología actual va dejando atrás gradualmente los 32 bits. Los mayores fabricantes de procesadores (Intel, AMD, Qualcomm, MediaTek y otros) ofrecen microprocesadores de 64 bits desde hace tiempo. También los desarrolladores de sistemas operativos han evolucionado hacia la plataforma de 64 bits:
De esta forma si hoy en día los 32 bits ya están siendo reemplazados, difícilmente seguirán en uso en 2038. Si todavía quedaran sistemas embebidos operando con 32 bits para aquel entonces, los fabricantes tendrían bastante tiempo para reparar el problema mediante actualizaciones.[21]
Resolver esta limitación de fecha en el sistema operativo Linux llevó a modificar todos los subsistemas e incluso más.[22] Para resolverlo se echó mano de Espacio de usuario, la Biblioteca estándar de C, POSIX, y donde la tarea resultó ser más difícil fue en el campo del Sistema de archivos virtual debido al uso de estructuras de estampado de tiempo de 64 bits (struct timespec64) en los inodo.[23] En junio de 2016 Linus Torvalds objetó uno de los cambios propuestos;[24] para junio de 2018 se pudo agregar al kernel todos los cambios propuestos y el problema fue solucionado.[25]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.