Smart Pointer und mehr Rust-Code fĂĽr den Linux-Kernel 6.14

Das Linux-Rust-Team hat fĂĽr die Kernel-Version 6.14 neue Funktionen implementiert, die eine stabilere Nutzung von Kernfunktionen versprechen.

vorlesen Druckansicht 36 Kommentare lesen
Krebs und Pinguin

(Bild: Bild erstellt mit KI fĂĽr iX)

Lesezeit: 1 Min.
close notice

This article is also available in English. It was translated with technical assistance and editorially reviewed before publication.

Miguel Ojeda, der Chefentwickler von Rust fĂĽr Linux, hat in einer Mail an Linus Torvalds eine Reihe von Neuerungen fĂĽr Kernel 6.14 angekĂĽndigt. Als "wichtigen Meilenstein auf dem Weg, einen Kernel zu bauen, der nur stabile Rust-Funktionen nutzt", nennt er die EinfĂĽhrung eines Makros fĂĽr smarte Pointer mit Rust 1.84: derive(CoercePointee).

Mit diesem Makro nutzen Kernel-Funktionen Rust-Bibliotheken wie Arc auf stabile Weise, die vorher nur unsicher zugänglich waren. Als Beispiel nennt Ojeda in der Mail:

fn f(p: &Arc<dyn Display>) {
           pr_info!("{p}\n");
       }

       let a: Arc<dyn Display> = Arc::new(42i32, GFP_KERNEL)?;
       let b: Arc<dyn Display> = Arc::new("hello there", GFP_KERNEL)?;

       f(&a); // Prints "42".
       f(&b); // Prints "hello there".

Als weitere Neuerungen listet er den Wechsel zu benutzerdefinierten Integer-Typen im Foreign Function Interface (FFI) auf und die Zuordnung der Typen long zu isize und char zu u8.

Videos by heise

Mit Blick auf Android hat das Rust-Team die Umgebungsvariable PROCMACROLDFLAGS eingefĂĽhrt, die es Proc-Makros von Rust erlaubt, andere Flags zu nutzen als die, die beim Linken von Host-Programmen angegeben waren. Und fĂĽr Kernel-Builds unter macOS hat das Team die Namenskonventionen fĂĽr dynamische Bibliotheken angepasst (beispielsweise so statt dylib).

Weitere Updates betreffen insbesondere Module des Kernel-Crates, zum Beispiel erhält types eine verbesserte Version von ForeignOwnable::borrow_mut und alloc implementiert Display für Box und richtet die Debug-Implementierung danach aus.

(who)