|
| 1 | ++++ |
| 2 | +title = "This Month in Rust OSDev: March 2026" |
| 3 | +date = 2026-04-08 |
| 4 | + |
| 5 | +[extra] |
| 6 | +month = "March 2026" |
| 7 | +editors = ["phil-opp"] |
| 8 | ++++ |
| 9 | + |
| 10 | +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. |
| 11 | + |
| 12 | +<!-- more --> |
| 13 | + |
| 14 | +This series is openly developed [on GitHub](https://github.com/rust-osdev/homepage/). 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](https://github.com/rust-osdev/homepage/issues/new) or using our <a href="#comment-form">_comment form_</a> at the bottom of this page. |
| 15 | + |
| 16 | +Please submit interesting posts and projects for the next issue [on Zulip](https://rust-osdev.zulipchat.com/#narrow/channel/435142-newsletter/topic/Content.20suggestions/with/580172810) or via a PR [on GitHub](https://github.com/rust-osdev/homepage/). |
| 17 | + |
| 18 | +<span class="gray"> |
| 19 | +Disclaimer: Automated scripts and AI assistance were used for collecting and categorizing links. |
| 20 | +Everything was proofread and checked manually and there were many manual tweaks. |
| 21 | +</span> |
| 22 | + |
| 23 | +<!-- |
| 24 | + This is a draft for the upcoming "This Month in Rust OSDev (March 2026)" post. |
| 25 | + Feel free to create pull requests against the `next` branch to add your |
| 26 | + content here. |
| 27 | + Please take a look at the past posts on https://rust-osdev.com/ to see the |
| 28 | + general structure of these posts. |
| 29 | +--> |
| 30 | + |
| 31 | +## Announcements, News, and Blog Posts |
| 32 | + |
| 33 | +Here we collect news, blog posts, etc. related to OS development in Rust. |
| 34 | + |
| 35 | +<!-- |
| 36 | +Please follow this template: |
| 37 | +
|
| 38 | +- [Title](https://example.com) |
| 39 | + - (optional) Some additional context |
| 40 | +--> |
| 41 | + |
| 42 | +- [Redox OS: Capability-based Security — Namespace and CWD](https://www.redox-os.org/news/nlnet-cap-nsmgr-cwd/) |
| 43 | +- [Ferrous Systems: "Accessing Hardware in Rust"](https://ferrous-systems.com/blog/hardware-access-rust/) |
| 44 | + - Compares four Rust hardware abstraction approaches (svd2rust, tock-registers, safe-mmio, derive-mmio) for bare-metal programming. |
| 45 | +- [How to use storytelling to fit inline assembly into Rust](https://www.ralfj.de/blog/2026/03/13/inline-asm.html) |
| 46 | + - Proposes a "storytelling" approach where inline assembly blocks must correspond to equivalent Rust code, ensuring soundness and allowing compiler optimizations. |
| 47 | +- Video: [Writing a Linux GPU Kernel Driver in Rust with Daniel Almeida](https://youtu.be/rgjTPBRae6I) |
| 48 | + - Interview about writing the Tyr GPU kernel driver for Arm Mali hardware in Rust. |
| 49 | +- [Ariel OS v0.4.0](https://github.com/ariel-os/ariel-os/blob/main/CHANGELOG.md#040---2026-03-18) |
| 50 | + - New release of this embedded Rust RTOS adds BLE on ESP32, USB CDC-NCM Ethernet, GNSS sensor support, and stack usage measurement. |
| 51 | +- [Elfina: Multi-architecture ELF Loader in Rust](https://github.com/iss4cf0ng/Elfina) |
| 52 | + - Educational ELF loader supporting x86 and x86-64 Linux binaries, with mmap and memfd execution modes. |
| 53 | +- [VectorWare: "Rust threads on the GPU"](https://www.vectorware.com/blog/threads-on-gpu) |
| 54 | + - Maps Rust's `std::thread` API to GPU warps, enabling familiar concurrent Rust code to compile and run on GPU hardware. |
| 55 | + |
| 56 | +## Infrastructure and Tooling |
| 57 | + |
| 58 | +In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. |
| 59 | + |
| 60 | +<!-- |
| 61 | + Please use the following template: |
| 62 | +
|
| 63 | +- [Title](https://example.com) |
| 64 | + - (optional) Some additional context |
| 65 | +--> |
| 66 | + |
| 67 | +- [ACP: Introduce `alloc::io`](https://github.com/rust-lang/libs-team/issues/755) |
| 68 | + - Approved proposal to move OS-independent parts of `std::io` to `alloc`, making IO traits available in `no_std + alloc` environments. The [implementation PR](https://github.com/rust-lang/rust/pull/152918) is in progress. |
| 69 | +- [Make atomic primitives type aliases of `Atomic<T>`](https://github.com/rust-lang/rust/pull/153015) |
| 70 | + - Refactors all atomic types (`AtomicI32`, `AtomicBool`, etc.) into type aliases of a generic `Atomic<T>`. |
| 71 | + - Only types that implement the sealed `AtomicPrimitive` trait can be used with `Atomic<T>` |
| 72 | +- [Implement `MaybeDangling` compiler support](https://github.com/rust-lang/rust/pull/150447) |
| 73 | + - Adds compiler-level support for the `MaybeDangling` wrapper type, which relaxes aliasing assumptions on references. Important for unsafe code dealing with self-referential structures and raw memory. |
| 74 | +- [Constify `Vec::{into, from}_raw_parts{_in|_alloc}`](https://github.com/rust-lang/rust/pull/153399) |
| 75 | + - Makes Vec raw parts methods usable in const contexts. |
| 76 | +- [Target specs: stricter checks for LLVM ABI values, and correlate with `cfg(target_abi)`](https://github.com/rust-lang/rust/pull/153769) |
| 77 | + - Tightens ABI validation in target specs. Note: out-of-tree JSON custom targets may need updating. |
| 78 | +- [`-Zbranch-protection` is a target modifier](https://github.com/rust-lang/rust/pull/152909) |
| 79 | + - Makes `-Zbranch-protection` a target modifier, enforcing consistent application across the entire crate graph. Important for AArch64 kernel security (PAC/BTI). |
| 80 | +- [Defer codegen for the VaList Drop impl to actual uses](https://github.com/rust-lang/rust/pull/154133) |
| 81 | + - Allows compiling libcore with codegen backends that don't implement VaList (like Cranelift). Unblocks alternative backends for bare-metal work. |
| 82 | + |
| 83 | +## `rust-osdev` Projects |
| 84 | + |
| 85 | +In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`](https://github.com/rust-osdev/about) organization. |
| 86 | + |
| 87 | +<!-- |
| 88 | + Please use the following template: |
| 89 | +
|
| 90 | + ### [`repo_name`](https://github.com/rust-osdev/repo_name) |
| 91 | + <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span> |
| 92 | +
|
| 93 | + The `repo_name` crate ...<<short introduction>>... |
| 94 | +
|
| 95 | + We merged the following changes this month: |
| 96 | + <<changelog, either in list or text form>> |
| 97 | +--> |
| 98 | + |
| 99 | + |
| 100 | +### [`uart_16550`](https://github.com/rust-osdev/uart_16550) |
| 101 | +<span class="maintainers">Maintained by [@phip1611](https://github.com/phip1611)</span> |
| 102 | + |
| 103 | +Simple yet highly configurable low-level driver for 16550 UART devices, |
| 104 | +typically known and used as serial ports or COM ports. |
| 105 | + |
| 106 | +We've just released `v0.5.0` - a **complete rewrite** and fresh start of the crate, implemented by |
| 107 | +[@phip1611](https://github.com/phip1611). |
| 108 | +The main motivation is to make the crate fit for working on real hardware, |
| 109 | +clean up technical debt, and streamline the code paths for x86 port I/O and |
| 110 | +MMIO. [@phip1611](https://github.com/phip1611) is also taking over maintenance of the crate, thanks a lot! |
| 111 | + |
| 112 | +More info: |
| 113 | + |
| 114 | +- <https://github.com/rust-osdev/uart_16550/releases/tag/v0.5.0> |
| 115 | +- <https://docs.rs/uart_16550/0.5.0/uart_16550/> |
| 116 | +- <https://github.com/rust-osdev/uart_16550/pull/41> |
| 117 | + |
| 118 | +Special Thanks to Philipp Oppermann (@phil-opp) and Martin Kröning (@mkroening) |
| 119 | +for their very valuable review on the new crate! |
| 120 | + |
| 121 | +After the rewrite, we merged the following changes this month: |
| 122 | + |
| 123 | +- [feat: implement embedded-io traits](https://github.com/rust-osdev/uart_16550/pull/42) |
| 124 | +- [Rename byte transfer functions and update IO trait implementations](https://github.com/rust-osdev/uart_16550/pull/49) |
| 125 | +- [Enhance MmioAddress safety and fix AArch64 instruction emission](https://github.com/rust-osdev/uart_16550/pull/50) |
| 126 | +- [Improve documentation examples and streamline architecture support](https://github.com/rust-osdev/uart_16550/pull/53) |
| 127 | +- [Add API test and improve memory safety in MMIO constructors](https://github.com/rust-osdev/uart_16550/pull/54) |
| 128 | + |
| 129 | +<!-- - [treewide: nuke old repo and replace with rewrite from @phip1611](https://github.com/rust-osdev/uart_16550/pull/41) --> |
| 130 | +<!-- - [Bump crate-ci/typos from 1.41.0 to 1.44.0](https://github.com/rust-osdev/uart_16550/pull/43) --> |
| 131 | +<!-- - [Bump bitflags from 2.10.0 to 2.11.0](https://github.com/rust-osdev/uart_16550/pull/44) --> |
| 132 | +<!-- - [Bump assert2 from 0.3.16 to 0.4.0](https://github.com/rust-osdev/uart_16550/pull/45) --> |
| 133 | +<!-- - [doc: update changelog](https://github.com/rust-osdev/uart_16550/pull/46) --> |
| 134 | + |
| 135 | +Thanks to [@mkroening](https://github.com/mkroening) for their contributions! |
| 136 | + |
| 137 | +### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) |
| 138 | +<span class="maintainers">Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611)</span> |
| 139 | + |
| 140 | +`uefi` makes it easy to develop Rust software that leverages safe, convenient, |
| 141 | +and performant abstractions for UEFI functionality. |
| 142 | + |
| 143 | +We merged the following PRs this month: |
| 144 | + |
| 145 | +- [add `join` on `Path`](https://github.com/rust-osdev/uefi-rs/pull/1903) |
| 146 | +- [uefi: serial: add read_exact() and write_exact() + fix core::fmt::Write for Serial](https://github.com/rust-osdev/uefi-rs/pull/1875) |
| 147 | +- [runtime: add `CStr16::from_bytes_with_nul` for UCS-2 strings in UEFI Variables](https://github.com/rust-osdev/uefi-rs/pull/1915) |
| 148 | +- [Replace a couple `as` casts with `ptr::from_ref`](https://github.com/rust-osdev/uefi-rs/pull/1917) |
| 149 | +- [release: uefi-raw-0.14.0, uefi-0.37](https://github.com/rust-osdev/uefi-rs/pull/1918) |
| 150 | + |
| 151 | +<!-- - [Fix new clippy lints](https://github.com/rust-osdev/uefi-rs/pull/1908) --> |
| 152 | +<!-- - [chore(deps): update rust crate quote to v1.0.45](https://github.com/rust-osdev/uefi-rs/pull/1910) --> |
| 153 | +<!-- - [chore(deps): update rust crate ovmf-prebuilt to v0.2.8](https://github.com/rust-osdev/uefi-rs/pull/1909) --> |
| 154 | +<!-- - [test-runner: rename cpy -> copy to make `typos` happy](https://github.com/rust-osdev/uefi-rs/pull/1912) --> |
| 155 | +<!-- - [chore(deps): update crate-ci/typos action to v1.44.0](https://github.com/rust-osdev/uefi-rs/pull/1894) --> |
| 156 | +<!-- - [chore(deps): update rust crate tempfile to v3.27.0](https://github.com/rust-osdev/uefi-rs/pull/1914) --> |
| 157 | +<!-- - [chore(deps): update rust crate clap to v4.6.0](https://github.com/rust-osdev/uefi-rs/pull/1913) --> |
| 158 | +<!-- - [cargo: update deps (fix GitHub Security Alerts)](https://github.com/rust-osdev/uefi-rs/pull/1916) --> |
| 159 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1922) --> |
| 160 | +<!-- - [chore(deps): update codecov/codecov-action action to v5.5.3](https://github.com/rust-osdev/uefi-rs/pull/1919) --> |
| 161 | + |
| 162 | +Thanks to [@the-shank](https://github.com/the-shank) for their contributions! |
| 163 | + |
| 164 | + |
| 165 | + |
| 166 | + |
| 167 | +### [`acpi`](https://github.com/rust-osdev/acpi) |
| 168 | +<span class="maintainers">Maintained by [@IsaacWoods](https://github.com/IsaacWoods)</span> |
| 169 | + |
| 170 | +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. |
| 171 | + |
| 172 | +We merged the following changes this month: |
| 173 | + |
| 174 | +- [Improve handling of top-level names with new `ResolveBehaviour` system](https://github.com/rust-osdev/acpi/pull/270) |
| 175 | +- [For discussion: A way of improving regression/integration testing for ASL snippets](https://github.com/rust-osdev/acpi/pull/269) |
| 176 | +- [Use correct offset for PCI I/O](https://github.com/rust-osdev/acpi/pull/280) |
| 177 | +- [Allow `aml_tester` to continue after an interpreter panic](https://github.com/rust-osdev/acpi/pull/277) |
| 178 | +- [Apply search rules to lookups](https://github.com/rust-osdev/acpi/pull/283) |
| 179 | + |
| 180 | +<!-- - [Add a toolchain file](https://github.com/rust-osdev/acpi/pull/268) --> |
| 181 | +<!-- - [Fix aml_tester files argument](https://github.com/rust-osdev/acpi/pull/267) --> |
| 182 | +<!-- - [Typo - update PCI config location](https://github.com/rust-osdev/acpi/pull/279) --> |
| 183 | + |
| 184 | +Thanks to [@martin-hughes](https://github.com/martin-hughes) for their contributions! |
| 185 | + |
| 186 | + |
| 187 | +### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) |
| 188 | +<span class="maintainers">Maintained by [@nicholasbishop](https://github.com/nicholasbishop) and [@phil-opp](https://github.com/phil-opp)</span> |
| 189 | + |
| 190 | +The `ovmf-prebuilt` project provides pre-built [edk2](https://github.com/tianocore/edk2) releases to make it easier to set up OVMF. We merged the following changes this month: |
| 191 | + |
| 192 | +- [feat: IOMMU support via edk2-platforms and IntelVTdDxe](https://github.com/rust-osdev/ovmf-prebuilt/pull/275) |
| 193 | +- [Rename build-edk2 to xtask](https://github.com/rust-osdev/ovmf-prebuilt/pull/277) |
| 194 | +- [Add build-edk2 action to xtask CLI](https://github.com/rust-osdev/ovmf-prebuilt/pull/278) |
| 195 | +- [xtask: Add update-sources action](https://github.com/rust-osdev/ovmf-prebuilt/pull/280) |
| 196 | +- [release: 0.2.8](https://github.com/rust-osdev/ovmf-prebuilt/pull/282) |
| 197 | +- [Update to 2024 edition](https://github.com/rust-osdev/ovmf-prebuilt/pull/283) |
| 198 | + |
| 199 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/276) --> |
| 200 | +<!-- - [Reformat ureq dependency to one line](https://github.com/rust-osdev/ovmf-prebuilt/pull/279) --> |
| 201 | +<!-- - [Ignore files generated during ovmf-prebuilt test](https://github.com/rust-osdev/ovmf-prebuilt/pull/281) --> |
| 202 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/284) --> |
| 203 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/286) --> |
| 204 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/289) --> |
| 205 | + |
| 206 | +Thanks to [@PelleKrab](https://github.com/PelleKrab) for their contributions! |
| 207 | + |
| 208 | + |
| 209 | +### [`bootloader`](https://github.com/rust-osdev/bootloader) |
| 210 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/Freax13)</span> |
| 211 | + |
| 212 | +The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes: |
| 213 | + |
| 214 | +- [don't use BPB_TotSec16 to determine FAT type](https://github.com/rust-osdev/bootloader/pull/547) |
| 215 | +- [speed up BIOS bootloader](https://github.com/rust-osdev/bootloader/pull/550) |
| 216 | + |
| 217 | +<!-- - [Fix doc link](https://github.com/rust-osdev/bootloader/pull/548) --> |
| 218 | +<!-- - [Bump tar from 0.4.44 to 0.4.45 in /examples/basic](https://github.com/rust-osdev/bootloader/pull/553) --> |
| 219 | +<!-- - [Bump rustls-webpki from 0.103.8 to 0.103.10 in /examples/basic](https://github.com/rust-osdev/bootloader/pull/554) --> |
| 220 | + |
| 221 | +Thanks to [@ic3w1ne](https://github.com/ic3w1ne) for their contribution! |
| 222 | + |
| 223 | + |
| 224 | +### [`x86_64`](https://github.com/rust-osdev/x86_64) |
| 225 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp), [@josephlr](https://github.com/orgs/rust-osdev/people/josephlr), and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13)</span> |
| 226 | + |
| 227 | +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. |
| 228 | + |
| 229 | +We merged the following PRs this month: |
| 230 | + |
| 231 | +- [don't enable abi_x86_interrupt if not needed](https://github.com/rust-osdev/x86_64/pull/585) |
| 232 | + |
| 233 | + |
| 234 | +## Other Projects |
| 235 | + |
| 236 | +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](https://github.com/rust-osdev/homepage/pulls) with the updates of your OS project for the next post. |
| 237 | + |
| 238 | +<!-- |
| 239 | + Please use the following template: |
| 240 | +
|
| 241 | + ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name) |
| 242 | + <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span> |
| 243 | +
|
| 244 | + ...<<your project updates>>... |
| 245 | +--> |
| 246 | + |
| 247 | +### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) |
| 248 | +<span class="maintainers">(Section written by [@phil-opp](https://github.com/phil-opp))</span> |
| 249 | + |
| 250 | +We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: |
| 251 | + |
| 252 | +- [[Translation] translated post 10 into russian](https://github.com/phil-opp/blog_os/pull/1469) |
| 253 | + |
| 254 | +Thanks to [@TakiMoysha](https://github.com/TakiMoysha) for their contribution! |
| 255 | + |
| 256 | + |
| 257 | + |
| 258 | +## Join Us? |
| 259 | + |
| 260 | +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](https://rust-osdev.zulipchat.com). |
0 commit comments