Tweede editie van patches voor de Linux-kernel met ondersteuning voor de Rust-taal

Miguel Ojeda, auteur van het Rust-for-Linux-project, stelde een bijgewerkte versie voor van componenten voor het ontwikkelen van apparaatstuurprogramma's in de Rust-taal, ter overweging door Linux-kernelontwikkelaars. Rust-ondersteuning wordt als experimenteel beschouwd, maar er is al overeenstemming bereikt over opname in de linux-next-branch. De nieuwe versie elimineert de opmerkingen die zijn gemaakt tijdens de bespreking van de eerste versie van de patches. Linus Torvalds heeft zich al bij de discussie aangesloten en voorgesteld om de logica voor het verwerken van sommige bitbewerkingen te veranderen.

Bedenk dat de voorgestelde wijzigingen het mogelijk maken om Rust als tweede taal te gebruiken voor het ontwikkelen van stuurprogramma's en kernelmodules. Rust-ondersteuning wordt gepresenteerd als een optie die niet standaard is ingeschakeld en die er niet toe leidt dat Rust wordt opgenomen als een vereiste build-afhankelijkheid voor de kernel. Door Rust te gebruiken voor de ontwikkeling van stuurprogramma's kunt u met minimale inspanning veiligere en betere stuurprogramma's maken, vrij van problemen zoals geheugentoegang na het vrijmaken, null pointer-dereferenties en bufferoverruns.

Rust dwingt de geheugenveiligheid af tijdens het compileren door referentiecontrole, objecteigendom en het volgen van de levensduur van objecten (scopes), en door de juistheid van geheugentoegang tijdens runtime te evalueren. Rust biedt ook bescherming tegen overflows van gehele getallen, vereist dat variabelewaarden vóór gebruik worden geïnitialiseerd, heeft een betere foutafhandeling in de standaardbibliotheek, gebruikt standaard het concept van onveranderlijke referenties en variabelen en biedt sterke statische typering om logische fouten te minimaliseren.

De meest opvallende veranderingen in de nieuwe versie van de patches:

  • De geheugentoewijzingscode wordt bevrijd van het potentieel genereren van een "paniek"-toestand wanneer fouten zoals onvoldoende geheugen optreden. Er is een variant van de Rust alloc-bibliotheek inbegrepen, die de code herwerkt om fouten op te lossen, maar het uiteindelijke doel is om alle functies die nodig zijn voor de kernel over te dragen naar de hoofdeditie van alloc (de wijzigingen zijn al voorbereid en overgebracht naar de standaard Roest bibliotheek).
  • In plaats van nachtelijke builds kun je nu bèta-releases en stabiele releases van de rustc-compiler gebruiken om een ​​kernel met Rust-ondersteuning te compileren. Momenteel wordt rustc 1.54-beta1 gebruikt als referentiecompiler, maar nadat release 1.54 aan het eind van de maand is uitgebracht, zal deze worden ondersteund als referentiecompiler.
  • Ondersteuning toegevoegd voor het schrijven van tests met het standaard “#[test]” attribuut voor Rust en de mogelijkheid om doctests te gebruiken om tests te documenteren.
  • Ondersteuning toegevoegd voor ARM32- en RISCV-architecturen naast de eerder ondersteunde x86_64 en ARM64.
  • Verbeterde implementaties van GCC Rust (GCC frontend voor Rust) en rustc_codegen_gcc (rustc backend voor GCC), die nu alle basistests doorstaat.
  • Er wordt een nieuw abstractieniveau voorgesteld voor gebruik in Rust-programma's van kernelmechanismen geschreven in C, zoals rood-zwarte bomen, objecten met referentietelling, het maken van bestandsdescriptors, taken, bestanden en I/O-vectoren.
  • Componenten voor de ontwikkeling van stuurprogramma's hebben verbeterde ondersteuning voor de module file_operations, de module!-macro, macroregistratie en rudimentaire stuurprogramma's (onderzoeken en verwijderen).
  • Binder ondersteunt nu het doorgeven van bestandsdescriptors en LSM-hooks.
  • Er wordt een functioneler voorbeeld van een Rust-driver voorgesteld: bcm2835-rng voor de hardware-generator voor willekeurige getallen van Raspberry Pi-borden.

Bovendien worden de projecten van enkele bedrijven met betrekking tot het gebruik van Rust in de kernel genoemd:

  • Microsoft heeft interesse getoond in deelname aan de werkzaamheden om Rust-ondersteuning in de Linux-kernel te integreren en is bereid om de komende maanden driverimplementaties voor Hyper-V op Rust te leveren.
  • ARM werkt aan het verbeteren van Rust-ondersteuning voor ARM-gebaseerde systemen. Het Rust-project heeft al wijzigingen voorgesteld die van 64-bits ARM-systemen een Tier 1-platform zouden maken.
  • Google biedt rechtstreeks ondersteuning voor het Rust voor Linux-project, ontwikkelt een nieuwe implementatie van het Binder-interprocess-communicatiemechanisme in Rust en overweegt de mogelijkheid om verschillende stuurprogramma's in Rust te herwerken. Via ISRG (Internet Security Research Group) verstrekte Google financiering voor werkzaamheden om Rust-ondersteuning in de Linux-kernel te integreren.
  • IBM heeft kernelondersteuning voor Rust voor PowerPC-systemen geïmplementeerd.
  • Het laboratorium LSE (Systems Research Laboratory) heeft een SPI-driver ontwikkeld in Rust.

Bron: opennet.ru

Voeg een reactie