Los lenguajes de software con los que construimos nuestra vida 'online' priorizan la novedad y la rapidez porque hemos querido
Un compañero recientemente describió el plan de viernes noche divertido para su hijo adolescente: quedarse en casa y chatear online. De pascuas a ramos acude a alguna fiesta donde todos sus amigos se hablan a través de sus portátiles.
Nos estamos acostumbrando más y más a vivir en estos espacios virtuales - pero aún falta por hacer una importante distinción entre espacios virtuales y los espacios tangibles y físicos por los que nos movemos. Normalmente esperamos poder atravesar un puente o adentrarnos en un edificio sin que la estructura se derrumbe. No disponemos de este nivel de confianza con el software.
Lo creas o no, podríamos, en un futuro no tan lejano, realmente vivir en un mundo donde el software no falla aleatoriamente y catastróficamente. Nuestros sistemas de software podrían repeler los ataques. Nuestros perfiles privados de redes sociales y datos médicos podrían ser vistos sólo por los que dispongan de la autorización adecuada. Sólo necesitamos los arreglos acertados.
El problema con el software moderno es que hemos estado construyendo "rascacielos" con los mismos materiales y técnicas que utilizamos para construir chozas y cabañas. El software empezó como una colección de ladrillos: procedimientos sencillos, secuencias de comandos para realizar cálculos, juegos y curiosidades. Décadas después, disponemos de millones de procedimientos que interactúan entre sí en máquinas interconectadas con acceso a todo tipo de informaciones secretas. Y aun así, seguimos utilizando lenguajes y herramientas similares.
Si queremos que nuestros sistemas contengan menos vulnerabilidades, necesitamos emplear mejores materiales de construcción. El lenguaje que emplea la gente hoy facilita demasiado que el programador cometa errores, y dificultan demasiado la detección de errores.
Un enfoque mejor emplearía lenguajes que dan las garantías que necesitamos. La vulnerabilidad Heartbleed (ver Heartbleed será irreparable en muchos dispositivos) sucedió porque a alguien se le olvidó comprobar que un paquete de memoria terminó donde debía hacerlo. Esto sólo podía suceder con un lenguaje de programación donde el programador es el responsable de gestionar la memoria. Así que, ¿por qué no utilizar lenguajes que gestionan la memoria de forma automática? ¿Por qué no encargar a los propios lenguajes de programación que carguen con el trabajo pesado?
Otro enfoque consistiría en hacer el software más fácil de analizar. A Facebook le supuso un reto tan complicado descifrar el software que utilizaba que creó Hack y Flow, versiones anotadas de PHP y Javascript, para que ambos lenguajes fueran más comprensible (ver Cómo los distintos lenguajes de Facebook y Google imponen sus filosofías de empresa).
En parte, la culpa es nuestra. Nos divertimos con el mucho online, así que tendemos a permitir que las páginas web y las apps hagan lo que quieran con nuestros datos personales. Empresas de software responden con la producción continua de características nuevas tan rápido como puedan, utilizando los materiales y herramientas más cómodos a costa de la seguridad.
El cambio no se producirá hasta que exijamos que se haga. Nuestro software podría ser tan bien hecho y fiable como nuestros edificios. Para que esto ocurra, todos tendremos que valorar la solvencia técnica por encima de la novedad. Depende de nosotros hacer que la vida online sea tan segura como lo es placentera.
Jean Yang es profesora adjunta de informática de la Universidad de Carnegie Mellon, y la cofundadora Cybersecurity Factory, un acelerador enfocado en la seguridad del software.