Sylvestre Ledru, connu pour son travail sur l'assemblage Debian GNOU/Linux L'utilisation du compilateur Clang a permis de mener une expérience concluante avec un ensemble alternatif d'utilitaires coreutils, réécrits en Rust. coreutils comprend des utilitaires tels que sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln et ls. Pour la première étape d'intégration, Debian Les objectifs suivants ont été fixés pour la version Rust de coreutils :
- Création d'un paquet avec une alternative à coreutils en Rust pour Debian и Ubuntu.
- Télécharger Debian avec l'environnement de bureau GNOME utilisant rust-coreutils.
- Installation des 1000 packages les plus populaires du référentiel.
- Compiler à partir des sources de Firefox, LLVM/Clang et du noyau Linux dans un environnement avec rust-coreutils.
Après avoir créé plus de 100 correctifs pour Rust/coreutils, nous avons pu atteindre tous les objectifs visés. Le travail en cours comprend l'implémentation des utilitaires et options manquants, l'amélioration de la qualité et de l'uniformité du code, le développement de la suite de tests et l'élimination des plantages qui se produisent lors de l'exécution de la suite de tests à partir de GNU Coreutils (141 tests sur 613 s'exécutent avec succès jusqu'à présent). ).
Lors de la création du package rust-coreutils, il a été décidé de ne pas remplacer le package coreutils, mais de leur offrir la possibilité de fonctionner en parallèle. Les options utilitaires du langage Rust sont installées dans /usr/lib/cargo/bin/ et sont activées en ajoutant ce répertoire à la variable d'environnement PATH. La création du package rust-coreutils a été compliquée par la nécessité de télécharger toutes les dépendances de build dans le référentiel, y compris Rust et divers petits packages crate.
La création d'une image de démarrage n'a pas posé de problème, mais l'adaptation des packages à un environnement avec rust-coreutils a nécessité beaucoup de travail, car de nombreux scripts de post-installation appellent des utilitaires de l'ensemble coreutils. Le plus grand nombre de problèmes étaient causés par le manque d'options nécessaires, par exemple, l'utilitaire « cp » n'avait pas les options « --archive » et « --no-dereference », « ln » ne prenait pas en charge le « - relative", mktemp ne prenait pas en charge "-t", en synchronisation "-fs", dans l'installation - "--owner" et "-group". D'autres problèmes sont survenus en raison de différences de comportement, par exemple, l'utilitaire d'installation ne prenait pas en charge la spécification de /dev/null comme fichier d'entrée, mkdir avait l'option « --parents » au lieu de « -parent », etc.
Les tests de compilation de bases de code importantes n'ont révélé aucun problème majeur. Les compilations de Firefox et LLVM/Clang utilisent des scripts Python et CMake ; le remplacement de coreutils n'a donc eu aucun impact sur elles. Compilation du noyau Linux Tout s'est déroulé relativement sans encombre, avec seulement deux problèmes rencontrés : un message d'erreur lors de l'utilisation de chown avec un lien symbolique et l'absence de l'option « -n » dans l'utilitaire ln.
Source: opennet.ru
