Pag-aangkop sa Debian para gamitin ang Rust na pagpapatupad ng mga coreutils

Si Sylvestre Ledru, na kilala sa kanyang trabahong pagbuo ng Debian GNU/Linux gamit ang Clang compiler, ay nag-ulat ng matagumpay na eksperimento gamit ang alternatibong hanay ng mga utility, coreutils, na muling isinulat sa Rust na wika. Kasama sa coreutils ang mga utility gaya ng sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln at ls. Para sa unang yugto ng pagsasama sa Debian ng Rust na bersyon ng coreutils, ang mga sumusunod na layunin ay itinakda:

  • Mag-package ng Rust na alternatibo sa coreutils para sa Debian at Ubuntu.
  • I-boot ang Debian gamit ang GNOME desktop gamit ang rust-coreutils.
  • Pag-install ng 1000 pinakasikat na pakete mula sa repositoryo.
  • Bumuo mula sa Firefox, LLVM/Clang at Linux kernel source sa isang kapaligiran na may rust-coreutils.

Pagkatapos gumawa ng higit sa 100 patch para sa Rust/coreutils, matagumpay naming naabot ang lahat ng nilalayon na layunin. Kasama sa patuloy na gawain ang pagpapatupad ng mga nawawalang utility at opsyon, pagpapabuti ng kalidad at pagkakapareho ng code, pagbuo ng test suite, at pag-aalis ng mga pag-crash na nangyayari kapag pinapatakbo ang test suite mula sa GNU Coreutils (141 na pagsubok sa 613 ay matagumpay na tumatakbo sa ngayon. ).

Kapag lumilikha ng rust-coreutils package, napagpasyahan na huwag palitan ang coreutils package, ngunit upang magbigay ng kakayahan para sa kanila na gumana nang magkatulad. Ang mga opsyon sa utility sa Rust na wika ay naka-install sa /usr/lib/cargo/bin/ at ina-activate sa pamamagitan ng pagdaragdag ng direktoryo na ito sa PATH environment variable. Ang paglikha ng rust-coreutils package ay kumplikado sa pamamagitan ng pangangailangang i-download ang lahat ng build dependencies sa repository, kabilang ang Rust at iba't ibang maliliit na crate package.

Ang paglikha ng boot image ay hindi isang problema, ngunit ang pag-angkop sa mga pakete para sa isang kapaligiran na may rust-coreutils ay nangangailangan ng maraming trabaho, dahil maraming mga post-install na script ang tumatawag sa mga utility mula sa coreutils set. Ang pinakamalaking bilang ng mga problema ay sanhi ng kakulangan ng mga kinakailangang opsyon, halimbawa, ang "cp" na utility ay walang mga opsyon na "--archive" at "--no-dereference", "ln" ay hindi sumusuporta sa "- kamag-anak” na opsyon, hindi sinusuportahan ng mktemp ang β€œ-t” , naka-sync na "-fs", sa pag-install - "--owner" at "-group". Ang iba pang mga problema ay lumitaw dahil sa mga pagkakaiba sa pag-uugali, halimbawa, ang install utility ay hindi sumusuporta sa pagtukoy sa /dev/null bilang isang input file, ang mkdir ay may opsyon na "--parents" sa halip na "-parent", atbp.

Kapag sinusubukan ang pagpupulong ng malalaking base ng code, walang malalaking problema ang lumitaw. Sa pagbuo ng Firefox at LLVM/Clang, ginagamit ang mga script ng python at cmake, kaya hindi nakaapekto sa kanila ang pagpapalit ng mga coreutil. Ang pagbuo ng kernel ng Linux ay naging medyo maayos, na may dalawang problema lang ang nabubuo: ang output ng error kapag gumagamit ng chown na may simbolikong link at ang kawalan ng opsyon na "-n" sa ln utility.

Pinagmulan: opennet.ru

Magdagdag ng komento