Contexte de la migration
Depuis la version 25.10, Canonical a entrepris d'« oxidiser » Ubuntu en remplaçant les outils fondamentaux écrits en C par des équivalents en Rust. L’objectif principal est de réduire les vulnérabilités liées à la gestion de la mémoire, car le compilateur Rust détecte les erreurs de type buffer overflow ou use‑after‑free à la compilation, contrairement aux compilateurs C.
Les versions 26.04 LTS ont retenu les implémentations GNU pour cp, mv et rm à cause de plusieurs failles TOCTOU (time‑of‑check‑to‑time‑of‑use) identifiées dans les paquets uutils. Une audit de sécurité commandité par Canonical a confirmé ces problèmes, les maintenant en version GNU jusqu’à résolution.
Résolution des problèmes TOCTOU
Les correctifs upstream ont été intégrés dans uutils avant la sortie d’Ubuntu 26.10. Les trois commandes critiques sont désormais fournis par les implémentations Rust, ce qui supprime les écarts de sécurité entre les versions GNU et Rust. La migration s’appuie sur le même jeu d’options et de comportements que les outils GNU ; toute divergence est traitée comme un bug et remontée aux mainteneurs.
Portée de la migration
Ubuntu 26.10 « Stonking Stingray » embarque l’ensemble complet des coreutils Rust, incluant ls, cat, chmod et du. Aucun changement fonctionnel n’est perceptible pour l’utilisateur final, la compatibilité étant assurée par des tests de régression automatisés. La migration couvre ainsi plus de dix‑dix outils de base, représentant plus de 80 % du paquet coreutils traditionnel.
Parallèlement, Canonical a financé à hauteur de 40 000 € par an la Trifecta Tech Foundation, qui réécrit le client NTP en Rust. Le nouveau client devrait devenir la valeur par défaut dès Ubuntu 27.10, poursuivant la même logique de sécurisation du socle logiciel.
Analyse des impacts sécuritaires
Le passage à Rust élimine les classes de vulnérabilités liées à la mémoire qui représentaient historiquement plus de 30 % des CVE critiques dans les utilitaires système. En pratique, cela se traduit par une surface d’attaque réduite sans pénalité de performance notable ; les benchmarks internes montrent des temps d’exécution similaires voire légèrement supérieurs pour ls et du grâce à l’optimisation du compilateur.
Le principal risque réside dans la maturité du code Rust. Bien que les développeurs de uutils visent la compatibilité totale, des écarts de comportement peuvent apparaître dans des scripts très spécifiques. Canonical a mis en place un mécanisme de signalement automatisé qui capture les écarts et les renvoie aux mainteneurs pour correction rapide.