8 points par ahwjdekf 2025-03-16 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Rust est-il vraiment sûr ?

C++ est-il vraiment si peu sûr ?

Je suis tombé sur une présentation YouTube sur un sujet intéressant, alors je la partage.
Si l’on traduit le titre, la nuance serait quelque chose comme : « dire qu’il suffit d’utiliser un langage à sûreté mémoire n’est pas un problème aussi simple ».
L’intervenant expose son point de vue depuis une position relativement équilibrée, sans pencher d’un seul côté.

  • Rust empêche l’exécution de code non sûr pour la mémoire via les paniques, mais unsafe Rust peut contourner ces mécanismes de protection.
  • Cependant, unsafe Rust nécessite un opt-in explicite, ce qui le rend plus visible qu’en C/C++ non sûr. Cette partie peut donc être examinée de façon ciblée.
  • Environ 30 % des crates Rust utilisent du code non sûr, et cette proportion est deux fois plus élevée dans les systèmes embarqués.
  • Les sanitizers (outils d’analyse dynamique) peuvent détecter les erreurs mémoire aussi bien dans le code Rust que dans le code C/C++.
  • 70 % des développeurs Rust appellent du code non sûr via des FFI (interfaces de fonctions externes) vers des bibliothèques C/C++.
  • De nombreuses bibliothèques importantes, y compris dans des projets Rust, sont écrites en C/C++ (SQLite, bibliothèques OPCUA).
  • Les sanitizers peuvent analyser à la fois le code Rust et le code C/C++ au niveau de la couche LLVM IR, à condition d’avoir accès au code source.
  • Miri est un outil complémentaire destiné à détecter les comportements indéfinis de Rust au niveau de la représentation intermédiaire.
  • Avantages de Miri : il fournit des erreurs claires et vérifie tous les comportements indéfinis en même temps. Limites : il ne peut pas interpréter du code C/C++.
  • Environ 20 % des fonctions de la bibliothèque standard Rust utilisent du code non sûr.
  • Les infrastructures critiques ont besoin non seulement d’un code sûr pour la mémoire, mais aussi d’un code correct afin d’éviter les dommages matériels ou les menaces pour la vie humaine.
  • Même un programme Rust sûr peut mal fonctionner ou être vulnérable à des attaques par déni de service.
  • Les tests basés sur les propriétés peuvent être utiles en générant des entrées aléatoires pour trouver des cas limites, mais ils ont du mal avec les erreurs impossibles.
  • Kani est un model checker qui utilise les mathématiques pour vérifier la correction d’un programme dans un ensemble de contraintes.
  • Avantages de Kani : il évalue mathématiquement toutes les entrées dans les contraintes données. Limites : les boucles doivent être déroulées, et il ne prend pas en charge la concurrence ni les FFI C/C++.
  • Conclusion sur Rust : Rust est sûr, mais pas autant qu’on pourrait le penser.
  • Bjarne Stroustrup distingue C et C++, et souligne que C++ a été conçu pour permettre un code plus sûr.
  • Les C++ Core Guidelines proposent des profils pour la sûreté des types, des bornes et des durées de vie, ce qui rapproche C++ des garanties de Rust.
  • Le plus grand problème de C++, c’est qu’il est trop facile d’y écrire du code non sûr par défaut. Ce n’est pas que les développeurs ne font pas d’efforts.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.