Rust is a systems language sponsored by Mozilla, focused on three things: safety, speed, and concurrency. It accomplishes many of these goals through strong compile-time checks, allowing for very little overhead at runtime. Performance is comparable to C or C++, while being free of many of the problems caused by things like dangling pointers, buffer overflows, and iterator invalidation.
While Rust is very much a "curly-brace" language, it also takes many cues from ML. Almost everything is an expression, and there is a very strong type system including sum types and powerful generics.
Rust provides a mechanism to subvert its safety checks when necessary, by adding an 'unsafe' annotation to portions of your code. This allows you full access to raw pointers, while controlling exactly how they are used. Often, Rust code that uses unsafe will do so as an implementation detail, allowing for them to expose a safe interface.
Operating System Development
Rust has a comparable amount of runtime to C and C++, and has set up its standard library to be amenable towards OS development. Specifically, the standard library is split into two parts: core and std. Core is the lowest-level aspects only, and doesn't include things like allocation, threading, and other higher-level features. Std builds on top of core to add them. Using only core is as easy as adding an annotation in your main source file.
Every Rust compiler is a cross-compiler, which makes setup easier.
There are still some rough edges when doing OSDev, and they require using nightly-only features. These are currently being worked on.
- "Writing an OS in Rust"
- Meaty Bare-Bones
- Multiboot image for x86_64
- has VFS and userland
- One of the largest and most active Rust OS projects
- uses libcore
- targets embedded MCUs, ARM only so far
- Small kernel + book, specifically for learning OSDev through Rust
- Ryanra's RustOS
- Uses libcore/collections/alloc
- Forked from Ryanra's RustOS
- Main goal is demoing OS Dev libraries written in Rust.
- Has an end goal of running WebAssembly in the kernel for a performance increase
Rust went through a long and public development process, and used to have a significantly larger runtime. There were lots of experiments pre-1.0, and so these projects are of historical interest but may not build.
- libx86: Library to program x86 hardware.
libcpu: Library to program CPUs.Now absorbed into libx86.
- slabmalloc: Low-level memory allocator for liballoc.
- multiboot: Library to read multiboot layout.
- spin: Various synchronization primitives implemented with spinning. Closely mimics `std::sync`'s interface.
- fringe: Context switching agnostic to how stacks are allocated.