Alors que le mouvement en faveur des langages à mémoire sécurisée, et de Rust en particulier, continue de croître, il est intéressant d'examiner l'un des efforts à plus grande échelle visant à porter du code C existant depuis des décennies vers Rust. Le projet uutils, aussi connu sous le nom de Rust Coreutils, vise à réécrire en Rust tous les utilitaires individuels inclus dans le projet GNU Coreutils. Créé à l'origine par Jordi Boggiano en 2013, le projet vise à fournir des remplacements immédiats pour les programmes Coreutils, en ajoutant la protection contre la concurrence d'accès et la sécurité de la mémoire que Rust fournit.
Rust Coreutils comprend les programmes de base de manipulation des fichiers, des processus et du texte qui sont censés exister sur tous les systèmes d'exploitation basés sur GNU. Le projet Coreutils a été créé pour consolider trois ensembles d'outils qui étaient auparavant proposés séparément, Fileutils, Textutils, et Shellutils, ainsi que d'autres utilitaires divers. Beaucoup de programmes inclus dans le projet, tels que rm, du, ls, et cat, existent depuis plusieurs décennies et, bien que d'autres implémentations existent, ces utilitaires ne sont pas disponibles pour des plateformes comme Windows dans leur forme originale.
Collectivement, les programmes Coreutils sont considérés comme des fruits mûrs pour lesquels une version fonctionnelle basée sur Rust pourrait être produite dans un délai raisonnable. Les exigences pour chaque utilitaire sont claires et beaucoup d'entre eux sont conceptuellement simples, ce qui ne veut pas dire que le travail est facile. Selon les auteurs, l'utilisation de Rust dans le cadre de ce projet contribuera à accélérer ce processus puisqu'un grand nombre d'erreurs de mémoire et d'autres comportements indéfinis sont entièrement éliminés. Elle ouvre également la porte à l'utilisation d'un multithreading efficace et sans concurrence.
Cela pourrait accélérer certains programmes dans certaines conditions. Rust Coreutils donne également l'occasion de ne pas se contenter de réimplémenter Coreutils, mais aussi d'améliorer la fonctionnalité de certains utilitaires afin d'offrir une meilleure expérience utilisateur, tout en maintenant la compatibilité avec les versions GNU. Par exemple, des demandes de fonctionnalités qui ont longtemps été rejetées dans le projet Coreutils, comme l'ajout d'une option de barre de progression pour des utilitaires comme mv et cp, sont actuellement prises en compte dans cette réécriture en langage Rust.
Sur la page GitHub du projet, on peut trouver un tableau avec les utilitaires divisés en trois colonnes : "Terminé", "À mi-chemin", et "À faire". La colonne "À faire" du tableau comporte les utilitaires sur lesquels aucun travail n'a encore été fait ou les utilitaires qui sont en cours d'implémentation initiale. Les utilitaires de la colonne "À mi-chemin" ont des options manquantes qui n'ont pas encore été implémentées, ou leur comportement est légèrement différent de leurs homologues GNU dans certaines situations. Toutefois, le fait qu'un programme soit marqué comme "Terminé" ne signifie pas que tous les tests passent.
Cela ne signifie pas non plus que l'utilitaire est aussi performant ou efficace en mémoire que la version GNU. À l'heure actuelle, Ledru et les siens semblent avoir bien évolué dans le projet ; 88 utilitaires sont marqués comme "terminés", 18 sont "à mi-chemin" et la colonne "À faire" comporte un seul utilitaire. Ledru a publié samedi une mise à jour sur Rust Coreutils, dont la version 0.0.12 vient de sortir. Non seulement uutils devrait être plus sûr, mais certains binaires afficheraient maintenant des performances "significativement" meilleures que celles du paquetage GNU pour des commandes comme head, cut et d'autres commandes courantes.
Il y a maintenant des dizaines de contributeurs qui apportent chaque mois plus de 400 correctifs à cet effort. Ils restent sur le défi de combler l'écart de compatibilité pour ces utilitaires avec les commandes GNU en amont. Le seul binaire restant à implémenter est "stty". En plus de leurs travaux d'optimisation et de compatibilité, les développeurs vont également s'efforcer de permettre à Debian et Ubuntu de basculer facilement par défaut vers les Coreutils Rust sans nécessiter de bidouillages ou de configurations particulières.
Bien que de nombreux progrès aient été réalisés pour amener uutils dans un état utilisable, il faudra un certain temps pour qu'il atteigne la stabilité et la maturité de GNU Coreutils. Par ailleurs, un aspect important du projet uutils dont il faut être conscient est sa licence. Tous les utilitaires du projet sont sous la licence permissive MIT, au lieu de la licence GPLv3 de GNU Coreutils. Cela le rend potentiellement plus attractif pour une utilisation dans des endroits où les logiciels sous licence GPLv3 ne sont pas adoptés en raison de ses restrictions sur la tivoïsation, entre autres choses.
La décision d'utiliser la licence MIT n'est pas sans susciter des critiques ; certains qui ont commenté ce choix auraient préféré voir une licence copyleft appliquée à un projet de ce type. La principale critique fait écho aux arguments concernant les licences de logiciels libres dans le passé : "une licence non copyleft est préjudiciable aux libertés des utilisateurs finaux puisqu'elle permet à une personne ou à une organisation d'incorporer n'importe quelle partie du projet dans un dispositif ou dans la distribution d'autres logiciels sans fournir le code source, de sorte qu'il est impossible de l'étudier, de le modifier ou de l'améliorer".
L'on craint également que le choix de la licence ne soit fait pour maximiser l'utilisation de Rust sans tenir compte des autres effets ; le remplacement des outils sous licence GPL par des alternatives sous une licence plus permissive est considéré par certains comme un pas en arrière.
Sources : Sylvestre Ledru, Rust Coreutils (uutils)
Et vous ?
Quel est votre avis sur le sujet ?
Que pensez-vous du projet Rust Coreutils ?
Que pensez-vous du passage de la licence GNU GPLv3 à la licence MIT ?
Voir aussi
Les derniers correctifs du projet Rust for Linux montrent que le langage Rust avance à grands pas vers le noyau, Torvalds estime que cela pourrait être prêt pour la version 5.14
Kerla : un nouveau noyau de système d'exploitation écrit en Rust et compatible avec l'ABI Linux, ce qui devrait permettre d'exécuter les binaires Linux sans aucune modification
Plusieurs améliorations ont été apportées au support de Rust dans le noyau Linux, personnalisation de core et alloc, abstractions et mises à jour des pilotes
Projet Protissimo : l'Internet Security Research Group veut sécuriser la mémoire du noyau Linux avec Rust et fournit au dev Miguel Ojeda un contrat d'un an pour travailler dessus à plein temps