Προσαρμογή του Debian για χρήση της εφαρμογής Rust των coreutils

Ο Sylvestre Ledru, γνωστός για το έργο του που δημιούργησε το Debian GNU/Linux χρησιμοποιώντας τον μεταγλωττιστή Clang, ανέφερε ένα επιτυχημένο πείραμα χρησιμοποιώντας ένα εναλλακτικό σύνολο βοηθητικών προγραμμάτων, coreutils, ξαναγραμμένα στη γλώσσα Rust. Το Coreutils περιλαμβάνει βοηθητικά προγράμματα όπως sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln και ls. Για το πρώτο στάδιο ενσωμάτωσης στο Debian της έκδοσης Rust του coreutils, τέθηκαν οι ακόλουθοι στόχοι:

  • Συσκευάστε μια εναλλακτική λύση Rust στα coreutils για Debian και Ubuntu.
  • Εκκίνηση του Debian με επιφάνεια εργασίας GNOME χρησιμοποιώντας rust-coreutils.
  • Εγκατάσταση των 1000 πιο δημοφιλών πακέτων από το αποθετήριο.
  • Δημιουργήστε από πηγές πυρήνα Firefox, LLVM/Clang και Linux σε περιβάλλον με rust-coreutils.

Αφού δημιουργήσαμε περισσότερα από 100 patches για το Rust/coreutils, μπορέσαμε να επιτύχουμε με επιτυχία όλους τους επιδιωκόμενους στόχους. Η συνεχιζόμενη εργασία περιλαμβάνει την υλοποίηση βοηθητικών προγραμμάτων και επιλογών που λείπουν, τη βελτίωση της ποιότητας και της ομοιομορφίας του κώδικα, την ανάπτυξη της σουίτας δοκιμών και την εξάλειψη σφαλμάτων που συμβαίνουν κατά την εκτέλεση της δοκιμαστικής σουίτας από το GNU Coreutils (141 δοκιμές από τις 613 εκτελούνται με επιτυχία μέχρι στιγμής ).

Κατά τη δημιουργία του πακέτου rust-coreutils, αποφασίστηκε να μην αντικατασταθεί το πακέτο coreutils, αλλά να παρέχεται η δυνατότητα σε αυτά να λειτουργούν παράλληλα. Οι επιλογές βοηθητικών προγραμμάτων στη γλώσσα Rust εγκαθίστανται στο /usr/lib/cargo/bin/ και ενεργοποιούνται προσθέτοντας αυτόν τον κατάλογο στη μεταβλητή περιβάλλοντος PATH. Η δημιουργία του πακέτου rust-coreutils περιπλέχθηκε από την ανάγκη λήψης όλων των εξαρτήσεων build στο αποθετήριο, συμπεριλαμβανομένου του Rust και διαφόρων μικρών πακέτων crate.

Η δημιουργία μιας εικόνας εκκίνησης δεν ήταν πρόβλημα, αλλά η προσαρμογή των πακέτων σε περιβάλλον με rust-coreutils απαιτούσε πολλή δουλειά, καθώς πολλά σενάρια μετά την εγκατάσταση καλούν βοηθητικά προγράμματα από το σετ coreutils. Ο μεγαλύτερος αριθμός προβλημάτων προκλήθηκε από την έλλειψη των απαραίτητων επιλογών, για παράδειγμα, το βοηθητικό πρόγραμμα "cp" δεν διέθετε τις επιλογές "--αρχείο" και "--χωρίς παραπομπή", το "ln" δεν υποστήριζε το "- σχετική», το mktemp δεν υποστήριζε «-t», σε συγχρονισμό «-fs», στην εγκατάσταση - «--owner» και «-group». Άλλα προβλήματα προέκυψαν λόγω διαφορών στη συμπεριφορά, για παράδειγμα, το βοηθητικό πρόγραμμα εγκατάστασης δεν υποστήριζε τον καθορισμό του /dev/null ως αρχείου εισόδου, το mkdir είχε την επιλογή "--parents" αντί για "-parent" κ.λπ.

Κατά τη δοκιμή της συναρμολόγησης μεγάλων βάσεων κώδικα, δεν προέκυψαν σημαντικά προβλήματα. Κατά την κατασκευή του Firefox και του LLVM/Clang, χρησιμοποιούνται σενάρια python και cmake, επομένως η αντικατάσταση των coreutils δεν τα επηρέασε. Η κατασκευή του πυρήνα Linux πήγε σχετικά ομαλά, με δύο μόνο προβλήματα να εμφανιστούν: την έξοδο σφάλματος κατά τη χρήση του chown με συμβολικό σύνδεσμο και την έλλειψη επιλογής "-n" στο βοηθητικό πρόγραμμα ln.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο