El número increíblemente simple que hace colapsar las computadoras
El martes 4 de junio de 1996 se recordará por siempre como un día oscuro para la Agencia Espacial Europea (AEA).
El primer vuelo no tripulado del cohete Ariane 5, cargado con cuatro costosos satélites científicos, se convirtió en una bola de fuego y humo 39 segundos después de empezar.
Se estima que la explosión significó una pérdida de US$370 millones.
¿Qué pasó? No hubo falla mecánica ni acto de sabotaje. No: el lanzamiento terminó en desastre gracias a un simple error de software. Una computadora superada por la matemática: esencialmente, porque se vio abrumada por un número más grande de lo que se esperaba.
¿Cómo es posible que una computadora quedara aturdida por números? Pues resulta que tales errores son responsables de una serie de desastres y percances en años recientes, que han terminado en la destrucción de cohetes, el extravío de naves espaciales y el lanzamiento de misiles fuera de objetivo.
¿Qué los provoca y cómo ocurren?
Imagínate que tratas de representar el valor de, digamos, 105.350 kilómetros en un odómetro con un valor máximo de 99.999.
El contador volverá al valor de 00.000 y contará a partir de ahí hasta 5.349, el saldo restante.
Esta es la misma especie de inexactitud que condenó al fracaso el lanzamiento del Ariane en 1996. Más técnicamente, se le llama "desbordamiento de entero" (integer overflow, en inglés). Significa que los números son demasiado grandes para el sistema de almacenamiento, lo que puede ocasionar el mal funcionamiento.
Lanzamiento fallido
La investigación del incidente del Ariane encontró que un proceso que había quedado en el software de una generación anterior de cohetes, el Ariane 4, había capturado una lectura inesperadamente alta de la velocidad lateral del nuevo y más rápido vehículo.
El software del Ariane 5 no pudo manejar esa cifra. Una secuencia de autodestrucción se inició. Un par de segundos después, el cohete era historia.
Esta clase de problemas surge con una frecuencia sorprendente. Se sospecha que la razón por la cual la Nasa perdió contacto con la sonda espacial Deep Impact en 2013 fue que llegó a un límite de enteros.
Hace poco se informó que el Boing 787 puede estar afectado por un problema similar.
La unidad de control que maneja la distribución de energía a los motores de la nave entran en modo de respaldo automáticamente –y apagan los motores- si se la deja encendida por más de 248 días.
Hipotéticamente, los motores podrían apagarse de repente incluso en mitad de un vuelo. Aunque se han dado a conocer muy pocos detalles –la Autoridad Federal de Aviación (FAA, por sus siglas en inglés) y Boeing declinaron la oportunidad de dar su opinión para este artículo-, algunos observadores aficionados han destacado que 248 días (contados en centésimas de segundos) equivalen al número2.147.483.647, lo cual es muy significativo.
¿Y por qué? Sucede que 2.147.483.647 es el valor positivo máximo que puede almacenarse en un procesador de 32 bits, comúnmente instalado en muchos sistemas de computación.
Límite intrigante
Los números son infinitos, así que ¿por qué escoger un almacenamiento tan limitado?
La respuesta es que, tradicionalmente, las computadoras han exigido eficiencia para todo. El espacio que se usaba para almacenar información solía ser mucho más costoso de lo que es ahora y procesar valores más grandes tomaba más tiempo.
Si te mantenías dentro de ciertos límites, el software funcionaba mejor. Los sistemas de dirección de un cohete hacen muchas cuentas críticas muy rápido, así que cualquier número de sobra realmente importa.
El problema con eso es que, como demostró el Ariane 5, tales limitaciones no siempre son percibidas como problemáticas de antemano.
"Tenemos que reconocer que con el software siempre manejamos una realidad aproximada", explica Bill Scherlis, un experto de la Carnegie Mellon University. "Siempre hay una negociación entre el costo de lograr una representación más exacta y el beneficio de la eficiencia".
El matemático Douglas Arnold, de la Universidad de Minnesota, incluye el incidente del Ariane 5 en una página web titulada "Algunos desastres atribuibles a mala computación numérica".
Arnold también resalta un caso de 1991 en el que un misil Patriot falló en su intento de interceptar un ataque de misiles Scud iraquíes contra unas barracas del ejército estadounidense durante la Guerra del Golfo.
En este caso, un error de desbordamiento causó que el sistema de defensa no pudiera seguir la trayectoria del misil Scud, que viajaba a una velocidad de 1,7km/s, y en su lugar escaneara el espacio aéreo a más de 500 metros de distancia del objetivo.
Como resultado, el Scud cayó sobre las barracas, con saldo de 28 soldados muertos y 98 personas heridas.
Error de Gangnam
No todos los problemas de desbordamiento son tan destructivos como estos ejemplos, pero con frecuencia crean efectos inesperados.
Por ejemplo, en el videojuego Civilization, un error imprevisto ocasionó que el pacífico personaje de Gandhi se volviera hostil.
Cuando los jugadores escogían una cierta modalidad de juego, el valor que definía la agresividad de Gandhi se echaba para atrás hacia el cero, y de ahí seguía retrocediendo hasta dar el valor máximo.
En consecuencia, Gandhi amenazaba a los jugadores con armas nucleares cada vez que aparecía, lo que hizo reír a muchos de ellos.
En diciembre, se informó que Gangnam Style, el video más popular de todos los tiempos en YouTube, había "roto" el contador del sitio web.
Aparentemente, el contador había sido programado para llegar solo hasta2.147.483.647 (de nuevo, el valor positivo máximo de un procesador de 32 bits).
Resultó un buen truco publicitario para YouTube, que actualizó el contador. El nuevo máximo está muy por arriba de los nueve cuatrillones.
Con frecuencia es este tipo de supuesto, que inicialmente se piensa razonable, lo que causa problemas más adelante.
El desbordamiento más sonado de la historia, que muchos recordarán, fue el cacareado "error del milenio". Aunque generalmente se lo considera un fiasco, el Y2K causó algunos dolores de cabeza.
Con el Y2K, el problema era más simple. ¿Qué pasa cuando uno registra los años sólo con los últimos dos dígitos? 1900 se vuelve lo mismo que 2000.
Mucha gente se dio cuenta de que esto causaría confusión en los sistemas de computación que almacenaban valores anuales de esta manera. Al final, no cayeron aviones del cielo, pero hubo algunas consecuencias interesantes.
Por ejemplo, el equipo de detección de radiación de la localidad japonesa de Ishikawa colapsó a medianoche; 150 máquinas de apuestas de un hipódromo de Delaware fallaron, y varios sitios web dieron como nueva fecha "1 de enero de 19100".
Doce años después, en un incidente similar, una mujer sueca de 1905 de nombre Anna Eriksson recibió una carta que la invitaba a comenzar en el jardín de infantes porque el software había sido diseñado para contactar a los individuos nacidos en "07" (2007, no 1907).
La incapacidad para reconocer correctamente el año llevó a que millones de tarjetas de débito y crédito no pudieran usarse en Alemania el día de Año Nuevo de 2010.
El año 2038
Hace unos 15 años, al programador William Porquet se le ocurrió pensar por anticipado en otra fecha crucial: las 3.14.07 de la mañana, GMT, del martes 19 de enero de 2038.
Ese será el momento en que el número de segundos que habrán pasado desde el 1 de enero de 1970 excederá el valor máximo de muchos registros de fecha y hora de muchos computadores hoy.
Como en el caso del error del milenio, si no nos preparamos podemos terminar en colapso.
"Escribí por primera vez sobre el asunto en 1999", comenta Porquet. "Adquirí el dominio 2038.org, primero como una travesura. Pero luego me di cuenta de que hay algunos problemas reales".
A Porquet le preocupan partes viejas de software a las que nadie presta ya atención en redes bien establecidas. Cuántas de ellas seguirán operando en 23 años y qué consecuencias tendrá eso es algo que nadie sabe.
"Muchos sistemas de computación -señala Porquet- podrían fallar en forma predecible. Pero lo harán de modos impredecibles".
Error en el tiempo
Markus Kuhn, un científico de computación de la Universidad de Cambridge, explica que los errores relacionados con la fecha crean interés porque sus consecuencias son impredecibles, pero también porque "no son inesperados", y la gente puede especular sobre lo que puede pasar cuando el día temido amanezca.
Kuhn piensa que el problema de 2038 será menos significativo que el Y2K porque el error del milenio preparó a la industria de la computación para hacer las correcciones necesarias.
De hecho, ese es el plan de William Porquet. "Espero que sea algo que me saque de un semi retiro por una gran cantidad de dinero", dice medio en serio, medio en broma.
Para Kuhn, el problema interesante no es el error de desbordamiento en sí, sino otro que ocurrirá el próximo mes de junio.
El año 2015 será un segundo más largo que 2014 gracias a una medida tomada para corregir la discrepancia entre el tiempo astronómico (el que se basa en el movimiento de rotación de la Tierra) y el tiempo atómico (el método más exacto de medición del tiempo).
La última vez que eso pasó fue 2012, y ocasionó el colapso de muchas computadoras. Afortunadamente, dice Kuhn, esta vez estaremos mejor preparados.
Parece que, sin importar lo que hagamos, ciertos números y cálculos siempre van a confundir a las computadoras, causando errores o cosas peores.
"Hemos aprendido mucho de la experiencia del Y2K y otros eventos similares", dice Scherlis. "Pero en realidad siempre estamos haciendo aproximaciones y teniendo que hacer negociaciones en el terreno de la ingeniería. Eso nos acompañará para siempre".