Kolmas painos korjaustiedostoja Linux-ytimelle, joka tukee Rust-kieltä

Miguel Ojeda, Rust-for-Linux-projektin kirjoittaja, on ehdottanut kolmatta komponenttivaihtoehtoa laiteohjainten kehittämiseen Rust-kielellä Linux-ytimen kehittäjien harkittavaksi. Ruostukea pidetään kokeellisena, mutta se on jo sovittu sisällytettäväksi linux-next-haaraan. Kehitystä rahoittavat Google ja ISRG (Internet Security Research Group), joka on Let's Encrypt -projektin perustaja ja edistää HTTPS:ää ja Internetin turvallisuutta parantavien teknologioiden kehitystä.

Muista, että ehdotetut muutokset mahdollistavat Rustin käytön toisena kielenä ohjaimien ja ydinmoduulien kehittämisessä. Ruosteen tuki esitetään vaihtoehtona, joka ei ole oletusarvoisesti käytössä, eikä se johda ruosteen sisällyttämiseen ytimen pakollisena koontiriippuvuutena. Rustin käyttäminen ajurien kehittämiseen mahdollistaa turvallisempien ja parempien ohjainten luomisen vähällä vaivalla, ilman ongelmia, kuten muistin käyttöä vapauttamisen jälkeen, nollaosoittimen viittauksia ja puskurin ylityksiä.

Muistiturvallista käsittelyä tarjotaan Rustissa käännöshetkellä referenssitarkistuksen, objektin omistajuuden ja objektin käyttöiän (laajuus) seurantaan sekä muistin käytön oikeellisuuden arviointiin koodin suorittamisen aikana. Ruoste tarjoaa myös suojan kokonaislukujen ylivuodoilta, vaatii muuttujien arvojen pakollisen alustamisen ennen käyttöä, käsittelee virheet paremmin standardikirjastossa, soveltaa oletusarvoisesti muuttumattomien viitteiden ja muuttujien käsitettä, tarjoaa vahvan staattisen kirjoittamisen loogisten virheiden minimoimiseksi.

Korjausten uusi versio poistaa edelleen korjaustiedostojen ensimmäisestä ja toisesta versiosta käydyn keskustelun aikana tehdyt kommentit. Huomattavimmat muutokset:

  • On siirrytty käyttämään Rust 1.57:n vakaata julkaisua viitekääntäjänä ja linkki Rust 2021 -kielen stabiloituun versioon on annettu. Aiemmin korjaukset oli sidottu Rustin beta-haaraan ja niissä käytettiin joitain kieliominaisuuksia, jotka luokiteltiin epävakaiksi. Rust 2021 -spesifikaatioon siirtymisen ansiosta pystyimme välttämään epävakaiden ominaisuuksien käytön korjauksissa, kuten const_fn_transmute, const_panic, const_unavailable_unchecked ja core_panic ja try_reserve.
  • Korjauspäivityksiin sisältyvän Rust-kirjaston alloc-version kehitystä on jatkettu, ja sitä on muokattu poistamaan muistin varaustoiminnot mahdollisesta "paniikki"-tilan syntymisestä virheiden sattuessa, kuten muistin loppuessa. Uusi versio ottaa käyttöön "no_rc"- ja "no_sync"-vaihtoehdot poistamaan käytöstä toiminnot, joita ei käytetä ytimen Rust-koodissa, mikä tekee kirjastosta modulaarisemman. Työ jatkuu tärkeimpien alloc-kehittäjien kanssa tavoitteena siirtää ytimen tarvitsemat muutokset pääkirjastoon. "no_fp_fmt_parse" -vaihtoehto, joka tarvitaan kirjaston toimimiseen ydintasolla, on siirretty Rust-peruskirjastoon (ydin).
  • Koodi on puhdistettu mahdollisten kääntäjien varoitusten poistamiseksi, kun ydin rakennetaan CONFIG_WERROR-tilassa. Kun rakennat koodia Rustissa, kääntäjän lisädiagnostiikkatilat ja Clippyn linterivaroitukset ovat käytössä.
  • Abstraktioita ehdotetaan käytettäväksi ruostekoodissa seqlockille (sekvenssilukot), takaisinkutsuille virranhallintaan, I/O-muistiin (readX/writeX), keskeytys- ja säiekäsittelijöihin, GPIO:hin, pääsyyn laitteisiin, ohjaimiin ja valtuustietoihin.
  • Ohjainten kehittämiseen tarkoitettuja työkaluja on laajennettu sisältämään siirrettävät mutexet, bitti-iteraattorit, yksinkertaistetut osoitinsidokset, parannettu vikadiagnostiikka ja tietoväylästä riippumaton infrastruktuuri.
  • Parannettu työskentely linkkien kanssa käyttämällä yksinkertaistettua Ref-tyyppiä, joka perustuu refcount_t-taustajärjestelmään, joka käyttää samannimistä ydinsovellusliittymää viitteiden laskemiseen. Tuki Arc- ja Rc-tyypeille, jotka tarjotaan vakioalloc-kirjastossa, on poistettu, eikä se ole saatavilla ydintasolla suoritettavassa koodissa (itse kirjastoa varten on valmistettu asetukset, jotka poistavat nämä tyypit käytöstä).
  • Korjaukset sisältävät version PL061 GPIO -ohjaimesta, joka on kirjoitettu uudelleen Rustilla. Ajurin erikoisuus on, että sen toteutus lähes rivi riviltä toistaa olemassa olevan GPIO-ohjaimen C-kielellä. Kehittäjille, jotka haluavat tutustua ajurien luomiseen Rustissa, on laadittu rivi riviltä vertailu, jonka avulla he voivat ymmärtää, mihin rakenteisiin Rustissa C-koodi muunnetaan.
  • Pääasiallinen Rust-koodikanta on ottanut käyttöön rustc_codegen_gcc:n, rustc-taustaohjelman GCC:lle, joka toteuttaa AOT-käännöksen libgccjit-kirjaston avulla. Kun taustaa kehitetään asianmukaisesti, sen avulla voit kerätä ytimeen liittyvän Rust-koodin GCC:n avulla.
  • ARM:n, Googlen ja Microsoftin lisäksi Red Hat on ilmaissut kiinnostuksensa Rust-kielen käyttöön Linux-ytimessä. Muistakaamme, että Google tukee suoraan Rust for Linux -projektia, kehittää uutta Binder-prosessien välisen viestintämekanismin toteutusta Rustissa ja harkitsee mahdollisuutta muokata eri ajureita Rustissa. Microsoft on alkanut toteuttaa ohjaimia Hyper-V:lle Rustissa. ARM pyrkii parantamaan Rust-tukea ARM-pohjaisille järjestelmille. IBM on ottanut käyttöön Rust-tuen PowerPC-järjestelmien ytimessä.

Lähde: opennet.ru

Lisää kommentti