lunes, 20 de octubre de 2014

Y2K38: El problema del año 2038


¿Alguna vez te haz preguntado de como funciona un Sistema Operativo/Software de algún objeto tecnológico como un simple Celular o un Computador?, si sabes sobre computadoras deberías haber escuchado alguna vez algo sobre el sistema "t-time".
Bueno, si no lo sabes este el sistema utilizado en la mayoría de los sistemas utilizados desde el año 1970.

El problema afecta a los programas que usen la representación del tiempo basada en el sistema POSIX, que se basa en contar el número de segundostranscurridos desde el 1 de enero de 1970 a las 00:00:00 (ignorando los segundos intercalares).

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 operativosdebido al gran alcance del lenguaje de programación C. En la mayoría de sistemas de 32 bits, el tipo de datotime_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 el valor absoluto), 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 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 problema mundial.
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.



En los dispositivos iOS 7 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 ó 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.



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 de64 bits rompería 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 paraarquitecturas 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 unos 2,90 billones de años (2,9 x 1012). Es decir, 220 veces la edad aproximada del Universo.



¿Qué es lo malo de una simple fecha?, esto provocaría una CATÁSTROFE MUNDIAL, y es porque esto causaría un problema de Cálculo y procesamiento incorrecto, tanto sus consecuencias (como lo anterior que dije) es el NO FUNCIONAMIENTO de estos Dispositivos, los cuales serían basados en 32-Bits, es decir, la MAYORÍA. Como en el que tu Dispositivo Android se reinicie y por arte de Magia se bloquee probablemente para siempre o también podría pasar que por ejemplo tienes un libro prestado de la bibiotecla en el año 2038 y de momento las computadoras van a decir que tienes el libro prestado por mas de 100 años! ,Todos los bancos basan su sistema en esto y podrían haber catástrofes
con todos las cuentas y la mayoría de tarjetas de crédito/débito colapsaran y de dejaran de funcionar

¿CÓMO EVITARLO?, hasta ahora se busca una solución para los Sistemas de 32-Bits para hacerlos migrar a un Sistema de 64-Bits que en vez de reiniciar a 1901, sería a una fecha de Millones de Años más, lo cual, es HORA de OPTAR por Celulares (Ej: iPhone 5S, Galaxy S5 que probablemente dicen que se basará en un sistema de 64-Bits) u Computadoras de 64-Bits, tanto Windows como iOS.




No hay comentarios:

Publicar un comentario