Development

Software-ontwikkeling
Rust

Rust verovert browserbasis Chromium, maar langzaam

Goede en veilige interoperabiliteit met C++ is nog lastig.

16 januari 2023

Goede en veilige interoperabiliteit met C++ is nog lastig.

Het opensourceproject Chromium - de basis voor populaire browsers als Chrome, Edge en Opera - krijgt ondersteuning voor de programmeertaal Rust. Tot nog toe werd de code alleen in C++ geschreven. Maar de strategiewijziging gaat gepaard met veel voorzichtigheid.

Google kondigt in een securityblog aan te werken aan de mogelijkheid om Rust te gebruiken in code voor Chromium. Het gaat dit in eerste instantie doen in de vorm van 'third party libraries'. "We starten langzaam en gaan duidelijke verwachtingen opstellen met betrekking tot welke libraries we verwachten, wanneer we daarvoor klaar zijn", zegt Dana Jansens van Google's securityteam.

Rust wint aan populariteit

Steeds meer opensourceprojecten gingen de afgelopen maanden over op het ondersteunen van het gebruik van programmeertaal Rust. Bij het Android Open Source Project (AOSP), de basis voor smartphonebesturingssysteem Android, is het gebruik van Rust inmiddels breed omarmd. Maar ook bij het Linux kernelproject, bij cloudaanbieder AWS, Facebooks moederbedrijf Meta en bij software- en cloudaanbieder Microsoft. De motivatie hierachter is dat code schrijven in Rust de resulterende software veiliger maakt. Deze programmeertaal heeft namelijk een ingebouwd mechanisme die weigert om veelgemaakte fouten in met name geheugengebruik op te nemen in de code die ermee wordt geschreven.

En die vorm van security-by-design heeft effect. Zo bleek onlangs al voor het AOSP-project, dat Rust al in april 2021 heeft geaccepteerd en waarvan inmiddels 21% van de nieuwe code wordt geschreven in die nieuwere taal. Sinds die omarming van Rust is het aantal kwetsbaarheden in geheugengebruik ten opzichte van het totale aantal kwetsbaarheden gedaald van 76% naar 35%, meldde ZDNet.

Maar bij Chromium gaat de revolutie vermoedelijk niet zo hard als bij AOSP. Volgens Jansens wordt een heel voorzichtig traject ingezet waarbij steeds eerst heel goed in kaart moet worden gebracht wat de implicaties zijn van de introductie van Rust voor de interoperabiliteit met betrekking tot veiligheid, gemak en betrouwbaarheid. Één van de beperkingen is volgens Jansens dat Rust niet afhankelijk kan zijn van C++ - omdat "het geen kennis kan hebben  van C++-types. Om die reden kan Rust geen plek krijgen in elke willekeurige C++-code, alleen in functies die vanuit C++ door de API passeren." Daarom is ook gekozen voor interoperabiliteit één kant op (unidirectioneel): van C++ naar Rust.

Veel kennis nodig

Ze wijst op de vele verschillen tussen de twee talen en legt uit dat die volgens andere regels werken, waardoor veel dingen makkelijk scheef lopen. Daarom moet met name nauwkeurig gekeken worden naar de erg brede C++ API's van Chromium.

Google werkt wel aan een tool genaamd Crubit die voor een bidirectionele interoperabiliteit tussen C++ en Rust moet gaan zorgen. Het bedrijf kwalificeert dit hulpmiddel nog als 'extreem experimenteel'. Jansens zegt dat zonder dit soort tools die via de compiler werken, ontwikkelaars goed begrip moeten hebben van alle aannames die de Rust-compiler maakt. Alleen zo kunnen developers voorkomen dat C++ de regels overtreedt. Eigenlijk is C++ dan gewoon Rust in de 'onveilige modus', dus waarin alle checks op veelvoorkomende fouten zijn uitgeschakeld.

Jansens: "Dan is onveilig Rust erg kostbaar voor een project. De kosten worden in toom gehouden door de taal alleen te gebruiken in afgeschermde onderdelen en het gebruik tot een minimum te beperken. Op dezelfde manier moet de volle complexiteit van C++ worden afgeschermd van het veilige Rust. Beperkte API's die zijn ontwikkeld voor interoperabiliteit kunnen zulke afscherming bieden en we hopen dat interoperabiliteitstools op een andere manier de afscherming kunnen bieden bij het gebruik van bredere API's tussen de talen."

Lees meer over
1
Reacties
Bop 26 januari 2023 14:45

Uh, 'handig'.

Reactie toevoegen
De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.