Canonical financiert een driejarig promotieonderzoek naar het automatisch omzetten van grote C-codebases naar Rust. AI krijgt daarbij niet vrij spel: gegenereerde code moet eerst aantoonbaar hetzelfde gedrag vertonen als het origineel.
Het onderzoek wordt uitgevoerd aan de University of Bristol en krijgt ook steun van UK Research and Innovation (UKRI). Het doel is een platform dat repositories met honderdduizenden regels C-code kan omzetten naar veilige, onderhoudbare en functioneel equivalente Rust-code.
AI combineren met klassieke technieken
Bestaande vertaaltools kunnen volgens Canonical grote hoeveelheden C verwerken, maar nemen de structuur van de oorspronkelijke code vaak te letterlijk over. Het resultaat kan wel compileren als Rust, maar nog veel unsafe-constructies en typische C-patronen bevatten.
Large language models hebben een ander probleem. Ze kunnen kleine stukken C omzetten in overtuigende Rust-code, maar hebben moeite met de context van complete repositories. Bovendien betekent correct ogende code niet automatisch dat het programma hetzelfde doet. Daarom kiest het onderzoeksproject voor een neurosymbolische aanpak, waarbij AI wordt gecombineerd met programma-analyse, testen en formele methoden.
Het proces bestaat uit vier stappen. Eerst wordt een repository opgedeeld in kleinere onderdelen, waarbij typen, afhankelijkheden en gedrag behouden moeten blijven. Vervolgens vertaalt een taalmodel deze onderdelen naar idiomatische Rust-code.
Daarna wordt onder meer met fuzzing en mogelijk formele equivalentiecontroles onderzocht of de Rust-versie hetzelfde gedrag vertoont als de C-code. Bij afwijkingen moet het systeem de vermoedelijke fout lokaliseren en gericht proberen te herstellen met technieken voor symbolische program repair. Canonical beschouwt de gegenereerde code daarmee nadrukkelijk als onbetrouwbaar totdat de werking ervan is geverifieerd.
AppArmor als praktijktest
AppArmor en snap-confine worden gebruikt om de aanpak op echte productiesoftware te testen. Beide zijn belangrijk voor de beveiliging van Ubuntu en bevatten problemen die bij kleine benchmarks nauwelijks voorkomen, zoals platformafhankelijk gedrag, complexe buildsystemen, pointer-intensieve code en koppelingen met het besturingssysteem.
Canonical benadrukt dat het niet van plan is de bestaande versies van AppArmor en snap-confine automatisch te vervangen. De projecten dienen als testcase om te bepalen of de vertaalmethode ook bij volwassen software werkt.
Juist zulke codebases maken migratie lastig. Jaren aan bugfixes, optimalisaties en compatibiliteitskeuzes bevatten kennis die lang niet altijd afzonderlijk is gedocumenteerd. Een volledige herschrijving kan dat gedrag onbedoeld verliezen, terwijl een overstap naar Rust bepaalde categorieën geheugenveiligheidsproblemen kan voorkomen.
Het onderzoek staat onder leiding van professor Meng Wang van de University of Bristol, met dr. Cristina David en Canonicals Jon Seager als mede-begeleiders. Promovendus Alex Wood voert het onderzoek uit. Het project begint later dit jaar en loopt drie jaar.
Ook als een volledig automatische C-naar-Rustconverter niet haalbaar blijkt, verwacht Canonical bruikbare resultaten. Het onderzoek kan onder meer betere methoden opleveren voor het opdelen van grote codebases, het valideren van vertalingen en het automatisch herstellen van fouten.