Checked C : pour un langage C plus sûr
ven, 17/06/2016 - 14:06
Le langage C est apparu dans les années 70. A la base des systèmes UNIX, il est par excellence le langage de la programmation système depuis cette époque.
Le langage C est omniprésent, et les erreurs de programmation en C sont omniprésentes également :-) Toujours les mêmes. Accès mémoire hors limite, erreurs de pointeurs, erreurs de conversion de types... Ces erreurs de programmation sont graves car c'est la plupart du temps par elles que les logiciels sont vulnérables, et que les vulnérabilités, exploitées par les hackers, conduisent à des prises de contrôles à distance des machines attaquées, et autres farces.
Pour (tenter de) remédier à cela, Microsoft Research a lancé un projet collaboratif open source : Checked C.
Encore un système de vérification de code, diront ceux qui pensent que le vrai remède est dans la formation des programmeurs, et dans la sérénité qu'on leur donne pour écrire leur code.
Checked C est présenté comme une extension au langage C. Ses spécifications peuvent être téléchargés en PDF ici. ou sur GitHub en LaTex.
Le projet open source est sous licence MIT, la licence la plus permissive qui soit. Deux implémentations existent déjà pour LLVM et clang, accessibles ici et ici respectivement.
Dans leur billet de présentation les initiateurs du projet font remarquer qu'il existe des langages 'sûrs' comme C# ou Java. Sûrs dans le sens où il interdisent les pointeurs ou qu'ils font des vérifications de dépassements de tableaux à l'exécution, etc.
Ceci, précisent-ils, ne convient pas à la programmation système, car dans ce domaine, le programmeur doit avoir le contrôle total sur ce qui se passe dans son code.
C'est là que se positionne Checked C qui permet au programmeur de n'utiliser cette extension que précisément où il le souhaite en faisant les déclarations adéquates dans son code. Par exemple un tableau bidimensionnel d'entiers
int a [10][10];
sera déclaré
int a checked[10][10];
et le compilateur fait le reste en générant le code supplémentaire nécessaire. Une fois le programme débogué et testé, il suffit de revenir à la déclaration classique et recompiler pour retrouver les performances optimales à l'exécution, si on le souhaite.