Llançament del llenguatge de programació Rust 1.74. Auditoria RustVMM. Reescriptura de Binder a Rust

S'ha publicat el llançament del llenguatge de programació de propòsit general Rust 1.74, fundat pel projecte Mozilla, però ara desenvolupat sota els auspicis de l'organització independent sense ànim de lucre Rust Foundation. El llenguatge se centra en la seguretat de la memòria i proporciona els mitjans per aconseguir un alt paral·lelisme de treballs evitant l'ús d'un col·lector d'escombraries i el temps d'execució (el temps d'execució es redueix a la inicialització bàsica i al manteniment de la biblioteca estàndard).

Els mètodes de gestió de memòria de Rust estalvien al desenvolupador d'errors en manipular els punters i protegeixen dels problemes que sorgeixen a causa del maneig de la memòria de baix nivell, com ara accedir a una àrea de memòria després d'haver-se alliberat, desreferenciar punters nuls, desbordaments de memòria intermèdia, etc. Per distribuir biblioteques, proporcionar compilacions i gestionar dependències, el projecte desenvolupa el gestor de paquets Cargo. El repositori crates.io és compatible per allotjar biblioteques.

La seguretat de la memòria es proporciona a Rust en temps de compilació mitjançant la comprovació de referències, el seguiment de la propietat de l'objecte, el seguiment de la vida útil dels objectes (àmbits) i l'avaluació de la correcció de l'accés a la memòria durant l'execució del codi. Rust també proporciona protecció contra desbordaments d'enters, requereix la inicialització obligatòria dels valors de les variables abans de l'ús, gestiona millor els errors a la biblioteca estàndard, aplica el concepte de referències i variables immutables per defecte, ofereix una escriptura estàtica forta per minimitzar els errors lògics.

Principals innovacions:

  • S'ha afegit la possibilitat de configurar comprovacions de pelusa mitjançant el fitxer Cargo.toml amb el manifest del gestor de paquets. Per definir paràmetres de pelusa, com ara el nivell de resposta (prohibir, denegar, advertir, permetre), es proposen noves seccions "[lints]" i "[workspace.lints]", canvis en els quals es tenen en compte a l'hora de prendre una decisió sobre la reconstrucció. Per exemple, en lloc d'especificar els senyaladors "-F", "-D", "-W" i "-A" quan s'assemblen o s'afegeixen els "#![prohibeix(codi_no segur)]" i "#![deny(clippy) :" atributs al codi) :enum_glob_use)]" ara es pot utilitzar al manifest de càrrega: [lints.rust] unsafe_code = "prohibeix" [lints.clippy] enum_glob_use = "deny"
  • El gestor de paquets Crate ha afegit la possibilitat d'autenticar-se quan es connecta a un dipòsit. El paquet bàsic inclou suport per col·locar paràmetres d'autenticació a les botigues de credencials de Linux (basades en libsecret), macOS (Keychain) i Windows (Windows Credential Manager), però el sistema inicialment es fa modular i us permet organitzar el treball amb diversos proveïdors per emmagatzemar i generant fitxes, per exemple, s'ha preparat un connector per utilitzar el gestor de contrasenyes 1Password. El repositori pot requerir l'autenticació per a qualsevol operació, no només per confirmar que els paquets s'han publicat. ~/.cargo/config.toml [registry] global-credential-providers = ["càrrega:token", "càrrega:libsecret"]
  • El suport per a les projeccions de tipus de retorn (impl_trait_projections) s'ha estabilitzat, permetent esmentar Self i T::Assoc en tipus de retorn com ara "async fn" i "->impl Trait". struct Wrapper<'a, T>(&'a T); // Tipus de retorn opac que mencionen `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } tret Tret<'a> { tipus Assoc; fn new() -> Self::Assoc; } impl Tret<'_> per () { tipus Assoc = (); fn new() {} } // Tipus de retorn opacs que mencionen un tipus associat: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> iterador impl { /* … */ } }
  • Una nova part de l'API s'ha mogut a la categoria d'estable, inclosos els mètodes i les implementacions de trets s'han estabilitzat:
  • L'atribut "const", que determina la possibilitat d'utilitzar-lo en qualsevol context en lloc de constants, s'utilitza a les funcions:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Saturant
    • impl De per a std::process::Stdio
    • impl De per a std::process::Stdio
    • impl From per a std::process::Child{Stdin, Stdout, Stderr}
    • impl From per a std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Error::altre
    • impl TryFrom per a U16
    • impl De<&[T; N]>per Vec
    • impl De<&mut [T; N]>per Vec
    • impl De<[T; N]> per a Arc<[T]>
    • impl De<[T; N]> per a Rc<[T]>
  • El compilador, el conjunt d'eines, la biblioteca estàndard i els executables d'aplicacions generats han augmentat els requisits per a les plataformes d'Apple, i ara requereixen com a mínim macOS 10.12 Sierra, iOS 10 i tvOS 10 llançats el 2016 per funcionar.
  • El tercer nivell de suport s'ha implementat per a la plataforma i686-pc-windows-gnullvm. El tercer nivell inclou el suport bàsic, però sense proves automatitzades, publicar compilacions oficials o comprovar si es pot crear el codi.
  • S'ha implementat el segon nivell de suport per a la plataforma de destinació loongarch64-unknown-none. El segon nivell de suport implica una garantia de muntatge.

A més, es poden observar dos esdeveniments relacionats amb el llenguatge Rust:

  • L'OSTIF (Open Source Technology Improvement Fund), creat per reforçar la seguretat dels projectes de codi obert, ha publicat els resultats d'una auditoria del projecte RustVMM, que proporciona components per crear hipervisors específics per a tasques i monitors de màquines virtuals (VMM). En el desenvolupament del projecte participen empreses com Intel, Alibaba, Amazon, Google, Linaro i Red Hat. S'estan desenvolupant els hipervisors Intel Cloud Hypervisor i Dragonball basats en RustVMM. L'auditoria va confirmar l'alta qualitat del codi base i l'ús de tècniques en l'arquitectura i implementació orientades a aconseguir la màxima seguretat. Durant l'auditoria, s'han identificat 6 problemes que no tenien un impacte directe en la seguretat.
  • Google va introduir una nova implementació del mecanisme de comunicació entre processos de Binder, reescrit en llenguatge Rust, a la llista de correu dels desenvolupadors del nucli de Linux. La reelaboració es va dur a terme com a part d'un projecte per reforçar la seguretat, promoure tècniques de programació segures i augmentar l'eficiència en la identificació de problemes quan es treballa amb memòria a Android (al voltant del 70% de totes les vulnerabilitats perilloses identificades a Android són causades per errors en treballar amb memòria). ). La implementació de Binder a Rust ha aconseguit la paritat de funcionalitat amb la versió original en llenguatge C, passa totes les proves AOSP (Android Open-Source Project) i es pot utilitzar per crear edicions de treball del firmware. El rendiment d'ambdues implementacions és aproximadament al mateix nivell (desviacions entre -1.96% i +1.38%).

Font: opennet.ru

Afegeix comentari