
Paolo Bonzini, a Red Hat fejlesztője 2025. május 3-án közölt frissítést a Rust támogatás helyzetéről. Az elmúlt három hónapban a fejlesztések főként a Rust-hoz készült kötések (bindings) megtisztítására és a biztonságos Rust kódból elérhető funkcionalitás bővítésére összpontosultak. A Rust egyre több helyen váltja ki a meglévő C kódot, különösen az eszközmeghajtók (device models) területén. A cél, hogy új QEMU-eszközmodellek biztonságos Rust nyelven készüljenek, elkerülve a nem biztonságos (unsafe) memóriakezelést és tipikus C hibákat.
QEMU 10.0 és a Rust
A Rust támogatás be van építve a QEMU 10.0 kódbázisába, de továbbra sem engedélyezett alapértelmezés szerint. A Rust kód lefordul minden támogatott platformon, és több teszt is lefut (pl. make check-unit, make check-qtests), többek között a Rust-alapú pl011 UART és HPET eszközmodellekre is. A pl011 implementációja szinte teljes egészében safe Rust kóddal készült, kivéve a migrációs logikát és néhány qdev tulajdonságot. A HPET modell néhány helyen használ unsafe részeket, de ezek jól körülhatároltak és minimalizáltak. Jelenleg a Rust-alapú eszközmodellek kódja (pl011, HPET) még nem egységes stílusban íródott. Peter Maydell javaslatot tett a Rust kód egységesítésére: például a bitek elnevezése, a regiszterek kezelése és a kódstruktúra (pl. külön State és Registers szerkezetek) még eltérő lehet eszközönként. A fejlesztők javasolják egy ajánlott Rust stílus kidolgozását QEMU eszközmodellekhez, hogy a jövőben egységes, jól olvasható, karbantartható Rust kód jöhessen létre.
- A Rust támogatása már fordíthatóvá és futtathatóvá vált az összes hivatalosan támogatott platformon, amennyiben a --enable-rust kapcsolóval építik. A Rustban írt pl011 és HPET eszközmodellek sikeresen átestek a CI és egységtesztek jelentős részén, beleértve a migrációs teszteket is.
- Bindgen és saját típusok szétválasztása: különválasztották a C-ből generált típusokat a Rustban ténylegesen használt struktúráktól, így lehetővé vált például a Send, Sync, Zeroable traitek rugalmasabb használata.
- Clippy, rustfmt és rustdoc támogatás már elérhető ninja használatával.
- A Meson 1.8 nativ támogatást nyújt ezekhez, de az 1.8.0 verzióban található hibák miatt a teljes kihasználás még várat magára.
- A Rust kód jelenleg statikusan linkeli a standard könyvtárat, ami a bináris méretét jelentősen növeli – ez disztribúciókban problémás lehet. Egy függőben lévő Meson patch ezt orvosolná.
- C ↔ Rust interfész tisztítás: új konverziós modul készült a C hibakódok és a Rust Result típusa között, ami különösen a karakteres eszközöknél hasznos.
- A HPET élő migrációja elkészült, beolvasztás előtt áll.
- A pl011 Rust verziója még nem tartalmaz minden legfrissebb változtatást.
- Nyomkövetés (tracepoints) és naplózás (logging) továbbra is hiányzik – ezek a funkciók döntőek a Rust eszközmodellek gyakorlati használatához.
- A VMState pre_save és post_load visszahívásai továbbra is unsafe, de a Rust 1.83.0 verzióval ez biztonságosan is megvalósítható lenne.
- A pl011 és HPET maradék unsafe részei biztonságosan kiválthatók – kivéve az instance_init inicializációs logikáját, amely külön figyelmet igényel.
- A vm-memory crate lehetővé teheti a biztonságos memóriakezelést DMA-hoz, bár ezt még nem integrálták.
További tervek és korlátozások
A közeljövő feladatai között szerepel:
- Logolás és tracepontok Rust-os támogatása
- DMA kezelése biztonságos Rust használatával
- VMState migráció Rust 1.83 nyelvi funkcióinak bevezetésével
- A qemu_api crate szétbontása eszközkódra és általános használatra
- Döntés a használt Rust makrókról és könyvtárakról (pl. bitflags, bilge)
Egyes funkciók (pl. instance_init vagy DMA) jelenleg még unsafe Rust kódot igényelnek, de ezek is fokozatosan lecserélhetők lesznek biztonságos megoldásokra. A vm-memory crate például ígéretes alternatívát kínálhat.
Támogatott Rust verziók
A minimálisan támogatott Rust verzió emelésére is sor kerül: jelenleg 1.77.0 az ajánlott, de hamarosan 1.83.0 lehet a minimum, mivel az újabb verzió lehetővé teszi statikus konstansokra való hivatkozást – amely a migráció támogatásához elengedhetetlen. Ez a változás azonban azzal járhat, hogy egyes disztribúciók (pl. Debian bookworm) esetében a --enable-rust opció nem lesz elérhető a csomagolt fordítóval.
