Die agtste weergawe van pleisters vir die Linux-kern met ondersteuning vir die Rust-taal

Miguel Ojeda, skrywer van die Rust-for-Linux-projek, het die vrystelling van v8-komponente voorgestel vir die ontwikkeling van toestelbestuurders in die Rust-taal vir oorweging deur Linux-kernontwikkelaars. Dit is die hersiene weergawe van die pleisters, met inagneming van die eerste weergawe, gepubliseer sonder 'n weergawenommer. Roesondersteuning word as eksperimenteel beskou, maar is reeds ingesluit in die linux-next-tak, beweer dat dit geïntegreer is in die herfs 5.20/6.0-vrystelling, en is volwasse genoeg om te begin werk aan die skep van abstraksielae oor kernsubstelsels, sowel as die skryf van drywers en modules. Die ontwikkeling word befonds deur Google en die ISRG (Internet Security Research Group), wat die stigter van die Let's Encrypt-projek is en HTTPS en die ontwikkeling van tegnologieë bevorder om die veiligheid van die internet te verbeter.

In die nuwe weergawe:

  • Die gereedskapstel en 'n variant van die alloc-biblioteek, vry van moontlike generering van 'n "paniek"-toestand wanneer foute voorkom, is opgedateer vir die vrystelling van Rust 1.62. In vergelyking met die voorheen gebruikte weergawe, het die Rust-gereedskapstel ondersteuning gestabiliseer vir die const_fn_trait_bound-funksie wat in kernkolle gebruik word.
  • Die bindingskode word geskei in 'n aparte kratpakket "bindings", wat die herbou vergemaklik as veranderinge slegs aan die hoofpakket "kern" aangebring word.
  • Implementering van die makro "concat_idents!" herskryf in die vorm van 'n prosedurele makro wat nie gekoppel is aan die concat_idents funksionaliteit nie en laat die gebruik van verwysings na plaaslike veranderlikes toe.
  • Die "static_assert!"-makro is herskryf, wat die gebruik van "core::assert!()" in enige konteks in plaas van konstantes moontlik maak.
  • Makro "bou_fout!" aangepas om te werk wanneer die "RUST_BUILD_ASSERT_{WARN,ALLOW}"-modus vir modules gestel is.
  • Het 'n aparte lêer bygevoeg met instellings "kernel/configs/rust.config".
  • Die “*.i”-lêers wat in makrovervangings verwerk is, is hernoem na “*.rsi”.
  • Ondersteuning vir die bou van Roes-komponente met optimaliseringsvlakke wat verskil van dié wat vir C-kode gebruik word, is gestaak.
  • Bygevoeg fs-module, wat bindings bied om met lêerstelsels te werk. 'n Voorbeeld van 'n eenvoudige lêerstelsel wat in Rust geskryf is, word verskaf.
  • Bygevoeg workqueue module vir werk met stelsel toue (verskaf bindings oor die work_struct en workqueue_struct kernstrukture).
  • Die ontwikkeling van die kasync-module het voortgegaan met die implementering van asinchroniese programmeringsmetodes (async). Het 'n voorbeeld bygevoeg van 'n kernvlak TCP-bediener wat in Rust geskryf is.
  • Bygevoeg die vermoë om onderbrekings in die Rust-taal te hanteer deur gebruik te maak van die [Threaded]Handler tipes en [Threaded]Registration` tipes.
  • Het prosedurele makro "#[vtable]" bygevoeg om dit makliker te maak om met tabelle van funksiewysers te werk, soos die file_operations-struktuur.
  • Bygevoeg implementering van tweerigting gekoppelde lyste "unsafe_list::List".
  • Bygevoeg aanvanklike ondersteuning vir RCU (Read-copy-update) en Guard-tipe om te kyk of 'n leesslot aan die huidige draad gebind is.
  • Bygevoeg Task::spawn() funksie om kerndrade te skep en outomaties te begin. Ook die Task::wake_up() metode bygevoeg.
  • Het 'n vertragingsmodule bygevoeg wat jou toelaat om vertragings te gebruik ('n omhulsel oor msleep()).

Die voorgestelde veranderinge maak dit moontlik om Rust as 'n tweede taal te gebruik vir die ontwikkeling van drywers en kernmodules. Roes-ondersteuning word aangebied as 'n opsie wat nie by verstek geaktiveer is nie en nie daartoe lei dat Rust ingesluit word as 'n vereiste bou-afhanklikheid vir die kern nie. Deur Rust vir bestuurderontwikkeling te gebruik, sal jy veiliger en beter bestuurders met minimale moeite skep, vry van probleme soos geheuetoegang na vrystelling, nulwyserverwysings en bufferoorskryding.

Geheueveiligheid word tydens samestellingstyd in Rust verskaf deur verwysingskontrolering, hou van objekeienaarskap en objekleeftyd (omvang), asook deur evaluering van die korrektheid van geheuetoegang tydens kode-uitvoering. Roes bied ook beskerming teen heelgetal-oorvloei, vereis dat veranderlikes geïnisialiseer word voor gebruik, hanteer foute beter in die standaardbiblioteek, pas die konsep van onveranderlike verwysings en veranderlikes by verstek toe, en bied sterk statiese tik om logiese foute te minimaliseer.

Bron: opennet.ru

Voeg 'n opmerking