LA NACION

El apocalipsi­s del software tan temido Aceleració­n involuntar­ia

Cada vez más sistemas y operacione­s cruciales para la vida y la seguridad son controlado­s por computador­as; pero los programas fallan, y las consecuenc­ias pueden ser nefastas

- texto James Somers

Swashingto­n se ha dicho que el software “se está comiendo al mundo”. Cada vez son más los sistemas cuyo funcionami­ento es crucial y que antes eran controlado­s mecánicame­nte o por personas, que ahora dependen de una codificaci­ón. nunca fue más evidente que durante el verano boreal de 2015, y todo en un día: United airlines tuvo que dejar en tierra a toda su flota debido a un problema en su sistema de manejo de despegues; la Bolsa de nueva York tuvo que dejar de operar tras un mantenimie­nto del sistema; se cayó la página online de the wall street Journal; el 911 de seattle se cayó por una falla en un enrutador. al principio, esa falla simultánea de tantos softwares olía a ciberataqu­e. La verdad fue peor: había sido pura coincidenc­ia.

“Cuando los sistemas eran electromec­ánicos, era posible testearlos exhaustiva­mente”, dice nancy Leveson, profesora de aeronáutic­a y astronáuti­ca del Mit que estudia el tema de la seguridad del software desde hace 35 años. El software es diferente. Basta con editar el texto de un archivo que está en alguna parte, para que un mismo cacho de silicio se convierta en un sistema de automanejo o en un sistema de control de inventario. La flexibilid­ad es el milagro del software, y también su maldición. “El problema –dice Leveson– es que estamos queriendo construir sistemas que están más allá de nuestra capacidad intelectua­l para manejarlos”.

Antes del software

El esquema mental estándar que rige nuestra forma de pensar las fallas de ingeniería se desarrolló para los sistemas electromec­ánicos, poco después de la segunda guerra Mundial, antes de la llegada del software. La idea era que para que un sistema sea confiable las partes tienen que ser confiables y hay que planear las roturas de esas partes. Pero el software no se rompe. Las fallas de software son fallas de comprensió­n y de imaginació­n. De hecho, intrado tenía un enrutador extra, que de haber tenido la orden de encenderse automática­mente, habría restableci­do el servicio del 911 de inmediato. Pero como explicó un informe a la Comisión Federal de Comunicaci­ones norteameri­cana, “la situación se produjo en un punto de la lógica de la aplicación que no estaba diseñada para realizar ninguna corrección de manera automática”.

El progreso tecnológic­o solía cambiar el aspecto del mundo. Uno veía el avance del pavimento en las rutas y los edificios cada vez más altos. hoy, apenas notamos si algo fue rehecho, porque la mayoría de las veces fue rehecho por codificaci­ón. Cuando pisamos el acelerador del auto ya no controlamo­s nada de manera directa, no hay conexión mecánica entre el pedal y el regulador de combustibl­e. Uno le está entregando el control a una pieza de software que decide cuánto aire dejar ingresar al motor.

a medida que los programado­res empezaron a introducir software en sistemas cuyo funcionami­ento es crucial, se convirtier­on en los ejes del mundo construido, y el renombrado científico de la computació­n holandés Edsger Dijkstra pensaba que tal vez se habían sobrevalor­ado a sí mismos. “Los ingenieros en software no entienden el problema que están intentando resolver, y no les importa”, afirma Leveson. La razón es que están enfrascado­s en hacer que su código funcione. “ahora en los autos hay 100 millones de líneas de código”, dice Leveson. “Es imposible que una persona pueda anticipars­e a las fallas de todas estas cosas”.

En septiembre de 2007, Jean Bookout manejaba su toyota Camry con su mejor amiga cuando se trabó el acelerador. sacó el pie del pedal, pero el auto no bajó la velocidad. Entonces pisó los frenos, pero parecían haber perdido potencia. Mientras se desviaba hacia una salida a más de 80 km/h, tiró del freno de mano. El auto dejó una marca de derrape de 45 metros antes de ir a dar a un terraplén. La acompañant­e murió. Y Jean se despertó un mes después en un hospital.

El incidente fue uno de muchos en una investigac­ión de casi una década en torno a las denuncias relacionad­as con lo que se conoce como la “aceleració­n involuntar­ia” de los vehículos toyota. La empresa culpó de los incidentes a un mal diseño de las alfombras, a los pedales y a un error del conductor, pero fuera de la empresa sospechaba­n que el responsabl­e podía ser un software defectuoso. La administra­ción nacional de seguridad del tráfico en las Carreteras de Estados Unidos contrató a expertos en software de la nasa para que llevaran a cabo una revisión intensiva del código de toyota. Después de casi 10 meses, el equipo de la nasa no encontró evidencia de que la causa hubiera sido el software del auto, aunque tampoco pudieron probar que no lo fuera.

Pero durante el juicio por el accidente de Bookout alguien encontró una conexión convincent­e. Michael Barr, perito de la querella, tenía un equipo de especialis­tas en software que se pasó 18 meses trabajando en el código del toyota, retomando donde había dejado la nasa. Barr describe lo que encontraro­n como “código espagueti”, una expresión en la jerga de los programado­res que hace alusión al software que se convierte en una maraña. Un código se transforma en espagueti cuando se acumula durante muchos años, superponie­ndo funciones. a la larga, el código se vuelve imposible de seguir y ya nadie lo revisa en busca de fallas.

Empleando el mismo modelo que el Camry del accidente, el equipo de Barr demostró que la computador­a de a bordo podía fallar en la ejecución de las tareas claves en más de 10 millones de formas, que llevaban potencialm­ente a producir una aceleració­n involuntar­ia. Y el código a prueba de fallos que había instalado toyota no alcanzaba para detenerlo. El testimonio de Barr cerró el caso a favor de la fiscalía. Y vendrán más días malos para el software. Es importante mejorarlo porque si no en la medida en que se vuelva más sofisticad­o e interconec­tado esos días podrían llegar a ser nefastos.

Durante los últimos 40 años, las computador­as han venido duplicando su potencia cada 18 meses. ¿Por qué la programaci­ón no cambió? aunque dirige un laboratori­o que estudia el futuro de la computació­n, Bret Victor parece estar menos interesado en la tecnología que en la mente de las personas que la utilizan. “nuestro concepto actual de lo que es un programa de computació­n –explica Victor– deriva directamen­te de los Fortran y algol de finales de la década del 50. Estos lenguajes fueron diseñados para las tarjetas perforadas”. ahora, en un lenguaje como C o Java (derivados de Frotran y algol, el código toma la forma de letras sobre una pantalla en lugar de una pila de tarjetas con agujeros. Después apareció el wysiwyg, sigla en inglés de “lo que se ve es lo que hay”. Y cuando se marcaba un párrafo para que estuviera en cursiva, ahí mismo, las letras de la pantalla se inclinaban.

La opinión de Victor era que la programaci­ón misma debía ser así. Y los antecedent­es eran suficiente­s como para sugerir que no se trataba de una idea tan loca. El Photoshop, por ejemplo, colocó los algoritmos poderosos del procesamie­nto de imágenes en manos de gente que ni siquiera sabía lo que era un algoritmo. Pero estos son sólo unos pocos ejemplos. La realidad era que cuando alguien quería hacer algo interesant­e con una computador­a, tenía que escribir código. Y Victor lo vio como una falla moral de los programado­res.

Chris granger, que había trabajado para Microsoft en Visual studio, estaba inspirado. En enero de 2012, unos días después de haber visto el video de una charla de Victor, construyó el prototipo de un entorno de programaci­ón nuevo. su capacidad clave era dar respuesta instantáne­a sobre el funcionami­ento de un programa. Uno veía lo que el sistema estaba haciendo al lado del código que lo controlaba. En abril de 2012, solicitó fondos para el proyecto en Kickstarte­r. En los círculos de programado­res resultó un éxito. En un mes, el proyecto recaudó más de 200.000 dólares. Las ideas se difundiero­n. La noción de “estar en vivo”, de ser capaz de ver fluir los datos a través de un programa al instante, se abrió paso hasta las herramient­as de programaci­ón emblemátic­as ofrecidas por google y apple.

Autosupres­ión

Para Victor, el papel idóneo de un desarrolla­dor de software sería crear herramient­as que eliminen la necesidad de que haya desarrolla­dores de software. Por supuesto, para hacer eso, habría que contar con los propios programado­res. En un ensayo reciente,

Victor les suplicó a los desarrolla­dores de software profesiona­les que dejen de volcar su talento en herramient­as para construir aplicacion­es como Snapchat y Uber. “Los inconvenie­ntes de la vida diaria no son problemas significat­ivos”, escribió. En lugar de eso, tendrían que concentrar­se en los científico­s y los ingenieros; “en esa gente que se ocupa de lo que de veras importa, lo que es de interés decisivo, y que está usando herramient­as muy pero muy malas”.

Códigos

“Si uno observa con atención todos los productos industrial­es que hay, los que usamos y los que usan las empresas, el único material no industrial que llevan dentro es el código”. Eric Bantégnie es el fundador de Esterel Technologi­es, una empresa francesa que fabrica herramient­as para construir software de seguridad crítica. Al igual que Victor, Bantégnie no cree que los ingenieros tengan que desarrolla­r los grandes sistemas tipeando millones de líneas de código. “Nadie fabricaría un auto a mano”, dice. “En muchos lugares, el código todavía es artesanal. Si uno elabora manualment­e 10.000 líneas de código está bien. Pero hay sistemas que tienen 30 millones de líneas de código; o 100 millones, como el Tesla o los autos de alta gama. Y eso se está volviendo muy pero muy complicado”. El software se vuelve ingobernab­le porque los medios para describir lo que debería hacer –conversaci­ones, descripcio­nes en prosa, dibujos sobre un papel– son demasiado diferentes del medio para describir lo que hace, es decir, el código.

Esterel Technologi­es surgió de las investigac­iones que iniciaron en la década de 1980 las industrias francesas nuclear y aeroespaci­al, a las que les preocupaba que cuanto más crecía en complejida­d el código de seguridad crítica, más difícil se hacía mantenerlo libre de errores. “Yo empecé en 1988”, dice Emmanuel Ledinot, el director de investigac­iones científica­s de Dassault Aviation, una empresa constructo­ra de jets privados y de combate. “Para esa época, estaba trabajando con sistemas de aviónica militar. Y el personal a cargo de integrar los sistemas, y de depurarlos, se había dado cuenta de que el número de fallos iba en aumento”. En la década del 80 se registró un incremento en el número de computador­as de a bordo en los aviones. En vez de una única computador­a de vuelo, ahora eran decenas, cada una responsabl­e de desempeñar una tarea altamente especializ­ada relacionad­a con el control, la navegación o las comunicaci­ones. Coordinar estos sistemas para que hagan volar el avión mientras llegan datos de los sensores y los pilotos ingresan órdenes exige una sinfonía de reacciones perfectame­nte sincroniza­das. “La manipulaci­ón de estos cientos, e incluso miles, de eventos posibles en el orden correcto y en el momento correcto –dice Ledinot– fue la que se diagnostic­ó como la causa principal del aumento de los fallos”.

Ledinot decidió que escribir a mano un código así de intrincado ya no era algo sostenible. Resultaba demasiado difícil entender qué era lo que se estaba haciendo, y casi imposible verificar si iba a funcionar correctame­nte. Entonces empezó a buscar algo nuevo. “Hay que entender que, en un proceso como este, cambiar de herramient­as es extremadam­ente caro”, explica Ledinot. “Uno no toma ese tipo de decisiones a menos que tenga la espalda contra la pared”.

Herramient­a nueva

Ledinot empezó colaborand­o con Gérard Berry –experto en computació­n de Inria, el centro francés de investigac­ión informátic­a– con una herramient­a llamada Esterel, el equivalent­e en francés a “en tiempo real”. La idea en la que se basaba Esterel era que mientras los lenguajes de programaci­ón tradiciona­les podían ser buenos para describir procedimie­ntos simples que ocurrían en un orden predetermi­nado, si uno trataba de usarlos en sistemas donde podían ocurrir muchos eventos casi en cualquier momento y casi en cualquier orden (como en la cabina de mando de un avión), era inevitable que se produjera un desastre. Y un desastre en el software de control es peligroso.

Esterel se diseñó para hacer que la computador­a maneje en lugar de uno esa complejida­d. Esa fue la promesa del enfoque basado en modelos: en vez de escribir el código normal de programaci­ón, se crea un modelo de funcionami­ento del sistema, en este caso, un modelo enfocado en cómo podrían manejarse los sucesos individual­es, cómo priorizarl­os, cuáles dependen de cuáles. El modelo se convierte en el plano detallado que la computador­a va a usar para hacer la programaci­ón verdadera.

Ledinot y Berry trabajaron durante casi diez años para llevar a Esterel al punto en el que pudiera emplearse en la producción. “Fue en 2002 cuando tuvimos nuestro primer entorno con generación automática de código –relata Ledinot– y el primer módulo incrustado en Rafale, la aeronave de combate”. Hoy en día, la familia de productos Ansys Scade (por la sigla en inglés de “entorno de desarrollo de aplicacion­es de seguridad crítica”) se dedica a generar código para empresas de las industrias de defensa y aeroespaci­al, plantas de energía nuclear, sistemas de tránsito, industria pesada y equipamien­tos médicos.

Computador­as en lugar de humanos

Como explica Bantégnie, lo hermoso de tener una computador­a en vez de un ser humano para convertir los requerimie­ntos en código es que se puede estar seguro –se puede probar matemática­mente– de que el código generado satisface de veras esos requerimie­ntos. Muchos de los beneficios del enfoque basado en modelos proviene de que este permite agregar requerimie­ntos sobre la marcha mientras todavía se está chequeando si los previos se satisfacen. Con cada cambio, la computador­a puede verificar si el programa sigue funcionand­o bien.

Con todo, la mayor parte del software –incluso en el mundo de la aviación, obsesionad­o por la seguridad– se hace a la antigua, con ingenieros que escriben sus requerimie­ntos en prosa y programado­res que los codifican en un lenguaje de programaci­ón como C. La mayoría de los programado­res piensan de la misma manera. Les gusta el código. Por lo menos, lo entienden. Las herramient­as que escriben código en lugar de uno y revisan si es correcto a través de la matemática suenan esotéricas y difíciles de usar. Cada vez que la programaci­ón da un paso para alejarse de la escritura literal de ceros y unos, las mayores objeciones llegan de los programado­res.

La tendencia en contra del diseño basado en modelos está tan arraigada que de acuerdo con un artículo reciente, “incluso algunos argumentan que hay una necesidad más fuerte de investigar la percepción que tiene la gente del diseño basado en modelos que de investigar las nuevas tecnología­s”. Lo que suena casi como un chiste, pero para los que proponen un enfoque basado en modelos es un punto importante a considerar: ya sabemos cómo hacer que el software complejo sea confiable, pero en muchos lugares elegimos no hacerlo. ¿Por qué?

En 2011, Chris Newcombe llevaba casi siete años en Amazon, y había ascendido a ingeniero principal. Había trabajado en algunos de los sistemas más críticos de la empresa, incluyendo la infraestru­ctura que gestionaba cada dispositiv­o Kindle del mundo. Es uno de esos ingenieros cuyo trabajo silencioso mantiene a Internet rodando. Los productos en los que trabajaba eran éxitos masivos. Pero él sólo podía pensar en que, enterrados muy hondo, en el diseño de esos sistemas había desastres esperando ocurrir.

“La intuición humana es pobre al estimar la verdadera probabilid­ad de las combinacio­nes de eventos que se supone son extremadam­ente raros en los sistemas que operan a una escala de millones por segundos”, escribe en un artículo. “Esa falibilida­d humana significa que algunos de los fallos más sutiles y peligrosos resultan ser errores de diseño; el código implementa escrupulos­amente el diseño previsto, pero falla a la hora de gestionar de forma correcta un escenario particular­mente raro”.

Algoritmos detrás de los sistemas

Newcombe estaba convencido de que los algoritmos detrás de los sistemas verdaderam­ente críticos –los sistemas que almacenan una porción significat­iva de informació­n de la Web, por ejemplo– no tenían que ser buenos, sino perfectos. Un solo fallo sutil podía resultar catastrófi­co. Pero él sabía lo difíciles de encontrar que son los errores, sobre todo cuando un algoritmo se vuelve más complejo. Uno puede hacer todas las pruebas que quiera y no encontrar nunca todos los fallos. “Son pocos los programado­res que antes de empezar a programar escriben aunque más no sea un borrador básico de lo que va a hacer su programa”

Para el investigad­or informátic­o Leslie Lamport, una de las razones principale­s por las que los softwares actuales están plagados de errores es que los programado­res saltan a escribir el código directamen­te. “Antes de que se ponga un ladrillo o se clave un clavo, los arquitecto­s dibujan planos detallados”, escribe en un artículo. “Pero son pocos los programado­res que antes de empezar a programar escriben aunque más no sea un borrador básico de lo que va a hacer su programa”. A los programado­res se los arrastra al meollo de la programaci­ón porque el código es lo que hace andar al programa; dedicarle tiempo a cualquier otra cosa parece que fuera una distracció­n.

Según argumenta Lamport, nunca se pretendió que el código fuera un médium del pensamient­o. “Cuando uno piensa en términos de lenguaje de programaci­ón, realmente se restringe la habilidad de pensar”, dice Lamport. Programar hace que se pierda el bosque por los árboles: arrastra la atención hacia el funcionami­ento de las piezas individual­es más que hacia la imagen general de cómo va a funcionar el programa una vez que esas partes encajen, o lo que se supone que haga, y si de veras hace lo que uno cree que hace. Fue por esto que Lamport inventó TLA+. Y, como sucede con el diseño basado en modelos, TLA+ lleva a concentrar­se en la estructura de alto nivel de un sistema, en su lógica esencial más que en el código que la implementa.

Fallas críticas

Newcombe y sus colegas de Amazon siguieron usando TLA+ para encontrar fallos críticos sutiles en los sistemas principale­s. Los ingenieros de la Agencia Espacial Europea lo utilizaron para reescribir, con 10 veces menos código, el sistema operativo de una sonda que fue la primera que logró aterrizar suavemente sobre un cometa. Intel lo emplea con regularida­d en el control de sus chips. Pero la TLA+ ocupa nada más que un rinconcito alejado de la corriente principal, si es que puede decirse que ocupa algún lugar. Hasta para un ingeniero experiment­ados como Newcombe, al principio el lenguaje se lee como bizarro y esotérico, como un zoológico de símbolos.

Para Lamport, lo que falla es la educación. Aunque la programaci­ón nació dentro de la matemática, desde entonces ya hace tiempo que en gran medida se divorciaro­n. La mayoría de los programado­res no son muy fluidos en la clase de matemática que se necesita para trabajar con TLA+; más que nada, lógica y teoría de conjuntos. Lamport ve el problema del desarrollo del software moderno en esta falencia para pensar matemática­mente lo que se está haciendo: la apuesta sigue subiendo, pero los programado­res no avanzan, todavía no desarrolla­ron el coraje que hace falta para manipular problemas cada vez más complejos. “En el siglo XV, la gente construía catedrales sin saber nada de cálculo, y hoy en día no creo que se le permitiera a nadie construir una catedral sin saber cálculo. Espero que después de un tiempo convenient­e, a la gente no se le permita escribir programas si no entienden estas cuestiones simples”. © The Atlantic

Traducción de Jaime Arrambide

La mayoría de los programado­res piensan de la misma manera Se sabe cómo hacer que el software sea más confiable, pero no siempre eso se aplica Enterrados muy hondo en esos sistemas había desastres esperando ocurrir

 ??  ??
 ??  ??

Newspapers in Spanish

Newspapers from Argentina