This Month in Rust OSDev: December 2023
Welcome to a new issue of "This Month in Rust OSDev". In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.
This series is openly developed on GitHub. Feel free to open pull requests there with content you would like to see in the next issue. If you find some issues on this page, please report them by creating an issue or using our comment form at the bottom of this page.
Announcements, News, and Blog Posts
Here we collect news, blog posts, etc. related to OS development in Rust.
- Motūrus OS - a new Rust-based Operating System targeting virtual machines.
- Maestro is a Unix-like kernel and operating system written from scratch in Rust
- MOROS 0.10.2
- The first rust driver has been merged into netdev/net-next
- Linus on Rust in the Linux kernel (December 2023)
- Rust for Linux — in space
- A
no_std
client for PostgreSQL - The Embedded Rustacean: Issue #8, Issue #9, and Issue #10
cargo-ft
(cargo filter target) is a cargo extension for specifying supported targets for a crate
Infrastructure and Tooling
In this section, we collect recent updates to rustc
, cargo
, and other tooling that are relevant to Rust OS development.
- Advisory: Miscompilation with
opt-level="z"
on Cortex-M - Add
core::intrinsics::simd
- Stabilize
ip_in_core
feature - Stabilize
ptr::{from_ref, from_mut}
- Add all known
target_feature
configs to check-cfg - Add
-Zfunction-return={keep,thunk-extern}
option - Add lint against ambiguous wide pointer comparisons
- Add new tier 3
aarch64-apple-watchos
target - Add more SIMD platform-intrinsics
rust-osdev
Projects
In this section, we give an overview of notable changes to the projects hosted under the rust-osdev
organization.
bootloader
Maintained by @phil-opp
The bootloader
crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs:
- Fix: Enable test runner again
- Fix: Mark
ramdisk
as used in memory map - Release
v0.11.5
- Embed bios and uefi binaries
- Add a
take
method toOptional
Thanks to @mysteriouslyseeing for their contribution!
xhci
Maintained by @toku-sa-n
The xhci
crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month:
- Clarify the exact behavior of RW1C setters
- PR for Misc Issue #164
- Forgot to add a changelog for #167
- A little more
Doorbell
renaming - Add an issue template
- Changelog for #170
Thanks to @paulsohn for their contribution!
ovmf-prebuilt
Maintained by @phil-opp and @nicholasbishop
The ovmf-prebuilt
project provides pre-built edk2 releases to make it easier to set up OVMF. We merged the following improvement this month:
- Configure Renovate
- Enable the HTTP build flag
- renovate: Change stategy to update-lockfile
- Update Rust crate anyhow to v1.0.78
uefi-rs
Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611
The uefi-rs
crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:
- Add some new char and string convenience impls/methods
- Simplify DevicePath
to_string
return type - xtask: Allow unions in uefi-raw
- uefi-raw: Add Ipv4Address, Ipv6Address, and MacAddress types
- uefi-raw: Add ServiceBindingProtocol and Dhcp4Protocol
- fs: Remove a couple debug logs
- uefi-raw: Add HttpProtocol, Ip4Config2Protocol, and TlsConfigurationProtocol
- renovate: Change stategy to update-lockfile
- xtask: Upgrade OVMF prebuilt
- Fix logger connection after opening serial protocol
- uefi-raw: Add
IpAddress
type
pci_types
Maintained by @IsaacWoods
The pci_types
library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:
acpi
Maintained by @IsaacWoods
The acpi
repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:
Thanks to @ytakano for their contributions!
multiboot2
Maintained by @phip1611
The multiboot2
crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month:
Thanks to @elbiazofor their contribution!
x86_64
Maintained by @phil-opp, @josephlr, and @Freax13
The x86_64
crate provides various abstractions for x86_64
systems, including wrappers for CPU instructions, access to processor-specific registers, and abstraction types for architecture-specific structures such as page tables and descriptor tables.
We merged the following changes this month:
Other Projects
In this section, we describe updates to Rust OS projects that are not directly related to the rust-osdev
organization. Feel free to create a pull request with the updates of your OS project for the next post.
Join Us?
Are you interested in Rust-based operating system development? Our rust-osdev
organization is always open to new members and new projects. Just let us know if you want to join! A good way for getting in touch is our Zulip chat.