{"id":466,"date":"2009-06-29T15:13:17","date_gmt":"2009-06-29T20:13:17","guid":{"rendered":"http:\/\/eaprende.com.mandril.avnam.net\/blog\/?p=466"},"modified":"2009-06-29T15:37:22","modified_gmt":"2009-06-29T20:37:22","slug":"el-problema-del-ano-2038-efecto-y2k38","status":"publish","type":"post","link":"https:\/\/www.eaprende.com\/blog\/2009\/06\/29\/el-problema-del-ano-2038-efecto-y2k38\/","title":{"rendered":"El problema del a\u00f1o 2038 (Efecto Y2K38)"},"content":{"rendered":"<p><strong>Una limitaci\u00f3n t\u00e9cnica en el tipo de dato utilizado para representar el tiempo en la mayor\u00eda de los sistemas inform\u00e1ticos actuales, podr\u00eda convertir en chatarra in\u00fatil una buena parte de los ordenadores y equipos electr\u00f3nicos actuales. El problema se presentar\u00eda a las 03:14:07 (UTC) del 19 de enero de 2038, y tiene su origen en una variable interna utilizada para contar el tiempo en los sistemas de 32 bits.<\/strong><\/p>\n<p>Muchos de los que tuvieron la suerte de utilizar alguno de los viejos ordenadores de 8 bits, como el primer IBM PC o las home computers anteriores, todav\u00eda se maravillan con el poder de procesamiento disponible en los modernos sistemas basados en procesadores de 32 bits. Es que el numero de bits que puede manejar el microprocesador de turno define en buena medida la potencia del sistema que controla y, al tratarse de una funci\u00f3n del tipo \u201c<em>2 a la n<\/em>\u201d, donde \u201c<em>n<\/em>\u201d es el n\u00famero de bits, las plataformas de 32 bits son mucho m\u00e1s que cuatro veces m\u00e1s poderosas que las de 8.<\/p>\n<p>Como saben los programadores (o aquellos que leyeron nuestro cursillo de programaci\u00f3n en Visual Basic o de microcontroladores) en una variable de 8 bits se pueden almacenar n\u00fameros comprendidos entre 0 y 255 (\u201c<em>2 a la 8<\/em>\u201d combinaciones posibles), mientras que en una de 32 bits el rango va de 0 a 18446744073709551615 (\u201c<em>2 a la 32<\/em>\u201d). En ambos casos, cuando se necesita trabajar con n\u00fameros con signo, se divide en dos el rango completo para incluir los n\u00fameros negativos, as\u00ed que los extremos pasan a ser -128 \/ 127 y -2147483648 \/ 2147483647. Como puede verse, las plataformas de 32 bits son mucho m\u00e1s poderosas que las de 8. Sin embargo, puede que sean las responsables de una supuesta cat\u00e1strofe inform\u00e1tica conocida como \u201c<strong>el efecto 2038<\/strong>\u201d.<\/p>\n<p>Para comprender el origen del problema necesitamos conocer un poco m\u00e1s a fondo la forma en que se gestionan internamente las fechas en los ordenadores, aclarando que por \u201c<em>ordenadores<\/em>\u201d tambi\u00e9n se entienden los sistemas integrados, como aquellos responsables de mantener tu casa calefaccionada, el piloto autom\u00e1tico de un avi\u00f3n o tu tel\u00e9fono m\u00f3vil conectado a la red. La gran mayor\u00eda de estos sistemas inform\u00e1ticos funcionan con\u00a0 software escrito en uno de los m\u00e1s populares y robustos lenguajes de programaci\u00f3n de todos los tiempos: <strong>el lenguaje C<\/strong>. En la mayor\u00eda de sistemas de 32 bits se utiliza el tipo de dato <em>time_t<\/em> &#8211; entero de 32 bits con signo- para guardar el valor de un contador de segundos interno.<\/p>\n<p>B\u00e1sicamente, el funcionamiento es el siguiente: se toma una fecha como base y el sistema en cuesti\u00f3n <strong>cuenta los segundos que han pasado desde ese momento hasta el actual<\/strong>. El resultado es almacenado en la variable de 32 bits que es utilizada cada vez que alguna aplicaci\u00f3n necesita conocer la fecha y hora para poder hacer su tarea. El valor de la variable, que expresa el\u00a0 n\u00famero de segundos transcurridos desde las <em>00:00:00 horas del 1 de enero de 1970<\/em>, se convierte en la fecha completa (hora-minuto-segundo; d\u00eda-mes-a\u00f1o) mediante un algoritmo muy simple, y todos contentos.<\/p>\n<p>Un minuto tiene 60 segundos, una hora tiene 60 minutos (o 3600 segundos), un d\u00eda 24 horas (o 86400 segundos), y un a\u00f1o tiene aproximadamente 365.25 d\u00edas (o 31557600 segundos). Como puede verse, a medida que pasan los a\u00f1os el valor almacenado en la bendita variable de 32 bits se hace m\u00e1s grande. <em>Mucho<\/em> m\u00e1s grande. No es muy dif\u00edcil dividir el m\u00e1ximo valor de esta porci\u00f3n de la memoria (2147483647) por el n\u00famero de segundos de un a\u00f1o (31557600), para darse cuenta que en algo m\u00e1s de 68 a\u00f1os la variable se \u201c<em>desbordar\u00e1<\/em>\u201d. Esto significa que exactamente <strong>a las 03:14:07 UTC del 19 de enero de 2038, el contador interno de casi todos los sistemas inform\u00e1ticos programados en C llegar\u00e1 a 2147483647<\/strong> y, un segundo despu\u00e9s, saltar\u00e1 al valor -2147483648.<\/p>\n<p>Concretamente, el problema afecta a los programas que usan la representaci\u00f3n del tiempo basada en el sistema <strong>POSIX<\/strong>, que es el explicado en el p\u00e1rrafo anterior.\u00a0 Es la representaci\u00f3n est\u00e1ndar en los sistemas <em>tipo <\/em><strong><em>Unix<\/em><\/strong> y en todos los programas escritos en el lenguaje de programaci\u00f3n C. La mayor\u00eda del software actual cae dentro de ese grupo y fallar\u00e1n, dependiendo de como est\u00e9n implementados,\u00a0 como si estuviesen funcionando en 1901 \u00f3 1970, en vez de en 2038.<\/p>\n<p>A pesar de ser un problema bien conocido (<em>los programadores conocen esta limitaci\u00f3n desde la implementaci\u00f3n misma del lenguaje C<\/em>), no existe una forma sencilla de solucionar este problema. Podr\u00eda cambiarse el tipo de variable empleado por un entero de 32 bits sin signo, pero esto har\u00eda que todos los programas que\u00a0 hacen c\u00e1lculos con diferencias de tiempo fallen. Y reescribir por completo esas aplicaciones es un trabajo enorme, que a veces ni siquiera puede encararse. Tambi\u00e9n puede creerse (<em>err\u00f3neamente<\/em>) que, utilizando una variable de 64 bits podr\u00edamos salir del paso, pero al igual que con las de 32 bits sin signo, <strong>se perder\u00eda la compatibilidad binaria con el resto del software.<\/strong><\/p>\n<p>Es posible que la plataforma \u201c<strong>PC<\/strong>\u201d (o lo que sea que utilicemos como ordenador personal en 2038) est\u00e9 exenta del problema. Actualmente los procesadores de 64 bits est\u00e1n convirti\u00e9ndose en la norma, y la mayor\u00eda de sistemas operativos para arquitecturas de 64 bits utilizan enteros de 64 bits para<em> time_t.<\/em> La migraci\u00f3n a estos sistemas seguramente estar\u00e1 lista mucho antes del \u201c<strong>D\u00eda D<\/strong>\u201d. Sin embargo, varios cientos de millones de peque\u00f1os y an\u00f3nimos dispositivos que hoy funcionan con n\u00facleos de 32 bits todav\u00eda estar\u00e1n dando vueltas en 2038, y ocasionaran alg\u00fan que otro problema. A diferencia de los SO como <strong>Linux<\/strong> o <strong>Windows<\/strong>, los programas de muchos de esos sistemas son escritos por particulares o empresas peque\u00f1as, que quiz\u00e1s ni siquiera sigan en el negocio dentro de 30 a\u00f1os, por lo que dif\u00edcilmente reescriban sus aplicaciones.<\/p>\n<p>Seguramente te est\u00e9s preguntando cu\u00e1ndo volveremos a estar en esta situaci\u00f3n si, en lugar de una variable de 32 bis, utilizamos una de 64. La diferencia entre el rango que pueden manejar es tan grande, que el efecto se retrasar\u00eda unos 290 mil millones de a\u00f1os. Si logramos pasar sin problemas el 2038, el pr\u00f3ximo evento de este tipo ocurrir\u00eda el 4 de diciembre del a\u00f1o 292 277 026 596 a las 15:30:08 UTC, arruin\u00e1ndoles el domingo a m\u00e1s de cuatro usuarios de ordenadores.<\/p>\n<p>fuente : http:\/\/www.neoteo.com\/el-problema-del-ano-2038-efecto-y2k38.neo<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una limitaci\u00f3n t\u00e9cnica en el tipo de dato utilizado para representar el tiempo en la mayor\u00eda de los sistemas inform\u00e1ticos actuales, podr\u00eda convertir en chatarra in\u00fatil una buena parte de los ordenadores y equipos electr\u00f3nicos actuales. El problema se presentar\u00eda a las 03:14:07 (UTC) del 19 de enero de 2038, y tiene su origen en [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[],"tags":[],"_links":{"self":[{"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/posts\/466"}],"collection":[{"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/comments?post=466"}],"version-history":[{"count":3,"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/posts\/466\/revisions"}],"predecessor-version":[{"id":467,"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/posts\/466\/revisions\/467"}],"wp:attachment":[{"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/media?parent=466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/categories?post=466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.eaprende.com\/blog\/wp-json\/wp\/v2\/tags?post=466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}