Skip to content

Commit 63ec832

Browse files
authored
Merge pull request #282 from rust-osdev/next
This Month in Rust OSDev: June 2026
2 parents 086cf8f + 55f92d9 commit 63ec832

1 file changed

Lines changed: 281 additions & 0 deletions

File tree

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
+++
2+
title = "This Month in Rust OSDev: June 2026"
3+
date = 2026-07-07
4+
5+
[extra]
6+
month = "June 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, with many manual tweaks.
21+
</span>
22+
23+
24+
<!--
25+
This is a draft for the upcoming "This Month in Rust OSDev (June 2026)" post.
26+
Feel free to create pull requests against the `next` branch to add your
27+
content here.
28+
Please take a look at the past posts on https://rust-osdev.com/ to see the
29+
general structure of these posts.
30+
-->
31+
32+
## Announcements, News, and Blog Posts
33+
34+
Here we collect news, blog posts, etc. related to OS development in Rust.
35+
36+
<!--
37+
Please follow this template:
38+
39+
- [Title](https://example.com)
40+
- (optional) Some additional context
41+
-->
42+
- [Announcing Asterinas 0.18.0](https://asterinas.github.io/2026/06/04/announcing-asterinas-0.18.0.html)
43+
- [This Month in Redox - May 2026](https://www.redox-os.org/news/this-month-260531/)
44+
- The latest Redox update covers an EEVDF scheduler, page flipping and plane support in the Intel graphics driver, a COSMIC monitor and XFCE port, and large I/O and RedoxFS performance improvements.
45+
- [Zinnia](https://zinnia-os.org/)
46+
- A Unix-like kernel written almost entirely in Rust that boots on real x86_64 hardware and can run Wayland/X11 desktop sessions (Weston, XFCE). Drivers are loaded as modular Rust ELF libraries at boot.
47+
- [LearnixOS](https://www.learnix-os.com/)
48+
- A book that teaches OS development from scratch in Rust, covering memory allocators, paging, filesystems, and kernel logic.
49+
- [Hardware Is Asynchronous. Most of Our Operating Systems Still Aren't.](https://vorjdux.com/articles/hardware-is-async.html)
50+
- An article arguing that operating systems should treat asynchrony as the default rather than layering it on top of blocking abstractions, drawing on work from [CharlotteOS](https://github.com/charlotte-os/charlotte-os), an experimental modern OS written in Rust.
51+
- [Building an AsyncIO executor for the 3DS (pt 1!)](https://blog.cat-girl.gay/3ds-async-part-one/)
52+
- Building a from-scratch async I/O executor for the Nintendo 3DS.
53+
54+
55+
## Infrastructure and Tooling
56+
57+
In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development.
58+
59+
<!--
60+
Please use the following template:
61+
62+
- [Title](https://example.com)
63+
- (optional) Some additional context
64+
-->
65+
66+
- [Move `std::io::Error` into `core`](https://github.com/rust-lang/rust/pull/155625)
67+
- Makes I/O error handling available in `no_std`
68+
- Now the rest of `std::io` can be moved to `core`/`alloc` too, including the `Read` and `Write` traits. See the [open PR](https://github.com/rust-lang/rust/pull/156527) and the [tracking issue](https://github.com/rust-lang/rust/issues/154046) for details.
69+
- [Stabilize `int_format_into` feature](https://github.com/rust-lang/rust/pull/152544)
70+
- Formats integers into fixed-size buffers with no allocation.
71+
- [Stabilize `#![feature(box_as_ptr)]`](https://github.com/rust-lang/rust/pull/157876)
72+
- Stabilizes `Box::as_ptr` and `Box::as_mut_ptr`
73+
- These methods can be used to create multiple pointers to the same `Box` that don't invalidate each other.
74+
- [staticlib: hide internal symbols](https://github.com/rust-lang/rust/pull/155338)
75+
- A new `-Zstaticlib-hide-internal-symbols` flag hides non-exported Rust symbols in static libraries, shrinking binaries by 5–12% in non-LTO builds.
76+
- [`asm!` support for the Xtensa architecture](https://github.com/rust-lang/rust/pull/147302)
77+
- Inline assembly for Xtensa (ESP32 and related chips) lands in-tree after years in the esp-rs fork.
78+
79+
## `rust-osdev` Projects
80+
81+
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.
82+
83+
<!--
84+
Please use the following template:
85+
86+
### [`repo_name`](https://github.com/rust-osdev/repo_name)
87+
<span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>
88+
89+
The `repo_name` crate ...<<short introduction>>...
90+
91+
We merged the following changes this month:
92+
<<changelog, either in list or text form>>
93+
-->
94+
95+
### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs)
96+
<span class="maintainers">Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611)</span>
97+
98+
`uefi` makes it easy to develop Rust software that leverages safe, convenient,
99+
and performant abstractions for UEFI functionality.
100+
101+
We merged the following PRs this month:
102+
103+
- [Feat: IoMmu protocol](https://github.com/rust-osdev/uefi-rs/pull/1728)
104+
- [uefi: Add PciRootBridgeIo memory and I/O space access](https://github.com/rust-osdev/uefi-rs/pull/1958)
105+
- [uefi: Add PciRootBridgeIo attribute manipulation](https://github.com/rust-osdev/uefi-rs/pull/1965)
106+
- [uefi-raw: Add PciRootBridgeIoProtocolAttributes](https://github.com/rust-osdev/uefi-rs/pull/1957)
107+
- [uefi: Add integration with `time` crate](https://github.com/rust-osdev/uefi-rs/pull/1955)
108+
- [uefi: Add integration with `jiff` crate](https://github.com/rust-osdev/uefi-rs/pull/1956)
109+
- [uefi: remove deprecated APIs](https://github.com/rust-osdev/uefi-rs/pull/1966)
110+
- [uefi-raw: enhance Boolean type and make it more type safe](https://github.com/rust-osdev/uefi-rs/pull/1974)
111+
- [uefi-raw: various spec fixes](https://github.com/rust-osdev/uefi-rs/pull/1962)
112+
- [uefi: Fix `boot::exit` signature](https://github.com/rust-osdev/uefi-rs/pull/1959)
113+
- [uefi: reject undersized device path nodes](https://github.com/rust-osdev/uefi-rs/pull/1979)
114+
- [uefi: various smaller memory map related fixes and improvements](https://github.com/rust-osdev/uefi-rs/pull/1980)
115+
- [uefi-raw: format negative time zones correctly](https://github.com/rust-osdev/uefi-rs/pull/1982)
116+
- [release: uefi-raw-0.15.0, uefi-0.38.0](https://github.com/rust-osdev/uefi-rs/pull/1984)
117+
118+
<!-- - [chore(deps): update crate-ci/typos action to v1.47.2](https://github.com/rust-osdev/uefi-rs/pull/1961) -->
119+
<!-- - [chore(deps): update codecov/codecov-action action to v6.0.2](https://github.com/rust-osdev/uefi-rs/pull/1960) -->
120+
<!-- - [nix: simplify nix code & update](https://github.com/rust-osdev/uefi-rs/pull/1963) -->
121+
<!-- - [uefi-raw: fix typo in PciRootBridgeIoProtocolAttributes](https://github.com/rust-osdev/uefi-rs/pull/1964) -->
122+
<!-- - [ci: update QEMU for windows runners](https://github.com/rust-osdev/uefi-rs/pull/1969) -->
123+
<!-- - [treewide: allow() -> expect() + remove unneeded allow()](https://github.com/rust-osdev/uefi-rs/pull/1968) -->
124+
<!-- - [xtask: update OVMF from EDK2-STABLE202502 to EDK2-STABLE202605](https://github.com/rust-osdev/uefi-rs/pull/1970) -->
125+
<!-- - [ci: use ubuntu-26.04 (to update QEMU)](https://github.com/rust-osdev/uefi-rs/pull/1976) -->
126+
<!-- - [chore(deps): update rust crate time to v0.3.47 [security]](https://github.com/rust-osdev/uefi-rs/pull/1977) -->
127+
<!-- - [Remove duplications in `uefi` and `uefi-raw`](https://github.com/rust-osdev/uefi-rs/pull/1967) -->
128+
<!-- - [uefi: streamline + fix usize_from_u32()](https://github.com/rust-osdev/uefi-rs/pull/1981) -->
129+
<!-- - [uefi: minor improvements to device path protocol code](https://github.com/rust-osdev/uefi-rs/pull/1983) -->
130+
<!-- - [uefi: minor adjustments regarding previous commits](https://github.com/rust-osdev/uefi-rs/pull/1985) -->
131+
<!-- - [treewide: enforce safety comments](https://github.com/rust-osdev/uefi-rs/pull/1988) -->
132+
<!-- - [remove multilingual field from book.toml](https://github.com/rust-osdev/uefi-rs/pull/1992) -->
133+
134+
Thanks to [@JarlEvanson](https://github.com/JarlEvanson), [@mysteriouslyseeing](https://github.com/mysteriouslyseeing), and [@PelleKrab](https://github.com/PelleKrab) for their contributions!
135+
136+
### [`multiboot2`](https://github.com/rust-osdev/multiboot2)
137+
<span class="maintainers">Maintained by [@phip1611](https://github.com/phip1611)</span>
138+
139+
_Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and
140+
the contained information tags. Usable in no_std environments, such as a kernel.
141+
An optional builder feature also allows the construction of the corresponding
142+
structures._
143+
144+
We merged the following PRs this month:
145+
146+
- [Rewrite: Add elf library for elf_sections.rs](https://github.com/rust-osdev/multiboot2/pull/292)
147+
- [various safety and correctness improvements](https://github.com/rust-osdev/multiboot2/pull/301)
148+
- [Various improvements and fixes](https://github.com/rust-osdev/multiboot2/pull/300)
149+
- [modernize misc stuff](https://github.com/rust-osdev/multiboot2/pull/296)
150+
- [elf: remove From impl](https://github.com/rust-osdev/multiboot2/pull/299)
151+
- [chore: prepare new workspace releases](https://github.com/rust-osdev/multiboot2/pull/302)
152+
153+
<!-- - [build(deps): bump crate-ci/typos from 1.46.0 to 1.47.0](https://github.com/rust-osdev/multiboot2/pull/294) -->
154+
<!-- - [build(deps): bump crate-ci/typos from 1.47.0 to 1.47.2](https://github.com/rust-osdev/multiboot2/pull/298) -->
155+
<!-- - [build(deps): bump bitflags from 2.11.0 to 2.13.0](https://github.com/rust-osdev/multiboot2/pull/297) -->
156+
157+
Thanks to [@an-owl](https://github.com/an-owl) for their contribution!
158+
159+
### [`bootloader`](https://github.com/rust-osdev/bootloader)
160+
<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/Freax13)</span>
161+
162+
The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. The following changes landed in early July, but we want to mention them already because they affect users building against recent Rust nightlies:
163+
164+
- Recent Rust nightlies renamed the `x86-softfloat` target ABI to `softfloat`. This update adjusts the bootloader's custom targets accordingly, on both the latest release and the `v0.9` branch.
165+
- [Change `rustc-abi` in custom targets from `x86-softfloat` to `softfloat`](https://github.com/rust-osdev/bootloader/pull/569)
166+
- [(v0.9) Change `rustc-abi` in custom targets from `x86-softfloat` to `softfloat`](https://github.com/rust-osdev/bootloader/pull/568)
167+
- [uefi: bump from 0.20 to 0.38](https://github.com/rust-osdev/bootloader/pull/566)
168+
169+
<!-- - [deps: bump uart_16550 to 0.6.0](https://github.com/rust-osdev/bootloader/pull/565) -->
170+
<!-- - [janked dependencies: bump critical-section, atomic-polyfill, heapless](https://github.com/rust-osdev/bootloader/pull/567) -->
171+
172+
Thanks to [@phip1611](https://github.com/phip1611) for their contribution!
173+
174+
### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt)
175+
<span class="maintainers">Maintained by [@nicholasbishop](https://github.com/nicholasbishop) and [@phil-opp](https://github.com/phil-opp)</span>
176+
177+
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:
178+
179+
- [Fix build errors for edk2-stable202605](https://github.com/rust-osdev/ovmf-prebuilt/pull/312)
180+
- [Update to sha2-0.11](https://github.com/rust-osdev/ovmf-prebuilt/pull/313)
181+
- [release: 0.2.9 with edk2-stable202605-r1](https://github.com/rust-osdev/ovmf-prebuilt/pull/314)
182+
183+
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/309) -->
184+
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/310) -->
185+
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/315) -->
186+
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/316) -->
187+
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/317) -->
188+
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/320) -->
189+
190+
### [`uart_16550`](https://github.com/rust-osdev/uart_16550)
191+
<span class="maintainers">Maintained by [@phip1611](https://github.com/phip1611)</span>
192+
193+
Simple yet highly configurable low-level driver for 16550 UART devices,
194+
typically known and used as serial ports or COM ports.
195+
196+
We merged the following change this month:
197+
198+
- [lib: change signature of Uart16550::config() to be more flexible](https://github.com/rust-osdev/uart_16550/pull/61)
199+
200+
<!-- - [build(deps): bump crate-ci/typos from 1.46.0 to 1.47.1](https://github.com/rust-osdev/uart_16550/pull/59) -->
201+
<!-- - [build(deps): bump bitflags from 2.11.0 to 2.12.1](https://github.com/rust-osdev/uart_16550/pull/60) -->
202+
203+
<!--
204+
x86_64 had only dependency/chore updates this month:
205+
- x86_64 #590 (Bump actions/checkout from 6 to 7)
206+
-->
207+
208+
## Other Projects
209+
210+
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.
211+
212+
<!--
213+
Please use the following template:
214+
215+
### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
216+
<span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>
217+
218+
...<<your project updates>>...
219+
-->
220+
221+
### [`mkroening/elf-symbols`](https://github.com/mkroening/elf-symbols)
222+
<span class="maintainers">(Section written by [@mkroening](https://github.com/mkroening))</span>
223+
224+
When developing an OS, you often need some information about the loaded kernel image:
225+
226+
- Where has the loader loaded the kernel to?
227+
- How large is the loaded kernel?
228+
- Where do the text segment and the data segment end?
229+
- How do I get the kernel TLS image?
230+
231+
These questions can be answered by building non-relocatable images, by writing custom linker scripts, or by having a custom loader that provides this information somehow.
232+
233+
But there is another way!
234+
In fact, the main ELF linkers that I am aware of ([BFD], [gold], [LLD], [mold], and [Wild]) all have built-in ELF symbols that answer these questions when not using custom linker scripts.
235+
Unfortunately, many are poorly documented, so I created the [elf-symbols] crate that exposes and documents them.
236+
All symbols are tested on the aforementioned linkers.
237+
The documentation shows when each linker gained support for the respective symbol.
238+
239+
The following symbols are straightforward:
240+
241+
- `__executable_start` (`executable_start()`) is the start of the executable.
242+
- `_etext` (`text_end()`) is the end of the text segment.
243+
- `_edata` (`data_end()`) is the end of the data segment.
244+
- `_end` (`executable_end()`) is the end of the executable.
245+
246+
`__ehdr_start` (`elf_header()`) is especially interesting.
247+
It allows programs to examine themselves by reading their ELF headers (file headers and program headers).
248+
This can be used to get TLS image information, for example.
249+
250+
Note that these symbols are ELF specific, though, so they cannot be used when linking to something else, such as a PE32+ UEFI executable.
251+
252+
#### Examples
253+
254+
```rust
255+
println!("Executable start: {:p}", elf_symbols::executable_start());
256+
println!("ELF header: {:p}", elf_symbols::elf_header());
257+
println!("Text segment end: {:p}", elf_symbols::text_end());
258+
println!("Data segment end: {:p}", elf_symbols::data_end());
259+
println!("Executable end: {:p}", elf_symbols::executable_end());
260+
```
261+
262+
[BFD]: https://sourceware.org/git/?p=binutils-gdb.git;a=tree;f=ld;h=b1662159cdd15bb857e04e42bd26361c0d406099;hb=5e56594815854de5eca35c7c04b11705d0f19c02
263+
[gold]: https://sourceware.org/git/?p=binutils-gdb.git;a=tree;f=gold;h=ac6272c7bb3ad02524b2ca86a2cf9b68e9ca30ca;hb=5e56594815854de5eca35c7c04b11705d0f19c02
264+
[LLD]: https://github.com/llvm/llvm-project/tree/llvmorg-22.1.8/lld
265+
[mold]: https://github.com/rui314/mold/tree/v2.41.0
266+
[Wild]: https://github.com/wild-linker/wild/tree/0.9.0
267+
[elf-symbols]: https://crates.io/crates/elf-symbols
268+
269+
### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os)
270+
<span class="maintainers">(Section written by [@phil-opp](https://github.com/phil-opp))</span>
271+
272+
We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog. These landed in early July, but we mention them here since they keep the code building on the latest Rust nightly:
273+
274+
- [Fix target spec: use `softfloat` instead of `x86-softfloat`](https://github.com/phil-opp/blog_os/pull/1484)
275+
- [Fix blog: the `x86-softfloat` feature was renamed to `softfloat`](https://github.com/phil-opp/blog_os/pull/1485)
276+
- [Update for new Rust error messages](https://github.com/phil-opp/blog_os/pull/1486)
277+
- [Update blog to zola 0.22.1](https://github.com/phil-opp/blog_os/pull/1487)
278+
279+
## Join Us?
280+
281+
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 to get in touch is our [Zulip chat](https://rust-osdev.zulipchat.com).

0 commit comments

Comments
 (0)