Die derde uitgawe van pleisters vir die Linux-kern met ondersteuning vir die Rust-taal

Miguel Ojeda, skrywer van die Rust-for-Linux-projek, het 'n derde komponent-opsie voorgestel vir die ontwikkeling van toestelbestuurders in die Rust-taal vir Linux-kernontwikkelaars om te oorweeg. Roesondersteuning word as eksperimenteel beskou, maar daar is reeds ooreengekom vir insluiting in die linux-next-tak. 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 internetsekuriteit te verbeter.

Onthou dat die voorgestelde veranderings dit moontlik maak 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 lei nie tot die insluiting van Rust onder die vereiste bouafhanklikhede vir die kern nie. Deur Rust te gebruik om drywers te ontwikkel, sal jy veiliger en beter bestuurders met minimale inspanning kan skep, vry van probleme soos toegang tot 'n geheue-area nadat dit vrygestel is, die verwysing van nulwysers 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.

Die nuwe weergawe van die pleisters gaan voort om die opmerkings wat gemaak is tydens die bespreking van die eerste en tweede weergawes van die pleisters uit te skakel. Die mees opvallende veranderinge:

  • 'n Oorgang is gemaak na die gebruik van die stabiele vrystelling van Rust 1.57 as die verwysingsamesteller en 'n skakel na die gestabiliseerde uitgawe van die Rust 2021-taal is verskaf. Voorheen was kolle aan die beta-tak van Rust gekoppel en het sommige taalkenmerke gebruik wat is as onstabiel geklassifiseer. Die oorgang na die Rust 2021-spesifikasie het ons toegelaat om werk te begin om die gebruik van sulke onstabiele kenmerke in kolle soos const_fn_transmute, const_panic, const_unavailable_unchecked en core_panic en try_reserve te vermy.
  • Die ontwikkeling van die toewysingsweergawe van die Rust-biblioteek wat by die pleisters ingesluit is, het voortgegaan, gewysig om die geheuetoewysingsfunksies van moontlike generering van die "paniek"-toestand te ontslae te raak wanneer foute voorkom, soos uit geheue. Die nuwe weergawe implementeer die "no_rc" en "no_sync" opsies om funksionaliteit wat nie in die kern Rust-kode gebruik word nie te deaktiveer, wat die biblioteek meer modulêr maak. Werk gaan voort met die hooftoewysingsontwikkelaars, wat daarop gemik is om die veranderinge wat nodig is vir die kern na die hoofbiblioteek oor te dra. Die "no_fp_fmt_parse"-opsie, wat vereis word vir die biblioteek om op kernvlak te werk, is na die Rust-basisbiblioteek (kern) geskuif.
  • Die kode is skoongemaak om ontslae te raak van moontlike samestellerwaarskuwings wanneer die kern in CONFIG_WERROR-modus gebou word. Wanneer kode in Rust gebou word, word addisionele samesteller diagnostiese modusse en Clippy linter waarskuwings geaktiveer.
  • Abstraksies word voorgestel vir gebruik in Rust-kode vir seqlocks (volgorde-slotte), terugbeloproepe vir kragbestuur, I/O-geheue (readX/writeX), onderbrekings- en draadhanteerders, GPIO, toegang tot toestelle, drywers en geloofsbriewe.
  • Die gereedskap vir bestuurderontwikkeling is uitgebrei om hervestigbare mutexes, bis-iterators, vereenvoudigde wyserbindings, verbeterde foutdiagnostiek en databus-onafhanklike infrastruktuur in te sluit.
  • Verbeterde werk met skakels wat 'n vereenvoudigde Ref-tipe gebruik, gebaseer op die refcount_t backend, wat die kern-API met dieselfde naam gebruik om verwysings te tel. Ondersteuning vir die Arc- en Rc-tipes wat in die standaard alloc-biblioteek verskaf word, is verwyder en is nie beskikbaar in kode wat op kernvlak uitgevoer word nie (opsies is voorberei vir die biblioteek self wat hierdie tipes deaktiveer).
  • Die pleisters bevat 'n weergawe van die PL061 GPIO-bestuurder, herskryf in Rust. 'n Spesiale kenmerk van die drywer is dat die implementering daarvan amper reël vir reël die bestaande GPIO-drywer in die C-taal herhaal. Vir ontwikkelaars wat vertroud wil raak met die skep van drywers in Rust, is 'n reël-vir-lyn-vergelyking voorberei wat hulle in staat stel om te verstaan ​​in watter konstrukte in Rust die C-kode omgeskakel word.
  • Die hoof Rust-kodebasis het rustc_codegen_gcc aangeneem, 'n rustc-agtergrond vir GCC wat vooraf-voor-tyd (AOT) samestelling met behulp van die libgccjit-biblioteek implementeer. Met behoorlike ontwikkeling van die backend, sal dit jou toelaat om die Rust-kode wat by die kern betrokke is, met GCC te versamel.
  • Benewens ARM, Google en Microsoft, het Red Hat belangstelling uitgespreek om die Rust-taal in die Linux-kern te gebruik. Laat ons onthou dat Google direk ondersteuning bied vir die Rust for Linux-projek, besig is om 'n nuwe implementering van die Binder-tussenproseskommunikasiemeganisme in Rust te ontwikkel en die moontlikheid oorweeg om verskeie drywers in Rust te herwerk. Microsoft het begin om drywers vir Hyper-V in Rust te implementeer. ARM werk daaraan om Roes-ondersteuning vir ARM-gebaseerde stelsels te verbeter. IBM het Rust-ondersteuning in die kern vir PowerPC-stelsels geïmplementeer.

Bron: opennet.ru

Voeg 'n opmerking