To the English version

TETRA RustIEC

RustIEC is een VLAIO TETRA project (grant HBC.2021.0066) met als doel Vlaamse bedrijven de Rust programmeertaal te doen beheersen. Het project legt specifiek de focus op veiligheid in IoT systemen, veiligheid in edge computing en veiligheid in cloud computing.

Het RustIEC project wordt geleid door het Smartnets lab van de Vrije Universiteit Brussel en het DistriNet lab van de KU Leuven. Ontmoet het team!

Projectdoel

Problemen met geheugen, zoals geheugenlekken, buffer overflows en memory dumps, zijn heel gekende softwareproblemen die kunnen uitgebuit worden door aanvallers. Het aantal cyberaanvallen neemt jaar na jaar toe. Niet alleen grote bedrijven, maar ook kleine bedrijven worden steeds vaker het doelwit en kunnen hiervan heel nefaste gevolgen ondervinden.

Bij de meeste programmeertalen, zoals bijvoorbeeld C en C++, worden deze geheugenproblemen pas laattijdig opgemerkt, meestal wanneer ze tijdens het uitvoeren sporadisch optreden omdat ze bij compilatie of debuggen niet opvallen. Wanneer de problemen pas in productie optreden, kan er grote schade ondervonden worden. Het zoekproces naar de oorzaak kan trouwens zeer tijdrovend zijn.

De programmeertaal Rust biedt hierop een adequaat antwoord. De compiler laat de programmeur niet toe om onveilige code neer te schrijven. Inherent door ontwerp ligt het aantal softwarefouten in Rust geschreven programmeercode veel lager. Bijgevolg worden fouten reeds van in het begin van het proces vermeden, hetgeen het onderhoud van code veel doeltreffender maakt. Tevens laat Rust ook toe om performante code te genereren. De programmeertaal beschikt globaal gezien over goede documentatie en er zijn reeds veel bibliotheken ter beschikking, zowel voor ingebedde als niet ingebedde systemen.

De belangrijkste doelstelling van dit project is bedrijven kennis te laten maken met de voordelen die de Rust programmeertaal kan opleveren, zodat ze zelf een afweging kunnen maken voor toekomstige ontwikkelingen.

We hebben de volgende resultaten voor ogen:

  • Twee uitgewerkte, gedocumenteerde gevalstudies, waarbij opstelling en code open beschikbaar worden gesteld.
  • Benchmarks opgesteld voor het vergelijken van prestatie tussen Rust en gangbare programmeercode zoals C, C++, Python voor een aantal veel voorkomende en representatieve algoritmes in de domeinen van IoT-gedreven veilige webapplicaties.
  • Uitgewerkt onderzoek naar de interoperabiliteit van Rust met andere programmeertalen en de overdraagbaarheid naar verschillende platformen.
  • Onderzoek naar efficiëntie van C naar Rust conversietools zoals C2Rust en CRUST.
  • Organisatie van één inleidende en één meer geavanceerde hands-on workshop om met Rust aan de slag te gaan en het ter beschikking stellen van het workshopmateriaal.
  • Het integreren van de opgedane kennis in minstens drie cursussen voor beide onderzoeksinstellingen.

Projectdeelnemers

Ausy Digazu LSEC OTN Systems Sky Hero Barco Gemone Lumency Quicksand Verhaert Digital COMmeto MatchID Shayp

Vrije Universiteit Brussel Vlaio KU Leuven

To the English version

Het team

Het RustIEC project wordt geleid door het INDI/ETRO Smartnets lab van de Vrije Universiteit Brussel en het DistriNet lab van de KU Leuven.

Projectbegeleiders

Kris Steenhaut An Braeken Jorn Lapon Stijn Volckaert

Kris Steenhaut (Vrije Universiteit Brussel) heeft de ETRO/IRIS/Smartnets groep geleid vanaf 2005. Haar onderzoeksactiviteiten focussen op het ontwerp, de implementatie en de experimentele evaluatie van draadloze sensornetwerken en hun integratie op het Internet en het wereldwijde web. Onderwerpen van bijzondere belangstelling zijn voornamelijk interoperabiliteit, veiligheid en privacy en de interactie met fog en cloud. Kris Steenhaut heeft verschillende ITEA- en SBO-projecten en verschillende EU-projecten over Internet of Things, smart grid, slimme verlichting en milieubewaking begeleid. Zij speelt een actieve rol in de ontwikkelingssamenwerking met Cuba en Vietnam.

An Braeken (Vrije Universiteit Brussel) werd professor in 2007 aan de Erasmushogeschool Brussel, sinds 2013 aan de Vrije Universiteit Brussel in het departement Industriële Wetenschappen. Haar huidige interesses omvatten security- en privacyprotocols voor IoT, cloud, fog, blockchain en 5G security. Ze nam deel en coördineerde in meer dan 12 nationale en internationale projecten.

Jorn Lapon (KU Leuven) is een Research Manager in Secure Software van de DistriNet Research Group van de KU Leuven campus in Gent. Hij is zowel in de industrie als in de academische wereld actief geweest en doctoreerde in 2012 op Anonymous Credential Systems. Onderwerpen van bijzonder belang zijn IoT-beveiliging, met een focus op veilige ontwikkeling en beveiligingstesten. Zijn nauwe samenwerking met de industrie is waardevol gebleken voor zowel de bedrijven als het academisch onderzoek.

Stijn Volckaert (KU Leuven) is an assistant professor at imec-DistriNet, KU Leuven - Technology Campus Ghent. His research currently focuses on exploit mitigations, software diversity, multi-variant execution, and automated migration of legacy code to safe languages.

Projectmedewerkers

Ruben De Smet Diana Deac Roald Van Glabbeek Andreas Declerck

Ruben De Smet (Vrije Universiteit Brussel) gebruikt actief Rust sinds 2016 en heeft bijgedragen aan meerdere Rust "crates", onder meer in het asynchrone ecosysteem, in cryptografische bibliotheken en in de "qmetaobject" bibliotheek. Hij onderhoudt mede een reeks Signal bibliotheken en ontwikkelt een Signal client. Voor zijn doctoraatsonderzoek werkt hij aan peer-to-peer technologie. Ruben vervoegde de Belgium Rust User Group in 2017 en organiseert deze sinds 2020.

Diana Deac (Vrije Universiteit Brussel) begon onlangs software te ontwikkelen in Rust na het werken met Contiki-NG dat geschreven is in de C programmeertaal. Ze ontwierp een adaptieve scheduler voor Time Slotted Channel Hopping (TSCH) voor Contiki-NG. Momenteel werkt ze aan de implementatie van het RPL-protocol in Rust. De focus van haar doctoraatsonderzoek is het verbeteren van protocollen voor draadloze sensornetwerken met het oog op veiligheid.

Roald Van Glabbeek (Vrije Universiteit Brussel) draagt bij met zijn expertise in embedded platformen en ontwerp en implementatie van MAC, RDC en routingprotocols.

Andreas Declerck (Vrije Universiteit Brussel) is bezig met Rust sinds 2017 en maakt occasioneel contributies aan de in Rust geschreven X11 window manager LeftWM. Voor zijn master thesis onderzoekt hij mogelijkheden om Rust te gebruiken bij het implementeren van multicast in het RPL netwerk protocol en CSMA op embedded devices. Hij is actief in de kunstwereld waar hij kunstenaars helpt met het uitbouwen van de technische kant van hun kunstinstallaties. In zijn vrije tijd is hij een actief vrijwilliger bij CoderDojo België waar hij kinderen tussen 7 en 18 jaar leert programmeren.

Projectbijdragers

Thibaut Vandervelden Robrecht Blancquaert Alicia Andries

Thibaut Vandervelden (Vrije Universiteit Brussel) draagt bij aan verschillende Rust crates sinds 2019. Zijn hoofdzakelijke focus ligt op het schrijven van software voor ingebedde apparaten die gebruikmaken van laagvermogen draadloze protocols, zoals IEEE802.15.4. Hij droeg bij aan de smoltcp crate, waarin hij de 6LoWPAN implementatie voorzag. Hij werkt momenteel aan een RPL protocol implementatie. De prestaties van de Rust programmeertaal op ingebedde apparaten is de focus van zijn doctoraatsonderzoek.

Robrecht Blancquaert (Vrije Universiteit Brussel) werkt aan snelle, veilige implementaties van elliptische krommen voor laagvermogen ingebedde apparaten, met automatische specialisatie voor verschillende CPU architecturen.

Alicia Andries (KU Leuven) is een doctoraatsonderzoeker aan de imec-DistriNet onderzoeksgroep van de KU Leuven onder leiding van Stijn Volckaert. Ze werkt aan het semi-automatisch migreren van code in onveilige systeemprogrammeertalen naar veiligere alternatieven, zoals Rust. Zo werkt ze aan het vertalen van drivers naar Rust, waarbij ze de huidige beperkingen van bestaande automatische migratietools en Rust for Linux onderzoekt.

To the English version

Workshops

Deel van de doelstelling van het RustIEC project is het organiseren van minstens één inleidende en twee geavanceerde hands-on workshops om met Rust aan de slag te gaan.

RustIEC 101

RustIEC 101 is onze beginnerscursus Rust, gebaseerd op de A-modules van de cursus "101-rs" door Tweede Golf. De materialen zijn beschikbaar in het Engels op https://101.rustiec.be/, en de broncode is beschikbaar op https://gitlab.com/etrovub/smartnets/rustiec-101/.

Deel 1

Deze cursus wordt gedoceerd in vorm van een workshop op:

  • 14 maart 2023 op de VUB campus;
  • 27 maart 2023 op de VUB campus;
  • 28 maart 2023 op de VUB campus;

aan in totaal 35 verwachte deelnemers.

Deel 2

Het tweede deel van de RustIEC 101 cursus leert meer geavanceerde Rustconcepten aan.

  • 13 september 2023 op de VUB campus;
  • 19 oktober 2023 op de campus van Barco;

RustIEC 201: Embedded programming

De "RustIEC 201: Embedded programming" workshop biedt je een inzicht in de wereld van embedded Rust. De inhoud van de workshop is te vinden op onze website https://201.rustiec.be/.

Deze cursus werd gegeven op 25 maart 2023.

RustIEC 202: C2Rust

De workshop "Geavanceerd: C2Rust" is ontworpen voor leden die hun begrip van Rust willen verdiepen door middel van praktische toepassingen. Deze workshop breidt de basiskennis van RustIEC 101 uit en biedt deelnemers hands-on ervaring met de C2Rust-tool, die helpt bij de migratie van C-codebases naar Rust.

Het cursusmateriaal is te vinden op https://github.com/AliciaAndries/rustiec_workshop_steps.

Deze cursus werd gegeven op 12 december 2023, direct na de vergadering van het Gebruikerscomité.

To the English version

Contact

Voor vragen die verband houden met de onderzoeksdomeinen van een medewerker of bijdrager, contacteert u gerust direct het relevante teamlid.

Algemene vragen, of project vervoegen

An Braeken Kris Steenhaut

Wenst u met uw bedrijf het project te vervoegen, kan u contact opnemen met An Braeken en Kris Steenhaut.

Inhoudelijke vragen

Voor vragen en suggesties betreffende de inhoud van het project, kan u rechtstreeks de medewerkers en bijdragers contacteren.

Web, cloud en async

Ruben De Smet

Betreffende cloud en webtechnologie neemt u contact op met Ruben De Smet, alsook voor asynchroon programmeren.

Ingebedde software

Thibaut Vandervelden Diana Deac

Betreffende ingebedde software kan u contact opnemen met Thibaut Vandervelden en Diana Deac.

Automatische vertaling en Linux kerneldrivers

Stijn Volckaert Stijn Volckaert

Omtrent automatische vertaling of vragen rond Linux kerneldriver ontwikkeling in Rust, neemt u contact op met Stijn Volckaert en Alicia Andries.

To the English version

Kick-off meeting 24 november 2022

Ruben De Smet: RustIEC kick-off

Kick-off Introduction slides

Download slides "kick-off introduction"

Ruben De Smet

Stijn Volckaert: Safe Systems Programming in Rust

Kick-off Introduction slides

Download slides "Safe Systems Programming in Rust"

Stijn Volckaert

Ruben De Smet & Thibaut Vandervelden: the Rust ecosystem

The Rust ecosystem

Download slides "Rust Ecosystem"

Ruben De Smet Thibaut Vandervelden

To the English version

Gebruikersgroepvergadering 27 maart 2023

Ruben De Smet: overzicht gebruikersgroepvergadering

Gebruikersgroepvergadering slides

Download gebruikersgroepvergadering slides

Ruben De Smet

Alicia Andries: C to Rust and making unsafe code safe

"C to Rust" slides

Download "C to Rust" slides

Alicia Andries

Thibaut Vandervelden: smoltcp

"smoltcp" slides

Download "smoltcp" slides

Thibaut Vandervelden

To the English version

Gebruikersgroepvergadering 12 december 2023

Jorn Lapon: Welkom met koffie

Ruben De Smet: Kwetsbaarheden in Rust-programma's

Kwetsbaarheden slides

Download Kwetsbaarheden slides

Ruben De Smet

Alicia Andries: Incrementele migratie van C-code naar Rust

Incrementele migratie slides

Download Incrementele migratie slides

Alicia Andries

To the English version

Gebruikersgroepvergadering 5 juni 2024

Alicia Andries: overzicht gebruikersgroepvergadering

Gebruikersgroepvergadering slides

Alicia Andries

Alicia Andries: Evolution of Rust for Linux and Lessons Learned

rust4linux slides

Download rust4linux slides

Alicia Andries

Thibaut Vandervelden: Rust Operating Systems and Frameworks for Embedded Devices

Embedded OS slides

Download Embedded OS slides

Thibaut Vandervelden

Michael Allwright: WebAssembly and Rust

Wasm slides

Download WASM slides

Jeroen Gardeyn: How Rust boosts confidence and productivity

my experiences as an algorithm researcher

Jeroen's slides

Download Jeroen's slides

To the English version

Embedded demo op de Wireless Community Meeting - 9 oktober 2024

Gebaseerd op onze embedded workshop, maakte het RustIEC team een kleine demo voor de Wireless Community (WiCo) meeting over veilige IoT op 9 oktober 2024. De demo breidt de workshop uit met draadloze controle over een IEEE 802.15.4 TCP/IP netwerk.

Groepsfoto op de WiCo meeting

To the English version

RustIEC nieuwsbrief (Juni 2023)

Welkom bij de eerste nieuwsbrief van het RustIEC project. Allereerst willen we de deelnemers van de eerste Rust Hands-On workshop bedanken, waarvoor we zeer goede en inzichtelijke feedback hebben ontvangen. In september zal de vervolgcursus van deze Rust Hands-On workshop plaatsvinden. Op basis van de resultaten van de vragenlijst hebben we besloten dat een gespecialiseerde cursus op een later tijdstip gericht zal zijn op embedded programmeren met Rust.

In deze nieuwsbrief geven we u updates over de voortgang van de RustIEC teams.

RPL implementatie door de Vrije Universiteit Brussel

Het VUB-team legt momenteel de laatste hand aan de implementatie en evaluatie van het Routing Protocol for Low-power and lossy networks (RPL). De implementatie is geschreven in Rust en toegevoegd aan de smoltcp TCP/IP bibliotheek, een lichtgewicht TCP/IP protocol stack. Als ingebed besturingssysteem hebben we het Embassy framework gebruikt. Beide zijn geschreven in de programmeertaal Rust.

Netwerk Stack Figuur 1: Protocol- en applicatiestack van Embassy met smoltcp en Contiki-NG.

Als eerste stap gebruikten we een simulator om de correctheid van de RPL-implementatie te evalueren. Daarna werden echte apparaten gebruikt, met name de nRF52840 ontwikkelingskit. Het te evalueren netwerk bestond uit apparaten die de smoltcp RPL implementatie met het Embassy framework draaiden en apparaten die de bekende Contiki-NG RPL implementatie draaiden, geschreven in C, die deel uitmaakt van het Contiki-NG besturingssysteem. Figuur 1 illustreert de protocolstacks voor zowel smoltcp als Contiki-NG.

De testopstelling bestond uit drie nodes, zoals weergegeven in Figuur 2. Een van de knooppunten diende als node, een ander als router en het derde als leaf node. Meerdere opstellingen werden geëvalueerd, waarbij de Contiki-NG implementatie werd gecombineerd met de smoltcp implementatie. Deze aanpak had als doel om de compatibiliteit van de Rust RPL implementatie te testen met een bestaande RPL implementatie geschreven in C.

Testopstellign Figuur 2: Testopstelling van nRF52840-DK's met smoltcp en Contiki-NG.

De op Rust gebaseerde RPL met smoltcp is robuust, maar vereist 145,5 KB flashgeheugen, terwijl RPL met Contiki-NG in C 47,7 KB vereist. De firmware zonder RPL heeft 117,3 KB nodig voor smoltcp en 38,1 KB voor Contiki-NG. Het is echter belangrijk om op te merken dat deze Rust-implementatie een eerste iteratie is, waardoor er voldoende ruimte is voor optimalisatie en verdere verfijning.

Het VUB-team werkte, in samenwerking met een masterstudent, aan de implementatie van het Generic Header Compression (GHC) protocol. Dit protocol dient als uitbreiding van de 6LoWPAN adaptatielaag voor IPv6. De implementatie werd ook toegevoegd aan de Rust smoltcp bibliotheek. Na de evaluatie concludeerden ze dat GHC vooral in specifieke scenario's zijn nut bewijst. IPv6-adressen maken deel uit van het woordenboek dat gebruikt wordt in het compressiealgoritme, waardoor het alleen efficiënt is wanneer de te comprimeren payload IPv6-adressen bevat.

Het VUB-team onderzoekt nu hoe de datalinklaag in Rust kan worden geïmplementeerd voor ingebedde apparaten, meer bepaald Medium Access Protocols (MAC) zoals Carrier Sense Multiple Access (CSMA) en Time Slotted Channel Hopping (TSCH). Wanneer deze protocollen in Rust worden geïmplementeerd, is er een volledige stack in een veilige programmeertaal beschikbaar voor apparaten die de IEEE 802.15.4 standaard gebruiken.

Vooruitgang op C naar Rust transpilers door KU Leuven

Het team van de KU Leuven heeft haar casestudy van de Rust voor Linux kernel afgerond. Ze hebben met succes een prototype gemaakt van een parallellepoortdriver in Rust en hebben een aantal belangrijke lessen geleerd over de interoperabiliteit van C en Rust. Je moet bijvoorbeeld nadenken over het soort beveiligingsfuncties dat je hebt toegevoegd aan de C code en of die ook moeten worden toegevoegd aan de Rust-code. Domen Puncen Kugler heeft hier een aantal interessante voorbeelden van gevonden. Ook als u een deel van uw C code vertaalt naar Rust zult u veel onveilige functies moeten gebruiken om te kunnen communiceren met de C code vanuit de nieuwe Rust code. Het is belangrijk om zulke onveilige functies in veilige functies te wikkelen die geheugenveiligheidscontroles kunnen uitvoeren voordat je Rust code simpelweg een pointer laat gebruiken die door C code werd aangeleverd. Hoewel het team van de KU Leuven hun studie van de Rust voor Linux kernel voorlopig opzij heeft gezet, houden ze belangrijke ontwikkelingen in de gaten. Bijvoorbeeld de verdere Rust-integraties in de mainline Linux kernel met de release van kernelversie 6.2. De Rust-integraties voor deze versie zijn voornamelijk low-level ondersteuningscode. Het zal nog een hele tijd duren voordat een substantiële Rust driver zal worden ondersteund door de mainline kernel.

Het team van de KU Leuven is momenteel bezig met een evaluatie van de stand van zaken op het gebied van het automatisch vertalen van C naar veiliger Rust. De drie publicaties van bijzonder belang zijn Mehmet Emre et al.'s OOPSLA 2021 paper "Translating C to Safer Rust", Bryan Tan Yao Hong's MSc thesis getiteld "From C Towards Idiomatic & Safer Rust Through Constraints-Guided Refactoring", en Hanliang Zhang et al.'s VAC 2023 paper "Ownership guided C to Rust translation". Ze bespraken de eerste twee papers op de vorige gebruikersgroepvergadering. Alledrie de publicaties hebben zeer verschillende technieken voor het transformeren van C naar veilig Rust, maar ze gebruiken allemaal C2Rust van Immunant als opstapje omdat het niet-idiomatisch, onveilig Rust kan genereren uit C code. C2Rust helpt niet om een programma veiliger te maken of te bewijzen dat een programma veilig was. Het enige waar het voor gemaakt is, is een syntactische vertaling. Deze syntactische vertaling neemt echter al wel een eerste horde weg voor iedereen die idiomatische Rust code probeert te genereren uit C code.

Omdat alle drie de publicaties C2Rust gebruiken, lijkt het begin van hun werkproces erg op elkaar. Ze volgen allemaal de workflow in Figuur 3. Ze gebruiken eerst C2Rust om onveilig Rust te genereren, daarna voegen ze hun eigen bijdrage toe in het blok Refactoring. Hoewel de papers een vergelijkbare workflow voor het omzetten delen, hebben ze verschillende manieren om de effectiviteit van hun tools te evalueren, wat het vergelijken van hun verschillende architecturen lastig maakt.

C2Rust Overview Figuur 3: Overzicht van de werking van C2Rust.

De architectuur van Mehmet Emre et al. is de meest eenvoudige. Ze transformeren simpelweg elke pointer van een specifiek type dat ze tegenkomen naar een Rust-referentie. Als de transformaties niet compileren, kijken ze automatisch naar de compilerfouten en de voorgestelde fixes en passen die toe. Dit is een zeer agressieve techniek. De architectuur die Bryan Tan Yao Hong voorstelt, is daarentegen heel precies. Ze bereiden transformaties voor op enkele zeer specifieke gevallen, zoals het transformeren van array pointers naar Rust types. Tot slot is de voorgestelde architectuur van Hanliang Zhang et al. gebaseerd op het vinden van pointers die passen in het eigendomsmodel van Rust. De basis van het idee lijkt erg op die van Immunant's eigendomsanalyse.

Na uitgebreide experimenten stelde het team van de KU Leuven vast dat alle ontwerpen veelbelovend zijn, maar dat de implementaties van deze architecturen verschillende fundamentele ontwerpfouten en tekortkomingen hebben. Het team van de KU Leuven vat momenteel de sterke en zwakke punten van de ontwerpen samen en zal dan richtlijnen en aanbevelingen formuleren die als uitgangspunt moeten dienen voor een nieuw en verbeterd ontwerp.

To the English version

RustIEC nieuwsbrief (September 2024)

Welkom bij de tweede nieuwsbrief van het RustIEC project. In deze nieuwsbrief geven we u updates over de voortgang van de RustIEC-teams.

RustIEC demo op IMEC'S Wireless Community event

Op Woensdag 9 oktober 2024, te IMEC - Leuven (12u - 19u), zullen we de resultaten van RustIEC tonen over het veilig ingebed programmeren in Rust. We zullen een draadloze versie demonstreren van het pong-spel dat we tijdens onze embeddded workshop presenteerden. Het hoofdonderwerp van IMEC's Wireless Community event is Secure over-the-air firmware updates of IoT devices, maar de scope is breder dan dat alleen.

Inschrijven kan via Wireless Community Workshop.

Rust Embedded Operating Systems en Frameworks

Het VUB-team heeft Overview of Rust Embedded Operating Systems and Frameworks ingediend bij het MDPI Sensors journal, dat aanvaard werd voor publicatie. De paper focust op verschillende Rust-gebaseerde besturingssystemen en frameworks, waaronder Tock, Hubris, RTIC en Embassy. Het toont het potentieel van Rust als high-level taal, zonder in te boeten aan low-level controle of performantie, waardoor embedded systemen betrouwbaarder en veiliger worden. Elk besturingssysteem brengt iets unieks, van realtime mogelijkheden tot op maat gemaakte hardware-abstracties, om de uitdagingen van moderne ingebedde apparaten aan te gaan.

Het eerste deel van de paper behandelt de basisprincipes van het ingebedde Rust-landschap, waarbij wordt uitgelegd hoe Rust kan worden gebruikt om firmware voor microcontrollers te schrijven. Het legt ook de voordelen uit van het gebruik van asynchrone Rust voor ingebedde systemen, waardoor een efficiëntere en gestructureerde manier wordt aangeboden om met randapparatuur te communiceren. Ook de belangrijkste onderdelen van een ingebed besturingssysteem worden besproken, zoals hoe taken worden gepland, hoe processen communiceren, hoe te communiceren met hardware, en tot slot hoe deze besturingssystemen en frameworks netwerken ondersteunen.

Het laatste deel van de paper biedt een evaluatie van de interrupt- en planningslatentie voor elk van de verschillende besturingssystemen en frameworks. De resultaten tonen aan dat Rust gebaseerde besturingssystemen en frameworks lage latenties kunnen bereiken, waardoor ze geschikt zijn voor real-time toepassingen. Ook de geheugenvereisten van elk besturingssysteem wordt vergeleken.

Crabstick: een schaakengine in Rust

Thibaut en Ruben van het VUB-team hebben een schaakengine in Rust gebouwd genaamd Crabstick. Dit hobbyproject is nog in ontwikkeling, maar speelt al een aardig potje schaak. Je kunt tegen Crabstick spelen op Lichess.

De Lichess-integratie is een interessante casestudy van hoe je Rust kunt integreren met een webservice: Crabstick is geïmplementeerd als een Kubernetes-service, en kan worden opgeschaald om meerdere spellen tegelijk te verwerken. Elk spel wordt afgehandeld door een aparte worker-implementatie, die communiceert met de hoofdbeheerder via een REST API. De worker-implementatie is geïmplementeerd als een Actix-actor, en stelt de spellen bloot aan Prometheus.

Crabstick op Prometheus Figuur 1: Crabstick statistieken in Prometheus, waarbij het aantal spellen over de tijd wordt weergegeven.

U kan al eens rondkijken in de Crabstick broncode. We plannen op een later moment een meer uitgebreid rapport betreffende user space Rust tools en technieken.

Verder in de bres

Gedurende de RustIEC-projectperiode heeft Rust meer tractie gekregen dan ooit tevoren. Het zijn niet langer alleen grote bedrijven zoals Google, Android en Mozilla die hun positieve ervaringen met het gebruik van Rust delen, ook overheden raken betrokken. Het Witte Huis adviseert nu dat nieuwe code niet geschreven zou moeten worden in geheugenonveilige talen zoals C en C++, maar in plaats daarvan ontwikkeld zou moeten worden in geheugenveilige talen zoals Rust.

C naar Rust vertalen

Zowel de academische wereld als de industrie maken grote vorderingen in het verminderen van de uitdagingen van het gebruik van Rust in software op systeemniveau. Een domein waar we tijdens RustIEC veel tijd aan hebben besteed en dat vooral aan belangstelling wint, is het automatisch vertalen van C naar Rust. Het Translating All C to Rust(TRACTOR) programma geïntroduceerd door de Defense Advanced Research projects Agency (DARPA) is een indicatie van de groeiende interesse. Hanliang Zhang et al., Jaemin Hong, Jaemin Hong et al., en Mehmet Emre et al. stellen oplossingen voor gebaseerd op programma-analyse, terwijl Momoko Shiraishi, Hasan Ferit Eniser, en Yoshiki Takashima oplossingen voorstellen gebaseerd op machinaal leren. Beide invalshoeken hebben hun voor- en nadelen. Terwijl programma-analysetechnieken gericht zijn op het vertalen van zeer specifieke codepatronen, is het zeer onwaarschijnlijk dat de code voor en na de transformatie semantisch veranderd is. Aan de andere kant zijn machine learning-benaderingen holistischer en kunnen ze hele codebasissen bestrijken. Ze hebben echter wel een prijs en dat is semantische gelijkwaardigheid. Er is een aanzienlijke kans dat de code na de transformatie niet meer compileert, of dat het nieuwe programma compleet ander gedrag vertoont. De toekomst zal daarom waarschijnlijk een huwelijk zijn tussen de twee invalshoeken, samen met een uitgebreide verificatie van het resulterende programma.

Terwijl TRACTOR streeft naar volledig geautomatiseerde vertalingen, hetzij met programma-analyse of AI, of een combinatie van beide, hebben we onderzocht welke hulpmiddelen we kunnen bieden totdat een betrouwbare en bruikbare volledig geautomatiseerde vertaler beschikbaar is. Hoewel we geloven dat een volledig geautomatiseerde vertaler de toekomst is, is het niet te zeggen hoe lang het zal duren voordat een dergelijk programma betrouwbaar kan werken op echte infrastructuur. In de tussentijd stellen we een semi-geautomatiseerd hulpmiddel voor dat vertalingen voorstelt in volgorde van belangrijkheid voor een ontwikkelaar die dan beslist of die wijzigingen de semantiek behouden. Hoewel dit betekent dat er meer handmatig werk nodig is, komt dit voorstel ook met meer garanties voor het behoud van de semantiek.

C en Rust interoperabiliteit

Hoewel het onmogelijk blijft om hele codebases volledig te vertalen van C naar geheugenveilig Rust, is het gebruik van C en Rust samen een must. Gelukkig is Rust ontworpen met C interoperabiliteit in gedachten, dus het is een grotendeels opgelost probleem. Het hoe van de zaak is beantwoord, maar of we het überhaupt moeten doen werd niet gevraagd tijdens RustIEC. Deze vraag is opgedoken in recente literatuur. De zorg die is onderzocht door Michalis Papaevripides et al. en Samuel Mergendahl et al. is dat geheugenfouten in geharde C-code die niet kunnen worden geëxploiteerd en die worden doorgegeven aan Rust-code, kunnen worden gebruikt om de geheugenveilige Rust-code te exploiteren. Sinds deze aanval is geformuleerd hebben Inyoung Bang et al., Peiming Liu et al., Hussain Almohri, Paul Kirth en Elijah Rivera geheugenscheidingstechnieken voorgesteld zodat de mogelijk beschadigde C data nooit Rust data kan beschadigen. Deze beschermingen hebben nog steeds enkele nadelen, verwarrende aanvallen worden niet gedekt en, nog belangrijker, de huidige gereedschappen zijn prototypes, dus nog niet klaar voor de industrie.

Vertaling en interoperabiliteit in de echte wereld

We hebben de Rust voor Linux kernel als case study gebruikt om te zien hoe de introductie van Rust in een C code base in de echte wereld gebeurt. Op het front van het vertalen van C naar Rust, kozen de maintainers van de Rust for Linux kernel ervoor om een herontwerp te maken bij het vertalen, in plaats van een één op één vertaling te maken. Meer impactvol dan dat waren de grote API- en ontwerpwijzigingen tijdens de duur van het RustIEC project, die we hebben besproken tijdens de gebruikersgroepbijeenkomst op 5 juni. De Rust voor Linux kernel lijkt zich echter te stabiliseren en nieuwe Rust functies worden langzaam maar gestaag toegevoegd aan de mainline Linux kernel. Een twistpunt dat lijkt te blijven bestaan is hoe de Rust en C code moeten interfacen, aangezien er weinig semantische definities beschikbaar zijn voor de C API. Daarom lijkt op het gebied van interoperabiliteit tussen C en Rust het grootste probleem de communicatie te zijn tussen de nogal los van elkaar staande C en Rust beheerders en, in ieder geval voorlopig, geen beveiligingsproblemen.

Vragen of Suggesties?

Heeft u vragen of suggesties voor het RustIEC-team, aarzel dan niet om contact met ons op te nemen:

Rust: pros and cons

This report is available in English. Dit verslag is beschikbaar in het Engels

Rust: tools and interoperability

This report is available in English. Dit verslag is beschikbaar in het Engels

Benchmarking Rust against C and C++

This report is available in English. Dit verslag is beschikbaar in het Engels

Automatic conversion and interfaces

This report is available in English. Dit verslag is beschikbaar in het Engels

Overzicht lopende onderzoeksproblemen

This report is available in English. Dit verslag is beschikbaar in het Engels

Best practices m.b.t. veiligheid in Rust

This report is available in English. Dit verslag is beschikbaar in het Engels