programmatūra · 5 min · 15.08.2026

Rust coreutils nokārto 645 no 690 GNU testiem, Ubuntu joprojām lieto GNU cp, mv un rm

uutils projekts 5. augustā izdeva Rust valodā rakstīto coreutils komplektu 0.10. GNU testu komplektā tas nokārto 645 testus no 690 jeb 93,48 %. Versijā 0.9 rādītājs bija 90,58 %. Kritušo testu skaits nokritis no 56 līdz 29.

Skaitlis attiecas uz reāliem darbagaldiem. Ubuntu 26.04 LTS jau piegādā uutils kā noklusējuma komandrindas komplektu, tāpēc katrs izlabotais tests ir par vienu atšķirību mazāk starp skripta gaidīto un faktisko izvadi.

Ubuntu jau strādā ar Rust versiju

Ubuntu 26.04 LTS nomainīja lielāko daļu GNU coreutils pret uutils. Ap 80 komandu, tostarp ls, cat, chmod, chown, du, tail un wc, sistēmā tagad ir Rust binārfaili.

Pakotņu shēma ļauj izvēlēties. Noklusējuma coreutils-from-uutils ievelk rust-coreutils 0.8.0, bet coreutils-from-gnu atdod GNU coreutils 9.7. Atgriešanās prasa vienu komandu:

sudo apt install coreutils-from-gnu

Lai apt nākamajā atjauninājumā neuzliktu Rust variantu atpakaļ, pakotnei jāpiešķir negatīva prioritāte failā /etc/apt/preferences.d/uutils. Ir arī ķibele. Pakotnei build-essential Ubuntu 26.04 ir cieta atkarība no coreutils-from-uutils, tāpēc pēc pārslēgšanās uz GNU variantu kompilēšanas rīkus uzstādīt neizdodas. Apiešanai jātaisa tukša aizstājējpakotne ar equivs.

Trīs komandas palika pie GNU

cp, mv un rm Ubuntu 26.04 nāk no GNU. Iemesls ir Canonical pasūtītais Zellic audits, kas uutils kodā atrada 113 problēmas. Septiņdesmit no tām saņēma CVE numuru. Astoņas neatrisinātas TOCTOU sacīkstes tieši šajās trijās komandās Canonical atzina par pārāk datus graujošām, lai tās liktu piecu gadu atbalsta laidienā.

TOCTOU jeb time-of-check to time-of-use ir vienkārša kļūda ar nepatīkamām sekām. Programma pārbauda faila stāvokli, piemēram, tiesības vai to, ka ceļš nav simboliska saite. Tikai pēc tam tā sāk pašu darbību. Ja starplaikā kāds cits process ceļu apmaina, komanda strādā ar citu failu, nevis to, kuru pārbaudīja. Uz koplietota servera ar rm -rf tā ir izdzēsta sveša direktorija.

Canonical publiskais plāns ir “100% rust-coreutils” Ubuntu 26.10, pieņemot, ka atlikušie TOCTOU labojumi līdz tam nonāks augšpusē.

Ko 0.10 salaboja drošībā

Šis laidiens ir otrais pēc kārtas, kas veltīts audita sekām. Izlaiduma piezīmēs uzskaitītas TOCTOU sacīkstes, kas aizvērtas komandās touch, mkfifo un head. chmod un chown ieguva drošu rekursīvo nolaišanos, kas iztur simbolisko saišu ciklus un mēģinājumus apiet --preserve-root.

Komandas mkdir, mkfifo un mknod tagad uzliek SELinux birku faila izveides brīdī, nevis uzreiz pēc tās. Starplaiks starp abām darbībām bija pietiekams, lai fails īsu mirkli eksistētu bez pareizās birkas.

Atsevišķa kampaņa izmeta panikas no vairāk nekā 20 komandām. Rust programma, kas ieiet panikā, apstājas ar steka izdruku. Skriptam tas nozīmē neparedzamu iziešanas kodu. Cēloņi bija veselo skaitļu pārpilde, neierobežota atmiņas rezervēšana pēc lietotāja dotā izmēra un neapstrādātas rakstīšanas kļūdas.

Jaunas iespējas un platformas

Komanda mv ieguva karodziņu --exchange, kas atomāri samaina divus ceļus vietām. Tas ir noderīgs izvietošanas skriptos, kur līdz šim vajadzēja trīs soļu deju ar pagaidu nosaukumu. install saprot --reflink kopēšanai ar copy-on-write klonu, bet rm apstrādā --one-file-system, kas neļauj dzēšanai pāriet uz citu montējumu.

Kontrolsummu komandām pievienota OpenSSL aizmugure. Windows pusē sāka strādāt timeout, faila sekošana ar tail -f un tail -F, kā arī retinātu failu kopēšana ar cp. Komplektam tagad ir arī wasm32-wasip2 mērķis, tāpēc komandas var būvēt WebAssembly videi.

Uzvedības labojumi skāra date, du, head, tail, install, ls, nproc, numfmt, od, pr, stat, sum un truncate. Kļūdu paziņojumi visā komplektā tagad konsekventi satur faila nosaukumu un operētājsistēmas kļūdu, kā to dara GNU. Šajā ciklā projektam pievienojās 50 jauni līdzautori.

Kur uzvedība joprojām atšķiras

Atlikušie 29 kritušie testi nav vienīgā vieta, kur skripts var paklupt. uname -p uutils versijā atdod unknown tur, kur GNU raksta x86_64. stat lauku nosaukumus izvada ar mazajiem burtiem, GNU tos raksta ar lielo sākumburtu. sort daudzbaitu lokalēs kārto pēc citas kolācijas, tāpēc rezultāta secība var atšķirties no tās, ko dod GNU tajā pašā mašīnā.

Vēl viena atšķirība ir juridiska. uutils ir MIT licence, GNU coreutils ir GPLv3. LWN komentāros to pieminēja viens no GNU coreutils uzturētājiem: kods starp abiem projektiem plūst tikai vienā virzienā. GNU labojumu tiešā pārņemšana uutils pusē nav iespējama. Katra uzvedības nianse Rust komplektā jāatkārto no jauna, skatoties uz dokumentāciju un testiem.

Projekts joprojām ir pirms 1.0 versijas. Nākamais pārbaudes punkts ir Ubuntu 26.10 oktobrī, kur cp, mv un rm vai nu pārslēgsies uz Rust variantu, vai paliks GNU vēl vienu ciklu.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie