Jonathan Protzenko es uno de los investigadores del grupo RiSE (Research in Software Engineering o Investigación de Ingeniería de Software) de Microsoft Research. Actualmente se encuentra trabajando en el diseño de mejores herramientas de software para hacer que ese creciente ecosistema sea más seguro, pues cada mañana se despierta preocupado por el estado de este entorno.
En una entrevista para el blog de investigación de Microsoft, Protzenko ha indicado que RiSE está enfocado en muchos aspectos de la ingeniería de software, con especial enfoque en los lenguajes de programación.
“Lo que me levanta por la mañana es el hecho de que hay una gran cantidad de software que necesita que intervengamos y hagamos algo al respecto. Hace poco vi un anuncio de un alimentador de mascotas que tiene una cámara y que puede reportarme en mi teléfono inteligente. Lo que pensé de inmediato fue que iba a ser un fallo de seguridad y pronto habrá videos de mi gato en todo el internet”.
Ese sería sólo un pequeño ejemplo de la ansiedad que le atrapa al investigador, ya que cuando piensa en los millones de dispositivos que están listos para ser pirateados se acrecienta su inquietud por el estado del ecosistema del software.
En este sentido, uno de los aspectos importantes que desarrollan en el grupo RiSE es lo relativo a los lenguajes de programación. Él ha recordado que se han desarrollado cientos, si no miles, de éstos y siempre aparecen nuevos.
“Creo que una de las razones es que existe ese ‘santo grial’ de los lenguajes de programación que siempre estás buscando: el lenguaje de programación correcto que no comprometa la nada, el que te permitirá obtener la velocidad que deseas, la productividad que desee y también cero errores”.
A pesar de todo lo aprehendido hasta ahora, Jonathan Protzenko no cree que se haya alcanzado todavía el santo grial y, por ende, la búsqueda continúa. A su juicio, siempre hay espacio para mejorar en este campo.
“Te das cuenta de que existen grandes ecosistemas de software y que ahora estamos llegando a millones, cientos de millones de líneas de código, y cualquier mejora en la herramienta que uses cada día de tu vida será una mejora sobre el software en general”.
Dada esta conclusión, para el experto la responsabilidad sería enorme en cierto sentido, pues se tienen que diseñar las herramientas adecuadas que harán que las personas escriban mejores herramientas para otras personas.
Riesgos de software
Jonathan Protzenko ha insistido en que hay “un montón” de software absolutamente crítico donde existen riesgos gigantescos de seguridad en juego, vidas humanas y accidentes: desde software de pruebas de ADN, a aviones, software nuclear, dispositivos médicos, entre otros.
“Creo que hay algunas de estas áreas en las que hemos llegado al lugar correcto y, por el lugar correcto, quiero decir que las consecuencias son tan dramáticas y los incidentes pasados han sido tan variados y han tenido tanto impacto que las personas en el campo están listas para probar algo diferente”.
Considera que, por ejemplo, para dispositivos médicos casi están llegando, pues se han dado casos de marcapasos hackeables y ha habido demostraciones de que realmente se pueden controlar a distancia los dispositivos médicos de alguien.
“En esta configuración específica, pronto, las personas se darán cuenta de que los enfoques anteriores ya no funcionan, que deben probar algo diferente y que deben comenzar desde cero y realmente pensar cómo hacerlo”.
Con esta cita también ha querido hacer referencia al lenguaje de programación C, que sigue siendo el que comúnmente se usa para escribir la mayoría del software, y que ha calificado como extremadamente fácil para dispararse al pie.
“Entonces, lo que estamos tratando de hacer, y estamos trabajando con algunas personas excelentes, es decir, esto se ha roto tanto y tan mal que tenemos una nueva metodología. Vamos a tratar de ayudarte. Así es como vamos a hacerlo. ¿Qué piensas?”.
No se trataría de una tarea fácil tomando en cuenta que se necesitaría una educación extremadamente pronunciada. Las herramientas que utilizan en su equipo para la ingeniería de software más seguro a veces no son tan útiles o requieren un alto grado de capacitación.
Eso también representa un desafío para el grupo RiSE. Y es que deben encontrar la manera en que la verificación del software sea más utilizable para alguien que no tiene esos antecedentes.
“La tendencia es que el software estará en todas partes y estamos delegando decisiones extremadamente importantes al software. Cuando piensas en los autos, por ejemplo, los millones, decenas, quizás cientos de millones de líneas de código que se ejecutan en un automóvil, son simplemente aterrador”, dijo Protzenko.
Lenguajes de programación
En el grupo RiSE desarrollan el lenguaje de programación F *, inspirado en F # y también en las familias de lenguajes de programación funcionales como OCaml y ML general, agregando una verificación por encima de ello.
La idea es que si un programador ha sido capacitado funcionalmente y se sientes cómodo con ML, quizás haya escrito un montón de OCaml en su vida, pero ahora cuenta con un lenguaje que le permite ir más allá y empezar a pensar qué hacen sus programas y cuál es su especificación.
“Así que, en ese sentido, creo que F * también se encuentra en un punto muy interesante en el espacio de diseño, ya que está tratando de atender a una audiencia de personas que desean escribir software primero”.
Otro lenguaje de programación avanzado en el que trabaja Protzenko y su equipo ha sido denominado como KreMLin. Él ha destacado las letras K y r que se unen a ML, “Kernighan y Ritchie se encuentran con ML”.
KreMLin es un compilador de F * a C. Aquí se unen dos cosas a las que se ha referido anteriormente, el hecho de que desea utilizar un lenguaje de programación avanzado, sofisticado y avanzado para demostrar cosas importantes sobre su software, pero también el hecho de que la mayoría del software en estos días está escrito en C y que no va a desaparecer pronto.
“La idea detrás de mi trabajo en estos días es que necesitamos reconciliar estas dos visiones: la visión del programador iluminado que trabaja en F * y hace su resultado de verificación muy avanzado, y el hecho de que la gente desea que el código C se utilice en su software”.
Es así como KreMLin es un compilador que transformará un subconjunto de F * en código C y está listo para integrarse en el software existente.