La tria eldono de flikoj por la Linukso-kerno kun subteno por la Rust-lingvo

Miguel Ojeda, aŭtoro de la Rust-for-Linux-projekto, proponis trian komponan opcion por evoluigi aparato-ŝoforojn en la Rust-lingvo por ke linukso-kernaj programistoj konsideru. Rust-subteno estas konsiderata eksperimenta, sed jam estis interkonsentita por inkludo en la linukso-sekva branĉo. La disvolviĝo estas financita de Google kaj la ISRG (Interreta Sekureco-Esplorgrupo), kiu estas la fondinto de la projekto Let's Encrypt kaj antaŭenigas HTTPS kaj la evoluon de teknologioj por plibonigi la interretan sekurecon.

Memoru, ke la proponitaj ŝanĝoj ebligas uzi Ruston kiel duan lingvon por disvolvi ŝoforojn kaj kernajn modulojn. Rust-subteno estas prezentita kiel opcio, kiu ne estas ebligita defaŭlte kaj ne rezultigas, ke Rust estas inkluzivita kiel postulata konstrua dependeco por la kerno. Uzado de Rust por ŝofor-disvolviĝo permesos al vi krei pli sekurajn kaj pli bonajn ŝoforojn kun minimuma peno, liberaj de problemoj kiel memoraliro post liberigo, nulaj montriloj dereferencoj kaj bufro-tropasoj.

Memorsekureco estas disponigita en Rust ĉe kompiltempo per referenckontrolado, konservante trakon de objektoposedo kaj objektvivdaŭro (amplekso), same kiel tra taksado de la ĝusteco de memoraliro dum kodekzekuto. Rusto ankaŭ provizas protekton kontraŭ entjeraj superfluoj, postulas devigan inicialigon de variaj valoroj antaŭ uzo, pli bone pritraktas erarojn en la norma biblioteko, aplikas la koncepton de neŝanĝeblaj referencoj kaj variabloj defaŭlte, ofertas fortan senmovan tajpadon por minimumigi logikajn erarojn.

La nova versio de la flikoj daŭre forigas la komentojn faritajn dum la diskuto de la unua kaj dua versioj de la flikoj. La plej rimarkindaj ŝanĝoj:

  • Transiro estis farita al uzado de la stabila eldono de Rust 1.57 kiel la referenckompililo kaj ligo al la stabiligita eldono de la Rust 2021 lingvo estis disponigita. Antaŭe, flikaĵoj estis ligitaj al la beta-branĉo de Rust kaj uzis kelkajn lingvajn funkciojn kiuj estis klasifikitaj kiel malstabilaj. La transiro al la Rust 2021-specifo permesis al ni komenci laboron por eviti la uzon de tiaj malstabilaj funkcioj en flikaĵoj kiel const_fn_transmute, const_panic, const_unavailable_unchecked kaj core_panic kaj try_reserve.
  • La evoluo de la alloc-versio de la Rust-biblioteko inkluzivita en la pecetoj daŭris, modifita por forigi la memorajn atribuajn funkciojn de ebla generacio de la "paniko" ŝtato kiam okazas eraroj, kiel el memoro. La nova versio efektivigas la opciojn "no_rc" kaj "no_sync" por malŝalti funkciojn ne uzatajn en la kerna Rust-kodo, igante la bibliotekon pli modula. Laboro daŭras kun la ĉefaj alloc-programistoj, celante translokigi la ŝanĝojn necesajn por la kerno al la ĉefa biblioteko. La opcio "no_fp_fmt_parse", necesa por ke la biblioteko funkciu ĉe la kernnivelo, estis movita al la baza biblioteko de Rust (kerno).
  • La kodo estis purigita por forigi eblajn avertojn pri kompililo dum konstruado de la kerno en modo CONFIG_WERROR. Dum konstrukodo en Rust, kromaj kompililaj diagnozaj reĝimoj kaj Clippy-linter-avertoj estas ebligitaj.
  • Abstraktaĵoj estas proponitaj por uzo en Rust-kodo por seqlocks (sekvencŝlosiloj), revokvokoj por potencadministrado, I/O Memory (readX/writeX), interrompo kaj fadentraktiloj, GPIO, aliro al aparatoj, ŝoforoj kaj akreditaĵoj.
  • La iloj por ŝoforevoluo estis vastigitaj por inkludi relokeblajn muteksojn, pec-iteratorojn, simpligitajn montriligojn, plibonigitajn faŭltajn diagnozon, kaj datenbus-sendependan infrastrukturon.
  • Plibonigita laboro kun ligiloj uzantaj simpligitan Ref-tipon, bazitan sur la refcount_t backend, kiu uzas la kernan API de la sama nomo por nombri referencojn. Subteno por la Arc- kaj Rc-tipoj provizitaj en la norma alloc-biblioteko estis forigita kaj ne haveblas en kodo efektivigita ĉe la kernnivelo (opcioj estis preparitaj por la biblioteko mem, kiuj malŝaltas ĉi tiujn tipojn).
  • La pecetoj inkluzivas version de la PL061 GPIO-ŝoforo, reverkitan en Rust. Speciala trajto de la ŝoforo estas, ke ĝia efektivigo preskaŭ linio post linio ripetas la ekzistantan GPIO-ŝoforon en la C-lingvo. Por programistoj, kiuj volas konatiĝi kun kreado de ŝoforoj en Rust, oni preparis linion-post-linian komparo, kiu ebligas al ili kompreni, kiujn konstruaĵojn en Rust la C-kodo estas konvertita.
  • La ĉefa Rust-kodbazo adoptis rustc_codegen_gcc, rustc-backend por GCC kiu efektivigas antaŭtempan (AOT) kompilon uzante la libgccjit-bibliotekon. Kun taŭga disvolviĝo de la backend, ĝi permesos vin kolekti la Rust-kodon implikitan en la kerno uzante GCC.
  • Krom ARM, Google kaj Mikrosofto, Red Hat esprimis intereson uzi la Rust-lingvon en la Linukso-kerno. Ni rememoru, ke Guglo rekte provizas subtenon por la projekto Rust por Linukso, disvolvas novan efektivigon de la interproceza komunikmekanismo de Binder en Rust, kaj pripensas la eblecon reverki diversajn ŝoforojn en Rust. Mikrosofto komencis efektivigi ŝoforojn por Hyper-V en Rust. ARM laboras por plibonigi Rust-subtenon por ARM-bazitaj sistemoj. IBM efektivigis kernsubtenon por Rust por PowerPC-sistemoj.

fonto: opennet.ru

Aldoni komenton