Microsoft ha anunciado recientemente un proyecto de investigación llamado Checked C, el cual tiene como objetivo añadir nueva sintaxis y tipificación al lenguaje C. La principal meta de este proyecto es neutralizar algunos riesgos asociados a la programación en C, como los errores que dieron lugar a los incidentes de seguridad Heartbleed y Shellshock. Sin duda, es una idea audaz, al menos sobre el papel. La parte difícil será encontrar una forma de incentivar a los desarrolladores de C a cambiar el código existente, una tarea que el peso histórico de C siempre ha dificultado.
Checked C es una versión modificada de C que aborda los problemas que surgen con los punteros, el mecanismo de C para acceder directamente a la memoria. El lenguaje proporciona varios tipos nuevos de punteros y matrices que vienen con salvaguardias incorporadas. Son distintos de los tipos de punteros inseguros existentes en C, por lo que un programador puede utilizar los nuevos tipos de punteros verificados para mayor seguridad y volver a los tipos inseguros si es necesario. La nueva versión también proporciona ámbitos de programa verificados. Estos son bloques de código del programa donde la comprobación de límites está activada de forma predeterminada. Si el programador intenta utilizar un puntero no verificado dentro de dicho ámbito, el compilador lo rechazará. También es posible especificar que todo el programa sea verificado de forma predeterminada mediante una directiva #pragma del compilador.
Ya existen diversas herramientas para analizar el código C y detectar problemas de este tipo, como Cppcheck, pero generalmente son herramientas de análisis estático independientes. Checked C incorpora características de seguridad directamente en C a medida que los programas son concebidos y planificados.
Ambicioso y valioso como suena Checked C, también debe enfrentarse a dos desafíos que surgen cada vez que se sugieren cambios en cualquier lenguaje existente. El primero es que dichos cambios generalmente no son compatibles con versiones anteriores. En segundo lugar, a veces implican cambios disruptivos en la cadena de herramientas. Ambos son prácticamente garantía de inhibir la adopción.
Microsoft se encarga al menos en parte de la compatibilidad con versiones anteriores. Los cambios introducidos por Checked C no invalidan los programas C existentes; aún se pueden compilar tal como están. Toda la nueva sintaxis y las alteraciones del lenguaje coexisten con su encarnación anterior. Incluso un programa C existente no necesita convertirse a Checked C de una sola vez; se puede convertir archivo por archivo o función por función. Microsoft también afirma que las construcciones verificadas de nuevo estilo son “compatibles con el diseño de los tipos de punteros y matrices existentes”. Este alto grado de compatibilidad hacia atrás y hacia adelante le da a Checked C una ventaja, pero nuevamente, no garantiza su éxito, ya que el lenguaje aún debe ser adoptado en uso generalizado.
En resumen, Checked C es un proyecto interesante que busca mejorar la seguridad en el lenguaje C. Aunque enfrenta desafíos en cuanto a la compatibilidad con versiones anteriores y la adopción generalizada, su enfoque de incorporar características de seguridad directamente en el lenguaje es prometedor. Será interesante ver cómo evoluciona este proyecto y si logra ganar aceptación en la comunidad de desarrolladores de C.