Safe Kernel Programming with Rust

Writing bug free computer code is a challenging task in a low-level language like C. While C compilers are getting better and better at detecting possible bugs, they still have a long way to go. For application programming we have higher level languages that abstract away details in memory handling...

Full description

Bibliographic Details
Main Author: Lundberg, Johannes
Format: Others
Language:English
Published: KTH, Programvaruteknik och datorsystem, SCS 2018
Subjects:
Online Access:http://urn.kb.se/resolve?urn=urn:nbn:se:kth:diva-233255
id ndltd-UPSALLA1-oai-DiVA.org-kth-233255
record_format oai_dc
spelling ndltd-UPSALLA1-oai-DiVA.org-kth-2332552018-09-01T05:53:48ZSafe Kernel Programming with RustengSäker programmering i kärnan med RustLundberg, JohannesKTH, Programvaruteknik och datorsystem, SCS2018rustkernelsafeprogrammingComputer SciencesDatavetenskap (datalogi)Writing bug free computer code is a challenging task in a low-level language like C. While C compilers are getting better and better at detecting possible bugs, they still have a long way to go. For application programming we have higher level languages that abstract away details in memory handling and concurrent programming. However, a lot of an operating system's source code is still written in C and the kernel is exclusively written in C. How can we make writing kernel code safer? What are the performance penalties we have to pay for writing safe code? In this thesis, we will answer these questions using the Rust programming language. A Rust Kernel Programming Interface is designed and implemented, and a network device driver is then ported to Rust. The Rust code is analyzed to determine the safeness and the two implementations are benchmarked for performance and compared to each other. It is shown that a kernel device driver can be written entirely in safe Rust code, but the interface layer require some unsafe code. Measurements show unexpected minor improvements to performance with Rust. Att skriva buggfri kod i ett lågnivåspråk som C är väldigt svårt. C-kompilatorer blir bättre och bättre på att upptäcka buggar men är ännu långt ifrån att kunna garantera buggfri kod. För applikationsprogrammering finns det tillgängligt olika högnivåspråk som abstrakterar bort den manuella minneshanteringen och hjälper med trådsäker programmering. Dock fortfarande så är större delar av operativsystemet och dess kärna är endast skriven i C. Hur kan vi göra programmering i kärnan säkrare? Vad är prestandakonsekvenserna av att använda ett säkrare språk? I denna uppsats ska vi försöka svara på dessa frågor genom att använda språket Rust. Ett programmeringsgränssnitt i Rust är implementerat i kärnan och en nätverksdrivrutin är portad till Rust. Källkoden skriven i Rust är analyserad för att bedömma säkerheten samt prestandan är jämförd mellan C och Rust implementationerna. Det är bevisat att vi kan skriva en drivrutin i enbart säker Rust om vi kan lita på några osäkra funktioner i gränssnittet. Mätningar visar lite bättre prestanda i Rust. Student thesisinfo:eu-repo/semantics/bachelorThesistexthttp://urn.kb.se/resolve?urn=urn:nbn:se:kth:diva-233255TRITA-EECS-EX ; 2018:503application/pdfinfo:eu-repo/semantics/openAccess
collection NDLTD
language English
format Others
sources NDLTD
topic rust
kernel
safe
programming
Computer Sciences
Datavetenskap (datalogi)
spellingShingle rust
kernel
safe
programming
Computer Sciences
Datavetenskap (datalogi)
Lundberg, Johannes
Safe Kernel Programming with Rust
description Writing bug free computer code is a challenging task in a low-level language like C. While C compilers are getting better and better at detecting possible bugs, they still have a long way to go. For application programming we have higher level languages that abstract away details in memory handling and concurrent programming. However, a lot of an operating system's source code is still written in C and the kernel is exclusively written in C. How can we make writing kernel code safer? What are the performance penalties we have to pay for writing safe code? In this thesis, we will answer these questions using the Rust programming language. A Rust Kernel Programming Interface is designed and implemented, and a network device driver is then ported to Rust. The Rust code is analyzed to determine the safeness and the two implementations are benchmarked for performance and compared to each other. It is shown that a kernel device driver can be written entirely in safe Rust code, but the interface layer require some unsafe code. Measurements show unexpected minor improvements to performance with Rust. === Att skriva buggfri kod i ett lågnivåspråk som C är väldigt svårt. C-kompilatorer blir bättre och bättre på att upptäcka buggar men är ännu långt ifrån att kunna garantera buggfri kod. För applikationsprogrammering finns det tillgängligt olika högnivåspråk som abstrakterar bort den manuella minneshanteringen och hjälper med trådsäker programmering. Dock fortfarande så är större delar av operativsystemet och dess kärna är endast skriven i C. Hur kan vi göra programmering i kärnan säkrare? Vad är prestandakonsekvenserna av att använda ett säkrare språk? I denna uppsats ska vi försöka svara på dessa frågor genom att använda språket Rust. Ett programmeringsgränssnitt i Rust är implementerat i kärnan och en nätverksdrivrutin är portad till Rust. Källkoden skriven i Rust är analyserad för att bedömma säkerheten samt prestandan är jämförd mellan C och Rust implementationerna. Det är bevisat att vi kan skriva en drivrutin i enbart säker Rust om vi kan lita på några osäkra funktioner i gränssnittet. Mätningar visar lite bättre prestanda i Rust.
author Lundberg, Johannes
author_facet Lundberg, Johannes
author_sort Lundberg, Johannes
title Safe Kernel Programming with Rust
title_short Safe Kernel Programming with Rust
title_full Safe Kernel Programming with Rust
title_fullStr Safe Kernel Programming with Rust
title_full_unstemmed Safe Kernel Programming with Rust
title_sort safe kernel programming with rust
publisher KTH, Programvaruteknik och datorsystem, SCS
publishDate 2018
url http://urn.kb.se/resolve?urn=urn:nbn:se:kth:diva-233255
work_keys_str_mv AT lundbergjohannes safekernelprogrammingwithrust
AT lundbergjohannes sakerprogrammeringikarnanmedrust
_version_ 1718727685287444480