<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
    <channel>
        <title>
            Rust OSDev</title>
        <link>https://rust-osdev.com</link>
        <description>Operating System Development in Rust</description>
        <generator>Zola</generator>
        <language>en</language>
        <atom:link href="https://rust-osdev.com/rss.xml" rel="self" type="application/rss+xml"/>

    
        <lastBuildDate>Tue, 07 Jul 2026 00:00:00 +0000</lastBuildDate>
    
        <item>
            <title>This Month in Rust OSDev: June 2026</title>
            <pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2026-06/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2026-06/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2026-06/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2026-06/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<p>Please submit interesting posts and projects for the next issue <a rel="external" href="https://rust-osdev.zulipchat.com/#narrow/channel/435142-newsletter/topic/Content.20suggestions/with/580172810">on Zulip</a> or via a PR <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>.</p>
<span class="gray">
Disclaimer: Automated scripts and AI assistance were used for collecting and categorizing links.
Everything was proofread and checked manually, with many manual tweaks.
</span>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (June 2026)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://asterinas.github.io/2026/06/04/announcing-asterinas-0.18.0.html">Announcing Asterinas 0.18.0</a></li>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-260531/">This Month in Redox - May 2026</a>
<ul>
<li>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.</li>
</ul>
</li>
<li><a rel="external" href="https://zinnia-os.org/">Zinnia</a>
<ul>
<li>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.</li>
</ul>
</li>
<li><a rel="external" href="https://www.learnix-os.com/">LearnixOS</a>
<ul>
<li>A book that teaches OS development from scratch in Rust, covering memory allocators, paging, filesystems, and kernel logic.</li>
</ul>
</li>
<li><a rel="external" href="https://vorjdux.com/articles/hardware-is-async.html">Hardware Is Asynchronous. Most of Our Operating Systems Still Aren't.</a>
<ul>
<li>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 <a rel="external" href="https://github.com/charlotte-os/charlotte-os">CharlotteOS</a>, an experimental modern OS written in Rust.</li>
</ul>
</li>
<li><a rel="external" href="https://blog.cat-girl.gay/3ds-async-part-one/">Building an AsyncIO executor for the 3DS (pt 1!)</a>
<ul>
<li>Building a from-scratch async I/O executor for the Nintendo 3DS.</li>
</ul>
</li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/155625">Move <code>std::io::Error</code> into <code>core</code></a>
<ul>
<li>Makes I/O error handling available in <code>no_std</code></li>
<li>Now the rest of <code>std::io</code> can be moved to <code>core</code>/<code>alloc</code> too, including the <code>Read</code> and <code>Write</code> traits. See the <a rel="external" href="https://github.com/rust-lang/rust/pull/156527">open PR</a> and the <a rel="external" href="https://github.com/rust-lang/rust/issues/154046">tracking issue</a> for details.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/152544">Stabilize <code>int_format_into</code> feature</a>
<ul>
<li>Formats integers into fixed-size buffers with no allocation.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/157876">Stabilize <code>#![feature(box_as_ptr)]</code></a>
<ul>
<li>Stabilizes <code>Box::as_ptr</code> and <code>Box::as_mut_ptr</code></li>
<li>These methods can be used to create multiple pointers to the same <code>Box</code> that don't invalidate each other.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/155338">staticlib: hide internal symbols</a>
<ul>
<li>A new <code>-Zstaticlib-hide-internal-symbols</code> flag hides non-exported Rust symbols in static libraries, shrinking binaries by 5–12% in non-LTO builds.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/147302"><code>asm!</code> support for the Xtensa architecture</a>
<ul>
<li>Inline assembly for Xtensa (ESP32 and related chips) lands in-tree after years in the esp-rs fork.</li>
</ul>
</li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1728">Feat: IoMmu protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1958">uefi: Add PciRootBridgeIo memory and I/O space access</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1965">uefi: Add PciRootBridgeIo attribute manipulation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1957">uefi-raw: Add PciRootBridgeIoProtocolAttributes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1955">uefi: Add integration with <code>time</code> crate</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1956">uefi: Add integration with <code>jiff</code> crate</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1966">uefi: remove deprecated APIs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1974">uefi-raw: enhance Boolean type and make it more type safe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1962">uefi-raw: various spec fixes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1959">uefi: Fix <code>boot::exit</code> signature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1979">uefi: reject undersized device path nodes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1980">uefi: various smaller memory map related fixes and improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1982">uefi-raw: format negative time zones correctly</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1984">release: uefi-raw-0.15.0, uefi-0.38.0</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.47.2](https://github.com/rust-osdev/uefi-rs/pull/1961) -->
<!-- - [chore(deps): update codecov/codecov-action action to v6.0.2](https://github.com/rust-osdev/uefi-rs/pull/1960) -->
<!-- - [nix: simplify nix code & update](https://github.com/rust-osdev/uefi-rs/pull/1963) -->
<!-- - [uefi-raw: fix typo in PciRootBridgeIoProtocolAttributes](https://github.com/rust-osdev/uefi-rs/pull/1964) -->
<!-- - [ci: update QEMU for windows runners](https://github.com/rust-osdev/uefi-rs/pull/1969) -->
<!-- - [treewide: allow() -> expect() + remove unneeded allow()](https://github.com/rust-osdev/uefi-rs/pull/1968) -->
<!-- - [xtask: update OVMF from EDK2-STABLE202502 to EDK2-STABLE202605](https://github.com/rust-osdev/uefi-rs/pull/1970) -->
<!-- - [ci: use ubuntu-26.04 (to update QEMU)](https://github.com/rust-osdev/uefi-rs/pull/1976) -->
<!-- - [chore(deps): update rust crate time to v0.3.47 [security]](https://github.com/rust-osdev/uefi-rs/pull/1977) -->
<!-- - [Remove duplications in `uefi` and `uefi-raw`](https://github.com/rust-osdev/uefi-rs/pull/1967) -->
<!-- - [uefi: streamline + fix usize_from_u32()](https://github.com/rust-osdev/uefi-rs/pull/1981) -->
<!-- - [uefi: minor improvements to device path protocol code](https://github.com/rust-osdev/uefi-rs/pull/1983) -->
<!-- - [uefi: minor adjustments regarding previous commits](https://github.com/rust-osdev/uefi-rs/pull/1985) -->
<!-- - [treewide: enforce safety comments](https://github.com/rust-osdev/uefi-rs/pull/1988) -->
<!-- - [remove multilingual field from book.toml](https://github.com/rust-osdev/uefi-rs/pull/1992) -->
<p>Thanks to <a rel="external" href="https://github.com/JarlEvanson">@JarlEvanson</a>, <a rel="external" href="https://github.com/mysteriouslyseeing">@mysteriouslyseeing</a>, and <a rel="external" href="https://github.com/PelleKrab">@PelleKrab</a> for their contributions!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><em>Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and
the contained information tags. Usable in no_std environments, such as a kernel.
An optional builder feature also allows the construction of the corresponding
structures.</em></p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/292">Rewrite: Add elf library for elf_sections.rs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/301">various safety and correctness improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/300">Various improvements and fixes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/296">modernize misc stuff</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/299">elf: remove From impl</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/302">chore: prepare new workspace releases</a></li>
</ul>
<!-- - [build(deps): bump crate-ci/typos from 1.46.0 to 1.47.0](https://github.com/rust-osdev/multiboot2/pull/294) -->
<!-- - [build(deps): bump crate-ci/typos from 1.47.0 to 1.47.2](https://github.com/rust-osdev/multiboot2/pull/298) -->
<!-- - [build(deps): bump bitflags from 2.11.0 to 2.13.0](https://github.com/rust-osdev/multiboot2/pull/297) -->
<p>Thanks to <a rel="external" href="https://github.com/an-owl">@an-owl</a> for their contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> 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:</p>
<ul>
<li>Recent Rust nightlies renamed the <code>x86-softfloat</code> target ABI to <code>softfloat</code>. This update adjusts the bootloader's custom targets accordingly, on both the latest release and the <code>v0.9</code> branch.
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/569">Change <code>rustc-abi</code> in custom targets from <code>x86-softfloat</code> to <code>softfloat</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/568">(v0.9) Change <code>rustc-abi</code> in custom targets from <code>x86-softfloat</code> to <code>softfloat</code></a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/566">uefi: bump from 0.20 to 0.38</a></li>
</ul>
<!-- - [deps: bump uart_16550 to 0.6.0](https://github.com/rust-osdev/bootloader/pull/565) -->
<!-- - [janked dependencies: bump critical-section, atomic-polyfill, heapless](https://github.com/rust-osdev/bootloader/pull/567) -->
<p>Thanks to <a rel="external" href="https://github.com/phip1611">@phip1611</a> for their contribution!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/312">Fix build errors for edk2-stable202605</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/313">Update to sha2-0.11</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/314">release: 0.2.9 with edk2-stable202605-r1</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/309) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/310) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/315) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/316) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/317) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/320) -->
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>Simple yet highly configurable low-level driver for 16550 UART devices,
typically known and used as serial ports or COM ports.</p>
<p>We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/61">lib: change signature of Uart16550::config() to be more flexible</a></li>
</ul>
<!-- - [build(deps): bump crate-ci/typos from 1.46.0 to 1.47.1](https://github.com/rust-osdev/uart_16550/pull/59) -->
<!-- - [build(deps): bump bitflags from 2.11.0 to 2.12.1](https://github.com/rust-osdev/uart_16550/pull/60) -->
<!--
    x86_64 had only dependency/chore updates this month:
    - x86_64 #590 (Bump actions/checkout from 6 to 7)
-->
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="mkroening-elf-symbols"><a rel="external" href="https://github.com/mkroening/elf-symbols"><code>mkroening/elf-symbols</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/mkroening">@mkroening</a>)</span></p>
<p>When developing an OS, you often need some information about the loaded kernel image:</p>
<ul>
<li>Where has the loader loaded the kernel to?</li>
<li>How large is the loaded kernel?</li>
<li>Where do the text segment and the data segment end?</li>
<li>How do I get the kernel TLS image?</li>
</ul>
<p>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.</p>
<p>But there is another way!
In fact, the main ELF linkers that I am aware of (<a rel="external" href="https://sourceware.org/git/?p=binutils-gdb.git;a=tree;f=ld;h=b1662159cdd15bb857e04e42bd26361c0d406099;hb=5e56594815854de5eca35c7c04b11705d0f19c02">BFD</a>, <a rel="external" href="https://sourceware.org/git/?p=binutils-gdb.git;a=tree;f=gold;h=ac6272c7bb3ad02524b2ca86a2cf9b68e9ca30ca;hb=5e56594815854de5eca35c7c04b11705d0f19c02">gold</a>, <a rel="external" href="https://github.com/llvm/llvm-project/tree/llvmorg-22.1.8/lld">LLD</a>, <a rel="external" href="https://github.com/rui314/mold/tree/v2.41.0">mold</a>, and <a rel="external" href="https://github.com/wild-linker/wild/tree/0.9.0">Wild</a>) all have built-in ELF symbols that answer these questions when not using custom linker scripts.
Unfortunately, many are poorly documented, so I created the <a rel="external" href="https://crates.io/crates/elf-symbols">elf-symbols</a> crate that exposes and documents them.
All symbols are tested on the aforementioned linkers.
The documentation shows when each linker gained support for the respective symbol.</p>
<p>The following symbols are straightforward:</p>
<ul>
<li><code>__executable_start</code> (<code>executable_start()</code>) is the start of the executable.</li>
<li><code>_etext</code> (<code>text_end()</code>) is the end of the text segment.</li>
<li><code>_edata</code> (<code>data_end()</code>) is the end of the data segment.</li>
<li><code>_end</code> (<code>executable_end()</code>) is the end of the executable.</li>
</ul>
<p><code>__ehdr_start</code> (<code>elf_header()</code>) is especially interesting.
It allows programs to examine themselves by reading their ELF headers (file headers and program headers).
This can be used to get TLS image information, for example.</p>
<p>Note that these symbols are ELF specific, though, so they cannot be used when linking to something else, such as a PE32+ UEFI executable.</p>
<h4 id="examples">Examples</h4>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #82AAFF;">println!</span><span style="color: #89DDFF;">(&quot;</span><span style="color: #C3E88D;">Executable start: </span><span style="color: #89DDFF;">{</span><span style="color: #C3E88D;">:p</span><span style="color: #89DDFF;">}&quot;,</span><span style="color: #FFCB6B;"> elf_symbols</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">executable_start</span><span style="color: #89DDFF;">());</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">println!</span><span style="color: #89DDFF;">(&quot;</span><span style="color: #C3E88D;">ELF header:       </span><span style="color: #89DDFF;">{</span><span style="color: #C3E88D;">:p</span><span style="color: #89DDFF;">}&quot;,</span><span style="color: #FFCB6B;"> elf_symbols</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">elf_header</span><span style="color: #89DDFF;">());</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">println!</span><span style="color: #89DDFF;">(&quot;</span><span style="color: #C3E88D;">Text segment end: </span><span style="color: #89DDFF;">{</span><span style="color: #C3E88D;">:p</span><span style="color: #89DDFF;">}&quot;,</span><span style="color: #FFCB6B;"> elf_symbols</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">text_end</span><span style="color: #89DDFF;">());</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">println!</span><span style="color: #89DDFF;">(&quot;</span><span style="color: #C3E88D;">Data segment end: </span><span style="color: #89DDFF;">{</span><span style="color: #C3E88D;">:p</span><span style="color: #89DDFF;">}&quot;,</span><span style="color: #FFCB6B;"> elf_symbols</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">data_end</span><span style="color: #89DDFF;">());</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">println!</span><span style="color: #89DDFF;">(&quot;</span><span style="color: #C3E88D;">Executable end:   </span><span style="color: #89DDFF;">{</span><span style="color: #C3E88D;">:p</span><span style="color: #89DDFF;">}&quot;,</span><span style="color: #FFCB6B;"> elf_symbols</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">executable_end</span><span style="color: #89DDFF;">());</span></span></code></pre><h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog. These landed in early July, but we mention them here since they keep the code building on the latest Rust nightly:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1484">Fix target spec: use <code>softfloat</code> instead of <code>x86-softfloat</code></a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1485">Fix blog: the <code>x86-softfloat</code> feature was renamed to <code>softfloat</code></a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1486">Update for new Rust error messages</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1487">Update blog to zola 0.22.1</a></li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: May 2026</title>
            <pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2026-05/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2026-05/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2026-05/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2026-05/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<p>Please submit interesting posts and projects for the next issue <a rel="external" href="https://rust-osdev.zulipchat.com/#narrow/channel/435142-newsletter/topic/Content.20suggestions/with/580172810">on Zulip</a> or via a PR <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>.</p>
<span class="gray">
Disclaimer: Automated scripts and AI assistance were used for collecting and categorizing links.
Everything was proofread and checked manually, with many manual tweaks.
</span>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (May 2026)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://corrode.dev/podcast/s06e04-rust4linux/">Rust for Linux Live with Alice Ryhl and Greg Kroah-Hartman</a>
<ul>
<li>A live Rust Week recording about Rust in the Linux kernel, C/Rust interoperability, kernel driver work, and the day-to-day realities of writing kernel code in Rust.</li>
</ul>
</li>
<li><a rel="external" href="https://thejpster.org.uk/blog/blog-2026-05-17/">Finding the Time Part 2 - Rust Async and the Arm Generic Timer</a>
<ul>
<li>Explores implementing async timers for Armv8-R systems using the Arm Generic Timer, interrupts, and Embassy's <code>embassy-time</code> driver model.</li>
</ul>
</li>
<li><a rel="external" href="https://blog.cat-girl.gay/3ds-async-part-one/">Building an AsyncIO executor for the 3DS</a>
<ul>
<li>Starts a series on cooperative multitasking for Nintendo 3DS homebrew by building a small Rust executor and connecting async wakeups to platform scheduling constraints.</li>
</ul>
</li>
<li><a rel="external" href="https://jonahnestrick.com/blog/rust-gba-tutorial-1/">Rust x GBA: Setup and Pixels</a>
<ul>
<li>Walks through setting up a nightly Rust project for Game Boy Advance ROM development, including <code>arm-none-eabi</code> tooling, Cargo configuration, <code>core</code>-only code, and pixel output.</li>
</ul>
</li>
<li><a rel="external" href="https://www.theembeddedrustacean.com/uferris">uFerris: A Versatile Learner Board for Rust Embedded Beginners</a>
<ul>
<li>A new open source learner board and board support crate for embedded Rust exercises across Seeed XIAO-compatible MCUs.</li>
</ul>
</li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/">Rust 1.96.0</a>
<ul>
<li>Stabilizes new <code>core::range</code> types and <code>core::assert_matches!</code>/<code>core::debug_assert_matches!</code>.</li>
<li>WebAssembly targets now fail on undefined linker symbols by default instead of implicitly treating them as <code>"env"</code> imports.</li>
<li>Includes Cargo fixes for <a rel="external" href="https://blog.rust-lang.org/2026/05/25/cve-2026-5223/">CVE-2026-5223</a> and CVE-2026-5222 for users of third-party registries.</li>
</ul>
</li>
<li>More <code>std::io</code> pieces move toward <code>core::io</code>
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/156428"><code>Cursor</code></a> and <a rel="external" href="https://github.com/rust-lang/rust/pull/156431"><code>std::io::util</code></a> were moved into <code>core::io</code>, continuing the effort to make I/O building blocks available in <code>no_std</code> contexts.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/156882">Proposal to stabilize the <code>Allocator</code> trait</a>
<ul>
<li>A draft PR that proposes stabilizing the <code>Allocator</code> trait together with <code>Global</code>, <code>System</code>, and the <code>*_in</code> constructors (e.g. <code>Box::new_in</code>, <code>Vec::new_in</code>). This would let kernel and <code>no_std</code> code use custom allocators with the standard collections on stable Rust. The design still needs to go through FCP and bake further before it can land.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/cargo/pull/16988">Cargo <code>clean -p</code> now respects <code>build.target</code></a>
<ul>
<li>Makes <code>cargo clean -p</code> behave more predictably for projects that set a default cross-compilation target in Cargo configuration.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/compiler-team/issues/985">Promote five Thumb-mode bare-metal Arm targets to Tier 2</a>
<ul>
<li>A compiler-team proposal entered final comment period to promote additional <code>thumb*-none-eabi*</code> bare-metal targets.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/compiler-team/issues/976">Add <code>-Zdead-fn-elimination</code></a>
<ul>
<li>A compiler-team proposal entered final comment period for a nightly codegen option that skips functions unreachable from exported symbols, which could improve compile time. Improvements on binary size are <a rel="external" href="https://rust-osdev.zulipchat.com/#narrow/channel/435142-newsletter/topic/Incorrect.20characterization.20of.20-Zdead-fn-elimination">not expected</a> though since the linker should already eliminate dead functions today.</li>
</ul>
</li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers uses to relay information about the hardware to the OS.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/293">Use <code>contribute_arg</code> to handle <code>NoCurrentOp</code> at the top-level</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/295">Logical not only requires one arg</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/296">Move method context to <code>do_execute_method</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/288">Get referenced-package size - unwrap reference in <code>do_size_of</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/286">Allow BufferField -&gt; Integer conversion</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/303">Compare strings and buffers like uACPI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/299">Update uACPI example tests since some now work</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/298">Directly test a stream of opcodes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/304">Fix regression in implicit casting from integer -&gt; string</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/martin-hughes">@martin-hughes</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1939">Fix connect_controller to take a list for <code>driver_image</code>.</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1942">AtaPassThru: Make AtaStatusBlock and AtaCommandBlock derive Clone</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1953">various updates (nothing major or critical) + bump MSRV from 1.88 to 1.91</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1954">uefi: move runtime module to directory</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.46.0](https://github.com/rust-osdev/uefi-rs/pull/1940) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1941) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.46.1](https://github.com/rust-osdev/uefi-rs/pull/1944) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1946) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.46.2](https://github.com/rust-osdev/uefi-rs/pull/1948) -->
<!-- - [ci: fix broken uefi-macros test](https://github.com/rust-osdev/uefi-rs/pull/1952) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/589">implement DoubleEndedIterator for ranges + implement more iterator methods</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1477">fix: lazy_static is not needed, keyboard methods are const, </a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1480">[Translation] Translated post 8 and 9 into Russian</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1481">Adding Turkish translations of blog posts</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1482">Adjust blog for PR #1477</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/harsh-98">@harsh-98</a>, <a rel="external" href="https://github.com/TakiMoysha">@TakiMoysha</a>, and <a rel="external" href="https://github.com/rhotav">@rhotav</a> for their contributions!</p>
<!-- <span class="gray">No projects updates were submitted this month.</span> -->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: April 2026</title>
            <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2026-04/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2026-04/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2026-04/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2026-04/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<p>Please submit interesting posts and projects for the next issue <a rel="external" href="https://rust-osdev.zulipchat.com/#narrow/channel/435142-newsletter/topic/Content.20suggestions/with/580172810">on Zulip</a> or via a PR <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>.</p>
<span class="gray">
Disclaimer: Automated scripts and AI assistance were used for collecting and categorizing links.
Everything was proofread and checked manually, with many manual tweaks.
</span>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (April 2026)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.boranseckin.com/projects/octopos">octopos: xv6-based operating system for RISC-V in Rust</a>
<ul>
<li>A Rust port of xv6 that targets RISC-V and runs without the standard library, including process management, Sv39 page tables, VirtIO disk support, and a POSIX-style syscall interface.</li>
</ul>
</li>
<li><a rel="external" href="https://gigapotential.dev/blog/minimal-vmm-in-rust-with-apple-hypervisor/">A minimal VMM in Rust with Apple Hypervisor</a>
<ul>
<li>Walks through building a small virtual machine monitor on Apple Silicon macOS using Rust bindings to Apple's Hypervisor framework.</li>
</ul>
</li>
<li><a rel="external" href="https://oshub.org/users/OSHub/posts/rust-memory-safety-in-kernel-space-9178dd">Rust: Memory safety in kernel space</a>
<ul>
<li>An OS-focused introduction to how Rust's ownership and <code>unsafe</code> boundaries change kernel development.</li>
</ul>
</li>
<li><a rel="external" href="https://blog.google/security/bringing-rust-to-the-pixel-baseband/">Bringing Rust to the Pixel Baseband</a>
<ul>
<li>Google describes adding Rust to Pixel modem firmware, including <code>no_std</code> support for Hickory DNS dependencies, <code>core</code>/<code>alloc</code> integration, allocator and panic handler hooks, and firmware linking details.</li>
</ul>
</li>
<li><a rel="external" href="https://aaronqian.com/log/2026-04-22-tinyboot-v040-released/">tinyboot v0.4.0 Released -- The API is Stable</a>
<ul>
<li>A minimal Rust bootloader for resource-constrained MCUs. This release adds CH32V00x support, collapses the CH32 crates, stabilizes the wire protocol, and fixes half-duplex UART bugs.</li>
</ul>
</li>
<li><a rel="external" href="https://chrisdell.info/using-rust-to-build-a-1-dollar-handheld-gaming-console/">Using Rust to Build a $1 Handheld Gaming Console</a>
<ul>
<li>A small embedded Rust project on the CH32V003 RISC-V microcontroller, with notes on RAM-constrained rendering and fixed-point math.</li>
</ul>
</li>
<li><a rel="external" href="https://redixhumayun.github.io/databases/2026/04/14/zero-copy-pages-in-rust.html">Zero-copy pages in Rust</a>
<ul>
<li>Explores an approach for working with database pages in Rust while avoiding unnecessary copies.</li>
</ul>
</li>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-260430/">This Month in Redox - April 2026</a>
<ul>
<li>The Redox project reports updates across the kernel, system libraries, drivers, and userspace.</li>
</ul>
</li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://blog.rust-lang.org/2026/04/16/Rust-1.95.0/">Rust 1.95.0</a>
<ul>
<li>Stabilizes <code>cfg_select!</code>, atomic <code>update</code>/<code>try_update</code> methods, and allocator layout helpers such as <code>Layout::{dangling_ptr, repeat, repeat_packed, extend_packed}</code>.</li>
<li>Important for custom-target users: stable <code>rustc</code> no longer accepts JSON target specifications. Building <code>core</code> for custom targets still requires nightly-only features.</li>
</ul>
</li>
<li>Move <code>std::io</code> pieces toward <code>core::io</code>
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/154654"><code>ErrorKind</code></a> and <a rel="external" href="https://github.com/rust-lang/rust/pull/155574"><code>RawOsError</code></a> were moved into <code>core::io</code>, continuing the groundwork for more I/O abstractions in <code>no_std</code> contexts.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/153049">Add <code>-Zsanitize=kernel-hwaddress</code></a>
<ul>
<li>Adds nightly support for the kernel hardware address sanitizer mode used by Linux's <code>CONFIG_KASAN_SW_TAGS</code>.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rfcs/pull/3855">Mitigation enforcement RFC</a>
<ul>
<li>An approved RFC for tracking and enforcing target-wide exploit mitigation options such as stack protector settings.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rfcs/pull/3874">build-std: always RFC</a>
<ul>
<li>Proposed Cargo configuration for rebuilding standard library crates, part of the ongoing effort to make <code>build-std</code> usable on stable.</li>
</ul>
</li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="pvh"><a rel="external" href="https://github.com/rust-osdev/pvh"><code>pvh</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>pvh</code> crate contains definitions for Xen's <a rel="external" href="https://xenbits.xen.org/docs/unstable/misc/pvh.html">x86/HVM direct boot ABI</a> (PVH). PVH is commonly used for direct kernel boot in virtual machine managers (VMMs), such as <a rel="external" href="https://www.qemu.org">QEMU</a>, and in VMMs using the <a rel="external" href="https://github.com/rust-vmm/linux-loader"><code>linux-loader</code></a> crate, such as <a rel="external" href="https://firecracker-microvm.github.io">Firecracker</a> and <a rel="external" href="https://www.cloudhypervisor.org">Cloud Hypervisor</a>.</p>
<p>The crate allows kernels to be booted via PVH and helps read the data provided via physical addresses. Its structures can also be used in VMMs or bootloaders to create appropriate start info structures when loading a kernel.</p>
<p>The <a rel="external" href="https://github.com/rust-osdev/pvh">new repository</a> was created this month and is also available <a rel="external" href="https://crates.io/crates/pvh">on crates.io</a>.</p>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for creating the project!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers uses to relay information about the hardware to the OS.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/284">Support multiple tables per test in <code>aml_tester</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/274">Implement Index and Bank fields</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/285">Add support for running the tests from uACPI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/276">Remove some AML-triggerable panics from library</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/287">Derive Clone, Debug on useful objects</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/291">(minor) Trace the table ID better</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/martin-hughes">@martin-hughes</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1934">uefi: make TimerTrigger more pleasant to use</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1936">uefi-raw: Add SimpleTextInputEx protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1937">uefi: Add InputEx protocol</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1926) -->
<!-- - [chore(deps): update codecov/codecov-action action to v5.5.4](https://github.com/rust-osdev/uefi-rs/pull/1923) -->
<!-- - [chore(deps): update dorny/paths-filter action to v4](https://github.com/rust-osdev/uefi-rs/pull/1921) -->
<!-- - [misc: update to typos 1.45](https://github.com/rust-osdev/uefi-rs/pull/1927) -->
<!-- - [chore(deps): update codecov/codecov-action action to v6](https://github.com/rust-osdev/uefi-rs/pull/1924) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1929) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.45.1](https://github.com/rust-osdev/uefi-rs/pull/1930) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1933) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1935) -->
<p>Thanks to <a rel="external" href="https://github.com/JarlEvanson">@JarlEvanson</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following change:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/557">Update to v0.11.15 and add missing x86_64-unknown-uefi target</a></li>
</ul>
<!-- - [Bump rand from 0.8.5 to 0.8.6](https://github.com/rust-osdev/bootloader/pull/559) -->
<!-- - [Bump rustls-webpki from 0.103.10 to 0.103.13 in /examples/basic](https://github.com/rust-osdev/bootloader/pull/560) -->
<p>Thanks to <a rel="external" href="https://github.com/peppergrayxyz">@peppergrayxyz</a> for their contribution!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/588">insert NOP after STI</a></li>
</ul>
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a></span></p>
<p>The <code>linked-list-allocator</code> crate provides a basic <code>no_std</code> allocator that builds a linked list from freed memory blocks and thus needs no additional data structures. We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/90">fix(alloc_ref): use renamed <code>dangling</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/sermuns">@sermuns</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="willamhou-hypervisor"><a rel="external" href="https://github.com/willamhou/hypervisor"><code>willamhou/hypervisor</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/willamhou">@willamhou</a>)</span></p>
<p>An ARM64 Type-1 bare-metal hypervisor written in Rust (<code>no_std</code>). It runs at EL2 and manages guest VMs at EL1, targeting the QEMU <code>virt</code> machine. The project boots Linux 6.12.12 to a BusyBox shell with 4 vCPUs, virtio-blk storage, and virtio-net inter-VM networking.</p>
<p>Key features:</p>
<ul>
<li><strong>S-EL2 SPMC</strong>: Runs as BL32 in TF-A boot chain, replacing Hafnium. Manages multiple Secure Partitions (SPs) at S-EL1 with per-SP Secure Stage-2 page tables.</li>
<li><strong>FF-A v1.1</strong>: Full proxy implementation including DIRECT_REQ/RESP messaging, memory sharing (MEM_SHARE/LEND/DONATE/RETRIEVE/RELINQUISH/RECLAIM), descriptor fragmentation, PARTITION_INFO_GET, notifications, indirect messaging, and CONSOLE_LOG.</li>
<li><strong>pKVM integration</strong>: Coexists with Android pKVM at NS-EL2 — our SPMC at S-EL2, pKVM at NS-EL2. 35/35 <code>ffa_test.ko</code> tests pass, including SP-to-SP DIRECT_REQ relay and SP-to-SP memory sharing through the real SPMD chain.</li>
<li><strong>Multi-VM</strong>: 2 Linux VMs time-sliced with VMID-tagged TLBs and per-VM Stage-2 page tables.</li>
<li><strong>SMP</strong>: Both 4-vCPU-on-1-pCPU (round-robin scheduler) and 4-vCPU-on-4-pCPU (1:1 affinity) modes.</li>
<li><strong>SP-to-SP</strong>: CallStack cycle detection, recursive dispatch, chain preemption, secure virtual interrupt injection via HCR_EL2.VI.</li>
<li><strong>34 test suites</strong> with ~457 assertions running on QEMU, plus 20/20 BL33 E2E integration tests.</li>
</ul>
<h3 id="mohammadmuzamil23-qunix-operating-system"><a rel="external" href="https://github.com/MohammadMuzamil23/Qunix-Operating-System"><code>MohammadMuzamil23/Qunix-Operating-System</code></a></h3>
<p><span class="maintainers">(Section suggested by JustSmile)</span></p>
<p>Qunix is a Unix-like hobby operating system written in Rust. It includes a process model, virtual filesystem layer, memory management with COW fork and demand paging, an ELF loader, and a priority-based preemptive scheduler.</p>
<p>The project recently reached userspace and is making progress on POSIX compatibility. Its initial <code>v0.2.0</code> release adds 70+ userland utilities, including a shell (<code>qsh</code>), along with blocking pipes, a TTY subsystem, and POSIX-style signal delivery.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: March 2026</title>
            <pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2026-03/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2026-03/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2026-03/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2026-03/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<p>Please submit interesting posts and projects for the next issue <a rel="external" href="https://rust-osdev.zulipchat.com/#narrow/channel/435142-newsletter/topic/Content.20suggestions/with/580172810">on Zulip</a> or via a PR <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>.</p>
<span class="gray">
Disclaimer: Automated scripts and AI assistance were used for collecting and categorizing links.
Everything was proofread and checked manually and there were many manual tweaks.
</span>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (March 2026)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/nlnet-cap-nsmgr-cwd/">Redox OS: Capability-based Security — Namespace and CWD</a></li>
<li><a rel="external" href="https://ferrous-systems.com/blog/hardware-access-rust/">Ferrous Systems: "Accessing Hardware in Rust"</a>
<ul>
<li>Compares four Rust hardware abstraction approaches (svd2rust, tock-registers, safe-mmio, derive-mmio) for bare-metal programming.</li>
</ul>
</li>
<li><a rel="external" href="https://www.ralfj.de/blog/2026/03/13/inline-asm.html">How to use storytelling to fit inline assembly into Rust</a>
<ul>
<li>Proposes a "storytelling" approach where inline assembly blocks must correspond to equivalent Rust code, ensuring soundness and allowing compiler optimizations.</li>
</ul>
</li>
<li>Video: <a rel="external" href="https://youtu.be/rgjTPBRae6I">Writing a Linux GPU Kernel Driver in Rust with Daniel Almeida</a>
<ul>
<li>Interview about writing the Tyr GPU kernel driver for Arm Mali hardware in Rust.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/ariel-os/ariel-os/blob/main/CHANGELOG.md#040---2026-03-18">Ariel OS v0.4.0</a>
<ul>
<li>New release of this embedded Rust RTOS adds BLE on ESP32, USB CDC-NCM Ethernet, GNSS sensor support, and stack usage measurement.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/iss4cf0ng/Elfina">Elfina: Multi-architecture ELF Loader in Rust</a>
<ul>
<li>Educational ELF loader supporting x86 and x86-64 Linux binaries, with mmap and memfd execution modes.</li>
</ul>
</li>
<li><a rel="external" href="https://www.vectorware.com/blog/threads-on-gpu">VectorWare: "Rust threads on the GPU"</a>
<ul>
<li>Maps Rust's <code>std::thread</code> API to GPU warps, enabling familiar concurrent Rust code to compile and run on GPU hardware.</li>
</ul>
</li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/libs-team/issues/755">ACP: Introduce <code>alloc::io</code></a>
<ul>
<li>Approved proposal to move OS-independent parts of <code>std::io</code> to <code>alloc</code>, making IO traits available in <code>no_std + alloc</code> environments. The <a rel="external" href="https://github.com/rust-lang/rust/pull/152918">implementation PR</a> is in progress.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/153015">Make atomic primitives type aliases of <code>Atomic&lt;T&gt;</code></a>
<ul>
<li>Refactors all atomic types (<code>AtomicI32</code>, <code>AtomicBool</code>, etc.) into type aliases of a generic <code>Atomic&lt;T&gt;</code>.</li>
<li>Only types that implement the sealed <code>AtomicPrimitive</code> trait can be used with <code>Atomic&lt;T&gt;</code></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/150447">Implement <code>MaybeDangling</code> compiler support</a>
<ul>
<li>Adds compiler-level support for the <code>MaybeDangling</code> wrapper type, which relaxes aliasing assumptions on references. Important for unsafe code dealing with self-referential structures and raw memory.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/153399">Constify <code>Vec::{into, from}_raw_parts{_in|_alloc}</code></a>
<ul>
<li>Makes Vec raw parts methods usable in const contexts.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/153769">Target specs: stricter checks for LLVM ABI values, and correlate with <code>cfg(target_abi)</code></a>
<ul>
<li>Tightens ABI validation in target specs. Note: out-of-tree JSON custom targets may need updating.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/152909"><code>-Zbranch-protection</code> is a target modifier</a>
<ul>
<li>Makes <code>-Zbranch-protection</code> a target modifier, enforcing consistent application across the entire crate graph. Important for AArch64 kernel security (PAC/BTI).</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/154133">Defer codegen for the VaList Drop impl to actual uses</a>
<ul>
<li>Allows compiling libcore with codegen backends that don't implement VaList (like Cranelift). Unblocks alternative backends for bare-metal work.</li>
</ul>
</li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>Simple yet highly configurable low-level driver for 16550 UART devices,
typically known and used as serial ports or COM ports.</p>
<p>We've just released <code>v0.5.0</code> - a <strong>complete rewrite</strong> and fresh start of the crate, implemented by
<a rel="external" href="https://github.com/phip1611">@phip1611</a>.
The main motivation is to make the crate fit for working on real hardware,
clean up technical debt, and streamline the code paths for x86 port I/O and
MMIO. <a rel="external" href="https://github.com/phip1611">@phip1611</a> is also taking over maintenance of the crate, thanks a lot!</p>
<p>More info:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/releases/tag/v0.5.0">https://github.com/rust-osdev/uart_16550/releases/tag/v0.5.0</a></li>
<li><a rel="external" href="https://docs.rs/uart_16550/0.5.0/uart_16550/">https://docs.rs/uart_16550/0.5.0/uart_16550/</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/41">https://github.com/rust-osdev/uart_16550/pull/41</a></li>
</ul>
<p>Special Thanks to Philipp Oppermann (@phil-opp) and Martin Kröning (@mkroening)
for their very valuable review on the new crate!</p>
<p>After the rewrite, we merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/42">feat: implement embedded-io traits</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/49">Rename byte transfer functions and update IO trait implementations</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/50">Enhance MmioAddress safety and fix AArch64 instruction emission</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/53">Improve documentation examples and streamline architecture support</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/54">Add API test and improve memory safety in MMIO constructors</a></li>
</ul>
<!-- - [treewide: nuke old repo and replace with rewrite from @phip1611](https://github.com/rust-osdev/uart_16550/pull/41) -->
<!-- - [Bump crate-ci/typos from 1.41.0 to 1.44.0](https://github.com/rust-osdev/uart_16550/pull/43) -->
<!-- - [Bump bitflags from 2.10.0 to 2.11.0](https://github.com/rust-osdev/uart_16550/pull/44) -->
<!-- - [Bump assert2 from 0.3.16 to 0.4.0](https://github.com/rust-osdev/uart_16550/pull/45) -->
<!-- - [doc: update changelog](https://github.com/rust-osdev/uart_16550/pull/46) -->
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1903">add <code>join</code> on <code>Path</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1875">uefi: serial: add read_exact() and write_exact() + fix core::fmt::Write for Serial</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1915">runtime: add <code>CStr16::from_bytes_with_nul</code> for UCS-2 strings in UEFI Variables</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1917">Replace a couple <code>as</code> casts with <code>ptr::from_ref</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1918">release: uefi-raw-0.14.0, uefi-0.37</a></li>
</ul>
<!-- - [Fix new clippy lints](https://github.com/rust-osdev/uefi-rs/pull/1908) -->
<!-- - [chore(deps): update rust crate quote to v1.0.45](https://github.com/rust-osdev/uefi-rs/pull/1910) -->
<!-- - [chore(deps): update rust crate ovmf-prebuilt to v0.2.8](https://github.com/rust-osdev/uefi-rs/pull/1909) -->
<!-- - [test-runner: rename cpy -> copy to make `typos` happy](https://github.com/rust-osdev/uefi-rs/pull/1912) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.44.0](https://github.com/rust-osdev/uefi-rs/pull/1894) -->
<!-- - [chore(deps): update rust crate tempfile to v3.27.0](https://github.com/rust-osdev/uefi-rs/pull/1914) -->
<!-- - [chore(deps): update rust crate clap to v4.6.0](https://github.com/rust-osdev/uefi-rs/pull/1913) -->
<!-- - [cargo: update deps (fix GitHub Security Alerts)](https://github.com/rust-osdev/uefi-rs/pull/1916) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1922) -->
<!-- - [chore(deps): update codecov/codecov-action action to v5.5.3](https://github.com/rust-osdev/uefi-rs/pull/1919) -->
<p>Thanks to <a rel="external" href="https://github.com/the-shank">@the-shank</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/270">Improve handling of top-level names with new <code>ResolveBehaviour</code> system</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/269">For discussion: A way of improving regression/integration testing for ASL snippets</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/280">Use correct offset for PCI I/O</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/277">Allow <code>aml_tester</code> to continue after an interpreter panic</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/283">Apply search rules to lookups</a></li>
</ul>
<!-- - [Add a toolchain file](https://github.com/rust-osdev/acpi/pull/268) -->
<!-- - [Fix aml_tester files argument](https://github.com/rust-osdev/acpi/pull/267) -->
<!-- - [Typo - update PCI config location](https://github.com/rust-osdev/acpi/pull/279) -->
<p>Thanks to <a rel="external" href="https://github.com/martin-hughes">@martin-hughes</a> for their contributions!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/275">feat: IOMMU support via edk2-platforms and IntelVTdDxe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/277">Rename build-edk2 to xtask</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/278">Add build-edk2 action to xtask CLI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/280">xtask: Add update-sources action</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/282">release: 0.2.8</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/283">Update to 2024 edition</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/276) -->
<!-- - [Reformat ureq dependency to one line](https://github.com/rust-osdev/ovmf-prebuilt/pull/279) -->
<!-- - [Ignore files generated during ovmf-prebuilt test](https://github.com/rust-osdev/ovmf-prebuilt/pull/281) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/284) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/286) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/289) -->
<p>Thanks to <a rel="external" href="https://github.com/PelleKrab">@PelleKrab</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/547">don't use BPB_TotSec16 to determine FAT type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/550">speed up BIOS bootloader</a></li>
</ul>
<!-- - [Fix doc link](https://github.com/rust-osdev/bootloader/pull/548) -->
<!-- - [Bump tar from 0.4.44 to 0.4.45 in /examples/basic](https://github.com/rust-osdev/bootloader/pull/553) -->
<!-- - [Bump rustls-webpki from 0.103.8 to 0.103.10 in /examples/basic](https://github.com/rust-osdev/bootloader/pull/554) -->
<p>Thanks to <a rel="external" href="https://github.com/ic3w1ne">@ic3w1ne</a> for their contribution!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/585">don't enable abi_x86_interrupt if not needed</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1469">[Translation] translated post 10 into russian</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/TakiMoysha">@TakiMoysha</a> for their contribution!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: February 2026</title>
            <pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2026-02/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2026-02/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2026-02/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2026-02/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (February 2026)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.phoronix.com/news/Linux-7.0-Rust">Linux 7.0 Officially Concluding The Rust Experiment</a>
<ul>
<li>Rust is now formally accepted as a permanent part of the Linux kernel, shipping in production across multiple distributions and millions of Android devices.</li>
</ul>
</li>
<li><a rel="external" href="https://lwn.net/SubscriberLink/1055590/12d48275b6f81988/">The future for Tyr</a>
<ul>
<li>Progress on Tyr, a Rust GPU driver for Arm Mali hardware. The DRM subsystem is reportedly "about a year away" from requiring new drivers to be written in Rust.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/microsoft/litebox">Microsoft LiteBox</a>
<ul>
<li>A Rust library OS supporting kernel- and user-mode execution, with sandboxing for running unmodified Linux programs on Windows and SEV SNP.</li>
</ul>
</li>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-260131/">This Month in Redox - January 2026</a>
<ul>
<li>Redox got Cargo and rustc compiling natively and made progress on capability-based security.</li>
</ul>
</li>
<li><a rel="external" href="https://rust.cheriot.org/2026/02/15/status-update.html">CHERIoT Rust: Status update #0</a>
<ul>
<li>Six months of progress porting Rust to the CHERIoT capability-based hardware architecture. Core and alloc now compile for the new <code>riscv32cheriot-unknown-cheriotrtos</code> target.</li>
</ul>
</li>
<li><a rel="external" href="https://ariel-os.org/blog/ariel-os-0.3.0/">Ariel OS v0.3.0: BLE, Sensors, UART, and More!</a>
<ul>
<li>New release adds BLE support, hardware-agnostic UART drivers, sensor abstraction, and expanded MCU support (ESP32, STM32, Nordic, RP).</li>
</ul>
</li>
<li><a rel="external" href="https://www.vectorware.com/blog/async-await-on-gpu/">Async/await on the GPU</a>
<ul>
<li>Rust's Future trait and async/await running on GPU hardware, reusing the Embassy embedded executor.</li>
</ul>
</li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rfcs/pull/3458">RFC: Unsafe fields</a>
<ul>
<li>Approved for implementation. Allows marking struct fields as <code>unsafe</code> when they maintain safety invariants.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/152366">Add <code>try_shrink_to</code> and <code>try_shrink_to_fit</code> to Vec</a>
<ul>
<li>Fallible shrinking methods that return <code>TryReserveError</code> instead of panicking on OOM.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/151995">Stabilize <code>ptr_as_ref_unchecked</code></a>
<ul>
<li>Raw-pointer-to-reference conversion without null/alignment checks.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/148590">Stabilize <code>atomic_try_update</code> and deprecate <code>fetch_update</code></a>
<ul>
<li>Cleaner API for lock-free atomic compare-and-swap loops. <code>fetch_update</code> will be deprecated starting in Rust 1.99.0.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/146900">Add <code>avr_target_feature</code></a>
<ul>
<li>Unstable target features for AVR microcontrollers including <code>tinyencoding</code>, <code>lowbytefirst</code>, and various instruction features.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/149783">Stabilize <code>cfg_select!</code></a>
<ul>
<li>Builtin macro for selecting code based on cfg predicates, simplifying conditional compilation.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/151576">Stabilize <code>core::hint::cold_path</code></a>
<ul>
<li>Mark unlikely code paths to help the compiler optimize branch layout.</li>
</ul>
</li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1831">uefi: Add device path generation for discovered devices in a PciTree</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1858">uefi: significantly improve ergonomics of Handle (device path and component2 protocols)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1873">uefi-raw &amp; uefi: serial: add support for protocol revision 1.1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1891">Improve docs of <code>OpenProtocolAttributes</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1893">uefi: Add <code>handle_protocol</code> doc alias to open_protocol functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1900">uefi: serial: improve documentation and correctness of read() and write()</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.42.3](https://github.com/rust-osdev/uefi-rs/pull/1885) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1889) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1890) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1895) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1904) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/535">Expose data for custom boot image creation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/536">build with -Zjson-target-spec</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/537">Enable json-target-spec</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/538">release 0.11.15</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/539">fix typo in year</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/545">update bootloader crates</a></li>
</ul>
<!-- - [Bump bytes from 1.10.1 to 1.11.1 in /examples/basic](https://github.com/rust-osdev/bootloader/pull/540) -->
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> and <a rel="external" href="https://github.com/Wasabi375">@Wasabi375</a> for their contributions!</p>
<h3 id="virtio-spec-rs"><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs"><code>virtio-spec-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>virtio-spec</code> crate provides definitions from the Virtual I/O Device (VIRTIO) specification.
This project aims to be unopinionated regarding actual VIRTIO drivers that are implemented on top of this crate.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/17">build(deps): upgrade bitfield-structs to 0.12</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/18">build(deps): update allocator-api2 to 0.4</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/21">fix(docsrs): migrate from <code>doc_auto_cfg</code> to <code>doc_cfg</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/22">fix: rust-2018-idioms</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/23">fix: upgrade to Rust 2024</a></li>
</ul>
<h3 id="bootimage"><a rel="external" href="https://github.com/rust-osdev/bootimage"><code>bootimage</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>bootimage</code> tool allows the creation of bootable disk images for <code>bootloader</code>-based kernels. It also provides a runner executable for <code>cargo</code> to make <code>cargo run</code> and <code>cargo test</code> work using QEMU.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/104">Add an example kernel that uses the built-in <code>x86_64-unknown-none</code> target</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/105">Fix bootloader build by passing <code>-Zjson-target-spec</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/106">Prepare release</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/107">Fix QEMU test flakiness on ARM64 macOS</a></li>
</ul>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/264">Add support for extracting NUMA information from SRAT and SLIT</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/265">Suggestion: Use colored instead of termion</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/martin-hughes">@martin-hughes</a> for their contributions!</p>
<h3 id="endian-num"><a rel="external" href="https://github.com/rust-osdev/endian-num"><code>endian-num</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>endian-num</code> crate provides the <code>Be</code> (big-endian) and <code>Le</code> (little-endian) byte-order-aware numeric types.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/endian-num/pull/7">feat: add MSRV of 1.71</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/endian-num/pull/6">fix(docsrs): migrate from <code>doc_auto_cfg</code> to <code>doc_cfg</code></a></li>
</ul>
<h3 id="fuse-abi"><a rel="external" href="https://github.com/rust-osdev/fuse-abi"><code>fuse-abi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>fuse-abi</code> crate provides bindings to FUSE devices. In motivation similar to that of <code>virtio-spec</code>, this project aims to provide correct foundational definitions for the FUSE kernel ABI.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/fuse-abi/pull/1">fix(docsrs): migrate from <code>doc_auto_cfg</code> to <code>doc_cfg</code></a></li>
</ul>
<!-- - [chore: upgrade bindgen-cli to 0.72.1](https://github.com/rust-osdev/fuse-abi/pull/2) -->
<h3 id="spinning-top"><a rel="external" href="https://github.com/rust-osdev/spinning_top"><code>spinning_top</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>spinning_top</code> crate provides a simple spinlock implementation based on the abstractions of the <a rel="external" href="https://docs.rs/lock_api/0.4.1/lock_api/"><code>lock_api</code></a> crate.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/27">fix(docsrs): migrate from <code>doc_auto_cfg</code> to <code>doc_cfg</code></a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="metta-systems-ram-map-viewer"><a rel="external" href="https://github.com/metta-systems/ram-map-viewer"><code>metta-systems/ram-map-viewer</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/berkus">@berkus</a>)</span></p>
<p>Added a little GUI for visualizing memory maps. The application itself currently supports a map format that my initialisation code emits, but
it has a MemorySource trait that you can implement to consume any format.</p>
<p><video src="https://raw.githubusercontent.com/metta-systems/ram-map-viewer/video/video/ram-map-viewer.mp4" controls></video></p>
<h3 id="metta-systems-vesper"><a rel="external" href="https://github.com/metta-systems/vesper"><code>metta-systems/vesper</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/berkus">@berkus</a>)</span></p>
<p>Vesper has learned to put nucleus into higher-half memory and added a kernel syscall API with a single syscall - a capability invocation. I have a list of capabilities I want to implement, and first one implemented is Debug Console so you can output execution trace from your domains.</p>
<p>Init thread implementation in progress, now parsing DTB and preparing to launch a user-space "init" process. The video above shows memory map produced by the init thread after parsing a RasPi3 B+ 1Gb DTB.</p>
<!-- <span class="gray">No projects updates were submitted this month.</span> -->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: January 2026</title>
            <pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2026-01/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2026-01/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2026-01/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2026-01/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (January 2026)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://opendevicepartnership.github.io/patina/">Patina - Developing UEFI With Rust</a>
<ul>
<li>Repo: https://github.com/OpenDevicePartnership/patina</li>
<li><a rel="external" href="https://www.youtube.com/watch?v=iKzHrhpCgUI">Project Overview on Youtube</a></li>
</ul>
</li>
<li><a rel="external" href="https://pebblebed.com/blog/kernel-bugs">Kernel bugs hide for 2 years on average. Some hide for 20.</a></li>
<li><a rel="external" href="https://blog.rust-lang.org/2026/01/14/what-does-it-take-to-ship-rust-in-safety-critical/">What does it take to ship Rust in safety-critical?</a></li>
<li><a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-62">The Embedded Rustacean Issue #62</a></li>
<li><a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-63">The Embedded Rustacean Issue #63</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/150151">Destabilise target-spec-json</a>
<ul>
<li>Custom target JSON specs now require <code>-Zunstable-options</code> again. This affects OS developers using custom targets.</li>
</ul>
</li>
<li>Cargo: <a rel="external" href="https://github.com/rust-lang/cargo/pull/16557">add -Z json-target-spec</a>
<ul>
<li>can also be enabled by adding <code>json-target-spec = true</code> to the [unstable] table in <code>.cargo/config.toml</code></li>
</ul>
</li>
<li><a rel="external" href="https://old.reddit.com/r/rust/comments/1qk9t1t/the_rust_gcc_backend_can_now_be_installed_with/">The Rust GCC backend can now be installed with rustup</a>
<ul>
<li>Alternative backend useful for cross-compilation and platforms where LLVM support is limited.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/147893"><code>Vec::push</code> in consts MVP</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/148545">add allocator parameter to HashMap</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/150736">add <code>AtomicPtr::null</code></a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/529">Add llvm-tools to components</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/530">Fix overflow error during address calculation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/531">add kernel stack address to BootInfo</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/532">fix "cargo build --release"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/533">Release 0.11.14</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Wasabi375">@Wasabi375</a> and <a rel="external" href="https://github.com/the-ssd">@the-ssd</a> for their contributions!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><em>Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and
the contained information tags. Usable in no_std environments, such as a kernel.
An optional builder feature also allows the construction of the corresponding
structures.</em></p>
<p>We merged the following PRs this month:</p>
<!-- - [build(deps): bump crate-ci/typos from 1.40.0 to 1.41.0](https://github.com/rust-osdev/multiboot2/pull/285) -->
<!-- - [build(deps): bump actions/cache from 4 to 5](https://github.com/rust-osdev/multiboot2/pull/286) -->
<p><span class="gray">No notable changes this month.</span></p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/254">ovmf-prebuilt: Add download retry</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/256">release: 0.2.7</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/258) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/259) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/260) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/261) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/263) -->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1840">uefi: improve ergonomics of Events</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1857">uefi: improve doc (add short glossary/important terms overview)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1859">workspace: switch to resolver v3</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1860">flake: update (Nix shell: rust 1.86 -&gt; 1.92)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1870">Replace remaining uses of <code>addr_of</code>/<code>addr_of_mut</code> with raw pointer syntax</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1871">Bump MSRV to 1.88</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1872">uefi-raw: serial: fix mutability</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1874">uefi: serial: improve overall documentation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1877">uefi: boot: improve documentation for handles</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1880">export all text::{input, output} types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1883">fix(deps): update rust crate nix to 0.31.0</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1863) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1866) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1868) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.42.0](https://github.com/rust-osdev/uefi-rs/pull/1869) -->
<!-- - [ci/fix: upgrade QEMU on windows](https://github.com/rust-osdev/uefi-rs/pull/1876) -->
<!-- - [Revert "ci/fix: upgrade QEMU on windows"](https://github.com/rust-osdev/uefi-rs/pull/1884) -->
<p>Thanks to <a rel="external" href="https://github.com/yaroslav957">@yaroslav957</a> for their contribution!</p>
<h3 id="virtio-spec-rs"><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs"><code>virtio-spec-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>virtio-spec</code> crate provides definitions from the Virtual I/O Device (VIRTIO) specification.
This project aims to be unopinionated regarding actual VIRTIO drivers that are implemented on top of this crate.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/11">feat(virtio-mmio): add <code>MAGIC_VALUE</code> constant</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/12">fix(virtq): clippy::manual_is_multiple_of</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/13">feat(virtio-net): add <code>VIRTIO_NET_F_CTRL_RX_EXTRA</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/14">feat(virtio-net): add <code>VIRTIO_NET_F_GUEST_USO{4,6}</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/15">feat(features): add <code>recommendations</code> and <code>recommendations_satisfied</code></a></li>
</ul>
<!-- - [ci: update actions/checkout to v6](https://github.com/rust-osdev/virtio-spec-rs/pull/16) -->
<!-- - [ci: run cargo-semver-checks](https://github.com/rust-osdev/virtio-spec-rs/pull/19) -->
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/574">feat(mapper): add <code>MappedPageTable::display</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/575">fix(instructions): allow unused_unsafe for cpuid</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/576">feat(mapper): make <code>OffsetPageTable</code> a type alias</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/578">fix(mapper): inline internal <code>map_to_*</code> functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/579">docs: fix typos</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/581">feat(paging): make range types <code>!Copy</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/582">docs(page): fix typos</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/584">feat: make page types <code>repr(transparent)</code> and range types <code>repr(Rust)</code></a></li>
</ul>
<!-- - [chore: merge master into next](https://github.com/rust-osdev/x86_64/pull/577) -->
<!-- - [ci: add typos job](https://github.com/rust-osdev/x86_64/pull/580) -->
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1452">Fix mention of non-existent <code>keyboard_task</code> function in async/await post</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1455">Update 'Minimal Rust Kernel' post to enable unstable <code>json-target-spec</code> feature</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1456">Enable unstable <code>json-target-spec</code> feature</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1457">Fix translations: <code>no_mangle</code> attribute is unstable now</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/ebkalderon">@ebkalderon</a> for their contribution!</p>
<!-- <span class="gray">No projects updates were submitted this month.</span> -->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: December 2025</title>
            <pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-12/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-12/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-12/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-12/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (December 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://media.ccc.de/v/39c3-xous-a-pure-rust-rethink-of-the-embedded-operating-system">Xous: A Pure-Rust Rethink of the Embedded Operating System</a>
<ul>
<li>Homepage: <a rel="external" href="https://xous.dev/">https://xous.dev/</a></li>
<li>Repo: <a rel="external" href="https://github.com/betrusted-io/xous-core">https://github.com/betrusted-io/xous-core</a></li>
</ul>
</li>
<li><a rel="external" href="https://asterinas.github.io/2025/12/19/announcing-asterinas-0.17.0.html">Announcing Asterinas 0.17.0</a></li>
<li><a rel="external" href="https://lwn.net/SubscriberLink/1050174/6b6d55c90ce1100f/">The state of the kernel Rust experiment</a></li>
<li><a rel="external" href="https://ratatui.rs/highlights/v030/#no_std-support">ratatui v0.30 released with <code>no-std</code> support</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<p><span class="gray">No content was submitted for this section this month.</span></p>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/524">fix buffer overflow in <code>DiskAccess::read_exact_into</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/526">Code changes to update to 2024 edition</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/527">fix: some typo</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/528">Fix create-disk-image links</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/spencer3035">@spencer3035</a>, <a rel="external" href="https://github.com/Taxrosdev">@Taxrosdev</a>, and <a rel="external" href="https://github.com/oxyzenQ">@oxyzenQ</a> for their contributions!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/240">release: 0.2.5</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/247">build-edk2: Install python3-dev</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/248">Upgrade loongarch64 toolchain</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/249">build-edk2: Drop IA32 support</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/250">build-edk2: Update aarch64 install path</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/251">Update readme to note ia32 is only available in older releases</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/252">release: 0.2.6 with edk2-stable202511-r1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/253">ovmf-prebuilt: Add release availability info to Arch docstring</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/237) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/238) -->
<!-- - [build(deps): get rid of unnecessary flate2 dependency](https://github.com/rust-osdev/ovmf-prebuilt/pull/239) -->
<!-- - [chore(deps): update actions/checkout action to v6](https://github.com/rust-osdev/ovmf-prebuilt/pull/233) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/241) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/242) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/243) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/255) -->
<p>Thanks to <a rel="external" href="https://github.com/fogti">@fogti</a> for their contribution!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1836">Change SimpleNetwork::wait_for_packet to return <code>Option&lt;Event&gt;</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1841">Implement BlockIO2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1830">uefi: Refactor PciRootBridgeIo::enumerate() with tree-topology information</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1850">uefi: http: fix integration test</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.40.0](https://github.com/rust-osdev/uefi-rs/pull/1837) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1838) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1844) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1849) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1853) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a> and <a rel="external" href="https://github.com/Virv12">@Virv12</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="valibali-cluu"><a rel="external" href="https://github.com/valibali/cluu"><code>valibali/cluu</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/valibali">@valibali</a>)</span></p>
<p>CLUU’s kernel has transitioned from a feature-oriented hobby kernel to a strict L4-style microkernel that provides mechanisms only.</p>
<ul>
<li>The kernel surface is now intentionally minimal, limited to scheduling, memory management, IPC, interrupts, token verification, and syscall dispatch.</li>
<li>All system policy, including filesystems, drivers, and services, has been moved entirely to userspace.</li>
<li>Implicit privilege has been eliminated and replaced with an explicit, cryptographically verified token-based authority system.</li>
<li>Every privileged operation now requires visible, auditable authority, with no ambient permissions or global namespaces.</li>
<li>IPC has become the only communication primitive, implemented as deterministic synchronous rendezvous.</li>
<li>The scheduler has been redesigned as an O(1) priority bitmap scheduler with predictable behavior and clear separation of mechanism and policy.</li>
<li>Memory management now enforces per-process address spaces, validated user pointers, and lazy allocation via page faults.</li>
<li>The syscall interface has been reduced to seven syscalls, with all privileged actions funneled through a single token-guarded entry point.</li>
<li>The kernel is now fully unit-tested, smaller, stricter, and architecturally stable, enabling future development to proceed almost entirely in userspace.</li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: November 2025</title>
            <pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-11/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-11/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-11/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-11/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (November 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1p2dhex/moss_a_rust_linuxcompatible_kernel_in_about_26000/">moss: a Rust Linux-compatible kernel in about 26,000 lines of code</a></li>
<li><a rel="external" href="https://github.com/edera-dev/sprout">Sprout: a programmable UEFI bootloader written in Rust</a></li>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-251130/">This Month in Redox - November 2025</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1ouqxmw/made_a_x86_32_bootloader_in_rust/">Made a x86_32 bootloader in Rust</a></li>
<li><a rel="external" href="https://hachyderm.io/@Mara/115542621720999480">I've improved the implementation behind all the string formatting macros in Rust</a></li>
<li><a rel="external" href="https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html">Rust in Android: move fast and fix things</a></li>
<li>Podcast: <a rel="external" href="https://corrode.dev/podcast/s05e05-canonical/">Canonical - Jon Seager, VP Engineering for Ubuntu</a></li>
<li>Video: <a rel="external" href="https://www.youtube.com/watch?v=HX0GH-YJbGw">Keynote: Rust in the Linux Kernel, Why? - Greg Kroah-Hartman</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://blog.rust-lang.org/2025/11/20/switching-to-v0-mangling-on-nightly/">Switching to Rust's own mangling scheme on nightly</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/147736">Stabilize <code>asm_cfg</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/145974">Stabilize <code>-Zno-jump-tables</code> into <code>-Cjump-tables=bool</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rfcs/pull/3848">Pass pointers to <code>const</code> in assembly</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/148539">Add Allocator proxy impls for Box, Rc, and Arc</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/147540">Stabilise <code>as_array</code> in <code>[_]</code> and <code>*const [_]</code>; stabilise <code>as_mut_array</code> in <code>[_]</code> and <code>*mut [_]</code></a></li>
<li>FCP: <a rel="external" href="https://github.com/rust-lang/compiler-team/issues/944">Destabilise target-spec-json</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="new-crate-mem-barrier">New Crate: <a rel="external" href="https://github.com/rust-osdev/mem-barrier"><code>mem_barrier</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>This crate provides cross-architecture, no-std memory barriers.</p>
<p>When compiling with optimizations, the compiler may try to improve performance by reordering independent memory accesses and instructions. Modern CPUs use similar techniques for improving performance, such as out-of-order execution. Memory barriers affect both the compiler and the CPU by restricting reordering of certain memory operations across these barriers respective to other CPUs or devices, allowing proper communication with them.</p>
<p>See the <a rel="external" href="https://docs.rs/mem-barrier/latest/mem_barrier/index.html">docs</a> for details!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/519">Add basic example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/522">Use legacy symbol mangling for BIOS stage 2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/523">release <code>v0.11.13</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/peppergrayxyz">@peppergrayxyz</a> for their contribution!</p>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>pci_types</code> library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/37">fix: write compliant bit pattern for BAR sizing</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/cagatay-y">@cagatay-y</a> for their contribution!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1811">clippy: latest nightly fixes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1809">book: Rephrase target installation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1815">Fix documentation for allocate_pages function</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1814">AtaPassThru: Add read_pio method for AtaRequestBuilder</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1810">release: uefi-raw-0.13.0, uefi-0.36.1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1679">efi shell interface protocol: add var(), vars(), and set_var()</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1819">uefi: Implement PciRootBridgeIo bus device enumeration logic</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1797">uefi-raw: add Tcp4 protocol type definitions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1827">uefi-raw: add Storage Security Command protocol type definitions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1829">uefi: Fix broken bridge recursion in PCI enumeration</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1828">uefi: Make AtaDevice::execute_command() return AtaResponse on error</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1834">uefi-raw: Add bindings for FMP</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1822">uefi-raw: Add bindings for most HII protocols</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1835">uefi: Add special broadcast nvme namespace</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.39.2](https://github.com/rust-osdev/uefi-rs/pull/1824) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1826) -->
<!-- - [chore(deps): update actions/checkout action to v6](https://github.com/rust-osdev/uefi-rs/pull/1833) -->
<!-- - [chore(deps): update rust crate clap to v4.5.53](https://github.com/rust-osdev/uefi-rs/pull/1832) -->
<!-- - [chore(deps): update rust crate syn to v2.0.111](https://github.com/rust-osdev/uefi-rs/pull/1821) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a>, <a rel="external" href="https://github.com/jasonbking">@jasonbking</a>, <a rel="external" href="https://github.com/JayKickliter">@JayKickliter</a>, <a rel="external" href="https://github.com/crawfxrd">@crawfxrd</a>, <a rel="external" href="https://github.com/RenTrieu">@RenTrieu</a>, <a rel="external" href="https://github.com/rymdbar">@rymdbar</a>, and <a rel="external" href="https://github.com/splaled">@splaled</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/565">release 0.15.3</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/566">add SMAP helpers</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/568">mention #542 in Changelog for 0.15.3</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/569">fix docs.rs build</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/194">Add ability to add iomap to TSS (take 2)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/571">Bump actions/checkout from 5 to 6</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/570">release 0.15.4</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Restioson">@Restioson</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<!-- <span class="gray">No projects updates were submitted this month.</span> -->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li>Add Portuguese (pt-BR) translation
<ul>
<li>for <em>all 12 posts</em></li>
<li>thanks a lot to <a rel="external" href="https://github.com/richarddalves">@richarddalves</a> for this contribution!</li>
</ul>
</li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: October 2025</title>
            <pubDate>Fri, 07 Nov 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-10/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-10/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-10/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-10/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (October 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-251031/">This Month in Redox - October 2025</a></li>
<li><a rel="external" href="https://opendevicepartnership.github.io/patina/introduction.html">Patina: a Rust implementation of UEFI firmware</a></li>
<li><a rel="external" href="https://blog.cuongle.dev/p/inside-rusts-std-and-parking-lot-mutexes-who-win">Inside Rust's std and parking_lot mutexes - who wins?</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1oc2c8b/motor_os_is_now_a_tier3_target_in_rust/">Motor OS is now a Tier-3 target in Rust</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1op6g64/whats_the_statusblocker_for_allocator_api_to_be/">What's the status/blocker for <code>allocator_api</code> to be stabilized?</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/261">aarch64 fixes</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jackpot51">@jackpot51</a> for their contributions!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/211">Add loongarch support</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/216">Update the riscv64 toolchain</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/217">feat: add LoongArch64 architecture support and update to latest prebuilt version</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/218">release: 0.2.4 with edk2-stable202508-r1</a></li>
</ul>
<!-- - [chore(deps): update actions/checkout action to v5](https://github.com/rust-osdev/ovmf-prebuilt/pull/197) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/220) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/221) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/222) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/223) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/224) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/225) -->
<p>Thanks to <a rel="external" href="https://github.com/ZR233">@ZR233</a> for their contribution!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1773">ci: fix latest nightly issues</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1761">style: apply/fix more clippy lints (from cargo::nursery)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1778">uefi-raw: net: add convenient into_* helpers</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1776">uefi-raw: net: code improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1777">uefi-raw: net: add convenient From impls + integration with core::net</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1787">uefi: Improve AlignedBuffer API with more accessors and copy_from_iter()</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1753">uefi: Add bindings for the HII_CONFIG_ROUTING protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1785">uefi: document udp_read of PXE protocol + improve test</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1781">uefi-raw: add unit test for typical high-level net API usage</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1782">uefi: Wrap AtaPassThruProtocol in UnsafeCell</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1792">uefi: Wrap ScsiPassThruProtocol in UnsafeCell</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1793">uefi: Wrap NmvePassThruProtocol in UnsafeCell</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1780">uefi: use core::net-types in public API + remove duplications</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1794">uefi: remove inconsistent println!</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1774">style: apply/fix more clippy lints (from cargo::nursery) (2/2)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1795">release: uefi-raw-0.12.0, uefi-macros-0.19.0, uefi-0.36.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1796">uefi-raw/uefi: Replace doc_auto_cfg with doc_cfg</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1801">uefi-raw: Replace remaining uses of bool with Boolean</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1802">xtask: Check uefi-raw for uses of the primitive bool type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1800">uefi: improve doc for device path construction</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.37.1](https://github.com/rust-osdev/uefi-rs/pull/1772) -->
<!-- - [chore(deps): update codecov/codecov-action action to v5.5.1](https://github.com/rust-osdev/uefi-rs/pull/1771) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.37.2](https://github.com/rust-osdev/uefi-rs/pull/1775) -->
<!-- - [chore(deps): update rust crate ovmf-prebuilt to v0.2.4](https://github.com/rust-osdev/uefi-rs/pull/1784) -->
<!-- - [chore(deps): update rust crate fs-err to v3.1.3](https://github.com/rust-osdev/uefi-rs/pull/1783) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1788) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.38.1](https://github.com/rust-osdev/uefi-rs/pull/1790) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a> for their contribution!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><em>Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and
the contained information tags. Usable in no_std environments, such as a kernel.
An optional builder feature also allows the construction of the corresponding
structures.</em></p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/274">ci: dependabot auto-merge</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/275">misc updates &amp; improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/276">workspace: unify</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/278">clippy: lifetime warnings</a></li>
</ul>
<!-- - [build(deps): bump crate-ci/typos from 1.35.7 to 1.37.0](https://github.com/rust-osdev/multiboot2/pull/273) -->
<!-- - [build(deps): bump crate-ci/typos from 1.37.0 to 1.37.2](https://github.com/rust-osdev/multiboot2/pull/277) -->
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<p><span class="gray">No projects updates were submitted this month.</span></p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: September 2025</title>
            <pubDate>Thu, 09 Oct 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-09/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-09/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-09/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-09/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (September 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/development-priorities-2025-09/">Redox OS: Development Priorities for 2025/26</a></li>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-250930/">This Month in Redox - September 2025</a></li>
<li><a rel="external" href="https://lwn.net/SubscriberLink/1039073/abf96f38b178f988/">Upcoming Rust language features for kernel development</a></li>
<li><a rel="external" href="https://lwn.net/SubscriberLink/1039784/d2548814efb78046/">Kernel hackers at Cauldron, 2025 edition</a></li>
<li><a rel="external" href="https://lwn.net/Articles/1038750/">Linting Rust code in the kernel</a></li>
<li><a rel="external" href="https://lwn.net/Articles/1034603/">Tracking trust with Rust in the kernel</a></li>
<li><a rel="external" href="https://github.com/vinc/moros/releases/tag/v0.12.0">MOROS 0.12.0</a></li>
<li><a rel="external" href="https://github.com/libbpf/blazesym/discussions/1318">blazesym 0.2 stable release: batteries included address symbolization</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1nimfdf/building_a_tiling_window_manager_for_macos_in_rust/">Building a tiling window manager for macOS in Rust</a></li>
<li>Video: <a rel="external" href="https://www.youtube.com/watch?v=JP4-JJefY_A">(Kernel) Task Switching in Rust — by Jayden Qi — Seattle Rust User Group</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://blog.rust-lang.org/inside-rust/2025/10/01/this-development-cycle-in-cargo-1.90/">This Development-cycle in Cargo: 1.90</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/141469">Allow <code>&amp;raw [mut | const]</code> for union field in safe code</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following fix:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/516">Fix: <code>target-pointer-width</code> field now expects an integer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/517">Release <code>v0.11.12</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/518">Fix(v0.9): target-pointer-width field now expects an integer</a></li>
</ul>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1755">test-runner: Add example of using the Input protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1760">style: misc clippy fixes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1759">style: cargo doc fixes and improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1758">uefi: memory safety fixes (UB!)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1764">uefi: doc: Parameters -&gt; Arguments</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1765">Remove unnecessary unsafe block in example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1763">uefi: remove support for unstable allocator_api feature</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1762) -->
<!-- - [fix(deps): update rust crate serde_json to v1.0.145](https://github.com/rust-osdev/uefi-rs/pull/1767) -->
<!-- - [chore(deps): update rust crate trybuild to v1.0.111](https://github.com/rust-osdev/uefi-rs/pull/1766) -->
<p>Thanks to <a rel="external" href="https://github.com/BrokenC1oud">@BrokenC1oud</a> for their contribution!</p>
<h3 id="virtio-spec-rs"><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs"><code>virtio-spec-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>virtio-spec</code> crate provides definitions from the Virtual I/O Device (VIRTIO) specification.
This project aims to be unopinionated regarding actual VIRTIO drivers that are implemented on top of this crate.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/6">feat: add traditional mem balloon device</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/10">chore: release version 0.3.2</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/hcsch">@hcsch</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<!-- <span class="gray">No projects updates were submitted this month.</span> -->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1432">Update post texts to Rust 2024</a> (thanks to <a rel="external" href="https://github.com/thaliaarchi">@thaliaarchi</a>!)</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1436">Fix: <code>target-pointer-width</code> field now expects an integer</a>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1437">Update blog for <code>target-pointer-width</code> change</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1439">Translate post 12 'Async/Await' into Russian</a> (thanks to <a rel="external" href="https://github.com/TakiMoysha">@TakiMoysha</a>!)</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1440">Fix(post-02) Korean translation and typo</a> (thanks to <a rel="external" href="https://github.com/reddevilmidzy">reddevilmidzy</a>!)</li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: August 2025</title>
            <pubDate>Fri, 05 Sep 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-08/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-08/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-08/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-08/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (August 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-250831/">This Month in Redox - August 2025</a></li>
<li><a rel="external" href="https://asterinas.github.io/2025/08/04/announcing-asterinas-0.16.0.html">Announcing Asterinas 0.16.0</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1mrz2lu/i_just_published_a_minimal_fat32_file_system/">minimal FAT32 file system driver written in #[no_std] rust</a></li>
<li><a rel="external" href="https://seiya.me/blog/hypervisor-in-1000-lines">Writing a Hypervisor in 1,000 Lines</a></li>
<li><a rel="external" href="https://github.com/RainSTR-Studio/proka-kernel">Proka Kernel - A kernel for ProkaOS</a></li>
<li><a rel="external" href="https://www.trustedfirmware.org/blog/rf-a-blog">Introducing Rusted Firmware-A (RF-A) - A Rust-Based reimagination of Trusted Firmware-A</a></li>
<li><a rel="external" href="https://github.com/robbie01/nanomp3">nanomp3: A pure Rust <code>no_std</code> MP3 decoding library</a></li>
<li><a rel="external" href="https://www.youtube.com/watch?v=ct10kgmcFmE">Video: Intrusive Linked Lists for Fun and Profit (on embedded)</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/144443">Make target pointer width in target json an integer</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/144232">Implement support for become and explicit tail call codegen for the LLVM backend</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/246">Rewrite <code>acpi</code> crate and entire AML interpreter</a></li>
</ul>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following fix:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/512">fix target-c-int-width for 0.9.x</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/510">release v0.11.11</a></li>
</ul>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1734">Use size_of/align_of from prelude</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1719">Add (partial) safe protocol implementation for EFI_HII_DATABASE_PROTOCOL</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1742">xtask: improved error output for "wrong" repr</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1740">EFI Shell Interface: CurDir Functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1747">uefi-raw: move types to net module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1748">uefi-raw: various small net improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1751">uefi-raw: changelog update</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1737) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.35.3](https://github.com/rust-osdev/uefi-rs/pull/1739) -->
<!-- - [fix(deps): update rust crate proc-macro2 to v1.0.96](https://github.com/rust-osdev/uefi-rs/pull/1738) -->
<!-- - [fix(deps): update rust crate clap to v4.5.44](https://github.com/rust-osdev/uefi-rs/pull/1736) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.35.4](https://github.com/rust-osdev/uefi-rs/pull/1743) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1746) -->
<!-- - [chore(deps): update actions/checkout action to v5](https://github.com/rust-osdev/uefi-rs/pull/1745) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.35.5](https://github.com/rust-osdev/uefi-rs/pull/1749) -->
<!-- - [fix(deps): update rust crate cfg-if to v1.0.3](https://github.com/rust-osdev/uefi-rs/pull/1750) -->
<!-- - [chore(deps): update rust crate bitflags to v2.9.3](https://github.com/rust-osdev/uefi-rs/pull/1744) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a> and <a rel="external" href="https://github.com/RenTrieu">@RenTrieu</a> for their contributions!</p>
<h3 id="virtio-spec-rs"><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs"><code>virtio-spec-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>virtio-spec</code> crate provides definitions from the Virtual I/O Device (VIRTIO) specification.
This project aims to be unopinionated regarding actual VIRTIO drivers that are implemented on top of this crate.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/7">fix(pci): capabilities are always little-endian</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/8">fix(pci): actually convert MMIO access to little endian</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/9">chore: release version 0.3.1</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Gelbpunkt">@Gelbpunkt</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/563">Bump actions/checkout from 4 to 5</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/564">add PageFaultErrorCode::HLAT</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<!-- <span class="gray">No projects updates were submitted this month.</span> -->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1432">Update post texts to Rust 2024</a> (thanks to <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1432">thaliaarchi</a>)</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1428">fix edition2@post-11 Chinese translation error</a> (thanks to <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1428">ttttyy</a>)</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1429">Add post-12 simplified Chinese translation</a> (thanks to <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1429">ic3-w1ne</a>)</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1430">fix(post-01): typo</a> (thanks to <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1430">L3Sota</a>)</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1434">Set <code>test=true</code> to enable <code>main.rs</code> testing again</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1435">Update testing post to set <code>test = true</code> in Cargo.to</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1436">Fix: <code>target-pointer-width</code> field now expects an integer</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1437">Update blog for <code>target-pointer-width</code> change</a></li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: July 2025</title>
            <pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-07/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-07/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-07/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-07/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (July 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://yeet.cx/blog/you-are-the-bios-now">You Are The BIOS Now: Building A Hypervisor In Rust With KVM</a></li>
<li><a rel="external" href="https://lwn.net/Articles/1026694/">How to write Rust in the kernel: part 3</a></li>
<li><a rel="external" href="https://github.com/vivoblueos/kernel">Vivo BlueOS Kernel open-sourced</a>
<ul>
<li>Vivo is a Chinese company selling smartphones and <a rel="external" href="https://www.vivo.com/en/products/watch3">smartwatches</a></li>
<li>BlueOS appears to be their smartwatch OS, now its kernel is open source (Apache license)</li>
<li>POSIX-compatible, targets ARM and RISCV, supports Rust's <code>std</code> library</li>
<li>Chinese homepage: <a rel="external" href="https://blueos.vivo.com/kernel">https://blueos.vivo.com/kernel</a></li>
</ul>
</li>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-250731/">This Month in Redox - July 2025</a></li>
<li><a rel="external" href="https://www.collabora.com/news-and-blog/blog/2025/08/06/writing-a-rust-gpu-kernel-driver-a-brief-introduction-on-how-gpu-drivers-work/">Writing a Rust GPU kernel driver: a brief introduction on how GPU drivers work</a></li>
<li><a rel="external" href="https://github.com/roeeshoshani/bitpiece"><code>bitpiece</code>: a crate for defining and manipulating bitfields with procedural macros</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1lyad9b/rougenoir_a_clone_of_the_linux_kernels_redblack/">A Clone of the Linux Kernel's Red-Black Tree in Rust</a></li>
<li><a rel="external" href="https://www.usenix.org/conference/atc25/presentation/jia">Rex: Closing the language-verifier gap with safe and usable kernel extensions</a></li>
<li><a rel="external" href="https://kirchware.com/Dynamic-Indirect-Syscalls-via-JOP-or-ROP-in-Rust">Dynamic Indirect Syscalls via JOP or ROP in Rust</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1lyxyoa/practicing_linux_syscalls_with_rust_and_x86_64/">Practicing Linux Syscalls with Rust and x86_64 Assembly</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/141260">Allow volatile access to non-Rust memory, including address 0</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following fix:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/509">Fixes the type of target-c-int-width in target jsons.</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/OmegaMetor">@OmegaMetor</a> for their contribution!</p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/40">Update port.rs to do \r\n</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/rsahwe">@rsahwe</a> for their contribution!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1716">doc: fix broken links</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1684">uefi: Add HiiKeywordHandler and HiiConfigAccess protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1731">protocols: Add ACPI Table protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1732">feat: <code>uefi-raw</code> IoMmu Protocol Impl</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a>, <a rel="external" href="https://github.com/Jonathas-Conceicao">@Jonathas-Conceicao</a> and <a rel="external" href="https://github.com/PelleKrab">@PelleKrab</a> for their contributions!</p>
<!-- - [chore(deps): update crate-ci/typos action to v1.34.0](https://github.com/rust-osdev/uefi-rs/pull/1717)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1718)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1729)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1730) -->
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/555">docs(offset_page_table): fix typo</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/556">feat: add forwarding <code>impl PageTableFrameMapping for &amp;P</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<!-- <span class="gray">No projects updates were submitted this month.</span> -->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1425">Fix: <code>target-c-int-width</code> field now expects an integer</a>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1426">Update blog for <code>target-c-int-width</code> change</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1412">Add <code>[[bin]]</code> section with <code>test=false</code> to Cargo.toml</a> (thanks to <a rel="external" href="https://github.com/tigeryant">@tigeryant</a>)
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1427">Update first post to set <code>test=false</code> for binary</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1420">translate edition2@post-11 to Chinese</a> (thanks to <a rel="external" href="https://github.com/ttttyy">@ttttyy</a>)</li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: June 2025</title>
            <pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-06/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-06/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-06/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-06/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (June 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1l7av38/media_munal_os_a_fully_graphical_experimental_os/">Munal OS: a fully graphical experimental OS with WASM-based application sandboxing</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1litijp/media_my_rust_os_safaos_now_has_usb_support_and_a/">SafaOS now has USB support and a working aarch64 port</a></li>
<li><a rel="external" href="https://github.com/r9os/r9">R9: a reimplementation of the plan9 kernel in Rust</a></li>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-250630/">This Month in Redox - June 2025</a></li>
<li><a rel="external" href="https://jslazak.com/are-we-embedded-yet-2/">Ratatui alpha with no-std support released</a>
<ul>
<li>crate for creating terminal user interfaces</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/matheus-git/flat_rbtree">flat_rbtree: A fast, index-based Red-Black Tree with no heap allocations</a></li>
</ul>
<h3 id="linux-related">Linux-related</h3>
<ul>
<li><a rel="external" href="https://asterinas.github.io/2025/06/04/kernel-memory-safety-mission-accomplished.html">Kernel Memory Safety: Mission Accomplished</a></li>
<li><a rel="external" href="https://lwn.net/SubscriberLink/1025232/fbb2d90d084368e3/">How to write Rust in the kernel: part 2</a></li>
<li><a rel="external" href="https://blog.buenzli.dev/rust-for-linux-first-contrib/">A Newbie's First Contribution to (Rust for) Linux</a></li>
<li><a rel="external" href="https://crescentro.se/posts/writing-drivers/">Writing a basic Linux device driver when you know nothing about Linux drivers or USB</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://blog.rust-lang.org/2025/07/03/stabilizing-naked-functions/">Stabilizing naked functions</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/142053">Add new Tier-3 targets: <code>loongarch32-unknown-none*</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/140748">Allow storing <code>format_args!()</code> in a variable</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1680">Updating Uefi Raw for EFI Shell Protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1621">SNP Integration Test: Improve Clarity</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1689">ci: Temporarily pin to older nightly</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1686">fix typo <code>ctr16!</code> to <code>cstr16!</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1694">xtask: Allow clippy::collapsible_if lint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1693">uefi: Fix clippy::uninlined_format_args lint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1692">test-runner: Fix clippy::uninlined_format_args lint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1691">uefi: Fix clippy::unnecessary_unwrap lint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1690">Fix mismatched_lifetime_syntaxes lint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1682">uefi: Make PciIoAddress orderable and hashable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1698">uefi: Fix io-align == 0 edgecase handling for ata &amp; nvme</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1683">uefi-raw: Add HII_CONFIG_ACCESS and CONFIG_KEYWORD_HANDLER protocol bindings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1612">doc/uefi: improve Protocol documentation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1703">Fix lints/tests on nightly and unpin the CI nightly version</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1709">uefi-services: prepare v0.26.0 release to accelerate migration/deprecation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1712">uefi-services: remove again</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1714">uefi/test-runner: Remove <code>crate::</code> and <code>uefi::</code> prefix from Status</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1681) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.33.1](https://github.com/rust-osdev/uefi-rs/pull/1696) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1697) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1702) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1707) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1715) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, <a rel="external" href="https://github.com/apps/renovate">@renovate[bot]</a>, <a rel="external" href="https://github.com/RenTrieu">@RenTrieu</a>, and <a rel="external" href="https://github.com/diamant3">@diamant3</a> for their contributions!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/181)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/182)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/183)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/185) -->
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/186">Split Source constants into a new file</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/187) -->
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><em>Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and
the contained information tags. Usable in no_std environments, such as a kernel.
An optional builder feature also allows the construction of the corresponding
structures.</em></p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/267">update workspace, Rust edition 2024, fixes</a></li>
</ul>
<!-- - [build(deps): bump crate-ci/typos from 1.31.2 to 1.32.0](https://github.com/rust-osdev/multiboot2/pull/269)
- [build(deps): bump uefi-raw from 0.8.0 to 0.11.0](https://github.com/rust-osdev/multiboot2/pull/268) -->
<h3 id="virtio-spec-rs"><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs"><code>virtio-spec-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>virtio-spec</code> crate provides definitions from the Virtual I/O Device (VIRTIO) specification.
This project aims to be unopinionated regarding actual VIRTIO drivers that are implemented on top of this crate.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/4">ci: run Miri</a></li>
</ul>
<!-- - [build(deps): upgrade dependencies](https://github.com/rust-osdev/virtio-spec-rs/pull/3) -->
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/2">fix(net): make HdrGso an enum instead of a flag</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/1">add support of console</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs/pull/5">chore: release version 0.3.0</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/stlankes">@stlankes</a> for their contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/506">Document physical memory mapping size</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/aaronzper">@aaronzper</a> for their contribution!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/552">Add "FMask" alias for SFMask.</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/ChocolateLoverRaj">@ChocolateLoverRaj</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<p><span class="gray">No projects updates were submitted this month.</span></p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: May 2025</title>
            <pubDate>Thu, 05 Jun 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-05/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-05/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-05/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-05/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (May 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/CharlyCst/miralis">Miralis, a RISC-V virtual firmware monitor</a></li>
<li><a rel="external" href="https://redox-os.org/news/this-month-250531/">This Month in Redox</a>
<ul>
<li>Redox is looking for a developer in the EU - see the job description in our monthly report!</li>
</ul>
</li>
<li><a rel="external" href="https://www.zdnet.com/article/the-linux-6-15-kernel-arrives-and-its-big-a-victory-for-rust-fans/">The Linux 6.15 kernel arrives - and it's big a victory for Rust fans</a></li>
<li><a rel="external" href="https://www.phoronix.com/news/Rust-Coreutils-0.1-Released">Rust Coreutils 0.1 Released With Big Performance Gains - Can Match Or Exceed GNU Speed</a></li>
<li><a rel="external" href="https://devblogs.microsoft.com/commandline/edit-is-now-open-source/">Edit is now open source</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1l1ue85/chromeos_virtual_machine_monitor_is_written_in/">ChromeOS Virtual Machine Monitor is written in Rust with over 300k LoC</a></li>
<li><a rel="external" href="https://blog.mikey.nz/first-look-at-blinksy/">First look at Blinksy</a> - A Rust no-std no-alloc LED control library for spatial layouts</li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1kwe65p/biski64_a_fast_no_std_prng_in_rust_037ns_per_u64/">biski64: A Fast, no_std PRNG in Rust (~0.37ns per u64)</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1kgx126/rustos_small_rtos_in_rust/">RusTOS - Small RTOS in Rust</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1kzjzj4/a_second_iteration_of_my_doslike_hobby_os_in_rust/">A second iteration of my DOS-like hobby OS in Rust</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/135160">aarch64-softfloat: forbid enabling the neon target feature</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1652">release: uefi-raw-0.11.0, uefi-macros-0.18.1, uefi-0.35.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1656">xtask: Add --ovmf-shell arg</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1657">xtask: simplify env variables</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1659">uefi: use Duration for boot::stall</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1660">xtask: Improve error message for enums in uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1661">ConfigTableEntry move constants and add example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1663">uefi: <code>system::with_*</code> now take mutably closure</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1666">uefi-test-runner: streamline memory related tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1586">rust: edition 2024</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1673">Unpin uguid</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1664">uefi: SNP transmit: document parameters</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1665">doc: improved documentation for boot allocation functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1658">uefi-raw: Add binding for EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1641">doc: streamline device path documentation between uefi-raw and uefi</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1675">clippy: fix upcoming nightly lints</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1640">cleanup IPConfig2/Http Protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1677">uefi: deprecated since 0.36.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1676">doc: help with feature selection</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1625">uefi: Add safe EFI_USB_IO_PROTOCOL bindings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1674">uefi: Add (partial) safe protocol implementation for PCI_ROOT_BRIDGE_IO_PROTOCOL</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.32.0](https://github.com/rust-osdev/uefi-rs/pull/1654) -->
<!-- - [fix(deps): update rust crate clap to v4.5.38](https://github.com/rust-osdev/uefi-rs/pull/1668) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1669) -->
<!-- - [chore(deps): update rust crate uguid to v2.2.1](https://github.com/rust-osdev/uefi-rs/pull/1653) -->
<!-- - [fix(deps): update rust crate nix to 0.30.0](https://github.com/rust-osdev/uefi-rs/pull/1670) -->
<!-- - [fix(deps): update rust crate mbrman to 0.6.0](https://github.com/rust-osdev/uefi-rs/pull/1671) -->
<!-- - [chore(deps): update codecov/codecov-action action to v5.4.3](https://github.com/rust-osdev/uefi-rs/pull/1672) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1678) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a>, <a rel="external" href="https://github.com/fox0">@fox0</a>, and <a rel="external" href="https://github.com/JarlEvanson">@JarlEvanson</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/542">feat(sev): add AMD SEV support</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/547">implement functions for accessing CR8</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/548">Add page attribute table support</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/zyuiop">@zyuiop</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<p><span class="gray">No projects updates were submitted this month.</span></p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: April 2025</title>
            <pubDate>Sat, 10 May 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-04/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-04/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-04/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-04/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (April 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li>Podcast: <a rel="external" href="https://corrode.dev/podcast/s04e01-microsoft/">Microsoft rewriting Hyper-V components in Rust; calls 2025 "the year of Rust at Microsoft"</a></li>
<li><a rel="external" href="https://trifectatech.org/blog/memory-safe-sudo-to-become-the-default-in-ubuntu/">Memory-safe sudo to become the default in Ubuntu</a></li>
<li><a rel="external" href="https://discourse.ubuntu.com/t/migration-to-rust-coreutils-in-25-10/59708">Migration to rust-coreutils in Ubuntu 25.10</a></li>
<li><a rel="external" href="https://github.com/inthehack/noshell">noshell, a no_std argument parser and a shell for constrained systems</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1kh0dg1/ariel_os_v020_now_building_on_stable_rust/">Ariel OS - library OS for microcontrollers - now building on stable Rust</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/134213/">Stabilize <code>naked_functions</code></a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1598">uefi-raw: Add binding for EFI_DEVICE_PATH_UTILITIES_PROTOCOL</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1602">clippy: fix</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1600">helpers: Add AlignedBuffer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1607">xtask: fix nixfmt + update Nix flake + fix CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1605">uefi/doc: improve documentation of exit_boot_services + change signature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1599">uefi: Some convenient DevicePathUtilities helper methods</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1589">uefi: Add safe protocol wrapper for EFI_EXT_SCSI_PASS_THRU_PROTOCOL</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1619">uefi-raw: Fix ATA_PASS_THRU_PROTOCOL bindings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1618">snp network test fixes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1623">uefi-raw: Add EFI_USB_IO_PROTOCOL bindings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1594">uefi: Add safe protocol wrapper for EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1624">uefi: Move PoolString to enable additional use</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1626">uefi-raw: Fix EFI_USB_IO_PROTOCOL implementation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1629">uefi-raw: Add EFI_USB2_HC_PROTOCOL bindings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1595">uefi: Add safe protocol wrapper for EFI_ATA_PASS_THRU_PROTOCOL</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1634">uefi-raw: Move EFI_SIMPLE_NETWORK_PROTOCOL</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1635">Enable access to hidden RAII guard components</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1611">UEFI Allocator: add PAGE_SIZE shortcut </a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1637">xtask: Update OVMF release to EDK2_STABLE202502_R2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1614">add ip4config2 + http protocols support</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1638">uefi-raw: Redefine UsbPortStatus and UsbTransferStatus</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1613">uefi: remove duplication in DevicePathHeader; use uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1649">uefi: Implement CalculateCrc32() boot services function</a></li>
</ul>
<!-- - [fix(deps): update rust crate clap to v4.5.35](https://github.com/rust-osdev/uefi-rs/pull/1610) -->
<!-- - [ci: fix](https://github.com/rust-osdev/uefi-rs/pull/1631) -->
<!-- - [chore(deps): update codecov/codecov-action action to v5.4.2](https://github.com/rust-osdev/uefi-rs/pull/1633) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.31.1](https://github.com/rust-osdev/uefi-rs/pull/1647) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1648) -->
<!-- - [ci: fix failing MSRV uefi-raw job](https://github.com/rust-osdev/uefi-rs/pull/1650) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a>, <a rel="external" href="https://github.com/andersson">@andersson</a>, <a rel="external" href="https://github.com/kraxel">@kraxel</a>, and <a rel="external" href="https://github.com/JarlEvanson">@JarlEvanson</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/544">fix kani build job</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/543">improve <code>VirtAddr</code> <code>Add</code> &amp; <code>Sub</code> impls</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/545">Revert #529 on master</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/546">merge master into next</a></li>
</ul>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/502">implement Send+Sync for MemoryRegions</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1412">Added [[bin]] section to Cargo.toml</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1410">loading UEFI using ovmf_prebuilt=0.2.3 with ovmf_code and ovmf_vars</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/tigeryant">@tigeryant</a> and <a rel="external" href="https://github.com/v4zha">@v4zha</a> for their contributions!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: March 2025</title>
            <pubDate>Sun, 06 Apr 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-03/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-03/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-03/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-03/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (March 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1jp9227/media_rust_compiled_to_holly_c_running_on_templeos/">Rust, compiled to Holy C, running on TempleOS</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1jkkufh/media_my_nonunix_like_rust_os_safaos_now_has_a/">My non-unix like rust OS SafaOS, now has a rust libstd port</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1jo070l/introducing_ariel_os_an_embedded_library_os_for/">Introducing Ariel OS - an embedded library OS for small MCUs</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1jqjs6n/stalloc_fast_memory_allocation_on_the_stack/">Stalloc: fast memory allocation on the stack</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/136127">Allow <code>*const W&lt;dyn A&gt; -&gt; *const dyn A</code> ptr cast</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/133870">Stabilize <code>asm_goto</code> feature gate</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1556">uefi: Implement SignalEvent() boot services function</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1558">uefi: Improve handling of null-address allocations in allocate_pages</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1552">uefi: Mark all function pointers in pxe::BaseCode unsafe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1553">uefi: Exclude null byte from CStr8 Display impl</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1560">nix: switch to Nix Flake</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1559">Fix unwanted rebuilds in xtask commands</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1563">Create FUNDING.yml</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1564">Implement conversions for IpAddress and MacAddress</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1568">uefi: Clean up error docs in media protocols</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1567">uefi: Reformat <code>use</code> items in pxe module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1566">uefi: Consistently use <code>&amp;mut self</code> for pxe::BaseCode methods</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1571">ci: fix typos</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1574">Update Protocol/unsafe_protocol docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1576">uefi: Use uefi_raw's <code>PxeBaseCodeProtocol</code> to implement the internals of <code>pxe::BaseCode</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1580">uefi-raw: Add DiskInfo protocol binding</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1581">uefi-raw: Add EXT_SCSI_PASS_THRU protocol binding</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1579">uefi runtime: Increase default size of name buffer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1582">uefi-raw: Add conversions to/from core::net IP address types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1585">uefi: Enable unsafe_op_in_unsafe_fn lint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1583">uefi: Make pxe::Mode an opaque struct</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1590">uefi: Implement safe wrapper for EFI_DISK_INFO_PROTOCOL</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1591">uefi-raw: Add EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL bindings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1593">uefi-raw: Add documentation to ScsiIoScsiRequestPacket</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1592">uefi-raw: Add EFI_ATA_PASS_THRU_PROTOCOL bindings</a></li>
</ul>
<!-- - [chore(deps): update rust crate log to v0.4.26](https://github.com/rust-osdev/uefi-rs/pull/1555) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1565) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.30.2](https://github.com/rust-osdev/uefi-rs/pull/1577) -->
<!-- - [chore(deps): update rust crate log to v0.4.27](https://github.com/rust-osdev/uefi-rs/pull/1596) -->
<!-- - [fix(deps): update rust crate anyhow to v1.0.97](https://github.com/rust-osdev/uefi-rs/pull/1561)
- [fix(deps): update rust crate clap to v4.5.31](https://github.com/rust-osdev/uefi-rs/pull/1562)
- [fix(deps): update rust crate syn to v2.0.100](https://github.com/rust-osdev/uefi-rs/pull/1569)
- [fix(deps): update rust crate tempfile to v3.19.1](https://github.com/rust-osdev/uefi-rs/pull/1588)
- [fix(deps): update rust crate quote to v1.0.40](https://github.com/rust-osdev/uefi-rs/pull/1587)
- [fix(deps): update rust crate clap to v4.5.34](https://github.com/rust-osdev/uefi-rs/pull/1597) -->
<p>Thanks to <a rel="external" href="https://github.com/seijikun">@seijikun</a>, <a rel="external" href="https://github.com/ifd3f">@ifd3f</a>, <a rel="external" href="https://github.com/ptf2">@ptf2</a>, and <a rel="external" href="https://github.com/quic-bjorande">@quic-bjorande</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/500">remove #[no_mangle] from panic handler</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1405">Update blog to Rust 2024 edition</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1368">Latam Spanish translation</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1407">Fix translation in <code>zh-CN</code> testing post</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/dobleuber">@dobleuber</a> and <a rel="external" href="https://github.com/JINHUILYU">@JINHUILYU</a> for their contributions!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: February 2025</title>
            <pubDate>Tue, 04 Mar 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-02/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-02/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-02/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-02/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (February 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-250131/">This Month in Redox - January 2025</a></li>
<li><a rel="external" href="https://www.redox-os.org/news/02_rsoc2024_dynamic_linker/">RSoC 2024: Dynamic Linking - Part 2</a></li>
<li><a rel="external" href="https://asterinas.github.io/2025/01/20/asterinas-in-2024.html">Asterinas in 2024</a>
<ul>
<li><a rel="external" href="https://github.com/asterinas/asterinas">Asterinas</a> is a Linux ABI-compatible OS written from scratch in Rust</li>
</ul>
</li>
<li><a rel="external" href="https://asterinas.github.io/2025/02/13/towards-practical-formal-verification-for-a-general-purpose-os-in-rust.html">Towards Practical Formal Verification for a General-Purpose OS in Rust</a></li>
<li><a rel="external" href="https://scorpiosoftware.net/2025/02/08/writing-a-simple-driver-in-rust/">Writing a Simple Windows Driver in Rust</a></li>
<li><a rel="external" href="https://fosdem.org/2025/schedule/event/fosdem-2025-6507-rust-for-linux/">FOSDEM talk: Rust for Linux</a></li>
<li><a rel="external" href="https://blog.reverberate.org/2025/02/03/no-panic-rust.html">No-Panic Rust: A Nice Technique for Systems Programming</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1ihd0hf/psa_uuids_getrandom_update_may_break_nostd_v4v7/">PSA: uuid's getrandom update may break no-std V4/V7 users</a></li>
<li>The Embedded Rustacean: <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-39">Issue #39</a> and <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-40">Issue #40</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/131651">Create a generic AVR target: avr-none</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/135408">x86: use SSE2 to pass float and SIMD types</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/137037">add x86-sse2 (32bit) ABI that requires SSE2 target feature</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/135763">Update to LLVM 20</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1528">relicensing: Rewrite PR "DevicePathToText and DevicePathFromText Protocol"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1531">Relicense to "MIT OR Apache-2.0"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1532">Add SPDX headers</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1533">release: uefi-raw-0.10.0, uefi-macros-0.18.0, uefi-0.34.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1534">uefi: Update license info in docstring</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1535">release: uefi-0.34.1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1536">uefi-raw: add Boolean type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1538">uefi-raw: use new Boolean type </a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1537">xtask/uefi-raw: improve check-raw error messages</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1541">Fix upcoming lints in clippy 1.85</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1540">uefi: clarify situation with <code>boot::memory_map()</code> and <code>Status::BUFFER_TOO_SMALL</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1542">Fix uefi-raw MSRV build, and improve CI for MSRV</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1543">Add PXE types to uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1547">uefi: Replace definition of MacAddress with a re-export from uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1548">Use bitflags definitions from uefi-raw in uefi's pxe module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1550">uefi: Fix the BufferSize argument in SimpleNetwork::transmit</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1551">Use newtype enum definitions from uefi-raw in uefi's pxe module</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.29.7](https://github.com/rust-osdev/uefi-rs/pull/1544) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1546) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.29.9](https://github.com/rust-osdev/uefi-rs/pull/1554) -->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/490">Update <code>x86_64</code> to <code>0.15.2</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/491">change rustc-abi in custom targets to x86-softfloat</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/492">[v0.9] change rustc-abi in custom targets to x86-softfloat</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/493">Release <code>v0.11.10</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/495">Update uart_16550 to 0.3.2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/494">Specify kernel-code virt addr in BootloaderConfig</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/496">Use <code>Result::ok</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Stazer">@Stazer</a>, <a rel="external" href="https://github.com/Wasabi375">@Wasabi375</a>, and <a rel="external" href="https://github.com/ChocolateLoverRaj">@ChocolateLoverRaj</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/535">Ensure that addition and subtraction of addresses panics on overflow/underflow</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/536">don't pass -Crelocation-model=static to host targets</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/farnz">@farnz</a> for their contribution!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/240">acpi: fix build errors</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jellllly420">@jellllly420</a> for their contribution!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/139">Add 202408.01, 202411, and 202502 releases</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/146">fix(deps): update rust crate ureq to v3</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/145">Set <code>Source::LATEST</code> to <code>EDK2_STABLE202502_R1</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/140">release: 0.2.2</a>
y</li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/135) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/136) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/137) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/138) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/144) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/148) -->
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<p><span class="gray">No projects updates were submitted this month.</span></p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: January 2025</title>
            <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2025-01/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2025-01/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2025-01/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2025-01/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (January 2025)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li>Podcast: <a rel="external" href="https://www.reddit.com/r/rust/comments/1i88zmb/rust_in_production_volvo_ships_memorysafe_ecus_in/">Rust in Production: Volvo Ships Memory-Safe ECUs in Production Cars</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1ieetqt/the_vekos_operating_system_is_now_able_to_execute/">The VEKOS operating system is now able to execute programs</a></li>
<li>Video: <a rel="external" href="https://www.youtube.com/watch?v=NfBXDEgm6VY">Windows Kernel Programming with Rust - Matthias Heiden | EuroRust 2024</a></li>
<li><a rel="external" href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/understanding-the-microsoft-pluton-security-processor/4370413">Understanding the Microsoft Pluton security processor</a> (uses Rust and <a rel="external" href="https://tockos.org/">TockOS</a>)</li>
<li>Linux: <a rel="external" href="https://lwn.net/SubscriberLink/1006805/f75d238e25728afe/">Resistance to Rust abstractions for DMA mapping</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/134424">Insert null checks for pointer dereferences when debug assertions are enabled</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/132397">Make missing_abi lint warn-by-default</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/119286">show linker output even if the linker succeeds</a></li>
</ul>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1503">uefi-raw: Add FirmwareVolume{,Block}2Protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1510">uefi-raw: hii: Add Database Protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1517">uefi-raw: Add ScsiIoProtocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1516">Add missing type/subtype checks to <code>TryFrom&lt;&amp;DevicePathNode&gt;</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1518">uefi-raw: Add common impls for http types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1523">relicensing: Rewrite allocator, configuration table, and image unload PRs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1524">relicensing: Rewrite set_timer PR</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1525">Fix memory leaks in DevicePathFromText</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1526">Add warning to custom memory types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1527">test-runner: Clean up device path tests</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.29.4](https://github.com/rust-osdev/uefi-rs/pull/1512) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1515) -->
<!-- - [fix(deps): update rust crate itertools to 0.14.0](https://github.com/rust-osdev/uefi-rs/pull/1513) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1522) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1530) -->
<p>Thanks to <a rel="external" href="https://github.com/crawfxrd">@crawfxrd</a> and <a rel="external" href="https://github.com/hannahfluch">@hannahfluch</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/484">use threads instead of futures in build.rs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/486">Move test kernels to a separate workspace</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/487">fix condition for running bootloader common tests</a></li>
</ul>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/530">fix warnings &amp; remove broken CI job</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/529">Add page attribute table support</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/533">use default python again</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/532">feat(msr): add IA32_APIC_BASE support</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/hannahfluch">@hannahfluch</a> and <a rel="external" href="https://github.com/adavis628">@adavis628</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/238">acpi: Remove Clone Copy traits for MADT</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/239">acpi: Clone impl for PlatformInfo and ManagedSlice</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/237">aml: fix clippy warnings and run clippy in CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/223">Fix unsoundness in our representation of the MADT</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>, <a rel="external" href="https://github.com/mrjbom">@mrjbom</a>, and <a rel="external" href="https://github.com/00xc">@00xc</a> for their contributions!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><em>Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and
the contained information tags. Usable in no_std environments, such as a kernel.
An optional builder feature also allows the construction of the corresponding
structures.</em></p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/253">fix: typos</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/254">misc improvements</a></li>
</ul>
<!-- - [build(deps): bump crate-ci/typos from 1.28.1 to 1.29.0](https://github.com/rust-osdev/multiboot2/pull/252)
- [build(deps): bump bitflags from 2.6.0 to 2.7.0](https://github.com/rust-osdev/multiboot2/pull/255)
- [build(deps): bump bitflags from 2.7.0 to 2.8.0](https://github.com/rust-osdev/multiboot2/pull/256)
- [build(deps): bump crate-ci/typos from 1.29.0 to 1.29.4](https://github.com/rust-osdev/multiboot2/pull/257) -->
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="roeeshoshani-genesis"><a rel="external" href="https://github.com/roeeshoshani/genesis"><code>roeeshoshani/genesis</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/roeeshoshani">@roeeshoshani</a>)</span></p>
<p><code>genesis</code> is a bare metal firmware implementation for mips. it implements everything from the bottom up, from
initializing the cpu caches, to configuring pci devices and the interrupt controller.</p>
<p>this month, the core async executor was implemented.</p>
<p>this means that we can implement blocking operations (for example reading a byte from the UART) as rust futures, and we then
<code>.await</code> them.</p>
<p>this makes our lives much easier when writing code that needs to block until some I/O events happen. instead of using callbacks,
and having to pass our state all over the place, we can just <code>.await</code> the blocking future, and write our code using async functions,
which is much more ergonomic.</p>
<h5 id="example">example</h5>
<p>currently, there is only one blocking operation implemented, the operation of reading a byte from the UART.</p>
<p>this allows code like the following to be written:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #89DDFF;font-style: italic;">loop</span><span style="color: #89DDFF;"> {</span></span>
<span class="giallo-l"><span style="color: #C792EA;">    let</span><span> byte</span><span style="color: #89DDFF;"> =</span><span style="color: #82AAFF;"> uart_read_byte</span><span style="color: #89DDFF;">().</span><span style="color: #89DDFF;font-style: italic;">await</span><span style="color: #89DDFF;">;</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">    println!</span><span style="color: #89DDFF;">(&quot;</span><span style="color: #C3E88D;">received uart byte: </span><span style="color: #89DDFF;">{}&quot;,</span><span> byte</span><span style="color: #89DDFF;">);</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">}</span></span></code></pre>
<p>which is a huge improvement over the previous implementation of putting the code inside the UART interrupt handler.</p>
<h5 id="how-does-it-work">how does it work?</h5>
<p>the way this works is that the core kernel's main loop looks roughly like the following:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #89DDFF;font-style: italic;">loop</span><span style="color: #89DDFF;"> {</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">    poll_tasks</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">    wait_for_interrupt</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">}</span></span></code></pre>
<p>then, the interrupt handler is responsible for waking up the relevant tasks.</p>
<p>futures that need interrupt handlers to wake them up should somehow register themselves, and the interrupt hanlers will then
wake the registered tasks.</p>
<p>then, in the next iteration, the tasks that were woken up will be polled again, which completes the loop.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: December 2024</title>
            <pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-12/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-12/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-12/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-12/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (December 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-241231/">This Month in Redox OS - December 2024</a></li>
<li>Video: <a rel="external" href="https://www.youtube.com/watch?v=pDd5mXBF4tY">Intro to Embassy : embedded development with async Rust</a></li>
<li><a rel="external" href="https://blog.system76.com/post/cosmic-alpha-5-released">2025: The Year of COSMIC — Alpha 5 Released!</a></li>
<li>Funding Opportunities - with <a rel="external" href="https://redox-os.org/">Redox OS</a> or on your own
<ul>
<li>The NGI Zero Commons Fund and NGI Zero Fediversity Fund each have a call for proposals with a Feb. 1 deadline.
If the proposal is successful, it would be to start roughly in June or July (based on our experience) and run for up to 12 months,
with an amount up to 50,000 EUR.
There must be a "European component", so a EU-based developer would be an ideal fit,
or perhaps a project where the maintainer is EU-based. Here are the links:</li>
<li><a rel="external" href="https://nlnet.nl/commonsfund/">NGI Zero Commons Fund</a></li>
<li><a rel="external" href="https://nlnet.nl/fediversity/">NGI Zero Fediversity Fund</a></li>
<li>Redox is looking for a part-time or short-term developer to help with implementing device drivers, ACPI support, and similar,
who would like to join our proposal.
You must be knowledgeable in Rust and drivers, and have good reputation in the open source community.
We have an existing relationship with NLnet, so we can craft the proposal, based on your skillset  and our priorities.
Please join us on Matrix and let us know you are interested.</li>
<li>https://matrix.to/#/#redox-join:matrix.org</li>
</ul>
</li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/134765">Improve default target options for <code>x86_64-unknown-linux-none</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/132975">De-duplicate and improve definition of core::ffi::c_char</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1485">Fix clippy::needless_lifetimes in Rust 1.83 and ShimLock ABI on ia32</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1486">Fix clippy::use_self</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1487">uefi-raw: Add DriverBindingProtocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1484">Increase MSRV to 1.81</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1496">Update ptr_meta to 0.3.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1497">Remove unstable gate for <code>core::error::Error</code> impls</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1498">Use size_of/size_of_val/align_of/align_of_val from the prelude</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1502">book: Set driver link-arg in <code>build.rs</code></a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.28.2](https://github.com/rust-osdev/uefi-rs/pull/1488) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1493) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.28.3](https://github.com/rust-osdev/uefi-rs/pull/1499) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1500) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.28.4](https://github.com/rust-osdev/uefi-rs/pull/1504) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1506) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1509) -->
<p>Thanks to <a rel="external" href="https://github.com/crawfxrd">@crawfxrd</a> and <a rel="external" href="https://github.com/JarlEvanson">@JarlEvanson</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/522">fix(idt): panic in <code>impl fmt::Debug for EntryOptions</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/525">Add <code>MapperFlush</code> method to get page</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/527">feat: add <code>update()</code> to <code>Cr3</code>, <code>Dr7</code>, <code>SFMask</code>, <code>UCet</code>, <code>SCet</code>, <code>mxcsr</code>, <code>rflags</code>, and <code>XCr0</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/528">fix(model_specific): make <code>{Fs,Gs,KernelGs}Base::write()</code> unsafe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/521">Merge master into next</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> and <a rel="external" href="https://github.com/adavis628">@adavis628</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/476">Remove "UEFI boot" log message</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/ChocolateLoverRaj">@ChocolateLoverRaj</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="roeeshoshani-genesis"><a rel="external" href="https://github.com/roeeshoshani/genesis"><code>roeeshoshani/genesis</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/roeeshoshani">@roeeshoshani</a>)</span></p>
<p><code>genesis</code> is a bare metal firmware implementation for mips. it implements everything from the bottom up, from
initializing the cpu caches, to configuring pci devices and the interrupt controller.</p>
<p>i noticed that every kernel implementation is always for x86, so i decided to implement it for something a
little more esoteric - mips.</p>
<p>the project is currently in very early stages but the basics are there.</p>
<p>it is my hobby project for me to learn about embedded programming.</p>
<p>feel free to follow along the development of it :).</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: November 2024</title>
            <pubDate>Sun, 08 Dec 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-11/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-11/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-11/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-11/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (November 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1h5vh2g/vekos_a_cryptographically_verified_hobby_os/">VEKOS, a cryptographically verified hobby OS written in Rust</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1gr9tqp/rust_in_production_oxide_computer_company_with/">Rust in Production: Oxide Computer Company with Steve Klabnik (Podcast Interview)</a></li>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-241130/">This Month in Redox - November 2024</a></li>
<li><a rel="external" href="https://blog.system76.com/post/cosmic-alpha-4/">‘Tis the Season for COSMIC Alpha 4!</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1h40cdd/a_no_std_no_main_notokio_runtime_for_aws_lambda/">a #![no_std], #![no_main], no-[#tokio] runtime for AWS Lambda</a></li>
<li><a rel="external" href="https://public-docs.ferrocene.dev/main/release-notes/24.11.0.html">Ferrocene 24.11.0 released with medical qualification</a> (<a rel="external" href="https://www.reddit.com/r/rust/comments/1h1261s/ferrocene_24110_update_medical_qualification_is/">reddit discussion</a>)</li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1gxm414/embive_a_lowlevel_sandboxing_library_for_riscv/">Embive: A low-level sandboxing library for RISC-V bytecode</a></li>
<li><a rel="external" href="https://lore.kernel.org/all/cc40943e-dec1-4890-a1d9-579350ce296f@pbonzini.local/">Rust in QEMU roadmap</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1gvrtnq/kartoffels_a_game_where_you_implement_a_firmware/">kartoffels, a game where you implement a firmware for a potato, v0.6 released! 🥔</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129884">mark some target features as 'forbidden' so they cannot be (un)set with <code>-Ctarget-feature</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/133374">show <code>abi_unsupported_vector_types</code> lint in future breakage reports</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/116161">Stabilize <code>extended_varargs_abi_support</code></a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/508">fix field order for INVPCID descriptor</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/510">fix CI job for building on MSRV</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/507">gate HandlerFunc behind target_arch = "x86{_64}"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/509">fix typo in "InvPicdCommand"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/506">TryFrom implementation for ExceptionVector</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/504">Typo fix in TaskStateSegment comment</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/503">Minor clarification DescriptorTablePointer::limit comment</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/513">fix signature of Step::steps_between implementations</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/519">release 0.15.2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/520">backport #513</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mrjbom">@mrjbom</a> for their contribution!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/225">Implement the multiprocessor wakeup mechanism.</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/229">acpi-dumper: fix invocation of compile_error!</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/228">aml: make resource descriptor fields public</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/230">acpi: fix clippy warnings and run clippy in CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/231">acpi: fix doc warnings and add missing links</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/232">acpi: spcr: fix typo</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/pjhades">@pjhades</a>, <a rel="external" href="https://github.com/00xc">@00xc</a>, and <a rel="external" href="https://github.com/Hsy-Intel">@Hsy-Intel</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/471">Remove 3dnow features from stage4 target</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/461">mention E820 in docs for UnknownBios</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/469">release v0.11.8</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/466">copy more PML4 entries</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/474">Convert LF to CRLF when writing to serial port</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/478">Update x86_64</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/479">release v0.11.9</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Ollrogge">@Ollrogge</a>, <a rel="external" href="https://github.com/ChocolateLoverRaj">@ChocolateLoverRaj</a>, and <a rel="external" href="https://github.com/Makonede">@Makonede</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1456">chore(config): migrate renovate config</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1455">uefi: Deny clippy::ref_as_ptr</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1459">Move the UnicodeCollation protocol definition to <code>uefi-raw</code> and use it from <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1454">Use ovmf-prebuilt</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1463">xtask: Update OVMF prebuilts</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1465">uefi-raw: Drop unused dependency on ptr_meta</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1464">Fix <code>cargo xtask fmt --check</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1467">Fix minor typo in protocols.md</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1469">Add TCG protocols to <code>uefi-raw</code> and use them from <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1468">Mention to turn off secure boot.</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1483">Clean up some use of unsafe in MemoryMapRefMut</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1457) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.27.0](https://github.com/rust-osdev/uefi-rs/pull/1460) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1461) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.27.3](https://github.com/rust-osdev/uefi-rs/pull/1471) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1475) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1479) -->
<!-- - [chore(deps): update codecov/codecov-action action to v5](https://github.com/rust-osdev/uefi-rs/pull/1478) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1482) -->
<p>Thanks to <a rel="external" href="https://github.com/diekmann">@diekmann</a> for their contribution!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/101">ovmf-prebuilt: Update readme</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/102">release: 0.2.1</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/105) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/106) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/107) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/109) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/110) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/111) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/112) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/113) -->
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/36">feat(mmio): add <code>new_with_stride</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/kouchekiniad">@kouchekiniad</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<span class="gray">
<p><em>No projects were proposed for this section this month.</em></p>
</span>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: October 2024</title>
            <pubDate>Thu, 14 Nov 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-10/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-10/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-10/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-10/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (October 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-241031/">This Month in Redox - October 2024</a></li>
<li><a rel="external" href="https://lwn.net/Articles/992055/">Smart pointers for the kernel</a></li>
<li><a rel="external" href="https://lwn.net/Articles/993337/">On Rust in enterprise kernels</a></li>
<li><a rel="external" href="https://chadaustin.me/2024/10/intrusive-linked-list-in-rust/">Unsafe Rust Is Harder Than C</a></li>
<li><a rel="external" href="https://github.com/dtolnay/thiserror/releases/tag/2.0.0">Version <code>v2.0.0</code> of <code>thiserror</code> released with <code>no_std</code> support</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129248">Taking a raw ref (<code>&amp;raw (const|mut)</code>) of a deref of pointer (<code>*ptr</code>) is always safe</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129884">mark some target features as 'forbidden' so they cannot be (un)set with <code>-Ctarget-feature</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129935">make <code>unsupported_calling_conventions</code> a hard error</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1418">uefi-macros: Require that the entry function takes zero args</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1417">uefi: Delete the deprecated <code>uefi::table::{boot,system}</code> modules</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1421">uefi: Derive Eq/PartialEq for GptPartitionEntry</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1422">uefi: Add CStr16 conversions from slices with interior nuls</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1424">uefi: Improve the VariableKey type and iterator</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1429">Update timeline section of funcs_migration.md</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1423">xtask: Add action to generate a code coverage report</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1439">nix: add cargo-llvm-cov to nix shell + niv update</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1440">Codecov configuration updates</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1442">Move DeviceType and DeviceSubType enums to uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1445">Add device path node types to uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1446">release: uefi-raw-0.9.0, uefi-macros-0.17.0, uefi-0.33.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1448">Increase MSRV to 1.79</a></li>
</ul>
<!-- - [fix(deps): update rust crate clap to v4.5.19](https://github.com/rust-osdev/uefi-rs/pull/1408) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1427) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.25.0](https://github.com/rust-osdev/uefi-rs/pull/1425) -->
<!-- - [chore(deps): update cachix/install-nix-action action to v30](https://github.com/rust-osdev/uefi-rs/pull/1428) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.26.0](https://github.com/rust-osdev/uefi-rs/pull/1432) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1433) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1434) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1437) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1444) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.26.8](https://github.com/rust-osdev/uefi-rs/pull/1449) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1451) -->
<!-- - [fix(deps): update rust crate fs-err to v3](https://github.com/rust-osdev/uefi-rs/pull/1452) -->
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/501">Remove stabilized <code>const_mut_refs</code> feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/502">Fix clippy warnings</a></li>
</ul>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>pci_types</code> library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/36">Add set bus number funcs</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/ZR233">@ZR233</a> for their contributions!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/92">Implement ovmf-prebuilt library</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/93">Add release workflow</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/96">release: 0.2.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/98">release: 0.2.0 (take two)</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/89) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/90) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/91) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/95) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/97) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/99) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/100) -->
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><em>Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and
the contained information tags. Usable in no_std environments, such as a kernel.
An optional builder feature also allows the construction of the corresponding
structures.</em></p>
<p>We merged the following PRs this month:</p>
<!-- - [build(deps): bump crate-ci/typos from 1.24.3 to 1.25.0](https://github.com/rust-osdev/multiboot2/pull/242) -->
<!-- - [build(deps): bump cachix/install-nix-action from V27 to 29](https://github.com/rust-osdev/multiboot2/pull/241) -->
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/245">multiboot2: various small fixes and doc improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/246">multiboot2: bug fixes</a></li>
</ul>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/222">Add <code>from_rsdt</code> method for <code>AcpiTables</code>.</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Hsy-Intel">@Hsy-Intel</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<p><em>No updates were proposed for this section this month.</em></p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: September 2024</title>
            <pubDate>Mon, 07 Oct 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-09/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-09/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-09/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-09/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (September 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/release-0.9.0/">Redox OS 0.9.0</a>
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-240930/">This Month in Redox OS - September 2024</a></li>
</ul>
</li>
<li><a rel="external" href="https://thehackernews.com/2024/09/googles-shift-to-rust-programming-cuts.html?m=1">Google's Shift to Rust Programming Cuts Android Memory Vulnerabilities by 68%</a></li>
<li><a rel="external" href="https://binsider.dev/">Binsider: new tool to analyze ELF binaries with a user-friendly TUI</a></li>
<li>Rust in the Linux Kernel
<ul>
<li><a rel="external" href="https://lwn.net/SubscriberLink/990489/eab6106fa595052e/">Best practices for error handling in kernel Rust</a></li>
<li><a rel="external" href="https://lwn.net/SubscriberLink/990619/cb5f47f5d88818e4/">Resources for learning Rust for kernel development</a></li>
<li><a rel="external" href="https://lwn.net/SubscriberLink/991062/b0df468b40b21f5d/">Committing to Rust in the kernel</a></li>
</ul>
</li>
<li><a rel="external" href="https://wegmueller.it/blog/posts/2024-09-02-rust-on-illumos">Rust in illumos</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1fhdi28/i_compiled_rust_code_to_nintendo_gameboy/">I compiled Rust code to Nintendo Gameboy!</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1fs798t/rust_for_android/">Rust for Android</a></li>
<li><a rel="external" href="https://tweedegolf.nl/en/blog/137/rust-is-rolling-off-the-volvo-assembly-line">Rust is rolling off the Volvo assembly line</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://jack.wrenn.fyi/blog/safety-goggles-for-alchemists/">Safety Goggles for Alchemists: The Path Towards Safer Transmute</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129897">Deprecate -Csoft-float because it is unsound (and not fixable)</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129759">Stabilize <code>const_refs_to_static</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129195">Stabilize &amp;mut (and *mut) as well as &amp;Cell (and *const Cell) in const</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/126452">Implement raw lifetimes and labels (<code>'r#ident</code>)</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><em>Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and
the contained information tags. Usable in no_std environments, such as a kernel.
An optional builder feature also allows the construction of the corresponding
structures.</em></p>
<p><a href="https://rust-osdev.com/this-month/2024-08">Last month</a>, we talked about the major milestone of the <code>v0.22</code>
release of the <code>multiboot2</code> crate, where all Undefined Behaviour (UB) and a
bunch of safety and memory issues have been removed / fixed. After a short
grace-period of one month, we now yanked all prior releases. As all of them
contain UB, sensitive low-level software can break in subtle ways.</p>
<p>We hope that all users can have a smooth migration to <code>v0.22</code> or above
(with Rust 1.70 from June 2023 as MSRV). If there are problems, we
are happy to temporarily unyank certain versions or create a <code>v0.22.x</code>
with a lower MSRV. We can discuss this
<a rel="external" href="https://github.com/rust-osdev/multiboot2/issues/237">here</a>.</p>
<p>Further, we released <code>v0.23</code> which contains dependency bumps and missing
tags. Specifically:</p>
<ul>
<li>ApmTag</li>
<li>BootdevTag</li>
<li>NetworkTag</li>
</ul>
<p>Please find more in the <a rel="external" href="https://github.com/rust-osdev/multiboot2/blob/main/multiboot2/CHANGELOG.md">changelog</a>.</p>
<p>We merged the following PRs this month:</p>
<!-- - [build(deps): bump crate-ci/typos from 1.23.6 to 1.24.3](https://github.com/rust-osdev/multiboot2/pull/230) -->
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/231">crate: fix latest clippy nightly complains</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/229">multiboot2: add missing tags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/232">Replaces dead link home page multiboot2-header package definition</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/235">multiboot2: streamline getters and public tags()</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/236">multiboot2-common: improve documentation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/233">workspace: prepare updates</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/239">talk about yanked versions in changelog files</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/240">multiboot2-common: improve README and diagrams</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/filiplajszczak">@filiplajszczak</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1389">Fix unused warnings if log-debugcon is not enabled</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1390">Add uefi::{boot,runtime,system} modules to the prelude</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1391">uefi: Add panic doc to uefi::helpers::init</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1392">uefi: Add uefi::runtime::variable_exists</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1396">release: uefi-raw-0.8.0, uefi-macros-0.16.0, uefi-0.32.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1397">Update the hello-world tutorial</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1398">uefi: Delete the deprecated helpers::system_table function</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1399">Drop FileSystem conversion from table::boot::ScopedProtocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1405">test-runner: Remove BootServices from many protocol tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1404">Delete deprecated RuntimeServices struct</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1406">test-runner: Remove BootServices from remaining proto tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1410">Fix handling of a null interface pointer in <code>boot::open_protocol</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1415">test-runner: Remove remaining tests for deprecated table types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1416">uefi: Delete deprecated allocator functions</a></li>
</ul>
<!-- - [test-runner: Remove accidental debug log](https://github.com/rust-osdev/uefi-rs/pull/1412) -->
<!-- - [nix/niv: update formatter (nixpkgs-fmt is deprecated)](https://github.com/rust-osdev/uefi-rs/pull/1395) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.24.3](https://github.com/rust-osdev/uefi-rs/pull/1387) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1388) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.24.5](https://github.com/rust-osdev/uefi-rs/pull/1393) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1394) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1402) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.24.6](https://github.com/rust-osdev/uefi-rs/pull/1407) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1409) -->
<!-- - [chore(deps): update dependency ubuntu to v24](https://github.com/rust-osdev/uefi-rs/pull/1411) -->
<!-- - [chore(deps): update cachix/install-nix-action action to v29](https://github.com/rust-osdev/uefi-rs/pull/1413) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1414) -->
<!-- - [fix(deps): update rust crate regex to v1.11.0](https://github.com/rust-osdev/uefi-rs/pull/1420) -->
<!-- - [fix(deps): update rust crate syn to v2.0.79](https://github.com/rust-osdev/uefi-rs/pull/1419) -->
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a></span></p>
<p>The <code>xhci</code> crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/174">removed deprecated clippy check option</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/dbydd">@dbydd</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/221">aml_tester:Make cli print more pretty</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/220">Ignore <code>MultiprocessorWakeup</code> when parse interrupt model</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jokemanfire">@jokemanfire</a>, and <a rel="external" href="https://github.com/Hsy-Intel">@Hsy-Intel</a> for their contributions!</p>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>pci_types</code> library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/34">Match the output of lspci in the PciAddress Display impl</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/bjorn3">@bjorn3</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<p><em>No updates were proposed for this section this month.</em></p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: August 2024</title>
            <pubDate>Wed, 04 Sep 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-08/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-08/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-08/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-08/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (August 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://vt.social/@lina/113056457969145576">Asahi Lina on how Rust helps with API docs in the Linux kernel</a></li>
<li><a rel="external" href="https://arstechnica.com/gadgets/2024/08/you-can-kick-the-alpha-tires-on-system76s-cosmic-a-new-linux-desktop/">You can kick the alpha tires on System76’s Cosmic, a new Linux desktop</a></li>
<li><a rel="external" href="https://github.com/lvkv/whenfs">WhenFS: a Rust FUSE filesystem for your Google Calendar</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1epkro0/status_update_on_charlotteos_a_postunix_operating/">Status update on CharlotteOS: a post-unix operating system written in Rust and assembly language</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129091">add Box::as_ptr and Box::as_mut_ptr methods</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/127921">Stabilize unsafe extern blocks (RFC 3484)</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/128570">Stabilize <code>asm_const</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/128771">Stabilize <code>unsafe_attributes</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/127679">Stabilize raw_ref_op (RFC 2582)</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/122049">Promote riscv64gc-unknown-linux-musl to tier 2</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129559">float types: document NaN bit pattern guarantees</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/129401">Partially stabilize feature(new_uninit)</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><em>Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and
the contained information tags. Usable in no_std environments, such as a kernel.
An optional builder feature also allows the construction of the corresponding
structures.</em></p>
<p>🎉 We are happy to announce release <code>v0.22</code> of the <code>multiboot2</code> crate. This is a
<strong>major step forward</strong> as all Undefined Behaviour (UB) and a bunch of safety and
memory issues have been removed / fixed. 🎉 Now, all unit tests (and there are
many) <strong>pass Miri</strong>! This was possible due to massive internal refactorings done
in <a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/226">#226</a> and <a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/227">#227</a>.</p>
<p>The quite complex logic to parse all these structures <strong>safe and correctly</strong>
has been moved to a new <a rel="external" href="https://docs.rs/multiboot2-common"><code>multiboot2-common</code></a>
crate. This way, the <a rel="external" href="https://crates.io/crates/multiboot2-header"><code>multiboot2-header</code></a>
crate can also leverage the new abstractions. A comprehensive writeup about why
the parsing of Multiboot2 structures and typing them correctly in Rust is much
more complex than one initially might think is written down in
<a rel="external" href="https://docs.rs/multiboot2-common"><code>lib.rs</code> of <code>multiboot2-common</code></a>.</p>
<p><code>multiboot2-header</code> also got a new release <code>v0.5</code> and can now be considered
safe and free of UB when parsing the corresponding structures. The internal
refactorings only slightly leak to the public interfaces of <code>multiboot2</code>
and <code>multiboot2-header</code>.</p>
<p>Read more:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/blob/b95b73508925b5484a0cf531a45c9c9ce555d560/multiboot2/Changelog.md">Changelog of <code>multiboot2</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/blob/b95b73508925b5484a0cf531a45c9c9ce555d560/multiboot2-header/Changelog.md">Changelog of <code>multiboot2-header</code></a></li>
</ul>
<details>
<summary>Background - Read More</summary>
<p>The crate grew historically without a centralized design or approach how to work
with memory and pointers. Therefore, many UB way unintentionally created. We
are happy to get lack of the technical debt. Nevertheless, thanks to everyone
who contributed over the years - sorry if we had to rewrite your code in this
one! :)</p>
</details>
<h3 id="uefi"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p><code>uefi</code> makes it easy to develop Rust software that leverages safe, convenient,
and performant abstractions for UEFI functionality. Recently, we released
version <code>v0.31</code> with some notable changes:</p>
<ol>
<li>We introduced a completely new API to access boot and runtime services</li>
<li>We reorganized the MemoryMap-related types.</li>
<li>We reorganized and improved the documentation, and also added documentation
about how the <code>std</code> implementation for UEFI targets compares to <code>uefi</code> and
how both can be used together.</li>
</ol>
<h4 id="1-new-api-freestanding-functions-api-change">1. New API: Freestanding Functions API Change</h4>
<p>We are planning a massive API change and introduced a new replacement API in
release <code>v0.31</code>. The old API co-exists and will be marked as
<code>#[deprecated]</code> in <code>0.32</code>. The new API will make it easier to call boot or
runtime services without having to pass <code>&amp;BootServices</code> around all the time.</p>
<p>The typical use-case of our library users is to write a UEFI bootloader
application that heavily leverages boot services. Then control is handed over to
the next stage, which is typically the kernel of an OS. Boot services are
usually exited either just prior to launching the kernel or by the kernel
itself. In any case, the UEFI application spends almost all of its time with
boot services active.</p>
<p>Although the old API design ensures via the type system that no boot
services can be called after they have been exited, the test of time has proven
that this adds unjustified complexity without bringing much real value add.</p>
<p>Instead, with the new API, which we provide <strong>additionally</strong> at this point,
one can use freestanding functions which are behind the new modules:</p>
<ul>
<li><code>uefi::system</code>: is a new module that provides freestanding functions for
accessing fields of the global system table.</li>
<li><code>uefi::boot</code>:
is a new module that provides freestanding functions for boot services using
the global system table.</li>
<li><code>uefi::runtime</code>: is a new module that provides freestanding functions for
runtime services using the global system table.</li>
</ul>
<p>The freestanding functions itself are close to the originals ones but without
<code>&amp;BootServices</code> or <code>&amp;RuntimeServices</code> parameters, as you can see for example
<a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1344/files#diff-46f1e3c04d719fff471faf35c4d218430e1d664ac0a0fab9d2c15870c2d0f066">here</a>.</p>
<p>The new API design solves API inconsistencies and restrictions already existing
so far, and makes the overall handling a lot easier. This comes with the costs
that functions may panic, if the boot services were exited but one tries to use
them. However, the massive API simplification justifies this.</p>
<p>Find more and follow the progress and discussions on:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/issues/893#issuecomment-2241610633">the GitHub Issue</a>.</li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/blob/main/docs/funcs_migration.md">The function Migration Guide</a></li>
</ul>
<h4 id="2-memory-map-refactoring">2. Memory Map Refactoring</h4>
<p>TL;DR: What used to return <code>MemoryMap&lt;'buf&gt;</code> in the API, now returns
<code>MemoryMapOwned</code>. Additionally, you can parse a chunk of memory using
<code>MemoryMapRef</code> or <code>MemoryMapRefMut</code>.</p>
<p>We put significant effort into refactoring our abstractions for the UEFI memory
map. These started in release v0.29 and were finalized in release v0.31.
Instead of one <code>MemoryMap&lt;'buf&gt;</code> type, we now have the traits <code>MemoryMap</code> and
<code>MemoryMapMut</code> along with the implementations <code>MemoryMapRef</code>, <code>MemoryMapRefMut</code>,
and <code>MemoryMapOwned</code>. It is recommended to work with the specific
implementations, as the main purpose for the traits is only to enforce a
consistent API for these three implementations. This gives users the
flexibility to cover all possible use cases one can have with an UEFI memory
map. Read more:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1175">#1175</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1251">#1251</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1240">#1240</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1263">#1263</a></li>
</ul>
<p>In any case, obtaining the memory map from UEFI is hidden behind the
public API of the crate, but we made it very easy to read/parse it in all
possible scenarios!</p>
<h4 id="3-documentation-reorganization">3. Documentation Reorganization</h4>
<p>We put notable work into our README and <code>lib.rs</code> files to improve the
structure of our documentation. The main value-add and improvement is that we
clearly, directly, and precisely talk about:</p>
<ul>
<li>What is <code>uefi</code>?</li>
<li>Which problems does it solve?</li>
<li>How can it be used?</li>
<li>How does it compare to the ecosystem, such as <code>std</code> for Rust targets?</li>
</ul>
<p>To see an example how <code>uefi</code> and <code>std</code> can be used together, please head to
<a rel="external" href="https://github.com/rust-osdev/uefi-rs/tree/main/uefi-std-example">our repository</a>.</p>
<h4 id="other">Other</h4>
<p>There were also a ton of other interesting fixes, changes, and additions!
Check out our <a rel="external" href="https://github.com/rust-osdev/uefi-rs/blob/main/uefi/CHANGELOG.md">Changelog</a>.</p>
<p>We merged the following PRs this month:</p>
<details><summary>Click to expand</summary>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1276">boot: Add freestanding version of raise_tpl</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1278">boot: Add freestanding connect_controller and disconnect_controller</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1279">nix/niv: update dependencies</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1283">boot: Add freestanding exit function</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1282">uefi: Fix lifetimes in device_path TryFrom&lt;&amp;[u8]&gt; impls</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1285">release: uefi-0.30.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1286">uefi: Add release data to 0.30.0 release</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1284">doc: unified catchy new Crate introduction [doc: 1/N]</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1280">boot: Add freestanding version of <code>create_event</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1289">Merge release-v0.30 branch into main</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1296">boot: Add freestanding stall</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1295">boot: Add freestanding check_event</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1290">doc: move misc stuff from README to lib.rs [doc: 2/N] </a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1299">Restore some memory exports to uefi::table::boot</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1302">Remove dead_code workarounds</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1301">runtime: Add freestanding set_virtual_address_map</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1298">Add freestanding set_timer and wait_for_event</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1300">Add freestanding {install,reinstall,uninstall}_protocol_interface functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1304">boot: Add freestanding close_event</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1306">boot: Add freestanding install_configuration_table</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1305">boot: Add freestanding version of protocols_per_handle</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1308">misc small improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1310">boot: Add freestanding test_protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1311">boot: Add freestanding set_watchdog_timer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1312">boot: Add freestanding memory_map</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1313">boot: Add freestanding create_event_ex</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1314">boot: Add freestanding get_handle_for_protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1315">Add doc on freestanding function migration</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1316">boot: Add freestanding locate_device_path</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1321">boot: Add freestanding locate_handle and find_handles</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1322">boot: Add freestanding get_image_file_system</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1325">boot: Add freestanding exit_boot_services</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1323">uefi: Add table::system_table_raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1324">boot: Add freestanding register_protocol_notify</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1291">doc: add comprehensive About section to lib.rs [doc: 3/N]</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1327">uefi: Drop BootServices arg from device path &lt;-&gt; text conversions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1328">Revert "uefi: Drop BootServices arg from device path &lt;-&gt; text conversions"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1329">Update funcs_migration doc</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1326">uefi: add BootPolicy type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1332">ci: cancel obsolete runs automatically + streamline</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1297">LoadFileProtocol and LoadFile2Protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1292">doc: Comparison to Ecosystem (including Rust std impl) [doc: 4/N]</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1330">release: uefi-macros-0.15.0, uefi-raw-0.7.0, uefi-0.31.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1338">uefi: Inline the template example into lib.rs doc</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1339">release: uefi-0.31.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1293">doc: Talk about Documentation Organization/Overview [doc: 5/N]</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1331">uefi std: add example and add book chapter</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1340">uefi: Drop BootServices arg from device path &lt;-&gt; text conversions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1342">test-runner: Convert all examples to new style</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1344">uefi: Drop BootServices arg from GraphicsOutput::modes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1343">Update the uefi::allocator module to use the global system table</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1294">doc: final README streamlining [doc: 6/6]</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1345">uefi: Drop BootServices arg from ComponentName::open</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1341">ci: release package check</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1347">book: Update protocols how-to to use the <code>boot</code> module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1346">uefi: Move various types to the <code>uefi::boot</code> module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1348">ci: Use <code>cargo xtask fmt --check</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1349">uefi: Move various types to the <code>uefi::runtime</code> module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1352">uefi: Make FileSystem work with both variants of ScopedProtocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1353">uefi: Fix compilation of minimal example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1350">uefi-macros: Rename generated entry arguments</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1351">book: Update boot_stages and tables</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1355">uefi: Drop args from main in the example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1354">uefi-macros: Use uefi::boot::set_image_handle</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1356">template: Drop args to main</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1357">uefi-macros: Use raw pointer for system table when generating args</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1358">uefi: Update logger to use the global system table</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1359">uefi: Update panic handler to use the global system table</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1365">uefi: Deprecate RuntimeServices</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1361">uefi: Use global system table in MemoryMapBackingMemory</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1360">uefi: Update println to use the global system table</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1368">uefi: Update FS docstring example code</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1369">uefi: Copy 'Accessing Protocols' docs to uefi::boot</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1367">uefi: Deprecate BootServices</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1370">uefi/mem: Update docs referring to BootServices</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1371">uefi: Update input protocol docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1372">uefi: Update ResetNotification protocol docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1373">uefi: Update LoadedImage protocol docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1374">uefi: Deprecate ancillary types in uefi::table::boot</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1376">uefi: Update pointer protocol docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1378">uefi: Deprecate table::{system_table_boot,system_table_runtime}</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1377">uefi: Remove BootServices from more docstrings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1380">uefi: Drop references to SystemTable from docstrings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1382">docs: Update timeline for the API migration</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1379">uefi: Deprecate SystemTable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1384">Revert "ci: check if crate can be packaged"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1385">uefi: Deprecate SystemTableView, Boot, and Runtime</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1383">Move PAGE_SIZE to uefi-raw and reexport from uefi boot modules</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1386">uefi: Clean up imports of uefi::table::runtime</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1277) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.23.6](https://github.com/rust-osdev/uefi-rs/pull/1287) -->
<!-- - [fix(deps): update rust crate regex to v1.10.6](https://github.com/rust-osdev/uefi-rs/pull/1288) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1319) -->
<!-- - [fix(deps): update rust crate serde_json to v1.0.124](https://github.com/rust-osdev/uefi-rs/pull/1318) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1333) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1336) -->
<!-- - [fix(deps): update rust crate syn to v2.0.76](https://github.com/rust-osdev/uefi-rs/pull/1335) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1364) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.24.1](https://github.com/rust-osdev/uefi-rs/pull/1366) -->
</details>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/453">Fixed "jc fail" instructions not working properly and updated README.md</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/spencer3035">@spencer3035</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/496">remove <code>#![feature(asm_const)]</code></a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<p><span class="gray">No projects updates were submitted this month.</span></p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: July 2024</title>
            <pubDate>Thu, 08 Aug 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-07/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-07/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-07/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-07/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (July 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<ul>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1ejukow/simplefatfs_a_filesystem_library_aimed_at/">simple-fatfs: A filesystem library aimed at embedded ecosystems</a></li>
<li>Redox OS: <a rel="external" href="https://www.redox-os.org/news/kernel-11/">Towards userspaceification of POSIX - part I: signal handling and IO</a></li>
<li><a rel="external" href="https://corrode.dev/podcast/s02e07-system76/">Jeremy Soller on OS Development, Legacy Code, Redox OS and the Future of Memory-Safe Languages (Podcast Interview)</a></li>
<li><a rel="external" href="https://www.codethink.co.uk/articles/2024/secure_bootloader/">Developing a cryptographically secure bootloader for RISC-V in Rust</a></li>
</ul>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/127921">Stabilize unsafe extern blocks (RFC 3484)</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/128284">Stabilize <code>offset_of_nested</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/127586">Add <code>#[must_use]</code> to some <code>into_raw*</code> functions</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/125834">treat <code>&amp;raw (const|mut) UNSAFE_STATIC</code> implied deref as safe</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/127755">Add NuttX based targets for RISC-V and ARM</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/127853"><code>#[naked]</code>: report incompatible attributes</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/127265">Fill out target-spec metadata for all targets</a></li>
</ul>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="virtio-spec-rs-new-project"><a rel="external" href="https://github.com/rust-osdev/virtio-spec-rs"><code>virtio-spec-rs</code></a> (new project!)</h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>virtio-spec</code> crate provides definitions from the Virtual I/O Device (VIRTIO) specification.
This project aims to be unopinionated regarding actual VIRTIO drivers that are implemented on top of this crate.</p>
<p>The origins of this crate are in <a rel="external" href="https://github.com/hermit-os/kernel">Hermit</a>.
Due to the need for correct foundational definitions from the Virtio spec that are easily reviewable and independent of the actual driver logic, this project was created from the ground up and without any intended bias towards Hermit.</p>
<p>Currently, definitions are available for split and packed virtqueues, for Virtio over MMIO and Virtio over PCI, and for the network, socket and file system devices.
Feature requests for additional devices are more than welcome!</p>
<h3 id="fuse-abi-new-project"><a rel="external" href="https://github.com/rust-osdev/fuse-abi"><code>fuse-abi</code></a> (new project!)</h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>fuse-abi</code> crate provides bindings to FUSE devices.
In motivation similar to that of <code>virtio-spec</code>, this project aims to provide correct foundational definitions for the FUSE kernel ABI.
It can even be used together with <code>virtio-spec</code> when creating a driver for the Virtio file system device.</p>
<p>This crate essentially brings <a rel="external" href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/fuse.h?h=v6.9"><code>#include &lt;linux/fuse.h&gt;</code></a> to Rust.
The code is autogenerated using <a rel="external" href="https://github.com/rust-lang/rust-bindgen"><code>bindgen</code></a>, ensuring the correctness of definitions.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1221">release: uefi-macros-0.14.0, uefi-raw-0.6.0, uefi-0.29.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1224">book: Publish the latest release instead of main</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1225">Add redirects for all the html files under HEAD</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1226">Drop SystemTable arg from uefi::helpers::init</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1227">uefi-macros: Allow zero-param function in the entry macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1228">uefi: Fix return value lifetime for register_protocol_notify</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1235">logger: Remove some unnecessary cfgs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1231">fix(deps): update rust crate syn to v2.0.70</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1239">uefi: _print more failsafe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1234">mem: introduce traits MemoryMap and MemoryMapMut</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1237">Add uefi::system module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1246">Add PcrEvent::new_in_box/PcrEventInputs::new_in_box</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1249">Add uefi::runtime module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1250">runtime: Add freestanding functions to get/set/delete UEFI variables</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1248">boot: Always impl Drop for MemoryMapBackingMemory</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1254">test-runner: Drop the memory map OOM loop</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1253">uefi-raw: Add more MemoryType constants</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1252">Add variable key functions to <code>uefi::runtime</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1251">uefi: mem: mem.rs -&gt; mem/mod.rs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1256">runtime: Add query_variable_info</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1261">Fix CI for Rust 1.80</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1259">Add capsule update functions to <code>uefi::runtime</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1255">Add uefi::boot module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1258">runtime: Add uefi::runtime::reset</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1240">cleanup/follow-up: memory_map</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1262">Move the global image handle to uefi::boot</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1269">Add <code>boot::locate_handle_buffer</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1270">boot: Add freestanding version of open_protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1272">boot: Add freestanding version of open_protocol_exclusive</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1263">Finalize memory_map module refactoring</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1273">Add <code>boot::{load_image, unload_image, start_image}</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1271">clippy: add use_self and const fn</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1274">clippy: streamline lints</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1275">ci: reorganize nightly CI jobs</a></li>
</ul>
<!-- - [fix(deps): update rust crate clap to v4.5.8](https://github.com/rust-osdev/uefi-rs/pull/1220) -->
<!-- - [chore(deps): update rust crate log to v0.4.22](https://github.com/rust-osdev/uefi-rs/pull/1219) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.23.1](https://github.com/rust-osdev/uefi-rs/pull/1232) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1233) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.23.2](https://github.com/rust-osdev/uefi-rs/pull/1242) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1245) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1257) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.23.5](https://github.com/rust-osdev/uefi-rs/pull/1265) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1267) -->
<!-- - [fix(deps): update rust crate heck to 0.5.0](https://github.com/rust-osdev/uefi-rs/pull/1268) -->
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/216">acpi: add support for SPCR table</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/00xc">@00xc</a> for their contributions!</p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/33">build(deps): update bitflags dependency to version 2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/34">feat: add <code>try_send_raw</code> and <code>try_receive</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h3 id="endian-num"><a rel="external" href="https://github.com/rust-osdev/endian-num"><code>endian-num</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>endian-num</code> crate provides the <code>Be</code> (big-endian) and <code>Le</code> (little-endian) byte-order-aware numeric types.</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/endian-num/pull/4">test: fix doctests for 32-bit and 16-bit pointer widths</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/endian-num/pull/5">chore: remove appendix from LICENSE-APACHE</a></li>
</ul>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/448">always cover at least the first 4 GiB of physical memory</a></li>
</ul>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/490">Ensure that Page actually implements Hash</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/492">don't use label starting with <code>1</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/491">Add size and len for PageRange, PhysFrameRange, PageRangeInclusive and PhysFrameRangeInclusive</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/495">fix testing</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Wasabi375">@Wasabi375</a> for their contribution!</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phip1611-bit-ops"><a rel="external" href="https://github.com/phip1611/bit_ops"><code>phip1611/bit_ops</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>I've recently created and published <a rel="external" href="https://github.com/phip1611/bit_ops"><code>bit_ops</code></a>.
It offers common bit-oriented operations on primitive integer types with a focus on
<code>no_std</code> and <code>const</code> compatibility. Unlike other crates that provide tooling to
create sophisticated high-level types with bitfields, the focus of <code>bit_ops</code> is
on raw primitive integer types.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: June 2024</title>
            <pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-06/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-06/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-06/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-06/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (June 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<ul>
<li><a rel="external" href="https://youtu.be/s-gxAsBTPxA?si=IAPJ25EYP-XxS_FB">Redox OS - Software Showcase #1</a>
<ul>
<li>This is our first showcase video, showing several programs running on Redox OS</li>
</ul>
</li>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-240630/">This Month in Redox - June 2024</a></li>
<li><a rel="external" href="https://github.com/JonasKruckenberg/k23">k23 - Experimental WASM Microkernel</a>
<ul>
<li>First announced at RustNL 2024, k23 is an experimental microkernel written in Rust that runs WebAssembly programs. Now Open Source!</li>
</ul>
</li>
</ul>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/115974">Split core's PanicInfo and std's PanicInfo</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/126732">Stabilize <code>PanicInfo::message()</code> and <code>PanicMessage</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/124482">Unsafe extern blocks</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/125606">Size optimize int formatting</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/126530">Add <code>f16</code> inline ASM support for RISC-V</a></li>
</ul>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1194">uefi: Stop enabling <code>error_in_core</code> feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1196">reorganize deps</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1199">uefi: Add TryFrom u8 slice to DevicePathHeader </a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1189">test-runner: Consistently use global image handle</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1197">uefi: Add TryFrom u8 slice to DevicePathNode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1188">Clean up duplicate global system table pointer in <code>uefi::helpers</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1202">uefi: make DevicePathHeader::try_from idiomatic</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1201">uefi: Add TryFrom u8 slice to DevicePath</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1203">uefi: re-export CapsuleFlags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1206">ci: Temporarily turn off warnings-as-errors for nightly CI jobs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1210">uefi: use UNSPECIFIED_TIMEZONE instead of magic number</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1211">uefi: Make TimeError more descriptive</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1187">Fix versions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1209">uefi-test-runner: speed up ploting of sierpinski triangle by updating changed pixel only</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1175">memory map: improvements to fight pitfalls (MemoryMap now owns the memory)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1214">uefi: simplify usage of Mode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1217">template: fix build failure</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1212">uefi: Add TryFrom&lt;&amp;[u8]&gt; for Time</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/LightAndLight">@LightAndLight</a>, <a rel="external" href="https://github.com/andre-braga">@andre-braga</a>, and <a rel="external" href="https://github.com/JeffLi01">@JeffLi01</a> for their contributions!</p>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1184) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.22.3](https://github.com/rust-osdev/uefi-rs/pull/1193) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1195) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.22.7](https://github.com/rust-osdev/uefi-rs/pull/1207) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1208) -->
<!-- - [nix/niv: update nixpkgs to nixos-24.05](https://github.com/rust-osdev/uefi-rs/pull/1213) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.22.9](https://github.com/rust-osdev/uefi-rs/pull/1215) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1218) -->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/446">Guard the lower 1MB of memory</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Wasabi375">@Wasabi375</a> for their contributions!</p>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>pci_types</code> library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/15">feat: accept <code>FnOnce</code> for updating commands</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/17">ci: add workflow</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/16">feat: don't truncate reserved bits in <code>CommandRegister</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/18">fix(breaking): clippy lints</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/19">style: update <code>rustfmt.toml</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/20">feat: derive additional traits for <code>CommandRegister</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/21">feat: add <code>EndpointHeader::update_interrupt</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/22">feat: don't take explicit references to <code>ConfigRegionAccess</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/23">feat: implement <code>Copy</code> for all types that already implement <code>Clone</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/24">fix: don't take explicit reference in <code>update_interrupt</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/27">Add method to get the address of any capability</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/28">Fix docs rendering for MsixCapability::set_enabled</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/32">feat: make <code>update_command</code> take <code>&amp;mut self</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/29">Add method to enable/disable function masking for MSI-X</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/25">Add unwrap_io and unwrap_mem convenience methods on Bar</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/26">Remove the function_exists method of ConfigRegionAccess</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/33">Support 64-bit addressing in MSI capabilities and improve uniformity with rest of library</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>, <a rel="external" href="https://github.com/bjorn3">@bjorn3</a>, and <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/489">constify PhysFrame functions</a></li>
</ul>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>volatile</code> crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/64">Release v0.6.0</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="nicholasbishop-ext4-view-rs"><a rel="external" href="https://github.com/nicholasbishop/ext4-view-rs"><code>nicholasbishop/ext4-view-rs</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>)</span></p>
<p>I've released a new Rust crate for reading ext4 filesystems. It's easy to use, with an API very similar to <a rel="external" href="https://doc.rust-lang.org/std/fs/index.html"><code>std::fs</code></a>. The crate is no-std compatible, but does require an allocator.</p>
<p>Note that by design this crate will remain read-only; writing to an ext4 filesystem is not a goal.</p>
<p>Thanks to <a rel="external" href="https://github.com/tedbrandston">@tedbrandston</a> for doing a ton of code review on this project!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: May 2024</title>
            <pubDate>Sat, 08 Jun 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-05/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-05/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-05/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-05/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (May 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/this-month-240531/">This Month in Redox - May 2024</a>: Redox is running COSMIC file manager, editor, and terminal now</li>
<li>Bachelor's Thesis: <a rel="external" href="https://db.in.tum.de/~ellmann/theses/finished/24/pirhonen_writing_an_nvme_driver_in_rust.pdf">Writing an NVMe Driver in Rust</a> (PDF)</li>
<li><a rel="external" href="https://github.com/carlos-al/windows-kernel-rs">Building an Async Runtime for the Windows Kernel</a></li>
<li><a rel="external" href="https://ferrous-systems.com/blog/ferrocene-24-05-0/">Ferrocene 24.05.0 now available for purchase</a></li>
<li><a rel="external" href="https://codspeed.io/blog/rust-1-78-performance-impact-of-the-128-bit-memory-alignment-fix">Rust 1.78: Performance Impact of the 128-bit Memory Alignment Fix</a></li>
<li><a rel="external" href="https://github.com/ogxd/gxhash">GxHash - an extremely fast hardware-accelerated non-cryptographic hashing algorithm</a> (zero dependencies, no_std compatible)</li>
<li>The Embedded Rustacean <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-19">Issue #19</a>, <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-20">Issue #20</a>, and <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-21">Issue #21</a></li>
</ul>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/121377">Stabilize <code>LazyCell</code> and <code>LazyLock</code></a> (<code>LazyCell</code> is available in <code>no_std</code>)</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/125951">Stabilize <code>error_in_core</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/125023">Add <code>x86_64-unknown-linux-none</code> target</a> (freestanding linux binaries without <code>libc</code> dependency)</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/125011">Add <code>opt-for-size</code> core lib feature flag</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/125884">Implement feature <code>integer_sign_cast</code></a></li>
</ul>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="endian-num-new-project"><a rel="external" href="https://github.com/rust-osdev/endian-num"><code>endian-num</code></a> (new project!)</h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/mkroening">@mkroening</a></span></p>
<p>The <code>endian-num</code> crate provides the <code>Be</code> (big-endian) and <code>Le</code> (little-endian) byte-order-aware numeric types.</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/endian-num/commit/000f86f5470401e4d0d8824ec976738fb8a35bb7">initial implementation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/endian-num/pull/1">docs: elaborate on differences to other crates</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/endian-num/pull/2">docs: refer to related crates via docs.rs</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for creating and maintaining this crate!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1159">Fix risc target_arch cfg</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1161">Match MaximumCapsuleSize to UEFI spec</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1162">Add RuntimeServices::update_capsule</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1166">Add RuntimeServices::query_capsule_capabilities</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1168">Note about feature flags for uefi book</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1173">uefi-raw: misc</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1174">mem: clarify confusion around MemoryDescriptor</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1172">uefi/helpers: logger logs to debugcon device</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1156">Add basic API for a global system table</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1176">uefi: BootServices::allocate_pool now returns NonZero<u8> instead of *mut u8</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1183">Fix uefi-macros trybuild test</a></li>
</ul>
<!-- - [chore(deps): update crate-ci/typos action to v1.21.0](https://github.com/rust-osdev/uefi-rs/pull/1158) -->
<!-- - [chore(deps): update rust crate trybuild to v1.0.93](https://github.com/rust-osdev/uefi-rs/pull/1157) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1165) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1171) -->
<!-- - [fix(deps): update rust crate anyhow to v1.0.86](https://github.com/rust-osdev/uefi-rs/pull/1164) -->
<!-- - [fix(deps): update rust crate itertools to 0.13.0](https://github.com/rust-osdev/uefi-rs/pull/1179) -->
<!-- - [fix(deps): update rust crate nix to 0.29.0](https://github.com/rust-osdev/uefi-rs/pull/1180) -->
<!-- - [chore(deps): update cachix/install-nix-action action to v27](https://github.com/rust-osdev/uefi-rs/pull/1181) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1182) -->
<p>Thanks to <a rel="external" href="https://github.com/stillinbeta">@stillinbeta</a> and <a rel="external" href="https://github.com/andre-braga">@andre-braga</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/439">Fix doc comment and error message only referencing the BIOS but used for UEFI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/444">Ensure all page table frames are mapped as writable</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/fmckeogh">@fmckeogh</a> and <a rel="external" href="https://github.com/Wasabi375">@Wasabi375</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/485">fix cfg related warnings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/486">merge master into next</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/484">add Mapper::clear to clear any page table entry regardless of present flag</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/488">fix warnings</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Wasabi375">@Wasabi375</a> for their contribution!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>multiboot2</code> crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/210">multiboot2: builder: Allow to specify SMBIOS tag multiple times</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/213">dev: misc improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/214">release</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/216">multiboot2: fix handling of efi memory map</a></li>
</ul>
<!-- - [build(deps): bump crate-ci/typos from 1.19.0 to 1.21.0](https://github.com/rust-osdev/multiboot2/pull/211) -->
<p>Thanks to <a rel="external" href="https://github.com/YtvwlD">@YtvwlD</a> for their contribution!</p>
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a></span></p>
<p>The <code>linked-list-allocator</code> crate provides a basic <code>no_std</code> allocator that builds a linked list from freed memory blocks and thus needs no additional data structures. We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/82">Fix warnings about <code>cfg(fuzzing)</code></a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="mkroening-free-list"><a rel="external" href="https://github.com/mkroening/free-list"><code>mkroening/free-list</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/mkroening">@mkroening</a>)</span></p>
<p>The <code>free-list</code> crate provides the <code>FreeList</code> type for managing virtual or physical memory.
Opposed to normal memory allocators, <code>FreeList</code> does not use pointers but page ranges.
It operates by keeping a list of free page ranges (hence the name) and allows allocating at user-provided ranges.
Instead of operating directly on the unallocated memory through a linked list, this free list uses statically allocated memory before dynamically allocating more memory to hold its elements.</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #F78C6C;">use</span><span style="color: #FFCB6B;"> free_list</span><span style="color: #89DDFF;">::{</span><span style="color: #FFCB6B;">FreeList</span><span style="color: #89DDFF;">,</span><span style="color: #FFCB6B;"> PageLayout</span><span style="color: #89DDFF;">};</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #C792EA;">let mut</span><span> free_list</span><span style="color: #89DDFF;"> =</span><span style="color: #FFCB6B;"> FreeList</span><span style="color: #89DDFF;">::&lt;</span><span style="color: #F78C6C;">16</span><span style="color: #89DDFF;">&gt;::</span><span style="color: #82AAFF;">new</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #F78C6C;">unsafe</span><span style="color: #89DDFF;"> {</span></span>
<span class="giallo-l"><span>    free_list</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">deallocate</span><span style="color: #89DDFF;">((</span><span style="color: #F78C6C;">0x1000</span><span style="color: #89DDFF;">..</span><span style="color: #F78C6C;">0x5000</span><span style="color: #89DDFF;">).</span><span style="color: #82AAFF;">try_into</span><span style="color: #89DDFF;">().</span><span style="color: #82AAFF;">unwrap</span><span style="color: #89DDFF;">()).</span><span style="color: #82AAFF;">unwrap</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">}</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">assert_eq!</span><span style="color: #89DDFF;">(</span><span>free_list</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">free_space</span><span style="color: #89DDFF;">(),</span><span style="color: #F78C6C;"> 0x4000</span><span style="color: #89DDFF;">);</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #C792EA;">let</span><span> layout</span><span style="color: #89DDFF;"> =</span><span style="color: #FFCB6B;"> PageLayout</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">from_size</span><span style="color: #89DDFF;">(</span><span style="color: #F78C6C;">0x4000</span><span style="color: #89DDFF;">).</span><span style="color: #82AAFF;">unwrap</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">assert_eq!</span><span style="color: #89DDFF;">(</span><span>free_list</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">allocate</span><span style="color: #89DDFF;">(</span><span>layout</span><span style="color: #89DDFF;">).</span><span style="color: #82AAFF;">unwrap</span><span style="color: #89DDFF;">(), (</span><span style="color: #F78C6C;">0x1000</span><span style="color: #89DDFF;">..</span><span style="color: #F78C6C;">0x5000</span><span style="color: #89DDFF;">).</span><span style="color: #82AAFF;">try_into</span><span style="color: #89DDFF;">().</span><span style="color: #82AAFF;">unwrap</span><span style="color: #89DDFF;">());</span></span></code></pre><h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: April 2024</title>
            <pubDate>Fri, 03 May 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-04/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-04/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-04/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-04/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (April 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://cyberus-technology.de/en/articles/testing-virtualization-stacks-utilizing-mini-kernels/">Testing Virtualization Stacks by Utilizing Mini Operating System Kernels</a> <br />
Multiple mini OS kernels help Cyberus Technology to investigate issues
related to complicated problems in virtualization stacks, such as never
delivered interrupts. Although the Cyberus Guest Tests are written in C++,
they help to find issues and problems in Cloud-Hypervisor,
<strong>a VMM written in Rust</strong>. For better debugging capabilities of the Guest
Tests, Cyberus Technology <a rel="external" href="https://github.com/cloud-hypervisor/cloud-hypervisor/pull/6012">upstreamed support for the Debug Console</a>
to Cloud Hypervisor, which is present since <code>v38</code>. The <a rel="external" href="https://github.com/cyberus-technology/guest-tests">source code of the Guest Tests is on GitHub</a>.</li>
<li><a rel="external" href="https://redox-os.org/news/this-month-240430/">Redox OS - April 2024 Report</a></li>
<li><a rel="external" href="https://lwn.net/SubscriberLink/970565/ac5ffc2e9ad20f1e/">Giving Rust a chance for in-kernel codecs</a></li>
<li>Video: <a rel="external" href="https://www.youtube.com/watch?v=hmQr4fq6sH0">From C to Rust: Bringing Rust Abstractions to Embedded Linux</a></li>
<li>The Embedded Rustacean <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-17">Issue #17</a> and <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-18">Issue #18</a></li>
<li><a rel="external" href="https://www.phoronix.com/news/LAVD-Scheduler-Linux-Gaming">Rust-Written LAVD Kernel Scheduler Shows Promising Results For Linux Gaming</a></li>
<li>Video: <a rel="external" href="https://www.youtube.com/watch?v=JHLfsWhDvz0">LinuxFest Northwest 2024: Meet COSMIC DE</a></li>
<li>New <a rel="external" href="https://github.com/pcwalton/offset-allocator"><code>offset-allocator</code></a> crate, providing a fast, simple, hard real time allocator
<ul>
<li>not <code>no_std</code> yet, but should be easy to port (only requires a <code>Vec</code>-like type)</li>
</ul>
</li>
<li><a rel="external" href="https://web.archive.org/web/20241006213624/https://traxys.me/riscv_os_buddy.html">Making an RISC-V OS (Part 3): Managing free memory</a></li>
<li><a rel="external" href="https://asterinas.github.io/">Asterinas</a>: a secure, fast, and general-purpose OS kernel written in Rust and compatible with Linux</li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/122470"><code>f16</code> and <code>f128</code> step 4: basic library support</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/104087">Stabilise <code>inline_const</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/117919">Introduce perma-unstable <code>wasm-c-abi</code> flag</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/123868">Stabilize <code>(const_)slice_ptr_len</code> and <code>(const_)slice_ptr_is_empty_nonnull</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/121419">Add <code>aarch64-apple-visionos</code> and <code>aarch64-apple-visionos-sim</code> tier 3 targets</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>volatile</code> crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/47">Add <code>VolatileRef::restrict</code> and <code>VolatilePtr::restrict</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/46">Add <code>VolatileRef::borrow</code> and <code>VolatileRef::borrow_mut</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/48">docs: remove unused <code>NonNull</code> imports</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/50">Add support for nested <code>map_field</code> operations</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/49">Add <code>#[derive(VolatileFieldAccess)]</code> for easy, access-limited field-based access to structs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/52">fix(Cargo.toml): add categories</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/51">ci: migrate away from unmaintained actions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/55">Enable all features and <code>doc_auto_cfg</code> on docs.rs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/53">Release v0.5.3</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/56">Fix warnings and deny warnings in CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/57">fix(macro): support <code>#[repr(align(N))]</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/59">fix(access): properly seal access traits</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/62">Release v0.5.4</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/63">Add a semver checks CI job</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/60">feat: introduce <code>RestrictAccess&lt;To&gt;</code> and generalize <code>restrict</code> to all access types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/61">feat: implement derive macro for all access types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/58">fix: add <code>#[must_use]</code> to volatile types, <code>read</code>, and <code>as_raw_ptr</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.
Recently, we deprecated the [<code>uefi-services</code>] crate and removed all usages from
the <a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi</code></a> repository. A new drop-in
replacement exists in <a rel="external" href="https://docs.rs/uefi/latest/uefi/helpers/index.html"><code>uefi::helpers</code></a>.</p>
<p>The test of time showed us that having a single crate with multiple cargo
features is a better and more productive way forward with less maintenance
burden - for users/consumers as well as maintainers.</p>
<p>Please find more information in:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1128">https://github.com/rust-osdev/uefi-rs/pull/1128</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1141">https://github.com/rust-osdev/uefi-rs/pull/1141</a></li>
</ul>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1109">Add timestamp protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1108">Replace some <code>as</code> casts</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1117">uefi: Add UnalignedSlice::as_ptr</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1118">Add device path text protocols to uefi-raw and re-use in uefi</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1119">uefi-services: Fix warning with <code>--no-default-features</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1120">uefi: Add more derives for Handle and Event</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1125">misc: nix/niv updates and typo updates</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1126">doc: update fs documentation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1127">doc: update README</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1128">Deprecate <code>uefi-services</code> and add <code>uefi::helpers</code> as replacement</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1134">Fix some warnings, and ensure CI catches them in the future</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1140">release: uefi-raw-0.5.2, uefi-0.28.0, uefi-services-0.25.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1142">build(deps): bump rustls from 0.22.2 to 0.22.4</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1141">Nuke uefi services from repository</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1116">[Misc] Add ResetNotification protocol. Add Misc to uefi-test-runner.</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1144">Minor import/export cleanups</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1143">uefi: Drop the panic-on-logger-errors feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1145">Replace <code>cstr16!</code> with a declarative macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1151">Replace <code>cstr8!</code> with a declarative macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1152">Remove xtask from MSRV build and update clap</a></li>
</ul>
<!-- - [fix(deps): update rust crate serde_json to v1.0.115](https://github.com/rust-osdev/uefi-rs/pull/1111) -->
<!-- - [chore(deps): update rust crate trybuild to v1.0.91](https://github.com/rust-osdev/uefi-rs/pull/1110) -->
<!-- - [fix(deps): update rust crate syn to v2.0.57](https://github.com/rust-osdev/uefi-rs/pull/1112) -->
<!-- - [chore(deps): update rust crate bitflags to v2.5.0](https://github.com/rust-osdev/uefi-rs/pull/1113) -->
<!-- - [fix(deps): update rust crate ucs2 to v0.3.3](https://github.com/rust-osdev/uefi-rs/pull/1122) -->
<!-- - [fix(deps): update rust crate syn to v2.0.58](https://github.com/rust-osdev/uefi-rs/pull/1121) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.20.8](https://github.com/rust-osdev/uefi-rs/pull/1132) -->
<!-- - [fix(deps): update rust crate anyhow to v1.0.82](https://github.com/rust-osdev/uefi-rs/pull/1133) -->
<!-- - [fix(deps): update rust crate quote to v1.0.36](https://github.com/rust-osdev/uefi-rs/pull/1136) -->
<!-- - [fix(deps): update rust crate proc-macro2 to v1.0.80](https://github.com/rust-osdev/uefi-rs/pull/1135) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.20.9](https://github.com/rust-osdev/uefi-rs/pull/1146) -->
<!-- - [fix(deps): update rust crate proc-macro2 to v1.0.81](https://github.com/rust-osdev/uefi-rs/pull/1147) -->
<!-- - [fix(deps): update rust crate syn to v2.0.60](https://github.com/rust-osdev/uefi-rs/pull/1149) -->
<!-- - [fix(deps): update rust crate serde_json to v1.0.116](https://github.com/rust-osdev/uefi-rs/pull/1148) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1150) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.20.10](https://github.com/rust-osdev/uefi-rs/pull/1153) -->
<!-- - [fix(deps): update rust crate ureq to v2.9.7](https://github.com/rust-osdev/uefi-rs/pull/1154) -->
<p>Thanks to <a rel="external" href="https://github.com/sky5454">@sky5454</a> for their contributions!</p>
<h3 id="ucs2-rs"><a rel="external" href="https://github.com/rust-osdev/ucs2-rs"><code>ucs2-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ucs2-rs/pull/21">Add <code>ucs2_cstr!</code> macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ucs2-rs/pull/22">release: 0.3.3</a></li>
</ul>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/213">AML: Allow Field in ToInteger (rebased)</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/rw-vanc">@rw-vanc</a> for their contribution!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/475">docs: fix and detect warnings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/474">docs: add aliases for <code>in{,b,w,l}</code> and <code>out{,b,w,l}</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/478">ci: migrate away from unmaintained actions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/479">chore: migrate from legacy <code>rust-toolchain</code> to <code>rust-toolchain.toml</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/477">test: replace <code>x86_64-bare-metal.json</code> with <code>x86_64-unknown-none</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/476">fix and detect warnings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/480">CI: Set <code>-Crelocation-model=static</code> in <code>RUSTFLAGS</code> for bootloader test job</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/482">silence warning about cast</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/483">Only enable instructions on <code>x86_64</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/435">CI: Fix macOS errors</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/436">[v0.9] Silence dead code warning</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/437">[v0.9] Rename <code>.cargo/config</code> to <code>.cargo/config.toml</code></a></li>
</ul>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>multiboot2</code> crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/208">misc: various improvements</a></li>
</ul>
<!-- - [build(deps): bump crate-ci/typos from 1.16.26 to 1.19.0](https://github.com/rust-osdev/multiboot2/pull/206)
- [build(deps): bump cachix/install-nix-action from 24 to 26](https://github.com/rust-osdev/multiboot2/pull/207)
- [build(deps): bump actions/cache from 3 to 4](https://github.com/rust-osdev/multiboot2/pull/200) -->
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="ratcornu-efs"><a rel="external" href="https://codeberg.org/RatCornu/efs">RatCornu/efs</a></h3>
<p><a rel="external" href="https://crates.io/efs"><code>efs</code></a> is a recently published <code>no-std</code> library which provides an OS and architecture independent implementation of some UNIX filesystems in Rust.</p>
<p>Currently only the <a rel="external" href="https://fr.wikipedia.org/wiki/Ext2">ext2 filesystem</a> is directly implemented, but I will soonly work on other filesystems!</p>
<p>It's still young so it may contain bugs, but it's hugely tested so that it does not happen.</p>
<p>Some of the features provided :</p>
<ul>
<li><code>no_std</code> support (enabled by default)</li>
<li>General interface for UNIX files and filesystems</li>
<li><code>read/write</code> regular files</li>
<li>retrieve, add and remove directory entries directly from a path and a current working directory.</li>
</ul>
<p>I hope you will find this useful! If you have any remark, idea or issue, do not hesitate to submit an issue!</p>
<h3 id="phip1611-tar-no-std"><a rel="external" href="https://github.com/phip1611/tar-no-std">phip1611/tar-no-std</a></h3>
<p><a rel="external" href="https://github.com/phip1611/tar-no-std"><code>tar-no-std</code></a> supports a relevant
subset of Tar archives to extract multiple files from a single Tar archive in
<code>no_std</code> environments with zero allocations. Recently, <code>v0.3.0</code> was released
with support for filenames with up to 256 characters (including the directory
path) and various bug fixes. Using fuzzing, a lot of pitfalls and sudden panics
could be removed in this release.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: March 2024</title>
            <pubDate>Wed, 10 Apr 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-03/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-03/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-03/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-03/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (March 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://axleos.com/an-irc-client-in-your-motherboard/">An IRC client in your motherboard</a></li>
<li><a rel="external" href="https://vmm.dev/en/rust/osinrust.md">octox: Writing a Unix-like OS in Rust</a></li>
<li><a rel="external" href="https://redox-os.org/news/this-month-240330/">This Month in Redox</a></li>
<li><a rel="external" href="https://redox-os.org/news/kernel-10/">Redox Kernel Improvements</a></li>
<li><a rel="external" href="https://github.com/vinc/moros/releases/tag/v0.10.3">MOROS 0.10.3</a></li>
<li><a rel="external" href="https://cliffle.com/blog/hubris-reply-fault/">The server chose violence: Hubris's oddest syscall</a></li>
<li><a rel="external" href="https://www.phoronix.com/news/Red-Hat-Nova-Rust-Abstractions">Red Hat's Long, Rust'ed Road Ahead For Nova As Nouveau Driver Successor</a></li>
<li><a rel="external" href="https://lwn.net/SubscriberLink/967049/0ffb9b9ed8940013/">A memory model for Rust code in the Linux kernel</a></li>
<li><a rel="external" href="https://apollolabsblog.hashnode.dev/embedded-rust-bluetooth-on-esp-ble-client">Embedded Rust Bluetooth on ESP: BLE Client</a></li>
<li><a rel="external" href="https://wapl.es/ethercrab-0-4-io-uring-derives-ethercat-distributed-clocks/">EtherCrab 0.4: Distributed Clocks, <code>io_uring</code>, Derives, Oh My</a></li>
<li>The Embedded Rustacean: <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-15">Issue 15</a> and <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-16">Issue 16</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/123085">Add basic trait impls for <code>f16</code> and <code>f128</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/121419">Add aarch64-apple-visionos and aarch64-apple-visionos-sim tier 3 targets</a></li>
<li><a rel="external" href="https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html">Changes to Rust's WASI targets</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rfcs/pull/3543">RFC: patchable-function-entry</a> was merged</li>
<li><a rel="external" href="https://github.com/rust-lang/rfcs/pull/3325">unsafe attributes RFC</a> completed FCP</li>
<li>FCP complete to stabilize <a rel="external" href="https://github.com/rust-lang/rust/issues/71146">raw slice len() method (slice_ptr_len, const_slice_ptr_len)</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/121948">stabilize ptr.is_aligned</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/121920">downgrade ptr.is_aligned_to crate-private</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/122379">transmute: caution against int2ptr transmutation</a></li>
<li>New RFC: <a rel="external" href="https://github.com/rust-lang/rfcs/pull/3594">Add realign_stack attribute to rustc</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/issues/115285"><code>c_unwind</code> full stabilization request: change in extern "C" behavior</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/208">AML: Correctly invoke <code>_SEG</code>,<code>_BBN</code>, and <code>_ADR</code> methods for PCI region accesses, plus assorted bits</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/202">acpi: Add <code>SdtHeaderIterator</code> to get all headers.</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/207">aml: add extra debug info on parsing error</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/211">AML: implement boolean field</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/fslongjin">@fslongjin</a> and <a rel="external" href="https://github.com/rw-vanc">@rw-vanc</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/464">miscellaneous improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/463">release v0.15.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/465">doc: added help on update_flags to get flags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/467">Feat: add constructor for <code>InterruptStackFrameValue</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/469">properly jump the address gap in CleanUp</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/471">expose DEBUG_STR more directly</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/472">add write_pcid_no_flush</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/473">release 0.15.1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/413">Implement function for creating a gdt in a const environment</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/uglyoldbob">@uglyoldbob</a>, <a rel="external" href="https://github.com/GZTimeWalker">@GZTimeWalker</a>, and <a rel="external" href="https://github.com/Sxmourai">@Sxmourai</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/431">Change gitter badge to zulip badge</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/428">avoid 32-bit relocation to <code>__BOOTLOADER_CONFIG</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/Freax13">@Freax13</a> for their contributions!</p>
<h3 id="ucs2-rs"><a rel="external" href="https://github.com/rust-osdev/ucs2-rs"><code>ucs2-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ucs2-rs/pull/16">Update Cargo.toml metadata</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ucs2-rs/pull/17">Add a short changelog</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ucs2-rs/pull/18">Add auto-release workflow</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ucs2-rs/pull/19">Set MSRV and add CI job to check it</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ucs2-rs/pull/20">Improve test coverage</a></li>
</ul>
<h3 id="pic8259"><a rel="external" href="https://github.com/rust-osdev/pic8259"><code>pic8259</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>pic_8259</code> crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs).</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pic8259/pull/6">Update x86_64 dependency to version 0.15.0</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/iTitus">@iTitus</a> for their contribution!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/39">Transition to a workspace</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/45">Add empty ovmf-prebuilt package</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/46">fix(deps): update rust crate clap to v4.5.4</a></li>
</ul>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>volatile</code> crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/41">Implement some useful traits</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/44">Fix clippy warning about clone implementation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/45">Fix build with <code>very_unstable</code> feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/42">Remove <code>Sized</code> requirement for <code>Send</code> and <code>Sync</code> on <code>VolatileRef</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/nspin">@nspin</a> and <a rel="external" href="https://github.com/kadiwa4">@kadiwa4</a> for their contributions!</p>
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a></span></p>
<p>The <code>linked-list-allocator</code> crate provides a basic <code>no_std</code> allocator that builds a linked list from freed memory blocks and thus needs no additional data structures. We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/81">Remove stabilized feature</a></li>
</ul>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<!--
- [chore(deps): update rust crate log to v0.4.21](https://github.com/rust-osdev/uefi-rs/pull/1087)
- [fix(deps): update rust crate syn to v2.0.52](https://github.com/rust-osdev/uefi-rs/pull/1088)
- [chore(deps): update crate-ci/typos action to v1.19.0](https://github.com/rust-osdev/uefi-rs/pull/1090)
- [fix(deps): update rust crate tempfile to v3.10.1](https://github.com/rust-osdev/uefi-rs/pull/1089)
- [fix(deps): update rust crate proc-macro2 to v1.0.79](https://github.com/rust-osdev/uefi-rs/pull/1095)
- [fix(deps): update rust crate anyhow to v1.0.81](https://github.com/rust-osdev/uefi-rs/pull/1094)
- [chore(deps): update rust crate trybuild to v1.0.90](https://github.com/rust-osdev/uefi-rs/pull/1093)
- [fix(deps): update rust crate syn to v2.0.53](https://github.com/rust-osdev/uefi-rs/pull/1096)
- [chore(deps): update cachix/install-nix-action action to v26](https://github.com/rust-osdev/uefi-rs/pull/1098)
- [fix(deps): update rust crate walkdir to v2.5.0](https://github.com/rust-osdev/uefi-rs/pull/1102)
- [fix(deps): update rust crate os_info to v3.8.1](https://github.com/rust-osdev/uefi-rs/pull/1101)
- [fix(deps): update rust crate nix to 0.28.0](https://github.com/rust-osdev/uefi-rs/pull/1100)
- [fix(deps): update rust crate regex to v1.10.4](https://github.com/rust-osdev/uefi-rs/pull/1106)
- [fix(deps): update rust crate os_info to v3.8.2](https://github.com/rust-osdev/uefi-rs/pull/1105)

-->
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1086">uefi: Derive Hash for all char and string types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1085">uefi_raw: Add firmware_storage module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1068">Use auto-release from crates.io to release</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1091">uefi-services: Use "dep:" syntax</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1092">release: uefi-raw-0.5.1, uefi-0.27.0, uefi-services-0.24.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1103">Fix some new lints/warnings</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<p><span class="gray">No projects updates were submitted this month.</span></p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: February 2024</title>
            <pubDate>Thu, 07 Mar 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-02/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-02/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-02/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-02/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (February 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/porting-strategy/">Redox OS - Porting Strategy</a></li>
<li><a rel="external" href="https://redox-os.org/news/this-month-240229/">This Month in Redox</a></li>
<li><a rel="external" href="https://tockos.org/blog/2024/talking-tock-55/">Tock Compiles on Stable Rust!</a></li>
<li><a rel="external" href="https://web.archive.org/web/20240714023153/https://traxys.me/riscv_os_2.html">Making an RISC-V OS (Part 2): Kernel in virtual addresses</a></li>
<li>The Embedded Rustacean <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-13">Issue 13</a> and <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-14">Issue 14</a></li>
<li><a rel="external" href="https://lore.kernel.org/lkml/20240227215146.46487-1-daniel.almeida@collabora.com/">Linux Kernel: Rewrite the VP9 codec library in Rust</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/1amjknw/anouncing_stabby_300_and_rustconf_video_available/">Anouncing stabby 3.0.0</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/122018">only set noalias on Box with the global allocator</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/121728">Add stubs in IR and ABI for <code>f16</code> and <code>f128</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/121841"><code>f16</code> and <code>f128</code> step 2: intrinsics</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/110482">Add armv8r-none-eabihf target for the Cortex-R52</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/120468">Add a new <code>wasm32-wasip1</code> target to rustc</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/119616">Add a new <code>wasm32-wasi-preview2</code> target</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/117658">rename <code>ptr::invalid</code> -&gt; <code>ptr::without_provenance</code></a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/454">Fix data layout in custom target used for testing</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/456">optimize <code>from_page_table_indices</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/455">mark as 0.15 as beta release</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/457">Release v0.14.12</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/459">Fix release script</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/458">Merge next into master: releasing <code>v0.15.0-beta</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/460">Update data layout of test target for LLVM 18</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/462">optimize <code>Step</code> impl for <code>VirtAddr</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/464">Miscellaneous improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/463">Release v0.15.0</a></li>
</ul>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<!--
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1067)
- [chore(deps): update crate-ci/typos action to v1.18.0](https://github.com/rust-osdev/uefi-rs/pull/1066)
- [fix(deps): update rust crate itertools to v0.12.1](https://github.com/rust-osdev/uefi-rs/pull/1063)
- [fix(deps): update rust crate ureq to v2.9.4](https://github.com/rust-osdev/uefi-rs/pull/1065)
- [chore(deps): update crate-ci/typos action to v1.18.2](https://github.com/rust-osdev/uefi-rs/pull/1069)
- [fix(deps): update rust crate tempfile to v3.10.0](https://github.com/rust-osdev/uefi-rs/pull/1072)
- [fix(deps): update rust crate ureq to v2.9.5](https://github.com/rust-osdev/uefi-rs/pull/1070)
- [fix(deps): update rust crate syn to v2.0.49](https://github.com/rust-osdev/uefi-rs/pull/1075)
- [chore(deps): update dorny/paths-filter action to v3](https://github.com/rust-osdev/uefi-rs/pull/1078)
- [fix(deps): update rust crate ureq to v2.9.6](https://github.com/rust-osdev/uefi-rs/pull/1076)
- [fix(deps): update rust crate anyhow to v1.0.80](https://github.com/rust-osdev/uefi-rs/pull/1079)
- [fix(deps): update rust crate serde_json to v1.0.114](https://github.com/rust-osdev/uefi-rs/pull/1080)
- [fix(deps): update rust crate crates-index to v2.6.0](https://github.com/rust-osdev/uefi-rs/pull/1083)
- [fix(deps): update rust crate syn to v2.0.50](https://github.com/rust-osdev/uefi-rs/pull/1082)
-->
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1074">Add a method to create a MemoryMap from a raw buffer</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/bjorn3">@bjorn3</a> for their contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/409">Set <code>NO_EXECUTE</code> flag for all writable memory regions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/421">[v0.9] Fix data layout for custom targets for LLVM 18</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/422">[v0.9] Fix map errors during kernel loading</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/423">[v0.9] Fix: unify flags if multiple segments are mapped to same frame with different flags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/424">Fix invalid mapping to zero page caused by off-by-one bug</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/420">adapt data layout to match LLVM's</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/426">Release <code>v0.11.7</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/430">Remove unused paging imports</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/vinc">@vinc</a> and <a rel="external" href="https://github.com/tsatke">@tsatke</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<p><span class="gray">No projects updates were submitted this month.</span></p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: January 2024</title>
            <pubDate>Thu, 08 Feb 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2024-01/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2024-01/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2024-01/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2024-01/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (January 2024)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://redox-os.org/news/this-month-240131/">This Month in Redox</a></li>
<li><a rel="external" href="https://phip1611.de/blog/x86-kernel-development-relocatable-binaries/">x86 Kernel Development &amp; Relocatable Binaries – What I learned about Toolchains and Relocatable Code</a>
<ul>
<li>This post is roughly a summary of the obscure knowledge Philipp learned
about toolchains and relocatable code in the last couple of years with a
focus on relocatable x86_64 multiboot2 kernels for legacy BIOS boot.</li>
</ul>
</li>
<li>The Embedded Rustacean <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-11">Issue 11</a> and <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-12">Issue 12</a></li>
<li><a rel="external" href="https://fosdem.org/2024/">FOSDEM 2024</a>
<ul>
<li><a rel="external" href="https://fosdem.org/2024/schedule/event/fosdem-2024-3375-news-from-the-hermit-crab-from-soundness-foundations-to-gpu-virtualization/">News from the Hermit Crab — From Soundness Foundations to GPU Virtualization</a></li>
<li><a rel="external" href="https://fosdem.org/2024/schedule/event/fosdem-2024-1910-making-virtio-sing-implementing-virtio-sound-in-rust-vmm-project/">Making VirtIO sing - implementing virtio-sound in rust-vmm project</a></li>
<li><a rel="external" href="https://fosdem.org/2024/schedule/event/fosdem-2024-2985-the-case-for-a-virtual-rust-stateless-codec-driver/">The case for a virtual Rust stateless codec driver</a></li>
<li><a rel="external" href="https://fosdem.org/2024/schedule/event/fosdem-2024-3264-an-open-source-open-hardware-offline-finding-system/">An open-source, open-hardware offline finding system</a></li>
</ul>
</li>
<li><a rel="external" href="https://web.archive.org/web/20240619011057/https://traxys.me/riscv_os_setup.html">Making an RISC-V OS (Part 1): Project Setup</a></li>
<li><a rel="external" href="https://www.reddit.com/r/osdev/comments/1aeffha/looking_for_people_to_help_out_with_charlotteos/">Looking for people to help out with CharlotteOS (Beginners are welcome!)</a></li>
<li><a rel="external" href="https://fosstodon.org/@kernellogger/111741507899977461">The Linux kernel now contains the first useful component written in Rust</a></li>
<li><a rel="external" href="https://thenewstack.io/bpf-opens-a-door-to-linux-dynamic-scheduling-maybe-with-rust/">BPF Opens Door to Linux Extensible Scheduling (Maybe with Rust!)</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/118799">Stabilize single-field offset_of</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/116672">LLVM 18 x86 data layout update</a></li>
<li><a rel="external" href="https://github.com/rust-lang/cargo/pull/13257">cargo: Strip debuginfo when debuginfo is not requested</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/445">expose <code>Cr3::write_raw</code></a></li>
</ul>
<p>We also merged the following changes into the <code>next</code> branch, which will be released as <code>v0.15</code> soon:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/447">Update <code>next</code> branch with latest changes from <code>master</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/449">remove deprecated from_bits_unchecked functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/450">make <code>HandlerFuncType</code> unsafe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/451">Update docs to clarify new <code>set_handler_fn</code> behavior</a></li>
</ul>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following nightly fixes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/413">Fix data layout for stage 3 target</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/414">Release <code>v0.11.6</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/415">[v0.9] Fix data layout for <code>x86_64-bootloader</code> target</a>
<ul>
<li>Released as v0.9.24</li>
</ul>
</li>
</ul>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/206">Add <code>Debug</code> impl for <code>PhysicalMapping</code> even when <code>T</code> is not <code>Debug</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Spartan2909">@Spartan2909</a> for their contribution!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1046">Fix broken UEFI spec link in uefi-raw README.md</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1047">book: Add a page on building drivers</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1048">book: Add a link to rust's UEFI target docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1022">uefi-raw: Add LoadFileProtocol and LoadFile2Protocol</a></li>
</ul>
<!--
- [chore(deps): update crate-ci/typos action to v1.16.26](https://github.com/rust-osdev/uefi-rs/pull/1038)
- [fix(deps): update rust crate anyhow to v1.0.78](https://github.com/rust-osdev/uefi-rs/pull/1039)
- [fix(deps): update rust crate clap to v4.4.12](https://github.com/rust-osdev/uefi-rs/pull/1040)
- [fix(deps): update rust crate proc-macro2 to v1.0.73](https://github.com/rust-osdev/uefi-rs/pull/1041)
- [fix(deps): update rust crate anyhow to v1.0.79](https://github.com/rust-osdev/uefi-rs/pull/1043)
- [chore(deps): update rust crate trybuild to v1.0.88](https://github.com/rust-osdev/uefi-rs/pull/1042)
- [fix(deps): update rust crate clap to v4.4.13](https://github.com/rust-osdev/uefi-rs/pull/1044)
-->
<!--
- [chore(deps): update crate-ci/typos action to v1.17.1](https://github.com/rust-osdev/uefi-rs/pull/1051)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1053)
- [chore(deps): update cachix/install-nix-action action to v25](https://github.com/rust-osdev/uefi-rs/pull/1054)
-->
<!-- - [fix(deps): update rust crate clap to v4.4.17](https://github.com/rust-osdev/uefi-rs/pull/1050)
- [fix(deps): update rust crate crates-index to v2.5.0](https://github.com/rust-osdev/uefi-rs/pull/1052)
- [chore(deps): update crate-ci/typos action to v1.17.2](https://github.com/rust-osdev/uefi-rs/pull/1055)
- [chore(deps): update rust crate bitflags to v2.4.2](https://github.com/rust-osdev/uefi-rs/pull/1056)
- [fix(deps): update rust crate clap to v4.4.18](https://github.com/rust-osdev/uefi-rs/pull/1057)
- [fix(deps): update rust crate proc-macro2 to v1.0.78](https://github.com/rust-osdev/uefi-rs/pull/1058)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1062) -->
<p>Thanks to <a rel="external" href="https://github.com/gurry">@gurry</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phip1611-phipsboot"><a rel="external" href="https://github.com/phip1611/phipsboot"><code>phip1611/phipsboot</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>I'd like to announce my project PhipsBoot. 🎉 PhipsBoot is a relocatable x86_64
bootloader for legacy x86_64 boot written in Rust and assembly. It is intended
to be loaded by GRUB via Multiboot2, where it uncovers its main benefit: It is
relocatable in physical memory without having relocation information in the
ELF! It outsources a lot of complexity to GRUB which also better fits into
the ecosystem and makes it easier usable. The README contains more background
about why I have chosen to use GRUB instead of writing my own stage 1
bootloader.</p>
<p>This project combines a lot of toolchain and binary knowledge and experience I
collected and gained in recent years about legacy x86_64 boot. <strong>The main
contribution IMHO is how the binary is assembled and that the thing boots
with all the properties described in the README, but not the high-level
functionality itself.</strong></p>
<p>I am especially proud of the well-commented structure of the assembly files.
For example the whole page-table mappings are done IMHO very nicely even tho
it is assembly language. Also, I think it turned out quite cool how I configured
the linker script. I hope this can be a learning resource for others!</p>
<p>TL;DR: It is a learning ground and a reference for how to solve the relocation
problem with Multiboot2 and GRUB, as GRUB is not able to load DYN ELFs.</p>
<p>You have multiple options for testing it out:</p>
<ul>
<li><code>$ cloud-hypervisor --debug-console file=log.txt --kernel ./build/phipsboot.elf64</code> (using Xen PVH)</li>
<li><code>$ qemu-system-x86_64 -kernel ./build/phipsboot.elf32 -debugcon stdio</code> (using Multiboot 1)</li>
</ul>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1271">Update data layouts in target specifications</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1274">change some format errors for chinese edition minimal kernel</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1262">fix testing and paging introduction chapter errors in zh-CN translation</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1270">[Edition 3] fix a lil typo</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1269">[Edition 3] Fix typos in code for <code>embedded_graphics</code> crate in chapter 3</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1276">[Edition 3] Fix embedded_graphics code + typo in chapter 3</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1265">[Edition 3] Fix typo in chapter 2</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1266">[Edition 3] Fix formatting in chapter 2</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/acyanbird">@acyanbird</a>, <a rel="external" href="https://github.com/proudmuslim-dev">@proudmuslim-dev</a>, and <a rel="external" href="https://github.com/lachsdachs">@lachsdachs</a> for their contributions!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: December 2023</title>
            <pubDate>Fri, 05 Jan 2024 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-12/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-12/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-12/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-12/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (December 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<ul>
<li><a rel="external" href="https://github.com/moturus/motor-os">Motūrus OS</a> - a new Rust-based Operating System targeting virtual machines.</li>
<li><a rel="external" href="https://blog.lenot.re/a/introduction">Maestro is a Unix-like kernel and operating system written from scratch in Rust</a></li>
<li><a rel="external" href="https://github.com/vinc/moros/releases/tag/v0.10.2">MOROS 0.10.2</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/18j23d3/the_first_rust_driver_has_been_merged_into/">The first rust driver has been merged into netdev/net-next</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/18e6qrl/linus_on_rust_in_the_linux_kernel_december_2023/">Linus on Rust in the Linux kernel (December 2023)</a></li>
<li><a rel="external" href="https://lwn.net/Articles/954974/">Rust for Linux — in space</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/18infyx/a_no_std_client_for_postgresql/">A <code>no_std</code> client for PostgreSQL</a></li>
<li>The Embedded Rustacean: <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-8">Issue #8</a>, <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-9">Issue #9</a>, and <a rel="external" href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-10">Issue #10</a></li>
<li><a rel="external" href="https://github.com/stormshield/cargo-ft"><code>cargo-ft</code></a> (cargo filter target) is a cargo extension for specifying supported targets for a crate</li>
</ul>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<ul>
<li><a rel="external" href="https://github.com/rust-embedded/cortex-m/discussions/503">Advisory: Miscompilation with <code>opt-level="z"</code> on Cortex-M</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/118853">Add <code>core::intrinsics::simd</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/119276">Stabilize <code>ip_in_core</code> feature</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/117824">Stabilize <code>ptr::{from_ref, from_mut}</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/118908">Add all known <code>target_feature</code> configs to check-cfg</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/116892">Add <code>-Zfunction-return={keep,thunk-extern}</code> option</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/117758">Add lint against ambiguous wide pointer comparisons</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/119074">Add new tier 3 <code>aarch64-apple-watchos</code> target</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/117953">Add more SIMD platform-intrinsics</a></li>
</ul>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/407">Fix: Enable test runner again</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/408">Fix: Mark <code>ramdisk</code> as used in memory map</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/410">Release <code>v0.11.5</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/395">Embed bios and uefi binaries</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/411">Add a <code>take</code> method to <code>Optional</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mysteriouslyseeing">@mysteriouslyseeing</a> for their contribution!</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a></span></p>
<p>The <code>xhci</code> crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/160">Clarify the exact behavior of RW1C setters</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/167">PR for Misc Issue #164</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/168">Forgot to add a changelog for #167</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/170">A little more <code>Doorbell</code> renaming</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/171">Add an issue template</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/172">Changelog for #170</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/paulsohn">@paulsohn</a> for their contribution!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/5">Configure Renovate</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/15">Enable the HTTP build flag</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/16">renovate: Change stategy to update-lockfile</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/17">Update Rust crate anyhow to v1.0.78</a></li>
</ul>
<!--
- [Update actions/checkout action to v4](https://github.com/rust-osdev/ovmf-prebuilt/pull/7)
- [Lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/8)
- [Lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/9)
- [Lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/10)
- [Lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/13)
- [Lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/14)
- [Lock file maintenance](https://github.com/rust-osdev/ovmf-prebuilt/pull/18)
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1013">Add some new char and string convenience impls/methods</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1014">Simplify DevicePath <code>to_string</code> return type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1018">xtask: Allow unions in uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1019">uefi-raw: Add Ipv4Address, Ipv6Address, and MacAddress types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1020">uefi-raw: Add ServiceBindingProtocol and Dhcp4Protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1015">fs: Remove a couple debug logs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1021">uefi-raw: Add HttpProtocol, Ip4Config2Protocol, and TlsConfigurationProtocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1025">renovate: Change stategy to update-lockfile</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1027">xtask: Upgrade OVMF prebuilt</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1031">Fix logger connection after opening serial protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1032">uefi-raw: Add <code>IpAddress</code> type</a></li>
</ul>
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1017) -->
<!-- - [chore(deps): update cachix/install-nix-action action to v24](https://github.com/rust-osdev/uefi-rs/pull/1016) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.16.24](https://github.com/rust-osdev/uefi-rs/pull/1023) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1026) -->
<!-- - [chore(deps): update crate-ci/typos action to v1.16.25](https://github.com/rust-osdev/uefi-rs/pull/1028) -->
<!-- - [fix(deps): update rust crate syn to v2.0.41](https://github.com/rust-osdev/uefi-rs/pull/1029) -->
<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1030) -->
<!-- - [fix(deps): update rust crate anyhow to v1.0.76](https://github.com/rust-osdev/uefi-rs/pull/1034) -->
<!-- - [chore(deps): update rust crate trybuild to v1.0.86](https://github.com/rust-osdev/uefi-rs/pull/1033) -->
<!-- - [fix(deps): update rust crate proc-macro2 to v1.0.71](https://github.com/rust-osdev/uefi-rs/pull/1035) -->
<!-- - [fix(deps): update rust crate syn to v2.0.43](https://github.com/rust-osdev/uefi-rs/pull/1036) -->
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>pci_types</code> library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/10">Add functionality needed to initialize PCIe on RISC-V</a></li>
</ul>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/204">fix: issue #200 increment <code>local_nmi_line_count</code> and <code>processor_count</code> on X2APIC</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/ytakano">@ytakano</a> for their contributions!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>multiboot2</code> crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month:</p>
<!-- - [build(deps): bump crate-ci/typos from 1.16.23 to 1.16.24](https://github.com/rust-osdev/multiboot2/pull/194) -->
<!-- - [build(deps): bump crate-ci/typos from 1.16.24 to 1.16.25](https://github.com/rust-osdev/multiboot2/pull/196) -->
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/195">updating header to not include multiboot with alloc</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/197">prepare release multiboot2-header-v0.3.2</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/elbiazo">@elbiazo</a>for their contribution!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/444">CI: Run <code>semver-checks</code> using stable Rust</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: November 2023</title>
            <pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-11/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-11/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-11/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-11/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (November 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<ul>
<li><a rel="external" href="https://ferrous-systems.com/blog/officially-qualified-ferrocene/">Officially Qualified - Ferrocene</a></li>
<li><a rel="external" href="https://apollolabsblog.hashnode.dev/edge-iot-with-rust-on-esp-ntp">Edge IoT with Rust on ESP: NTP</a></li>
</ul>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<p>There weren't really any OS-related infrastructure updates this month, but there was some great progress on several upcoming language and tooling features that may also be of interest to OS development:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/117472">Stabilize C string literals</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/117968">Stabilize <code>ptr::addr_eq</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/117537">Feature gate enums in <code>offset_of</code></a></li>
</ul>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/986">Configure Renovate</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/990">uefi-raw: Add AbsolutePointerProtocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/991">Add SimpleFileSystemProtocol &amp; file types to <code>uefi-raw</code>, use those types from <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/992">uefi-raw: Add API guidelines</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/998">uefi-macros: Change uefi dev-dependency from version to path</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/997">Add per-package changelogs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/931">test-runner: Improve uninstall_protocol_interface example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/999">Release via Github Actions workflow</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1001">release: uefi-raw-0.5.0, uefi-macros-0.13.0, uefi-0.26.0, uefi-services-0.23.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1000">uefi-raw: Fill in [un]install_multiple_protocol_interfaces pointers</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1002">book: Use <code>cargo add</code> command</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/959">doc: update PUBLISHING.md</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/1008">uefi(data-types): allow <code>is_ascii</code> function on <code>Char16</code> and <code>CStr16</code></a></li>
</ul>
<!---
- [chore(deps): update crate-ci/typos action to v1.16.22](https://github.com/rust-osdev/uefi-rs/pull/988)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/989)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/993)
- [chore(deps): update crate-ci/typos action to v1.16.23](https://github.com/rust-osdev/uefi-rs/pull/1005)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1006)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1010)
- [nix: update rust-toolchain in shell](https://github.com/rust-osdev/uefi-rs/pull/1007)
- [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1012)
- [fix(deps): update rust crate itertools to 0.12.0](https://github.com/rust-osdev/uefi-rs/pull/1009)
--->
<p>Thanks to <a rel="external" href="https://github.com/RaitoBezarius">@RaitoBezarius</a> for their contributions!</p>
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a></span></p>
<p>The <code>linked-list-allocator</code> crate provides a basic <code>no_std</code> allocator that builds a linked list from freed memory blocks and thus needs no additional data structures. We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/80">fuzz: remove potential undefined behavior in chaos harness</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/00xc">@00xc</a> for their contribution!</p>
<h3 id="pic8259"><a rel="external" href="https://github.com/rust-osdev/pic8259"><code>pic8259</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>pic_8259</code> crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs).</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pic8259/pull/5">docs: Remove the redundant word and space</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/zoo868e">@zoo868e</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<p><span class="gray">No projects updates were submitted this month.</span></p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: October 2023</title>
            <pubDate>Mon, 06 Nov 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-10/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-10/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-10/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-10/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (October 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<ul>
<li><a rel="external" href="https://doi.org/10.1145/3623759.3624554">On the Challenge of Sound Code for Operating Systems</a>
<ul>
<li>An open access paper on common patterns of unsound abstractions in operating systems when the codebase or the programmers are more familiar with C than with Rust</li>
</ul>
</li>
<li><a rel="external" href="https://security.googleblog.com/2023/10/bare-metal-rust-in-android.html?m=1">Bare-metal Rust in Android</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/17lzdwt/the_binder_linux_driver_is_being_rewritten_in_rust/">The Binder Linux driver is being rewritten in Rust</a></li>
<li><a rel="external" href="https://nitter.net/dwizzzleMSFT/status/1720134540822520268?s=20">Microsoft is planning to make Rust a 1st class language across their engineering systems</a></li>
<li><a rel="external" href="https://en.wikipedia.org/wiki/BlueOS">Vivo Unveils BlueOS, Based on Rust Language</a></li>
</ul>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<p>There weren't really any OS-related infrastructure updates this month, but there was some great progress on several upcoming language and tooling features that may also be of interest to OS development:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/115822">Stabilize <code>async fn</code> and return-position <code>impl Trait</code> in trait</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/81746">Distribute <code>cg_clif</code> as rustup component on the nightly channel</a>
<ul>
<li>Faster debug builds using <a rel="external" href="https://cranelift.dev/">cranelift</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/116447">Implement <code>gen</code> blocks in the 2024 edition</a>
<ul>
<li>Allows creating iterators through generators</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/116205">Stabilize <code>[const_]pointer_byte_offsets</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/116485">Stabilize Ratified RISC-V Target Features</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/116894">Guarantee that <code>char</code> has the same size and alignment as <code>u32</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/cargo/pull/12625">feat: implement RFC 3127 <code>-Ztrim-paths</code></a>
<ul>
<li>Allows sanitizing file system paths used in panic messages → can reduce binary size</li>
<li>See <a rel="external" href="https://rust-lang.github.io/rfcs/3127-trim-paths.html">RFC 3127</a> for details</li>
</ul>
</li>
</ul>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="spinning-top"><a rel="external" href="https://github.com/rust-osdev/spinning_top"><code>spinning_top</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>spinning_top</code> crate provides a simple spinlock implementation based on the abstractions of the <a rel="external" href="https://docs.rs/lock_api/0.4.1/lock_api/"><code>lock_api</code></a> crate.</p>
<p>We merged the following changes this month:</p>
<h4 id="features">Features</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/17">perf: inline everything</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/16">feat: add backoff feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/18">feat: add <code>RwSpinlock</code> readers-writer lock</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/25">feat: add <code>arc_lock</code> feature and typedefs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/26">Prepare for v0.3.0 release</a></li>
</ul>
<h4 id="other">Other</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/19">ci: build with all features</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/23">docs: fix typo</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/22">test: don't ignore statics example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/20">chore: remove <code>const_spinlock</code> function</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/21">chore: remove deprecated <code>nightly</code> feature</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/958">Release</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/960">Release uefi-services-0.22.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/967">uefi-raw: Use workspace dependency for uguid</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/969">uefi/gop: fix memory leak</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/966">Allow indexing of <code>MemoryMap</code>.</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/920">uefi-services: Return event in init</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/975">Remove unused UefiRegularFileHandle type alias</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/974">uefi-services: Remove NonNull wrapper from system_table</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/973">Mark free_pages and free_pool as unsafe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/976">uefi: Change IMAGE_HANDLE to an atomic pointer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/977">uefi-services: Change SYSTEM_TABLE to an atomic pointer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/978">Change Logger to use an atomic pointer internally</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/979">uefi: Use atomics instead of <code>static mut</code> in allocator</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/981">Use const interface pointers in protocol management functions</a></li>
</ul>
<!-- - [build(deps): bump crate-ci/typos from 1.16.15 to 1.16.16](https://github.com/rust-osdev/uefi-rs/pull/950) -->
<!-- - [xtask: Temporarily disable a false-positive clippy lint](https://github.com/rust-osdev/uefi-rs/pull/953) -->
<!-- - [build(deps): bump ureq from 2.7.0 to 2.8.0](https://github.com/rust-osdev/uefi-rs/pull/951) -->
<!-- - [build(deps): bump crate-ci/typos from 1.16.16 to 1.16.17](https://github.com/rust-osdev/uefi-rs/pull/956) -->
<!-- - [build(deps): bump uguid from 2.0.0 to 2.1.0](https://github.com/rust-osdev/uefi-rs/pull/957) -->
<!-- - [build(deps): bump regex from 1.9.0 to 1.10.2](https://github.com/rust-osdev/uefi-rs/pull/963) -->
<!-- - [build(deps): bump crate-ci/typos from 1.16.17 to 1.16.19](https://github.com/rust-osdev/uefi-rs/pull/964) -->
<!-- - [build(deps): bump crate-ci/typos from 1.16.19 to 1.16.20](https://github.com/rust-osdev/uefi-rs/pull/971) -->
<!-- - [build(deps): bump rustix from 0.37.19 to 0.37.26](https://github.com/rust-osdev/uefi-rs/pull/972) -->
<!-- - [build(deps): bump crate-ci/typos from 1.16.20 to 1.16.21](https://github.com/rust-osdev/uefi-rs/pull/984) -->
<p>Thanks to <a rel="external" href="https://github.com/JohnAZoidberg">@JohnAZoidberg</a> and <a rel="external" href="https://github.com/JarlEvanson">@JarlEvanson</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/440">fix(interrupts): replace compiler fences with potentially-synchronizing assembly</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/442">add `from_slice`` to VirtAddr</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/420">Enable dependabot to update actions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/441">Bump actions/checkout from 3 to 4</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Wasabi375">@Wasabi375</a>, <a rel="external" href="https://github.com/joycebrum">@joycebrum</a>, and <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/199">aml: Implement DefOr, DefSubtract and DefLNot opcodes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/201">Compile for aarch64 and i686 targets on CI in addition to x86_64</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/alnyan">@alnyan</a> for their contribution!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/3">Dockerfile: add riscv64 with QemuBuild.py</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Firenezz">@Firenezz</a> for their contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/398">Update <code>rustix</code> dependency</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/397">Add an additional MB of space to the generated FAT partition</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/kennystrawnmusic">@kennystrawnmusic</a> for their contribution!</p>
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a></span></p>
<p>The <code>linked-list-allocator</code> crate provides a basic <code>no_std</code> allocator that builds a linked list from freed memory blocks and thus needs no additional data structures. We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/79">Fix potential panic due to huge layout</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/00xc">@00xc</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="ravnos"><a rel="external" href="https://github.com/ShyanJMC/RavnOS">RavnOS</a></h3>
<p>RanvOS, (from norwegian; raven), is a operative system programmed in Rust. Aims to be; minimal, stable, secure and modern ( this maybe you know as; state-of-art ).</p>
<p>The objective of RavnOS is make an operative system minimalist, self hosted (no external crates, all programmed by me), stable and secure.</p>
<ul>
<li>October updates;
<ul>
<li><a rel="external" href="https://github.com/ShyanJMC/RavnOS/commit/048cf546b0488fca9b4dabc2f9b38b6d93e373e1">Minor code changes to follow good practices</a></li>
</ul>
</li>
<li>September updates;
<ul>
<li><a rel="external" href="https://github.com/ShyanJMC/RavnOS/commit/abc8d639d51b39c712158b9b3a769b88a0b05b66"> Rune - Added "du" as built-in. Right now is functional but in the future I will add results sorted by size.</a></li>
<li><a rel="external" href="https://github.com/ShyanJMC/RavnOS/commit/625f2899fa70b6932cbc7899f84f905ebfecd429"> Rune - Now "ls" built-in recognize and show where points the symbolinc link</a></li>
<li><a rel="external" href="https://github.com/ShyanJMC/RavnOS/commit/b8e016d78943f6c64ae1e77072d5dba343268bca"> Rune - Added show as built-in, expanded "info" built-in with more information. Show - Deleted because now is Rune's built-in</a></li>
</ul>
</li>
</ul>
<h3 id="mkroening-interrupt-mutex"><a rel="external" href="https://github.com/mkroening/interrupt-mutex"><code>mkroening/interrupt-mutex</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/mkroening">@mkroening</a>)</span></p>
<p>Building upon <a href="https://rust-osdev.com/this-month/2023-09/#mkroening-interrupts">last month's <code>interrupts</code> crate</a>, I created a mutex for sharing data with interrupt handlers or signal handlers.</p>
<p><code>RawInterruptMutex</code> wraps any <a rel="external" href="https://docs.rs/lock_api/0.4.10/lock_api/trait.RawMutex.html"><code>lock_api::RawMutex</code></a>, be it a <a rel="external" href="https://docs.rs/parking_lot/0.12.1/parking_lot/struct.RawMutex.html"><code>parking_lot::RawMutex</code></a> on Unix or a <a rel="external" href="https://docs.rs/spinning_top/0.2.5/spinning_top/struct.RawSpinlock.html"><code>spinning_top::RawSpinlock</code></a> on bare metal.
When such an <code>InterruptMutex</code> is locked, interrupts are disabled.
When the <code>InterruptMutex</code> is unlocked again, the previous interrupt state is restored.
This does not completely rule out deadlocks, since you can just enable interrupts manually when you should not.
Still, it is very convenient to just change the mutex type of data that is shared with interrupt handlers instead of disabling and enabling interrupts manually on every access.</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #464B5D;font-style: italic;">// Make a mutex of your choice into an `InterruptMutex`.</span></span>
<span class="giallo-l"><span style="color: #C792EA;">type</span><span style="color: #FFCB6B;"> InterruptSpinlock</span><span style="color: #89DDFF;">&lt;</span><span style="color: #FFCB6B;">T</span><span style="color: #89DDFF;">&gt; =</span><span style="color: #FFCB6B;"> interrupt_mutex</span><span style="color: #89DDFF;">::</span><span style="color: #FFCB6B;">InterruptMutex</span><span style="color: #89DDFF;">&lt;</span><span>spinning_top</span><span style="color: #89DDFF;">::</span><span style="color: #FFCB6B;">RawSpinlock</span><span style="color: #89DDFF;">,</span><span style="color: #FFCB6B;"> T</span><span style="color: #89DDFF;">&gt;;</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #C792EA;">static</span><span style="color: #FFCB6B;"> X</span><span style="color: #89DDFF;">:</span><span style="color: #FFCB6B;"> InterruptSpinlock</span><span style="color: #89DDFF;">&lt;</span><span style="color: #FFCB6B;">Vec</span><span style="color: #89DDFF;">&lt;</span><span style="color: #FFCB6B;">i32</span><span style="color: #89DDFF;">&gt;&gt; =</span><span style="color: #FFCB6B;"> InterruptSpinlock</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">new</span><span style="color: #89DDFF;">(</span><span style="color: #FFCB6B;">Vec</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">new</span><span style="color: #89DDFF;">());</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #F78C6C;">fn</span><span style="color: #82AAFF;"> interrupt_handler</span><span style="color: #89DDFF;">() {</span></span>
<span class="giallo-l"><span style="color: #FFCB6B;">    X</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">lock</span><span style="color: #89DDFF;">().</span><span style="color: #82AAFF;">push</span><span style="color: #89DDFF;">(</span><span style="color: #F78C6C;">1</span><span style="color: #89DDFF;">);</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">}</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #C792EA;">let</span><span> v</span><span style="color: #89DDFF;"> =</span><span style="color: #FFCB6B;"> X</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">lock</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">// Raise an interrupt</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">raise_interrupt</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">assert_eq!</span><span style="color: #89DDFF;">(*</span><span>v</span><span style="color: #89DDFF;">,</span><span style="color: #82AAFF;"> vec!</span><span style="color: #89DDFF;">[]);</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">drop</span><span style="color: #89DDFF;">(</span><span>v</span><span style="color: #89DDFF;">);</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">// The interrupt handler runs</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #C792EA;">let</span><span> v</span><span style="color: #89DDFF;"> =</span><span style="color: #FFCB6B;"> X</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">lock</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">assert_eq!</span><span style="color: #89DDFF;">(*</span><span>v</span><span style="color: #89DDFF;">,</span><span style="color: #82AAFF;"> vec!</span><span style="color: #89DDFF;">[</span><span style="color: #F78C6C;">1</span><span style="color: #89DDFF;">]);</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">drop</span><span style="color: #89DDFF;">(</span><span>v</span><span style="color: #89DDFF;">);</span></span></code></pre><h3 id="mkroening-interrupt-ref-cell"><a rel="external" href="https://github.com/mkroening/interrupt-ref-cell"><code>mkroening/interrupt-ref-cell</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/mkroening">@mkroening</a>)</span></p>
<p>Also building upon <a href="https://rust-osdev.com/this-month/2023-09/#mkroening-interrupts">last month's <code>interrupts</code> crate</a>, I created a <code>RefCell</code> for sharing data with interrupt handlers or signal handlers on the same thread.</p>
<p>On the same thread (software thread or hardware thread (core)), a compiler fence is sufficient for synchronization with signal handlers (on Unix) and interrupt handlers (on bare metal).
In these cases, the new <code>InterruptRefCell</code> allows easy sharing without the overhead of mutexes and without the deadlock potential of mutexes.
Similar to <code>InterruptMutex</code>, this is helpful for disabling interrupts on accesses but does not protect you from manually enabling interrupts while holding a reference.</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #F78C6C;">use</span><span style="color: #FFCB6B;"> interrupt_ref_cell</span><span style="color: #89DDFF;">::{</span><span style="color: #FFCB6B;">InterruptRefCell</span><span style="color: #89DDFF;">,</span><span style="color: #FFCB6B;"> LocalKeyExt</span><span style="color: #89DDFF;">};</span></span>
<span class="giallo-l"><span> </span></span>
<span class="giallo-l"><span style="color: #82AAFF;">thread_local!</span><span style="color: #89DDFF;"> {</span></span>
<span class="giallo-l"><span style="color: #C792EA;">    static</span><span style="color: #FFCB6B;"> X</span><span style="color: #89DDFF;">:</span><span style="color: #FFCB6B;"> InterruptRefCell</span><span style="color: #89DDFF;">&lt;</span><span style="color: #FFCB6B;">Vec</span><span style="color: #89DDFF;">&lt;</span><span style="color: #FFCB6B;">i32</span><span style="color: #89DDFF;">&gt;&gt; =</span><span style="color: #FFCB6B;"> InterruptRefCell</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">new</span><span style="color: #89DDFF;">(</span><span style="color: #FFCB6B;">Vec</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">new</span><span style="color: #89DDFF;">());</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">}</span></span>
<span class="giallo-l"><span> </span></span>
<span class="giallo-l"><span style="color: #F78C6C;">fn</span><span style="color: #82AAFF;"> interrupt_handler</span><span style="color: #89DDFF;">() {</span></span>
<span class="giallo-l"><span style="color: #FFCB6B;">    X</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">with_borrow_mut</span><span style="color: #89DDFF;">(|</span><span>v</span><span style="color: #89DDFF;">|</span><span> v</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">push</span><span style="color: #89DDFF;">(</span><span style="color: #F78C6C;">1</span><span style="color: #89DDFF;">));</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">}</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #FFCB6B;">X</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">with_borrow</span><span style="color: #89DDFF;">(|</span><span>v</span><span style="color: #89DDFF;">| {</span></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">    // Raise an interrupt</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">    raise_interrupt</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">    assert_eq!</span><span style="color: #89DDFF;">(*</span><span>v</span><span style="color: #89DDFF;">,</span><span style="color: #82AAFF;"> vec!</span><span style="color: #89DDFF;">[]);</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">});</span></span>
<span class="giallo-l"><span> </span></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">// The interrupt handler runs</span></span>
<span class="giallo-l"><span> </span></span>
<span class="giallo-l"><span style="color: #FFCB6B;">X</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">with_borrow</span><span style="color: #89DDFF;">(|</span><span>v</span><span style="color: #89DDFF;">|</span><span style="color: #82AAFF;"> assert_eq!</span><span style="color: #89DDFF;">(*</span><span>v</span><span style="color: #89DDFF;">,</span><span style="color: #82AAFF;"> vec!</span><span style="color: #89DDFF;">[</span><span style="color: #F78C6C;">1</span><span style="color: #89DDFF;">]));</span></span></code></pre><!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: September 2023</title>
            <pubDate>Thu, 05 Oct 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-09/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-09/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-09/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-09/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (September 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/toolchain-upgrade-1/">Toolchain Upgrade - Redox OS</a></li>
<li><a rel="external" href="https://ferrous-systems.com/blog/ferrocene-open-source/">Open Sourcing Ferrocene</a></li>
<li><a rel="external" href="https://apollolabsblog.hashnode.dev/esp32-standard-library-embedded-rust-gpio-interrupts">ESP32 Standard Library Embedded Rust: GPIO Interrupts</a></li>
<li><a rel="external" href="https://apollolabsblog.hashnode.dev/the-embedded-rust-esp-development-ecosystem">The Embedded Rust ESP Development Ecosystem</a></li>
<li><a rel="external" href="https://apollolabsblog.hashnode.dev/esp-embedded-rust-multithreading-with-freertos-bindings">ESP Embedded Rust: Multithreading with FreeRTOS Bindings</a></li>
<li><a rel="external" href="https://litchipi.site/post/17611351315151745365">How Rust can build an elegant API around raw memory</a></li>
<li><a rel="external" href="https://redox-os.org/news/development-priorities-2023-09/">Redox: Development Priorities for 2023/24</a></li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/105861">Add Minimal Std implementation for UEFI</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/116207">Stdio support for UEFI</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/115368">Promote loongarch64-unknown-none* to Tier 2</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/104101">Add initial libstd support for Xous</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/115230">added support for GNU/Hurd</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/115345">MCP661: Move wasm32-wasi-preview1-threads target to Tier 2</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/113053">add notes about non-compliant FP behavior on 32bit x86 targets</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/114780">add more explicit I/O safety documentation</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/112038">Change <code>unsafe_op_in_unsafe_fn</code> to be <code>warn-by-default</code> from edition 2024</a></li>
<li><a rel="external" href="https://github.com/rust-lang/cargo/pull/12648">cargo: Stabilize lint table</a></li>
<li>Final comments period
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/115719">Stabilize <code>atomic_from_ptr</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/issues/96283">Tracking Issue for <code>pointer_bytes_offsets</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rfcs/pull/3453">Add <code>f16</code> and <code>f128</code> float types</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rfcs/pull/3491">RFC: Remove implicit features in a new edition</a></li>
</ul>
</li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <a rel="external" href="https://crates.io/crates/multiboot2">multiboot2</a> was bumped from <code>0.18.1</code>
to <code>0.19.0</code>. The new release includes the ability to add custom tags to the MBI
builder and a bugfix when parsing Multiboot strings, such as the command line
from a Module tag.</p>
<p>For more details, please have a look at the <a rel="external" href="https://github.com/rust-osdev/multiboot2/releases/tag/multiboot2-v0.19.0">changelog</a>.</p>
<p>Thanks to <a rel="external" href="https://github.com/A0lson">@A0lson</a> for their <a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/172">contribution</a>
that helped to fix the string parsing bug.</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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.</p>
<p>This month, a new major version of <code>acpi</code> was published, offering greater control over how the crate allocates
memory. Specifically, the new <code>allocator_api</code> and <code>alloc</code> features allow you to opt-out of allocation altogether
(allowing the crate to be used from slimmer environments like bootloaders), or to provide your own allocator using
the new (and still unstable) <a rel="external" href="https://doc.rust-lang.org/beta/core/alloc/trait.Allocator.html"><code>core::alloc::Allocator</code> API</a>.
Enabling both features makes the crate behave very similarly to before, so migration should be relatively easy.</p>
<p>Because the <code>acpi</code> crate can now be used from environements without allocation, the <code>rsdp</code> crate has been
deprecated, and all functionality moved into <code>acpi</code>. The <code>rsdp</code> crate will continue to work, but will not receive
further updates. This should not affect users using <code>rsdp</code> to simply find the address of the RSDP, but is a
breaking change as types that have been moved to <code>acpi</code> will no longer be usable across the crate boundary.</p>
<p>Some improvements were also made to the <code>aml</code> crate this month, adding functionality and improving our correctness</p>
<ul>
<li>many thanks to our contributors!</li>
</ul>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/191">AML: Implement OpReg-relative PkgLength parser</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/192">AML: Fix DefPackage len less than NumElements failing</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/197">Prepare new version of <code>acpi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/133001e59d3f56056d371954eb52a79ee5a2b377">AML: add support for the <code>DefSleep</code> opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/133001e59d3f56056d371954eb52a79ee5a2b377">AML: add support for the <code>DefStall</code> opcode</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/alnyan">@alnyan</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/436">fix(interrupts): add compiler fences to enable and disable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/403">add <code>flush_broadcast</code> and <code>tlbsync</code> functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/437">Release v0.14.11</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/439">Add <code>HandlerFuncType</code> trait</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/brandonchinn178">@brandonchinn178</a> and <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/772">Add ShellParams protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/949">github: Change dependabot interval to weekly</a></li>
</ul>
<!--
- [build(deps): bump actions/checkout from 3 to 4](https://github.com/rust-osdev/uefi-rs/pull/934)
- [build(deps): bump cachix/install-nix-action from 22 to 23](https://github.com/rust-osdev/uefi-rs/pull/933)
- [build(deps): bump crate-ci/typos from 1.16.9 to 1.16.10](https://github.com/rust-osdev/uefi-rs/pull/932)
- [build(deps): bump walkdir from 2.3.3 to 2.4.0](https://github.com/rust-osdev/uefi-rs/pull/940)
- [build(deps): bump crate-ci/typos from 1.16.10 to 1.16.11](https://github.com/rust-osdev/uefi-rs/pull/941)
- [build(deps): bump crate-ci/typos from 1.16.11 to 1.16.12](https://github.com/rust-osdev/uefi-rs/pull/944)
- [build(deps): bump crate-ci/typos from 1.16.12 to 1.16.13](https://github.com/rust-osdev/uefi-rs/pull/946)
- [build(deps): bump crate-ci/typos from 1.16.13 to 1.16.14](https://github.com/rust-osdev/uefi-rs/pull/947)
- [build(deps): bump crate-ci/typos from 1.16.14 to 1.16.15](https://github.com/rust-osdev/uefi-rs/pull/948)
-->
<p>Thanks to <a rel="external" href="https://github.com/JohnAZoidberg">@JohnAZoidberg</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="mkroening-interrupts"><a rel="external" href="https://github.com/mkroening/interrupts"><code>mkroening/interrupts</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/mkroening">@mkroening</a>)</span></p>
<p>I created a dependency-free <code>interrupts</code> crate, allowing you to temporarily disable interrupts on AArch64, 64-bit RISC-V, and x86-64.
Two different paradigms allow you to run code without interrupts and synchronize with interrupt handlers running on the same hardware thread (core):</p>
<p>Use <a rel="external" href="https://docs.rs/interrupts/latest/interrupts/fn.disable.html"><code>disable</code></a> to disable interrupts with a guard:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #464B5D;font-style: italic;">// interrupts may or may not be enabled</span></span>
<span class="giallo-l"><span style="color: #C792EA;">let</span><span> guard</span><span style="color: #89DDFF;"> =</span><span style="color: #FFCB6B;"> interrupts</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">disable</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">// interrupts are disabled</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">drop</span><span style="color: #89DDFF;">(</span><span>guard</span><span style="color: #89DDFF;">);</span></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">// interrupts are restored to the previous state</span></span></code></pre>
<p>Use <a rel="external" href="https://docs.rs/interrupts/latest/interrupts/fn.without.html"><code>without</code></a> (similar to <a rel="external" href="https://docs.rs/x86_64/latest/x86_64/instructions/interrupts/fn.without_interrupts.html"><code>x86_64::instructions::interrupts::without_interrupts</code></a>) to run a closure with disabled interrupts:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #464B5D;font-style: italic;">// interrupts may or may not be enabled</span></span>
<span class="giallo-l"><span style="color: #FFCB6B;">interrupts</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">without</span><span style="color: #89DDFF;">(|| {</span></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">    // interrupts are disabled</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">});</span></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">// interrupts are restored to the previous state</span></span></code></pre>
<p>I would appreciate you dropping by and giving it a try. :)</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: August 2023</title>
            <pubDate>Wed, 06 Sep 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-08/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-08/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-08/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-08/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (August 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<ul>
<li><a rel="external" href="https://github.com/Ruddle/Fomos">Fomos: Experimental OS, built with Rust</a>
<ul>
<li>Discussion on <a rel="external" href="https://news.ycombinator.com/item?id=37316309">HN</a>, <a rel="external" href="https://www.reddit.com/r/rust/comments/164li1c/fomos_experimental_rust_os/">reddit</a>, <a rel="external" href="https://lobste.rs/s/eoyuf6/fomos_experimental_os_built_with_rust">lobste.rs</a></li>
</ul>
</li>
<li><a rel="external" href="https://blog.rust.careers/post/andy-python-interview/">Interview with Rust and operating system Developer Andy Python</a></li>
</ul>
<h3 id="redox-summer-of-code">Redox Summer of Code</h3>
<ul>
<li><a rel="external" href="https://redox-os.org/news/rsoc-2023-wrapup/">Redox Summer of Code Wrapup</a></li>
<li>VirtIO drivers for Redox in a VM  - Andy-Python-Programmer: <a rel="external" href="https://www.redox-os.org/news/rsoc-virtio-1/">Part 1</a> and <a rel="external" href="https://redox-os.org/news/rsoc-virtio-2/">Part 2</a></li>
<li>On-Demand Paging for Redox - 4lDO2: <a rel="external" href="https://www.redox-os.org/news/kernel-8/">Part 1</a> and <a rel="external" href="https://redox-os.org/news/kernel-9/">Part 2</a></li>
<li>Using Linux drivers in a VM on Redox - Enygmator: <a rel="external" href="https://www.redox-os.org/news/rsoc-2023-eny-1/">Overview</a></li>
</ul>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/112922">WASI threads, implementation of `wasm32-wasi-preview1-threads`` target</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/98333">Re-enable atomic loads and stores for all RISC-V targets</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/114048">Update to LLVM 17</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/111891">feat: <code>riscv-interrupt-{m,s}</code> calling conventions</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/113966">Add the <code>relocation_model</code> to the cfg</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/106511">Default <code>relax_elf_relocations</code> to true</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/113480">add <code>aarch64-unknown-teeos</code> target</a></li>
<li>cargo: <a rel="external" href="https://github.com/rust-lang/cargo/pull/12535">Add support for <code>target.'cfg(..)'.linker</code></a></li>
<li>cargo: <a rel="external" href="https://github.com/rust-lang/cargo/pull/12421">Support dependencies from registries for artifact dependencies, take 2</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/906">Drop <code>memmove</code> and <code>set_mem</code> from boot services</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/909">Add block I/O protocol to <code>uefi-raw</code> and use it in <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/911">uefi-raw: Rename BlockIo to BlockIoProtocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/896">Add raw memory protection protocol and use in <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/913">Use workspace.dependencies to declare shared dependencies</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/910">Add component name protocol to uefi-raw and use from uefi</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/916">Implement core::error::Error for all error types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/928">Fix 1.72 lints</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/851">Derive <code>Debug</code> in more places (requires Rust 1.70)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/915">Memory map change</a></li>
</ul>
<!---
- [build(deps): bump crate-ci/typos from 1.16.1 to 1.16.2](https://github.com/rust-osdev/uefi-rs/pull/908)
- [build(deps): bump crate-ci/typos from 1.16.2 to 1.16.3](https://github.com/rust-osdev/uefi-rs/pull/912)
- [build(deps): bump crate-ci/typos from 1.16.3 to 1.16.5](https://github.com/rust-osdev/uefi-rs/pull/919)
- [build(deps): bump crate-ci/typos from 1.16.5 to 1.16.7](https://github.com/rust-osdev/uefi-rs/pull/923)
- [build(deps): bump crate-ci/typos from 1.16.7 to 1.16.8](https://github.com/rust-osdev/uefi-rs/pull/924)
- [build(deps): bump rustls-webpki from 0.100.1 to 0.100.2](https://github.com/rust-osdev/uefi-rs/pull/926)
- [build(deps): bump clap from 4.3.0 to 4.4.0](https://github.com/rust-osdev/uefi-rs/pull/927)
- [build(deps): bump nix from 0.26.2 to 0.27.1](https://github.com/rust-osdev/uefi-rs/pull/929)
- [build(deps): bump crate-ci/typos from 1.16.8 to 1.16.9](https://github.com/rust-osdev/uefi-rs/pull/930)
--->
<p>Thanks to <a rel="external" href="https://github.com/cmoylan">@cmoylan</a> and <a rel="external" href="https://github.com/julic20s">@julic20s</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/346">kernel image fields &amp; zero out rbp</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/390"><code>RacyCell&lt;T&gt;</code>: Data race allowed on T</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/391">Update license field following SPDX 2.1 license expression standard</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/frisoft">@frisoft</a>, <a rel="external" href="https://github.com/devsnek">@devsnek</a>, and <a rel="external" href="https://github.com/kuzeyardabulut">@kuzeyardabulut</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/430">Add <code>inline</code> attribute to segment functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/431">Add the <code>iretq</code> function to the <code>InterruptStackFrameValue</code> struct.</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/432">Fix misc doc typos</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/tsoutsman">@tsoutsman</a>, <a rel="external" href="https://github.com/NathanKolpa">@NathanKolpa</a>, and <a rel="external" href="https://github.com/xzmeng">@xzmeng</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>acpi</code> 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:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/189">AML: <code>DefSizeOf</code> implementation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/190">AML: Fix <code>DefIfElse</code> parser returning <code>UnexpectedEndOfStream</code> when <code>If (...) {}</code> is not followed by anything</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/alnyan">@alnyan</a> for their contributions!</p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/29">x86: crate finally builds with x86 and x86_64</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/phip1611">@phip1611</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="mkroening-take-static"><a rel="external" href="https://github.com/mkroening/take-static"><code>mkroening/take-static</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/mkroening">@mkroening</a>)</span></p>
<p>I published a tiny new crate, allowing you to get a mutable reference to static items safely (only once, though):</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #F78C6C;">use</span><span style="color: #FFCB6B;"> take_static</span><span style="color: #89DDFF;">::</span><span style="color: #FFCB6B;">take_static</span><span style="color: #89DDFF;">;</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #82AAFF;">take_static!</span><span style="color: #89DDFF;"> {</span></span>
<span class="giallo-l"><span style="color: #C792EA;">    static</span><span> NUMBER</span><span style="color: #89DDFF;">:</span><span style="color: #FFCB6B;"> usize</span><span style="color: #89DDFF;"> =</span><span style="color: #F78C6C;"> 5</span><span style="color: #89DDFF;">;</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">}</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #82AAFF;">assert_eq!</span><span style="color: #89DDFF;">(</span><span>NUMBER</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">take</span><span style="color: #89DDFF;">(),</span><span style="color: #FFCB6B;"> Some</span><span style="color: #89DDFF;">(&amp;</span><span style="color: #C792EA;">mut</span><span style="color: #F78C6C;"> 5</span><span style="color: #89DDFF;">));</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">assert_eq!</span><span style="color: #89DDFF;">(</span><span>NUMBER</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">take</span><span style="color: #89DDFF;">(),</span><span style="color: #FFCB6B;"> None</span><span style="color: #89DDFF;">);</span></span></code></pre>
<p>This allows you to easily use statically allocated memory before dynamic memory allocators may be available.
Compared to <a rel="external" href="https://docs.rs/cortex-m/0.7.7/cortex_m/macro.singleton.html"><code>cortex_m::singleton</code></a>, <code>take_static</code> is thread-safe.
Compared to <a rel="external" href="https://docs.rs/takecell/0.1.1/takecell/index.html"><code>takecell::TakeCell</code></a>, <code>take_static</code> also supports <code>!Send</code> types.</p>
<h3 id="hermit-os-kernel"><a rel="external" href="https://github.com/hermit-os/kernel"><code>hermit-os/kernel</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/mkroening">@mkroening</a>)</span></p>
<img width="128" align="right" src="https://raw.githubusercontent.com/hermit-os/.github/47a27de62e8cfc658ddbccb3f00743c7538281ae/img/Hermit.svg" />
<p>The Hermit unikernel project allows you to bundle your Rust application with our library operating system to create a bootable unikernel image.
Hermit is a single-address-space operating system.
Since there is only one application running in the virtual machine, no isolation between applications or between user space and kernel space is necessary.
This reduces system call overhead immensely, since every system call is just a library call.
For more information, see our <a href="https://rust-osdev.com/showcase/hermit/"><em>The Hermit Operating System</em></a> showcase post.</p>
<p>The RustyHermit project has been renamed.
We have renamed our GitHub organization from <a rel="external" href="https://github.com/hermitcore">@hermitcore</a> to <a rel="external" href="https://github.com/hermit-os">@hermit-os</a> and reserved the <a rel="external" href="http://hermit-os.org">http://hermit-os.org</a> domain.</p>
<p>We have also renamed some of our core projects to reduce confusion:</p>
<ul>
<li><a rel="external" href="https://github.com/hermit-os/kernel">hermit-os/kernel</a> is the Hermit kernel.</li>
<li><a rel="external" href="https://github.com/hermit-os/hermit-rs">hermit-os/hermit-rs</a> provides Rust application support.</li>
<li><a rel="external" href="https://github.com/hermit-os/uhyve">hermit-os/uhyve</a> is a specialized hypervisor for Hermit.</li>
<li><a rel="external" href="https://github.com/hermit-os/loader">hermit-os/loader</a> is a bootloader for other platforms, such as QEMU.</li>
</ul>
<p>We have a new logo!
As hermit crabs occupy empty shells produced by other organisms, the original HermitCore occupied one or several cores on a computer.
Because we migrated to Rust in 2018, our new logo of a hermit crab occupying the Rust logo's <a rel="external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=680521">bike gear</a> fits quite nicely with the Rust logo as well as Rust's Ferris.</p>
<p>And as always, please come and try Hermit! :)</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1234">Update post 2 with beginner friendly cargo tips</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1235">Grammar fix</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1237">minimal-rust-kernel: fix missing .toml in zh-CN translation</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Connortsui20">@Connortsui20</a> and <a rel="external" href="https://github.com/xzmeng">@xzmeng</a> for these contributions!</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: July 2023</title>
            <pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-07/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-07/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-07/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-07/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (July 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://cliffle.com/blog/lilos-cancel-safety/">Mutex without lock, Queue without push: cancel safety in lilos</a></li>
<li><a rel="external" href="https://www.reddit.com/r/KaniRustVerifier/comments/14xytrg/kani_0320_has_been_released/">Kani 0.32.0 has been released!</a> (verification tool for unsafe code blocks)</li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/151usd5/bwrap_a_fast_lightweight_embedded/">bwrap: A fast, lightweight, embedded environment-friendly Rust library for wrapping text</a></li>
<li>ESP32 Standard Library Embedded Rust
<ul>
<li><a rel="external" href="https://apollolabsblog.hashnode.dev/esp32-standard-library-embedded-rust-gpio-control">GPIO Control</a></li>
<li><a rel="external" href="https://apollolabsblog.hashnode.dev/esp32-standard-library-embedded-rust-uart-communication">UART Communication</a></li>
<li><a rel="external" href="https://apollolabsblog.hashnode.dev/esp32-standard-library-embedded-rust-i2c-communication">I2C Communication</a></li>
</ul>
</li>
<li><a rel="external" href="https://docs.rs/allocator-api2/latest/allocator_api2/"><code>allocator_api2</code></a> crate to use Rust's nightly allocator API on stable Rust</li>
</ul>
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/compiler-builtins/pull/541">Enable <code>chkstk</code>/<code>alloca</code> intrinsics on <code>x86_64-unknown-uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/114004">Add <code>riscv64gc-unknown-hermit</code> target</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/113411">Add <code>x86_64-unikraft-linux-musl</code> target</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/114034">Optimize <code>AtomicBool</code> for target that don't support byte-sized atomics</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <a rel="external" href="https://crates.io/crates/multiboot2">multiboot2</a> was bumped from <code>0.16.0</code>
to <code>0.17.0</code>. The new release includes the builder pattern for the MBI builder
and the ability to use custom memory types in the memory map in addition to
pre-defined ones. For more info, look <a rel="external" href="https://docs.rs/multiboot2/0.17.0/multiboot2/struct.MemoryAreaTypeId.html">here</a>.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/885">Cargo.lock: Update proc-macro2 to fix nightly CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/886">Return a SimpleFileSystem from BootServices::get_image_file_system</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/887">uefi-raw: Derive Ord, PartialOrd, and Hash for all newtype enums</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/888">Add <code>GraphicsOutputProtocol</code> to <code>uefi_raw</code> and use it from <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/889">uefi: Use uefi_raw's SimplePointerProtocol to implement Pointer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/890">build(deps): bump regex from 1.8.1 to 1.9.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/891">Fix target_arch name: i386 -&gt; x86</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/892">Add some uefi-raw links/badges</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/894">Fix a new lint in 1.71</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/897">Add raw serial protocol and use it in <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/895">Add raw disk protocols and use them in <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/898">uefi: Change try_exists to return FileSystemResult<bool></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/900">dependabot: Enable updates for Github Actions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/899">Rework <code>FileSystem::copy</code> to operate on 1MiB chunks</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/902">build(deps): bump crate-ci/typos from 1.13.20 to 1.16.1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/903">ci: Add merge_group trigger</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/901">build(deps): bump cachix/install-nix-action from 20 to 22</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/907">add event to smp</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/devsnek">@devsnek</a> for their contribution!</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a></span></p>
<p>The <code>xhci</code> crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/156">Switch Clippy runner on CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/154">Fix wrong calculation of data_buffer_pointer of transfer::Normal</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/157">Release 0.9.2</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/lemolatoon">@lemolatoon</a> for their contribution!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following PR this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/428">Add <code>Descriptor::tss_segment_unchecked</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/SamZhang3">@SamZhang3</a> for their contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we released a new patch version to fix the build on the latest nightlies:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/385">Run <code>cargo update</code> to fix build on nightly</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/386">Release <code>v0.11.4</code></a></li>
</ul>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>ovmf-prebuilt</code> project provides pre-built <a rel="external" href="https://github.com/tianocore/edk2">edk2</a> releases to make it easier to set up OVMF. We merged the following improvement this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/2">Dockerfile: use QemuBuild.py for aarch64 build</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="sfbdragon-talc"><a rel="external" href="https://github.com/SFBdragon/talc"><code>SFBdragon/talc</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/SFBdragon">@SFBdragon</a>)</span></p>
<p><code>Talc</code> is a recently published, fast, and flexible <code>no-std</code> memory allocator.</p>
<ul>
<li>It's the fastest allocator I've tested as of yet (galloc falls short, buddy_alloc is close but lacks heap efficiency).</li>
<li>It features a OOM-handling component with dynamic arena resizing.</li>
</ul>
<p>By the time you're seeing this, hopefully v2 should be out or coming soon:</p>
<ul>
<li>The OOM handler system has been made more powerful.</li>
<li><code>lock_api</code> is used to allow for custom allocator synchronization.</li>
<li>The internals and API has been improved to pass miri's stacked borrows validation.</li>
<li>You can now move the allocator struct around freely.</li>
<li>And more :3</li>
</ul>
<p>I hope you find it useful!</p>
<h3 id="vinc-moros"><a rel="external" href="https://github.com/vinc/moros"><code>vinc/moros</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/vinc">@vinc</a>)</span></p>
<p><a rel="external" href="http://moros.cc">MOROS</a> is a text-based hobby operating system targeting computers with a x86-64 architecture and a BIOS.</p>
<p>Since last month's <a rel="external" href="https://github.com/vinc/moros/releases/tag/v0.10.0">release</a>, I focused on adding new syscalls to interact with <a rel="external" href="https://github.com/vinc/moros/pull/512">network sockets</a> from userspace. The DNS and HTTP clients are now using the new UDP and TCP sockets.</p>
<p>I also added another syscall to poll multiple handles at the same time, to read from the console and a socket, improving the main network tool that can now be used as a simple chat program.</p>
<p>The VGA driver, the filesystem, and the editor got a few significant <a rel="external" href="https://github.com/vinc/moros/blob/trunk/CHANGELOG.md">improvements</a> as well, to support downloading and reading larger files.</p>
<h3 id="valibali-cluu"><a rel="external" href="https://github.com/valibali/cluu"><code>valibali/cluu</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>There is a new project featured in our <a href="https://rust-osdev.com/showcase/">Showcase</a> series:</p>
<ul>
<li><a href="https://rust-osdev.com/showcase/cluu/"><strong>CLUU (Compact Lightweight Unix Utopia)</strong></a> by <a rel="external" href="https://github.com/valibali">@valibali</a></li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: June 2023</title>
            <pubDate>Thu, 06 Jul 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-06/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-06/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-06/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-06/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (June 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/board-meeting-2023-06-21/">Redox OS elects its first Board of Directors</a></li>
<li><a rel="external" href="https://frida.re/news/2023/06/23/frida-16-1-0-released/">Frida 16.1.0 Released</a></li>
<li><a rel="external" href="https://web.archive.org/web/20250513072029/https://bd103.github.io/blog/2023-06-27-global-allocators/">Intercepting Allocations with the Global Allocator</a></li>
<li><a rel="external" href="https://blog.rnstlr.ch/building-an-out-of-tree-rust-kernel-module-part-three.html">Building an out-of-tree Rust Kernel Module Part Three</a></li>
<li>Discussion: <a rel="external" href="https://www.reddit.com/r/rust/comments/14qvu98/how_hard_would_it_be_to_port_the_rust_toolchain/">How hard would it be to port the Rust toolchain to a new non-POSIX OS written in Rust and get it to host its own development?</a></li>
<li>Discussion: <a rel="external" href="https://www.reddit.com/r/rust/comments/14k49ho/will_there_be_fewer_jailbreaks_in_the_future_if/">Will there be fewer jailbreaks in the future if operating systems like iOS start adopting rust?</a></li>
</ul>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

    ### Summary
    <span class="maintainers">(Section written by [@author](https://github.com/author))</span>

    <text>
-->
<p><em>No updates were proposed for this section this month.</em></p>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>volatile</code> crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers or framebuffers.</p>
<p>Unfortunately, the design crate had a <a rel="external" href="https://github.com/rust-osdev/volatile/pull/13#issuecomment-842455552">soundness issue</a> because it used reference types for accessing the volatile memory. This is problematic because the Rust compiler marks references are <em>"dereferenceable"</em>, which allows LLVM to insert spurious read operations. This is fine for accessing "normal" memory, but it can lead to correctness issues when used in combination with memory-mapped device registers. These registers look like normal memory, but they are actually accessing some device-specific registers, which might change at any time. So they might change between spurious reads, which violates the assumptions of LLVM and can lead to undefined behavior.</p>
<p>To solve this issue, we started <a rel="external" href="https://github.com/rust-osdev/volatile/pull/22">a full redesign of the crate</a> that uses raw pointers only. This solves the issue because raw pointers are not considered <em>"dereferenceable"</em>, so LLVM is not allowed to insert spurious reads. While we started working on the new design more than 2 years ago, we didn't merge it until this month because we weren't sure about the implementation details. The main discussion point was whether we should treat the proposed <code>VolatilePointer</code> type like Rust's reference types or like Rust's raw pointer types. The difference is that raw pointers implement the <code>Copy</code> trait, but are not <code>Send</code> to prevent aliasing. References, on the other hand, can safely implement <code>Send</code> because they're only <code>Copy</code> if the reference is read-only.</p>
<p>After a lot of back and forth, we decided to <a rel="external" href="https://github.com/rust-osdev/volatile/pull/29">provide both options</a> and finally publish <a rel="external" href="https://docs.rs/volatile/0.5.1/volatile/index.html"><strong><code>volatile v0.5</code></strong></a>. So the new design has two wrapper types, <a rel="external" href="https://docs.rs/volatile/0.5.1/volatile/struct.VolatilePtr.html"><code>VolatilePtr</code></a> (behaves like a raw pointer) and <a rel="external" href="https://docs.rs/volatile/0.5.1/volatile/struct.VolatileRef.html"><code>VolatileRef</code></a> (behaves like a reference). We hope that we support most use cases this way!</p>
<p>Note that there is also some ongoing discussion <a rel="external" href="https://github.com/rust-osdev/volatile/issues/31">about a potential <code>VolatileCell</code> type</a> to wrap values in-place. Most implementations of such a type would require support from the Rust compiler, which <a rel="external" href="https://github.com/rust-lang/unsafe-code-guidelines/issues/411">needs an RFC</a>. However, there is one <a rel="external" href="https://github.com/rust-osdev/volatile/issues/31#issuecomment-1606044353">promising design based on zero-sized types and proc-macros</a> by <a rel="external" href="https://github.com/Freax13">@Freax13</a> that should not require any new language features. We will continue to investigate.</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <a rel="external" href="https://crates.io/crates/multiboot2">multiboot2</a> and the <a rel="external" href="https://crates.io/crates/multiboot2">multiboot2-header</a>
crates got a big overhaul. The list of new features includes but is not limited to:</p>
<ul>
<li>use DSTs for tags where applicable (<a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/134">#134</a>)</li>
<li>model the MBI as DST (<a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/155">#155</a>)</li>
<li>add a runtime builder for an MBI (<a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/133">#133</a>) <br />
Huge thanks to <a rel="external" href="https://github.com/YtvwlD">YtvwlD / Niklas</a> for this great external contribution</li>
<li>added an integration test including a multiboot2 chainloader for better test coverage (<a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/129">#129</a>)</li>
<li>added miri to the CI for more memory safety (<a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/128">#128</a>)</li>
<li>several fixes and small improvements</li>
</ul>
<p><code>multiboot2</code> was updated from <code>0.15.1</code> to <code>0.16.0</code> and <code>multiboot2-header</code> was updated from <code>0.2.0</code> to <code>0.3.0</code>. Both
releases come with a large amount of <a rel="external" href="https://github.com/rust-osdev/multiboot2/blob/main/Changelog.md">breaking changes</a>.
However, after a sensible consideration, they are all worth it for a more streamlined API and more memory safety.</p>
<details>
<summary>Merged pull requests:</summary>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/133">Add a builder to multiboot2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/141">treewide: code improvements and other stuff</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/143">various fixes + cleanup + bump crate versions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/144">streamline default derives</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/146">tree-wide: rename builder structs (remove Multiboot2 prefix)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/147">tree-wide: streamline default derives (also Hash everywhere)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/148">workspace: use workspace dependencies</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/149">fix memory issue in memory-map</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/150">multiboot2: memory-map: derive Eq + uefi-raw@0.3.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/151">multiboot2: more tag name streamlining</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/152">multiboot2: fix memory issue in boxed_dst_tag</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/153">multiboot2: builder: add terminating null-bytes to tags that hold a string</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/142">multiboot2: load: remove odd offset thingy</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/154">various cleanups</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/155">multiboot2: model MBI as DST</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/157">various fixes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/156">builder: use new abstraction to guarantee alignment</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/129">Add Integration Test</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/158">multiboot2: create DSTs: hopefully better memory fix</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/159">integration-test: cargo update</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/128">ci: run miri + adjustments for miri</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/161">ci: integrationtest: use magic nix cache</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/162">Make InformationBuilder adhere the API guidelines.</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/YtvwlD">@YtvwlD</a> and <a rel="external" href="https://github.com/scholzp">@scholzp</a> for their contributions!</p>
</details>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/422">Change Star::write() to use checked subtractions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/426">Bump bitflags to 2.3.2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/425">add workaround for recursive page tables with recursive index 511</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/427">Fix off-by-one in documentation</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Qix-">@Qix-</a>, <a rel="external" href="https://github.com/grant0417">@grant0417</a>, and <a rel="external" href="https://github.com/Egggggg">@Egggggg</a> for their contributions!</p>
<h3 id="vga"><a rel="external" href="https://github.com/rust-osdev/vga"><code>vga</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/RKennedy9064">@RKennedy9064</a></span></p>
<p>The work-in-progress <code>vga</code> crate allows the configuration of the VGA hardware, e.g. switching from text-based mode to a pixel-based graphics mode. This month, we merged the following pull request:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/vga/pull/35">implement a draw_rect function</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/tsatke">@tsatke</a> for their contribution!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>,
the successor to the BIOS firmware. It empowers everyone to write EFI-
applications with Rust in a convenient way, such as your own bootloader.</p>
<p>In June, we added multiple small improvements for developers using
<a rel="external" href="https://nixos.org">Nix(OS)</a> and simplifications for working with device
paths. Additionally, we moved more definitions to the new <code>uefi-raw</code> crate.</p>
<p>Furthermore, we'd like to mention the new high-level <a rel="external" href="https://docs.rs/uefi/0.24.0/uefi/fs/index.html">File-System API</a>.
It was <a rel="external" href="https://github.com/rust-osdev/uefi-rs/issues/747">merged in April</a>
actually, but not mentioned in this newsletter so far. Feel free to give it a
try!</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/840">Release uefi-raw-0.2.0, uefi-0.22.0, and uefi-services-0.19.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/844">Fix various CI failures</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/843">uefi: Fix wrong install_configuration_table() signature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/846">Release uefi-0.23.0 and uefi-services-0.20.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/848">build(deps): bump tempfile from 3.5.0 to 3.6.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/849">device_path: add more convenience (part 2)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/793">Make UEFI shell protocols testable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/850">Add DevicePathProtocol to uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/826">Integration test for boot service function load_image</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/853">cargo: Use <code>[workspace.package]</code> to deduplicate metadata</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/852">uefi: Update MSRV policy language</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/854">uefi: Remove some uses of MaybeUninit in BootServices</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/828">nix: add more convenience for Nix/NixOS users</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/855">ci: Fix developer_productivity push error</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/856">uefi-raw: Add BootServices table</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/858">uefi: Add raw pointer Event/Handle methods</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/857">uefi: Make BootServices fn ptrs unsafe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/757">xtask: add "cargo xtask fmt" (and formatting for nix and yml files)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/860">build(deps): bump ureq from 2.6.2 to 2.7.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/862">uefi-raw: Fix arg type in connect_controller</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/861">uefi: Improve support for null protocol interfaces</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/863">uefi: Make <code>BootServices</code> a wrapper around <code>uefi_raw::table::boot::BootServices</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/866">uefi-raw: Add common derives to <code>EventType</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/867">xtask: Improve an error location in check-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/868">uefi-raw: Add ConfigurationTable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/869">uefi-raw: Add SimpleTextInputProtocol and SimpleTextOutputProtocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/870">uefi-raw: Add SystemTable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/865">uefi-raw: Fill in a few more BootServices function pointers</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/871">uefi-raw: derive all the things</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/827">device_path: add more convenience (part 1)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/873">Release uefi-raw-0.3.0, uefi-0.24.0, uefi-services-0.21.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/874">uefi-raw: Add LoadedImageProtocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/875">uefi: Check for null pointer in config_table</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/878">test-runner: Simplify an iterator chain</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/876">build(deps): bump itertools from 0.10.5 to 0.11.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/879">uefi: Use uefi_raw's <code>SimpleTextInputProtocol</code> in <code>Input</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/881">uefi: Use uefi_raw's <code>SimpleTextOutputProtocol</code> in <code>Output</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/882">uefi: Use uefi_raw's <code>LoadedImageProtocol</code> to implement <code>LoadedImage</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/880">uefi: Fix warnings when compiling without the alloc feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/884">uefi-raw: Add <code>SimplePointerProtocol</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/883">uefi: Use uefi_raw's SystemTable to implement SystemTable</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/medhefgo">@medhefgo</a> for their contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="hermitcore-rusty-hermit"><a rel="external" href="https://github.com/hermitcore/rusty-hermit"><code>hermitcore/rusty-hermit</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/mkroening">@mkroening</a>)</span></p>
<p>The Hermit library operating system allows you to bundle a whole OS directly with your application, creating a freestanding, bootable <em>Unikernel</em> image.
This month, we achieved several milestones for reaching more users with Hermit:</p>
<ul>
<li>
<p>Stable Rust support.</p>
<p>You can now compile your programs for Hermit using the stable Rust toolchain! 🥳</p>
<p>While the Hermit targets (<code>x86_64-unknown-hermit</code> and <code>aarch64-unknown-hermit</code>) are still at tier 3, we now distribute pre-built artifacts of the Rust standard library for use with stable toolchains!
This means, no more <code>-Zbuild-std</code>, resulting in faster builds, and the bliss of the stable Rust compiler.</p>
<p>See <a rel="external" href="https://github.com/hermitcore/rust-std-hermit"><code>hermitcore/rust-std-hermit</code></a> for details on our <code>rust-std</code> artifacts.</p>
</li>
<li>
<p>Windows support.</p>
<p>Thanks to Rust's awesome cross-compilation capabilities, you can now compile Hermit applications from anywhere! 😎</p>
<p>We have resolved a longstanding issue when building Hermit applications on Windows (<a rel="external" href="https://github.com/hermitcore/rusty-hermit/pull/431">hermitcore/rusty-hermit#431</a>).
The issue is all sorted out now and Windows, macOS, and Linux are tested and verified by our CI.</p>
</li>
<li>
<p>AArch64 (ARM64) support.</p>
<p>You can now run real applications on AArch64, with scheduling, network and everything! 🤯</p>
<ul>
<li>
<p>PCI now works on AArch64, which allows us to use the network devices (<a rel="external" href="https://github.com/hermitcore/libhermit-rs/pull/748">hermitcore/libhermit-rs#748</a>).</p>
</li>
<li>
<p>We merged scheduling support for AArch64 (<a rel="external" href="https://github.com/hermitcore/libhermit-rs/pull/765">hermitcore/libhermit-rs#765</a>).</p>
</li>
<li>
<p>You can also now chainload Hermit apps for AArch64 using our loader (<a rel="external" href="https://github.com/hermitcore/rusty-loader/pull/201">hermitcore/rusty-loader#201</a>).</p>
<p>This means, you don't have to statically compile the full application into the final loader image anymore.</p>
</li>
</ul>
</li>
</ul>
<p>We'd love if you gave Hermit a try. Just start with our "Hello, World!" application template: <a rel="external" href="https://github.com/hermitcore/rusty-demo"><code>hermitcore/rusty-demo</code></a>.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>CLUU (Compact Lightweight Unix Utopia)</title>
            <pubDate>Wed, 14 Jun 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/showcase/cluu/</link>
            <guid isPermaLink="true">https://rust-osdev.com/showcase/cluu/</guid>
            <description xml:base="https://rust-osdev.com/showcase/cluu/">
            <![CDATA[&lt;div class=&quot;badges&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;valibali&#x2F;cluu&#x2F;blob&#x2F;master&#x2F;LICENSE&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.shields.io&#x2F;badge&#x2F;license-MIT-blue.svg&quot; alt=&quot;License&quot; &#x2F;&gt;&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;valibali.github.io&#x2F;cluu&#x2F;&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.shields.io&#x2F;badge&#x2F;documentation-RUSTDOCS-blue.svg&quot; alt=&quot;Documentation&quot; &#x2F;&gt;&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;valibali&#x2F;cluu&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.shields.io&#x2F;badge&#x2F;repository-GitHub-green.svg&quot; alt=&quot;Repository&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;CLUU is a hobby operating system being written in Rust - in the active development phase - targeting x86_64 and with plans to support aarch64 in the future. The project is made for &lt;strong&gt;fun and joy&lt;&#x2F;strong&gt;, drawing inspiration from various operating systems and projects while incorporating unique approaches and ideas.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<div class="badges">
<p><a rel="external" href="https://github.com/valibali/cluu/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License" /></a> <a rel="external" href="https://valibali.github.io/cluu/"><img src="https://img.shields.io/badge/documentation-RUSTDOCS-blue.svg" alt="Documentation" /></a> <a rel="external" href="https://github.com/valibali/cluu"><img src="https://img.shields.io/badge/repository-GitHub-green.svg" alt="Repository" /></a></p>
</div>
<p>CLUU is a hobby operating system being written in Rust - in the active development phase - targeting x86_64 and with plans to support aarch64 in the future. The project is made for <strong>fun and joy</strong>, drawing inspiration from various operating systems and projects while incorporating unique approaches and ideas.</p>
<span id="continue-reading"></span><!-- showcase-intro -->
<h2 id="motivation">Motivation</h2>
<p>CLUU is driven by the motivation to explore operating system development in a powerful language like Rust. The project seeks to break away from the traditional approach using languages like C, which can sometimes feel limiting or mundane. With CLUU, the goal is to embark on a learning journey and have fun in the process. Contributions from the community are highly encouraged and welcomed.</p>
<h2 id="project-information">Project Information</h2>
<p>CLUU draws inspiration from the following operating systems:</p>
<ul>
<li><a rel="external" href="https://github.com/plan9foundation/plan9">Plan 9</a>: Plan 9 from Bell Labs is a distributed operating system developed at Bell Labs in the late 1980s. It provides a unique approach to system organization, with a focus on simplicity and distributed computing.</li>
<li><a rel="external" href="https://github.com/freebsd/freebsd">BSD</a>: FreeBSD is a modern, advanced operating system for x86 and ARM architectures. It offers a rich feature set and has a long history of stability and reliability.</li>
</ul>
<p>As well as heavily influenced by the following projects:</p>
<ul>
<li><a rel="external" href="https://github.com/redox-os/redox">RedoxOS</a>: RedoxOS is an operating system written in Rust, aiming to bring the innovations of Rust to a modern microkernel and full set of applications. It's fair to say it is the most advanced of all Rust OS-es.</li>
<li><a rel="external" href="https://github.com/clstatham/k4dos">k4dos</a>: k4dos is another hobby-os of that sort, it's fairly cool, with userspace, that can run FreeDoom for example. It has a nice shell implementation: kash</li>
<li><a rel="external" href="https://os.phil-opp.com/">blog_os</a>: blog_os is a cutting-edge project by Philipp Oppermann that provides a detailed tutorial on building an operating system in Rust. It covers various aspects, including the bootloader, memory management, and device drivers.</li>
</ul>
<p>CLUU aims to create a UNIX-like operating system, although not plannig to fully adhere to the POSIX standards. The goal is to get as close to the UNIX philosophy and compatibility as possible. This would enable easier porting of Linux software to CLUU and provide a familiar environment for developers.</p>
<h2 id="current-state-and-goals">Current State and Goals</h2>
<p>CLUU is currently in the early stages of development, with the focus on building a solid foundation for the operating system. At this stage, the following basic functionalities have been implemented:</p>
<ul>
<li><strong>UART16550 driver</strong>: A driver for UART16550, allowing communication with the serial port for debugging and logging purposes.</li>
<li><strong>Preparation for PIO and MMIO</strong>: The groundwork has been laid for implementing both Programmed I/O (PIO) and Memory-Mapped I/O (MMIO) for interacting with hardware devices.</li>
<li><strong>Framebuffer driver</strong>: A driver for the framebuffer, providing a graphical output display.</li>
<li><strong>Simple graphics and writing</strong>: Basic graphical capabilities have been implemented, allowing for drawing and writing on the screen using a PSF font.</li>
<li><strong>Basic Logging framework</strong>: A basic logging framework has been developed to facilitate debugging and information output during the development process.</li>
</ul>
<p><img src="https://rust-osdev.com/showcase/cluu/screen.png" alt="Screencheck" /> <img src="https://rust-osdev.com/showcase/cluu/serial_out.png" alt="serial_output" /></p>
<p>As the project progresses, the focus will shift towards implementing additional features, such as:</p>
<ul>
<li><strong>Kernel Implementation</strong>: Further development of the microkernel's core functionality, including process management, interprocess communication, and resource management.</li>
<li><strong>Device Drivers</strong>: Continued development of drivers for essential hardware components, including keyboard, storage devices, and other peripherals.</li>
<li><strong>Filesystem Support</strong>: Introducing filesystem support to enable file I/O operations and provide a foundation for user-level processes and applications.</li>
</ul>
<p>The project remains open-source, and contributions from the community are highly encouraged. If you're interested in exploring the code, contributing enhancements, or reporting issues, please visit the <a rel="external" href="https://github.com/valibali/cluu">GitHub repository</a>.</p>
<h2 id="license">License</h2>
<p>CLUU is licensed under the MIT License. See <a rel="external" href="https://github.com/valibali/cluu/blob/master/LICENSE">LICENSE</a> for more information.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: May 2023</title>
            <pubDate>Tue, 06 Jun 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-05/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-05/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-05/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-05/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (May 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

    ### Summary
    <span class="maintainers">(Section written by [@author](https://github.com/author))</span>

    <text>
-->
<p><em>No updates were proposed for this section this month.</em></p>
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/13xp6q9/rtic_the_hardware_accelerated_rust_rtos_releases/">RTIC (The hardware accelerated Rust RTOS) releases v2.0.0!</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/13aittv/media_my_rust_os_for_microcontrollers_now_has_a/">My Rust OS for microcontrollers now has a dir command</a></li>
<li><a rel="external" href="https://www.thurrott.com/windows/windows-11/282995/first-rust-code-shows-up-in-the-windows-11-kernel">First Rust Code Shows Up in the Windows 11 Kernel</a></li>
<li><a rel="external" href="https://blog.system76.com/post/may-flowers-spring-cosmic-showers/">May Flowers Spring COSMIC Showers</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/13h1ii0/ironcladshell_a_shell_made_in_rust_and_for_os/">Ironclad-Shell: a "shell" made in rust and for OS classes</a></li>
<li><a rel="external" href="https://onevariable.com/blog/mnemos-moment-1/">This moment in <code>mnemos</code></a>
<ul>
<li>An update/introduction on the current state of <code>mnemos</code>, an async-first hobby OS</li>
</ul>
</li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/784">uefi: Switch Rng repr from C to transparent</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/785">uefi: Make MEMORY_DESCRIPTOR_VERSION an associated constant</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/786">macros: allow to create empty cstr8/16 slices</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/783">Add Revision to uefi-raw and use it from uefi</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/790">Add Tpl to uefi-raw and use it from uefi</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/789">Add PhysicalAddress/VirtualAddress to uefi-raw and use them from uefi</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/788">cstr16: add method to get the underlying bytes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/791">Move various memory types to uefi-raw and re-export in uefi</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/771">uefi/fs: add path and pathbuf abstraction</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/794">uefi: Clear the Vec in DevicePathBuilder::with_vec</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/796">uefi-macros: Restore entry macro tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/795">Add LoadedImageDevicePath protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/792">fs: add new error type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/714">deps: bump bitflags from 1.0 to 2.1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/797">uefi-macros: Fix entry macro with docstring</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/799">fs: implement remove_dir_all</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/802">uefi-raw: Drop dep on uefi-macros</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/803">Disable some tests on aarch64</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/804">allocator: Use appropriate memory types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/806">Release branch</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/807">uefi: Rename FileSystemIOErrorContext to IoErrorContext</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/808">uefi: Improve fs error Display impls, drop derive_more</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/811">Move InterfaceType to uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/810">uefi-raw: Add table Header struct</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/814">build(deps): bump bitflags from 2.2.1 to 2.3.1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/815">Relax bitflags dep version to 2.0.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/812">xtask: Drop an unused test file</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/805">xtask: Improve QEMU boot time</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/813">Move some runtime services types to uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/816">Fix and enable uefi-raw unit/doc tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/817">Add Time to uefi-raw and use it from uefi</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/809">uefi-raw: Add Char8/Char16</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/822">uefi: Fix use of tuples in pointer structs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/823">build(deps): bump clap from 4.2.7 to 4.3.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/821">uefi(boot_services): add <code>install_configuration_table</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/819">xtask: Add check-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/818">uefi-raw: Add Update Capsule types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/798">Download OVMF files rather than relying on distro package</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/831">Export FileInfoCreationError</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/833">Move EventType to uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/836">uefi: Derive Eq for Handle</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/832">Add <code>RuntimeServices</code> definition to <code>uefi-raw</code> and use it from <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/835">loaded_image: Add set_unload</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/834">uefi: Change file reading to read in 1 MiB chunks</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/RaitoBezarius">@RaitoBezarius</a> and <a rel="external" href="https://github.com/medhefgo">@medhefgo</a> for their contributions!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, <a rel="external" href="https://github.com/robert-w-gries">@robert-w-gries</a>, <a rel="external" href="https://github.com/ahmedcharles">@ahmedcharles</a>, and <a rel="external" href="https://github.com/Caduser2020">@Caduser2020</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/136">add missing functionality in multiboot2-header (finding the header, getting tags)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/134">multiboot2: properly type DST tags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/137">Add BasicMemoryInfo and SMBIOS tags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/138">multiboot2: Add the end tag</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/YtvwlD">@YtvwlD</a> for their contributions!</p>
<h3 id="vga"><a rel="external" href="https://github.com/rust-osdev/vga"><code>vga</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/RKennedy9064">@RKennedy9064</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/vga/pull/32">implement Graphics1280x800x256</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/tsatke">@tsatke</a> for their contribution!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/pull/1">Rework the repo to build edk2 release tags</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> for this contribution!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/179">rsdp: Make whole RSDP readable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/177">Clean up allocator_api feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/164">acpi: fix length of "extended_area_bytes" in RSDP search</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/YtvwlD">@YtvwlD</a>, <a rel="external" href="https://github.com/semiviral">@semiviral</a>, and <a rel="external" href="https://github.com/A0lson">@A0lson</a> for their contributions!</p>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/9">add function to determine the inteerupt pin and interrupt line</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/stlankes">@stlankes</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/369">Use <code>cargo-semver-checks-action</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mgr0dzicki">@mgr0dzicki</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1226">Fix panics caused by misaligned pointer dereferences in "Double Faults" &amp; "Introduction to Paging"</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1219">Correcting typos and errors in French translation of Post 1</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1218">posts/06-double-faults/index: fixup deprecated fn</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/SPuntte">@SPuntte</a>, <a rel="external" href="https://github.com/Firenezz">@Firenezz</a>, and <a rel="external" href="https://github.com/twilfredo">@twilfredo</a> for these contributions!</p>
<p>There wasn't much progress on the upcoming third edition this month, as I've been on vacation for the past few weeks. I still have a lot of catching up to do, but I'll try my best to continue writing soon :).</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: April 2023</title>
            <pubDate>Fri, 05 May 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-04/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-04/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-04/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-04/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (April 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

    ### Summary
    <span class="maintainers">(Section written by [@author](https://github.com/author))</span>

    <text>
-->
<p><em>No updates were proposed for this section this month.</em></p>
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://web.archive.org/web/20241127063903/https://coderjoshdk.github.io/posts/Rust-Kernel-Programming.html">Rust Kernel Programming</a></li>
<li><a rel="external" href="https://tomcat0x42.me/linux/rust/2023/04/07/linux-kernel-rust-modules.html">Linux Kernel Rust Modules</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/12p2rf7/aero_os_a_new_modern_operating_system_made_in/">Aero OS: A new modern operating system made in Rust, now able to run the Links browser, Alacritty and much more!</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/12gxh8b/felix_an_x86_hobby_os_written_in_rust/">Felix, an x86 hobby OS written in Rust</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<h4 id="features">Features</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/472">Introducing a high-level FS abstraction</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/755">uefi: debug: add DebugPort protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/749">uefi: Panic if an error is created from Status::SUCCESS</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/758">uefi-macros: Drop !Send and !Sync from unsafe_protocol macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/751">cstr[ing]16: convenience functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/767">uefi: Clean up some Status -&gt; Result conversions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/777">Use the uguid crate to replace the <code>Guid</code> struct and <code>guid!</code> macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/773">gop: Derive PartialEq on ModeInfo</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/778">Add RngProtocol to <code>uefi-raw</code> and use it from <code>uefi</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/779">uefi: Add get_variable_boxed</a></li>
</ul>
<h4 id="docs">Docs</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/748">uefi: Update Status documentation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/746">doc: build with --no-deps</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/753">uefi: Minor cleanups in the fs module doc</a></li>
</ul>
<h4 id="other">Other</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/750">ci: shorter job names</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/752">uefi: consistent use of crate:: over uefi::</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/760">Allow passing a constant's path into unsafe_protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/761">uefi-raw: Add mostly-empty package</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/763">ci: Fix book token permission</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/764">Move newtype_enum macro to uefi-raw</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/765">uefi-macros: Fix compiler test for Rust 1.69</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/768">Move <code>Status</code> to <code>uefi-raw</code>, along with related API changes</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/JohnAZoidberg">@JohnAZoidberg</a> and <a rel="external" href="https://github.com/felipebalbi">@felipebalbi</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/362">Fixed bug stemming from treating an exclusive range as an inclusive ranges</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/360">Update <code>uefi</code> dependency to <code>v0.20</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/365">Implemented sorting of uefi memory maps #315</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/kennystrawnmusic">@kennystrawnmusic</a> and <a rel="external" href="https://github.com/JarlEvanson">@JarlEvanson</a> for their contributions!</p>
<h3 id="pic8259"><a rel="external" href="https://github.com/rust-osdev/pic8259"><code>pic8259</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pic8259/pull/4">Added <code>new_contiguous</code> implementation for <code>ChainedPics</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/rasheedmhd">@rasheedmhd</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/421">Don't use third-party Python libraries in release workflow</a></li>
</ul>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/151">aml_tester: Add positional file arguments, in-order parsing and shared namespace</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/170">AML: Add minimal CondRefOf support</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/161">acpi: Allow Madt and Mcfg fields to be accessed without allocator_api</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/A0lson">@A0lson</a>, and <a rel="external" href="https://github.com/rw-vanc">@rw-vanc</a> for their contributions!</p>
<h3 id="ucs2-rs"><a rel="external" href="https://github.com/rust-osdev/ucs2-rs"><code>ucs2-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ucs2-rs/pull/14">ci: Bring in various improvements from uefi-rs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ucs2-rs/pull/15">Switch to 2021 edition</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1209">Update <code>zola</code> to <code>v0.17.2</code></a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1210">Fix link syntax</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1211">fix(translation zh-TW): typo</a> <span class="gray">(thanks to <a rel="external" href="https://github.com/GNITOAHC">@GNITOAHC</a>!)</span></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1216">The <code>#[alloc_error_handler]</code> attribute was removed</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1217">Update 'Heap Allocation' post to remove <code>alloc_error_handler</code></a></li>
</ul>
<p>I also continued writing on the upcoming third edition of the blog. I finished a draft of the second post, which is about booting using <code>v0.11</code> of the <code>bootloader</code> crate. You can already read it <a rel="external" href="https://github.com/phil-opp/blog_os/blob/edition-3/blog/content/edition-3/posts/02-booting/index.md">on GitHub</a> if you like.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: March 2023</title>
            <pubDate>Sat, 08 Apr 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-03/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-03/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-03/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-03/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (March 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

    ### Summary
    <span class="maintainers">(Section written by [@author](https://github.com/author))</span>

    <text>
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/105587">Partial stabilization of <code>once_cell</code></a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/108722">Support for Fuchsia RISC-V target</a></li>
</ul>
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.memorysafety.org/blog/gary-guo-klint-rust-tools/">Klint: Compile-time Detection of Atomic Context Violations for Kernel Rust Code</a></li>
<li><a rel="external" href="https://phip1611.de/blog/writing-a-linux-driver-for-qemus-debugcon-device/">Writing a Linux Driver for QEMU’s Debugcon Device</a> <br />
In this blogpost, <a rel="external" href="https://github.com/phip1611">@phip1611</a> shows you can
write a Linux driver for the QEMU debugcon device. Although, the driver
still uses C, it is a wonderful example to demonstrate a minimal yet useful
driver. Additionally, it is a good starting point for a rewrite in Rust, once
the Rust tooling and API bindings in the kernel are more mature. Perhaps,
the rewrite in Rust is your next learning project?</li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, <a rel="external" href="https://github.com/robert-w-gries">@robert-w-gries</a>, <a rel="external" href="https://github.com/ahmedcharles">@ahmedcharles</a>, and <a rel="external" href="https://github.com/Caduser2020">@Caduser2020</a></span></p>
<p>The <code>multiboot2</code> crate provides abstraction types for the multiboot information
structure (MBI) of multiboot2 bootloaders. The latest release of the
<code>multiboot2</code>-crate is now <code>v0.15.0</code> (was <code>v0.14.0</code>), which fixed a
<a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/119">bug</a>. Furthermore, the
documentation was improved. However, the biggest change is that the library now
allows the parsing of custom multiboot tags, which are not prohibited by the
spec. For a full changelog, please refer to the
<a rel="external" href="https://github.com/rust-osdev/multiboot2/blob/main/multiboot2/Changelog.md">GitHub repo</a>.</p>
<h4 id="ci-refactoring">CI Refactoring</h4>
<p>In the CI, we want to run many tests that cover a big portion of the cartesian
product of the following properties:</p>
<ul>
<li>rust version: stable, nightly, msrv</li>
<li>type: build, test, style check</li>
<li>target: default, no_std</li>
</ul>
<p>As I (@phip1611) was annoyed by all the boilerplate configuration and
repetition, I've investigated new ways to improve that situation and created
a reusable workflow can be used like that:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="yaml"><span class="giallo-l"><span style="color: #F07178;">jobs</span><span style="color: #89DDFF;">:</span></span>
<span class="giallo-l"><span style="color: #F07178;">  build_msrv</span><span style="color: #89DDFF;">:</span></span>
<span class="giallo-l"><span style="color: #F07178;">    name</span><span style="color: #89DDFF;">:</span><span style="color: #C3E88D;"> build (msrv)</span></span>
<span class="giallo-l"><span style="color: #F07178;">    uses</span><span style="color: #89DDFF;">:</span><span style="color: #C3E88D;"> ./.github/workflows/_build-rust.yml</span></span>
<span class="giallo-l"><span style="color: #F07178;">    with</span><span style="color: #89DDFF;">:</span></span>
<span class="giallo-l"><span style="color: #F07178;">      rust-version</span><span style="color: #89DDFF;">:</span><span style="color: #F78C6C;"> 1.56.1</span></span>
<span class="giallo-l"><span style="color: #F07178;">      do-style-check</span><span style="color: #89DDFF;">:</span><span style="color: #FF9CAC;"> false</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #F07178;">  style_nightly</span><span style="color: #89DDFF;">:</span></span>
<span class="giallo-l"><span style="color: #F07178;">    name</span><span style="color: #89DDFF;">:</span><span style="color: #C3E88D;"> style (nightly)</span></span>
<span class="giallo-l"><span style="color: #F07178;">    needs</span><span style="color: #89DDFF;">:</span><span style="color: #C3E88D;"> build_nightly</span></span>
<span class="giallo-l"><span style="color: #F07178;">    uses</span><span style="color: #89DDFF;">:</span><span style="color: #C3E88D;"> ./.github/workflows/_build-rust.yml</span></span>
<span class="giallo-l"><span style="color: #F07178;">    with</span><span style="color: #89DDFF;">:</span></span>
<span class="giallo-l"><span style="color: #F07178;">      rust-version</span><span style="color: #89DDFF;">:</span><span style="color: #C3E88D;"> nightly</span></span>
<span class="giallo-l"><span style="color: #F07178;">      do-style-check</span><span style="color: #89DDFF;">:</span><span style="color: #FF9CAC;"> true</span></span>
<span class="giallo-l"><span style="color: #F07178;">      do-test</span><span style="color: #89DDFF;">:</span><span style="color: #FF9CAC;"> false</span></span></code></pre>
<p>The <code>./.github/workflows/_build-rust.yml</code> workflow abstracts setting up the
toolchain, setting up a cargo cache for a faster CI, and, depending on the
configuration, running <code>cargo test|clippy|doc|build|fmt</code>. I think that the
outcome is quite nice and might also help others. Feel free to check out the
corresponding <a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/126">PR</a>.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<h4 id="features">Features</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/624">debug: add debug implementation for file-related structs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/682">uefi: Add <code>delete_variable()</code> helper</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/689">uefi: Drop <code>'boot</code> lifetime from Output protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/693">error: enable <code>core::error::Error</code> for all error payloads</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/694">Remove some more protocol lifetime parameters</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/695">uefi: Implement <code>Borrow</code>/<code>ToOwned</code> for <code>CString16</code>/<code>CStr16</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/692">drop deprecations that are at least in one release</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/662">Add Sorted Iterator for the UEFI Memory Map (Issue#661)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/688">Switch to the stable channel :tada: </a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/701">Merge changes from the 0.20 release</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/705">Rename <code>global_allocator</code> module and change scope of <code>global_allocator</code> feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/699">debug everywhere</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/745">cfg: Add ESRT GUID</a></li>
</ul>
<h4 id="other-improvements">Other Improvements</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/679">uefi-macros: Use a more precise error span</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/704">build(deps): update syn requirement from 1.0.74 to 2.0.4</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/709">Update pull request template</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/710">uefi: Remove static references from <code>SystemTable</code> implementation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/712">Set rust-version = 1.68 in all public packages</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/717">uefi: Fill in some more RuntimeServices fn pointers</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/718">uefi: Add opaque_type macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/719">uefi: Consistently set <code>repr(transparent)</code> on bitflags</a></li>
</ul>
<h4 id="docs">Docs</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/678">uefi-macros: Make <code>entry</code> example more compatible with stable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/683">uefi: Update package docstring</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/680">Rework "Building UEFI programs" sections in the readmes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/684">uefi: Improve clarity of global_allocator</a></li>
</ul>
<h4 id="ci-testing">CI &amp; Testing</h4>
<details><summary><em>show changes</em></summary>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/673">xtask: Add <code>--unstable</code> option to <code>cargo xtask doc</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/671">ci: Increase Windows job timeout</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/666">xtask: Enable strict provenance checks in Miri</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/674">ci: Add a nightly_channel job</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/677">xtask: Add option to skip uefi-macros tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/687">ci: add spellcheck with "typos"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/700">xtask: Add OVMF_CODE/OVMF_VARS env vars</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/690">OVMF: enable "cargo xtask run" under NixOS</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/707">add Cargo.lock</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/706">ci: MSRV fixes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/702">ci: Enable caching</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/708">ci: Drop test_latest_release job</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/711">xtask: Turn off some unnecessary dep features</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/713">Add uefi to workspace members</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/730">dependabot: Ignore patch updates</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/732">dependabot: Fix config syntax</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/738">dependabot: Fix config syntax</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/739">ci: Increase Windows timeout to 10 minutes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/743">Format <code>use</code> consistently</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/744">test-runner: Speculative fix for Windows CI timeout</a></li>
</ul>
</details>
<h4 id="dependencies">Dependencies</h4>
<details><summary><em>show changes</em></summary>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/698">xtask: Upgrade to syn 2.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/722">build(deps): bump clap from 4.0.26 to 4.1.13</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/728">build(deps): bump tempfile from 3.3.0 to 3.4.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/740">build(deps): bump clap from 4.1.13 to 4.2.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/742">build(deps): bump tempfile from 3.4.0 to 3.5.0</a></li>
</ul>
</details><ul></ul>
<p>Thanks to <a rel="external" href="https://github.com/hughsie">@hughsie</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, <a rel="external" href="https://github.com/JohnAZoidberg">@JohnAZoidberg</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, <a rel="external" href="https://github.com/JarlEvanson">@JarlEvanson</a>, and <a rel="external" href="https://github.com/apps/dependabot">@dependabot[bot]</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/408">Remove unused <code>doc_cfg</code> feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/407">Enable <code>doc_auto_cfg</code> on <code>docs.rs</code> builds</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/409">run xtest bash shell</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/404">seal off the <code>PageSize</code> trait</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/410">Add <code>Descriptor::dpl</code> const method and use it in GDT construction</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/412">Set permissions to github workflows</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/415">Create a Security Policy</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/joycebrum">@joycebrum</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/134">acpi: Improve memory mapping usage</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/157">aml: Add <code>l_and</code> parser and opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/156">acpi: Add missing and new fields to GIC CPU interface structure</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/159">Add hack to get <code>aml</code> compiling on 32-bit platforms</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/168">aml: Do not require unstable features from rustc that are not used</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/160">acpi: Fix compile error when allocator_api is not enabled</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/A0lson">@A0lson</a>, <a rel="external" href="https://github.com/rcerc">@rcerc</a>, and <a rel="external" href="https://github.com/rw-vanc">@rw-vanc</a> for their contributions!</p>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/7">pci-pci bridge header</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/8">remove <code>Send</code> requirement from <code>ConfigRegionAccess</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/devsnek">@devsnek</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/347">Run cargo update</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/349">Minor improvements to <code>BootConfig</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/320">Simplified disk builder</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/350">Release version <code>0.11.1</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/351">Release <code>v0.11.2</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/358">Fix docs.rs build</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/359">Release <code>v0.11.3</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jasoncouture">@jasoncouture</a> for their contributions!</p>
<h3 id="vga"><a rel="external" href="https://github.com/rust-osdev/vga"><code>vga</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/RKennedy9064">@RKennedy9064</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/vga/pull/27">Access VGA memory at arbitrary address</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/vga/pull/28">Fix bug in <code>TextModeColor::set_foreground</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/bendudson">@bendudson</a> for their contributions!</p>
<h3 id="pic8259"><a rel="external" href="https://github.com/rust-osdev/pic8259"><code>pic8259</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pic8259/pull/2">Minor typo corrections</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Virux">@Virux</a> for their contributions!</p>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/33">Update build.yml to use minimal scoped permissions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/35">Create a Security Policy</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/joycebrum">@joycebrum</a> for their contributions!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phip1611-paging-calculator"><a rel="external" href="https://github.com/phip1611/paging-calculator"><code>phip1611/paging-calculator</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>In the November newsletter, I announced the initial release of my
<code>paging-calculator</code> CLI utility. Recently, I released a new version, which now
covers page table indices for x86, x86 with physical address extension (PAE),
x86_64, and x86_64 with 5 levels. For example, just type <code>$ paging-calculator 0xdeadbeef x86</code>
and <code>$ paging-calculator 0xdeadbeef x86 --pae</code>and compare the result. You can
install it from <a rel="external" href="https://crates.io/crates/paging-calculator">crates.io</a> or with
the <a rel="external" href="https://github.com/NixOS/nixpkgs/blob/1a165401fe904b9cd89bd731e6e8372883652c7d/pkgs/development/tools/paging-calculator/default.nix"><code>pkgs.paging-calculator</code> attribute</a>,
if you are a <a rel="external" href="https://nixos.org/">Nix</a> user.</p>
<p><img src="https://rust-osdev.com/this-month/2023-03/screenshot-paging-calculator-x86-pae.png" alt="Screenshot: Paging Calculator CLI Utility" /></p>
<h3 id="xiaoyang-sde-rust-kernel-riscv"><a rel="external" href="https://github.com/xiaoyang-sde/rust-kernel-riscv"><code>xiaoyang-sde/rust-kernel-riscv</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/xiaoyang-sde">@xiaoyang-sde</a>)</span></p>
<p><a rel="external" href="https://github.com/xiaoyang-sde/rust-kernel-riscv"><code>rust-kernel-riscv</code></a> is an experimental operating system kernel built using Rust's asynchronous programming model to schedule threads in both kernel and user space. This approach allows for more efficient context switching and eliminates the need for allocating a separate kernel stack for each user process. In its current iteration, the kernel provides a basic shell capable of running several executables that demonstrate various kernel mechanisms.</p>
<p>The kernel provides a built-in executor, which manages the scheduling and execution of threads. Threads are executed for a time slice before an exception or interrupt occurs, and then the executor switches to another thread. To give you a better understanding, I included the <code>async</code> function that represents the lifetime of a user thread below, and I wrote a detailed <a rel="external" href="https://github.com/xiaoyang-sde/rust-kernel-riscv#design-document">design document</a>.</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="rust"><span class="giallo-l"><span style="color: #F78C6C;">async fn</span><span style="color: #82AAFF;"> thread_loop</span><span style="color: #89DDFF;">(</span><span>thread</span><span style="color: #89DDFF;">:</span><span style="color: #FFCB6B;"> Arc</span><span style="color: #89DDFF;">&lt;</span><span style="color: #FFCB6B;">Thread</span><span style="color: #89DDFF;">&gt;) {</span></span>
<span class="giallo-l"><span style="color: #89DDFF;font-style: italic;">    loop</span><span style="color: #89DDFF;"> {</span></span>
<span class="giallo-l"><span style="color: #C792EA;">        let</span><span> trap_context</span><span style="color: #89DDFF;"> =</span><span> thread</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">state</span><span style="color: #89DDFF;">().</span><span style="color: #82AAFF;">lock</span><span style="color: #89DDFF;">().</span><span style="color: #82AAFF;">user_trap_context_mut</span><span style="color: #89DDFF;">();</span></span>
<span class="giallo-l"><span style="color: #82AAFF;">        _enter_user_space</span><span style="color: #89DDFF;">(</span><span>trap_context</span><span style="color: #89DDFF;">,</span><span> thread</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">satp</span><span style="color: #89DDFF;">());</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">        // Invokes related methods to handle the exception or interrupt,</span></span>
<span class="giallo-l"><span style="color: #464B5D;font-style: italic;">        // which returns a variant of the `ControlFlow` enum</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #89DDFF;font-style: italic;">        match</span><span> control_flow</span><span style="color: #89DDFF;"> {</span></span>
<span class="giallo-l"><span style="color: #FFCB6B;">            ControlFlow</span><span style="color: #89DDFF;">::</span><span style="color: #FFCB6B;">Continue</span><span style="color: #89DDFF;"> =&gt;</span><span style="color: #89DDFF;font-style: italic;"> continue</span><span style="color: #89DDFF;">,</span></span>
<span class="giallo-l"><span style="color: #FFCB6B;">            ControlFlow</span><span style="color: #89DDFF;">::</span><span style="color: #FFCB6B;">Yield</span><span style="color: #89DDFF;"> =&gt;</span><span style="color: #82AAFF;"> yield_now</span><span style="color: #89DDFF;">().</span><span style="color: #89DDFF;font-style: italic;">await</span><span style="color: #89DDFF;">,</span></span>
<span class="giallo-l"><span style="color: #FFCB6B;">            ControlFlow</span><span style="color: #89DDFF;">::</span><span style="color: #82AAFF;">Exit</span><span style="color: #89DDFF;">(</span><span>exit_code</span><span style="color: #89DDFF;">) =&gt; {</span></span>
<span class="giallo-l"><span>                thread</span><span style="color: #89DDFF;">.</span><span style="color: #82AAFF;">exit</span><span style="color: #89DDFF;">(</span><span>exit_code</span><span style="color: #89DDFF;">);</span></span>
<span class="giallo-l"><span style="color: #89DDFF;font-style: italic;">                break</span><span style="color: #89DDFF;">;</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">            }</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">        }</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">    }</span></span>
<span class="giallo-l"><span style="color: #89DDFF;">}</span></span></code></pre>
<p>The idea behind <code>rust-kernel-riscv</code> was inspired by Phil's recent <a rel="external" href="https://os.phil-opp.com/async-await/">blog post</a> on using <code>async/await</code> in the kernel. Thanks Phil for his invaluable support to the Rust community!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: February 2023</title>
            <pubDate>Wed, 08 Mar 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-02/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-02/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-02/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-02/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (February 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

    ### Summary
    <span class="maintainers">(Section written by [@author](https://github.com/author))</span>

    <text>
-->
<h3 id="rust-lang-rust"><a rel="external" href="https://github.com/rust-lang/rust"><code>rust-lang/rust</code></a></h3>
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/99679">Add <code>kernel-address</code> sanitizer support for freestanding targets</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/99767">Stabilize <code>#![feature(target_feature_11)]</code></a>. Allows enabling target features such as <code>avx2</code> for specific functions.</li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/106673">Add support for QNX Neutrino to standard library</a></li>
</ul>
<h3 id="cargo-add-c-flag-for-changing-current-dir-before-build"><a rel="external" href="https://github.com/rust-lang/cargo/pull/10952">Cargo: Add '-C' flag for changing current dir before build</a></h3>
<p>This new flag makes <code>cargo</code> switch to the specified directory before building.
This means that the <code>.cargo/config.toml</code> file is also read from that directory, which can be very useful when configuring features such as <a rel="external" href="https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std"><code>build-std</code></a>.</p>
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<p>Here we collect news, blog posts, etc. related to OS development in Rust.</p>
<!--
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.sysgo.com/press-releases/rust-now-available-for-real-time-operating-system-and-hypervisor-pikeos">Rust now available for Real-Time Operating System and Hypervisor PikeOS</a></li>
<li><a rel="external" href="https://gist.github.com/cb372/5f6bf16ca0682541260ae52fc11ea3bb">Writing an OS in Rust to run on RISC-V</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/648">uefi-macros: Fix error tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/652">Release <code>uefi-0.19.1</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/651">Various fixes for tests under Windows</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/613">uefi: Remove mentions of ruyntime usage from GOP docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/653">uefi: Rework <code>exit_boot_services</code> API</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/656">Add component name protocols</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/657">uefi: Export <code>cstr8</code>, <code>cstr16</code>, and entry macros from the root</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/659">Implement <code>Deref</code> for <code>HandleBuffer</code> and <code>ProtocolsPerHandle</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/664">uefi: Improve <code>Input::read_key</code> docstring</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/665">Make more tests fail if protocol is missing</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/585">xtask: Fully drop support for build-std</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/668">ci: Simplify the VM jobs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/670">uefi-macros: Improve entry macro errors</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/667">test-runner: Make <code>unstable</code> an optional feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/672">xtask: Switch fatfs to latest crates.io release</a></li>
</ul>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/335">Create kernel stack with correct size and set up a guard page</a></li>
</ul>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/149">Update aml_tester to clap 4</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/152">Add stub implementations for Handler, read_u16 etc.</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/153">Add def_alias, alias shares handle with target</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/148">Update syntax of literal zero</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/rw-vanc">@rw-vanc</a> for their contributions!</p>
<h3 id="spinning-top"><a rel="external" href="https://github.com/rust-osdev/spinning_top"><code>spinning_top</code></a></h3>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/13">Upgrade lock_api to 0.4.7</a> <span class="gray">(published as <code>v0.2.5</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jannic">@jannic</a> for this contribution!</p>
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/77">Remove features <code>const_mut_refs</code> and <code>use_spin_nightly</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jannic">@jannic</a> for this contribution!</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1189">[Translation][Chinese] post-09 (edition-2)</a>
<ul>
<li>Thanks to <a rel="external" href="https://github.com/weijiew">@weijiew</a> for creating this translation and thanks to <a rel="external" href="https://github.com/liuyuran">@liuyuran</a> for reviewing it!</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1193">Fix typo in edition-3/post-02</a> (thanks to <a rel="external" href="https://github.com/emanuele-em">@emanuele-em</a>)</li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: January 2023</title>
            <pubDate>Tue, 07 Feb 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2023-01/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2023-01/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2023-01/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2023-01/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (January 2023)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

    ### Summary
    <span class="maintainers">(Section written by [@author](https://github.com/author))</span>

    <text>
-->
<ul>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/105795">Stabilize <code>abi_efiapi</code> feature</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/106092">Add checks for the signature of the <code>start</code> lang item</a></li>
<li><a rel="external" href="https://github.com/rust-lang/rust/pull/106045">default OOM handler: use non-unwinding panic, to match std handler</a></li>
</ul>
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<!--
Here we collect news, blog posts, etc. related to OS development in Rust.
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/109qm9j/media_a_gui_installer_for_redox_is_coming_soon/">A GUI installer for redox is coming soon, written in iced!</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/107h9ay/cargoshowasm_0210_new_and_improved_all_over_the/">cargo-show-asm 0.2.10</a></li>
<li><a rel="external" href="https://fosdem.org/2023/schedule/event/rustunikernel/">RustyHermit @ FOSDEM 2023: A Rust-Based, modular Unikernel for MicroVMs</a></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/rybot666">@rybot666</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.</p>
<p>We merged lots of improvements this month:</p>
<h4 id="features">Features</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/302">Load ramdisk feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/326">Add support for a boot configuration file</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/303">Make log level configurable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/314">Add support for logging to serial port (configurable)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/304">Add <code>bios</code> and <code>uefi</code> cargo features</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/319">Add a <code>FrameBuffer::into_buffer</code> method for taking ownership</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/324">Implement faster bios builds</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/289">Support higher half position independent kernels</a></li>
</ul>
<h4 id="fixes">Fixes</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/316">Correctly allocate last frame in memory descriptor</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/334">Fix: treat <code>kernel_slice_end</code> as an exclusive bound when checking for overlaps</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/337">Map BIOS stage-4 at lower address to avoid conflicts with the kernel</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/328">Correctness fixes for stage2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/342">Fix loading of boot configuration</a></li>
</ul>
<h4 id="docs">Docs</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/300">Fix Create Disk Image Example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/341">Make a link in the documentation clickable</a></li>
</ul>
<h4 id="other">Other</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/340">Fix spelling and add a check</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/325">Check for breaking changes on CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/322">Cancel in progress PR builds when a new commit is pushed for that PR</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/332">Remove dependency on <code>time</code> crate</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/333">[test runner] Print QEMU output directly instead of waiting until it finishes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/336">Fix warnings from Clippy</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/339">Test framework: Don't inherit <code>stdin</code> when spawning QEMU</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jasoncouture">@jasoncouture</a>, <a rel="external" href="https://github.com/Stary2001">@Stary2001</a>, <a rel="external" href="https://github.com/AlexJMohr">@AlexJMohr</a>, <a rel="external" href="https://github.com/Freax13">@Freax13</a>, <a rel="external" href="https://github.com/tsoutsman">@tsoutsman</a>, and <a rel="external" href="https://github.com/asensio-project">@asensio-project</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following changes last month:</p>
<h4 id="features-1">Features</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/631">Implement the rest of the TPM v1 interface</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/634">Implement the rest of the TPM v2 interface</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/642">Release uefi-macros-0.10.0, uefi-0.19.0, and uefi-services-0.16.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/645">Add PAGE_SIZE constant and update MemoryProtection protocol docs</a></li>
</ul>
<h4 id="fixes-1">Fixes</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/630">PXE: Fix BaseCode::discover optional argument</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/635">Fix warnings from <code>abi_efiapi</code> stabilization</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/643">uefi: Fix protocol functions to work with unsized protocols</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/646">Fix new lints related to derives on a packed struct</a></li>
</ul>
<h4 id="docs-1">Docs</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/626">uefi: Update MSRV in the readme</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/627">book: Fix link to handles page</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/639">changelog: Move some macro-related changes to correct section</a></li>
</ul>
<h4 id="other-1">Other</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/623">Minor alloc-related cleanups</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/629">uefi: Remove useless padding field</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/640">Move some util code from TCG to a new top-level module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/625">media/test: add integration test for creating a directory</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/633">ci: Update checkout action to latest version</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/641">test-runner: Simplify and slightly refactor the disk test</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/644">ci: fix book/deploy in forks</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/nsemmel">@nsemmel</a> and <a rel="external" href="https://github.com/liferooter">@liferooter</a> for their contributions!</p>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>volatile</code> crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers or framebuffers.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/27">Fix UB in slice methods when <code>Deref</code> returns different references</a> <span class="gray">(published as <code>v0.4.6</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/28">various improvements for the new design</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> for their contributions!</p>
<p>We are still working on a new, safer design. This month, we opened PR <a rel="external" href="https://github.com/rust-osdev/volatile/pull/29">#29</a> to compare and discuss two alternative designs. The main question is whether the provided <code>VolatilePtr</code> type should implement <code>Copy</code> or <code>Send</code>. Only one of these trait implementations is possible, otherwise there could be data races that lead to undefined behavior. Since both variants have valid use cases, the latest proposal is to implement two different types with conversion methods between them. We haven't reached a decision yet, so if anyone has more input on this, please join the discussion.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/rybot666">@rybot666</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following changes in January:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/402">Set <code>repr</code> to transparent for various types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/401">Check for breaking changes on CI</a></li>
</ul>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="metta-systems-vesper"><a rel="external" href="https://github.com/metta-systems/vesper"><code>metta-systems/vesper</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/berkus">@berkus</a>)</span></p>
<p>Vesper is a capability-based single-address-space nanokernel. This means it is aiming to be small, to provide only isolation primitives; at the same time SAS makes it a lot easier to perform cross-process operations (because all addresses are the same across all processes). It uses capabilities to provide security for such operations, so that unauthorized processes will not be able to intervene in legitimate traffic.</p>
<p>The kernel is in very early stages of development...</p>
<p>And for the past few months I've been on and off involved in deciphering a mystical miscompilation problem. I've managed to summarize it in a <a rel="external" href="https://github.com/rust-lang/rust/issues/102849">ticket to rustc</a>.</p>
<p>The most minimal reproduction scenario triggers when I use a format_args!() macro in my code and a nightly version later than 2022-08-12.</p>
<p>Here's a key <a rel="external" href="https://github.com/metta-systems/vesper/blob/85fe40f603e500518af96d6aa922f7ecfa57f0c5/src/main.rs#L117-L119">snippet</a>:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="plain"><span class="giallo-l"><span>// if you keep this line, it works when compiled</span></span>
<span class="giallo-l"><span>// via rustc 2022-08-12 and breaks on 2022-08-13 and all the versions past that.</span></span>
<span class="giallo-l"><span>// if you comment this line out, on 2022-08-13 everything else starts to work.</span></span>
<span class="giallo-l"><span>uart.write_fmt(format_args_nl!(&quot;Lets {}!&quot;, &quot;go&quot;)).ok();</span></span></code></pre>
<p>There's also a <a rel="external" href="https://github.com/metta-systems/vesper/blob/c06d89a23c5c2b0cd3ed5d270aec10054216ea5a/src/main.rs">QEMU-only reproduction code</a>, which is much smaller, as it reuses <code>armv8a_semihosting</code> and <code>armv8a_panic_semihosting</code> crates for pretty much everything.</p>
<p>The behavior is <a rel="external" href="https://github.com/metta-systems/vesper/blob/c06d89a23c5c2b0cd3ed5d270aec10054216ea5a/src/main.rs#L29-L31">the same</a> though:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="plain"><span class="giallo-l"><span>// if you don&#39;t comment it out, it works on 08-12 and breaks on 08-13.</span></span>
<span class="giallo-l"><span>// if you comment this line out on 08-13 everything else starts to work.</span></span>
<span class="giallo-l"><span>armv8a_semihosting::hprintln!(&quot;Lets {}!&quot;, &quot;go&quot;).ok();</span></span></code></pre>
<p>"Working" here means the kernel boots and runs through to the last panic line:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="plain"><span class="giallo-l"><span>[cargo-make] INFO - Running Task: qemu</span></span>
<span class="giallo-l"><span>🚜 Run QEMU -M raspi3b -semihosting with vesper/target/nucleus.bin</span></span>
<span class="giallo-l"><span>Letsgo!</span></span>
<span class="giallo-l"><span>Lets go!</span></span>
<span class="giallo-l"><span>Lets go 2!</span></span>
<span class="giallo-l"><span>panicked at &#39;Off you go!&#39;, src/main.rs:34:5</span></span></code></pre>
<p>And "not working" is the kernel either panicking on boot in arch64, for which I've extracted panic message but I have low confidence this is what actually happens - panic was in once_cell detecting it is initializing a second time, which I discounted as potentially just a bug in linker script layout and not an actual code generation bug. This code is even completely removed in the latest reproduction (no once_cells) but the kernel still crashes before it even can write anything to serial.</p>
<p>In the qemu repro it's even weirder:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="plain"><span class="giallo-l"><span>🚜 Run QEMU -M raspi3b -semihosting with vesper/target/nucleus.bin</span></span>
<span class="giallo-l"></span></code></pre>
<p>No output - because hstdout_str() function from armv8a_semihosting crate fails to open semihosting stdout handle - syscall returns -1. Why would that happen simply by a compiler version change - is the biggest question.</p>
<p>I'm yet to find what am I missing here - assuming this is my own mistake and not a compiler fault, because it would've been noticed by everybody else then? But who knows, maybe you can spot something - drop me a line if you see anything suspicious, I'm pretty much out of ideas here.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1188">Fix broken links</a></li>
</ul>
<p>Thanks a lot to <a rel="external" href="https://github.com/kennystrawnmusic">@kennystrawnmusic</a> for this contribution!</p>
<p>We also have an open pull request for a <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1189">Chinese translation of the <em>Paging Implementation</em> post</a>.
We're still looking for a reviewer, so if you're speaking Chinese we would appreciate if you could take a look.
Thanks!</p>
<p>Since I mostly worked on the <code>bootloader</code> crate this month, I haven't made much process on the upcoming third edition of the blog yet.
I'll do my best to have something ready soon!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: December 2022</title>
            <pubDate>Mon, 09 Jan 2023 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-12/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-12/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-12/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-12/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (December 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<!--
    Please use the following template:

    ### Summary
    <span class="maintainers">(Section written by [@author](https://github.com/author))</span>

    <text>
-->
<h3 id="experimental-feature-gate-proposal-interoperable-abi"><a rel="external" href="https://github.com/rust-lang/rust/pull/105586">Experimental feature gate proposal <code>interoperable_abi</code></a></h3>
<p>This Rust language proposal suggests to create a new <code>extern "interop"</code> ABI as a strict superset of the C ABI.
The goal of this new ABI is to "define a standard way to make calls across high-level languages, passing high-level data types, without dropping to the lowest common denominator of C".
For example, it will define a specific memory representation for strings, tuples, and common standard library types such as <code>Option</code> and <code>Result</code>.</p>
<p>This new ABI would be very useful for operating system development because there are often multiple executables that need to communicate with each other using a stable ABI.
For example, user-space programs communicate with the kernel using <a rel="external" href="https://en.wikipedia.org/wiki/System_call">system calls</a>, and with other programs using different forms of <a rel="external" href="https://en.wikipedia.org/wiki/Inter-process_communication">inter-process communication</a>.
With new <code>extern "interop"</code> ABI, these communication boundaries could use safe, higher-level types when both sides are written in Rust.</p>
<h3 id="default-alloc-error-handler-has-been-stabilized"><a rel="external" href="https://github.com/rust-lang/rust/pull/102318"><code>default_alloc_error_handler</code> has been stabilized</a></h3>
<p>On <code>no_std</code> targets, enabling <code>alloc</code> requires providing an OOM (out-of-memory) handler. The usual implementation of this handler just panics, but implementing the handler requires an unstable feature: <a rel="external" href="https://doc.rust-lang.org/unstable-book/language-features/alloc-error-handler.html#alloc_error_handler"><code>alloc_error_handler</code></a>. The newly-stabilized <code>default_alloc_error_handler</code> automatically provides an OOM handler that panics if no custom handler is implemented. This is an <a rel="external" href="https://github.com/rust-lang/rust/pull/102318#issuecomment-1331865137">important step towards using some targets on the stable channel</a>.</p>
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<!--
Here we collect news, blog posts, etc. related to OS development in Rust.
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<ul>
<li><a rel="external" href="https://www.phoronix.com/news/Linux-6.1-Released">Linux 6.1 Released With MGLRU, Initial Rust Code</a></li>
<li><a rel="external" href="https://phip1611.de/blog/kernel-boot-cope-with-a-relocation-by-a-bootloader-in-32-bit-x86-assembly-code/">Kernel/Boot: Cope with a Relocation by a Bootloader in 32-bit x86 Assembly Code</a> <br />
In this blogpost, <a rel="external" href="https://github.com/phip1611">@phip1611</a> shows you how you can cope with a
relocation by a bootloader in x86 32-bit assembly code.</li>
<li><a rel="external" href="https://phip1611.de/blog/how-does-the-file-size-is-smaller-than-mem-size-optimization-work-in-gnu-ld/">How Does the “File Size is Smaller Than Mem Size” Optimization Work in GNU ld for the .bss Section?</a> <br />
In this blogpost, <a rel="external" href="https://github.com/phip1611">@phip1611</a> explains what properties bring the GNU
linker ld to save disk space, as symbols in the <code>.bss</code> section do not need to be statically
allocated inside the ELF. Symbols in the <code>.bss</code> segment are expected to be initialized to all
zeroes.</li>
<li><a rel="external" href="https://phip1611.de/blog/linking-bss-into-data-to-ensure-the-mem-size-equals-file-size-for-each-load-segment-bss-in-a-progbits-section/">GNU ld: Linking .bss into .data to Ensure that Mem Size Equals File Size For Each LOAD Segment (.bss in a PROGBITS Section)</a> <br />
In this blogpost, <a rel="external" href="https://github.com/phip1611">@phip1611</a> explains what steps you have to do
that the GNU linker put's all symbols of the <code>.bss</code> section "as they are" into the binary
so that they occupy zeroed memory in the ELF. This is relevant for some very rudimentary
ELF loaders that are found in some microkernels to bootstrap their initial process.</li>
<li><a rel="external" href="https://phip1611.de/blog/the-probably-simplest-x86-driver-written-in-assembly-printing-to-qemus-debugcon-device/">The Probably Simplest x86 Driver Written in Assembly – Printing to QEMU’s debugcon-Device)</a> <br />
In this blogpost, <a rel="external" href="https://github.com/phip1611">@phip1611</a> codes with you probably the simplest
driver that one can write in assembly. <em>This blogpost is from September but wasn't mentioned here
earlier.</em></li>
</ul>
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following changes last month:</p>
<h4 id="features">Features</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/606">Implement <code>SIMPLE_NETWORK_PROTOCOL</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/605">Initial support for TCG TPM protocols</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/607">Add <code>unsafe_protocol</code> macro and drop use of the unstable <code>negative_impls</code> feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/603"><code>UnalignedSlice</code>: impl <code>Clone</code> and improve <code>Debug</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/610">Implement <code>Error</code> and <code>Display</code> traits for <code>FromStrError</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/619">Simplification: No longer return "impl Iterator"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/621">uefi: Add <code>ptr_meta</code> dependency</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/622">Drop unstable <code>maybe_uninit_slice</code> and <code>vec_into_raw_parts</code> features</a></li>
</ul>
<h4 id="fixes">Fixes</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/620">uefi: bug fix found by clippy</a></li>
</ul>
<h4 id="docs">Docs</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/600">Add list of possible errors to <code>BootServices::open_protocol</code> docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/602">Add list of possible errors to some <code>BootServices</code> function docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/604">Add docs to <code>BootServices</code> functions describing error cases</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/608">Shortened error documentation for all methods in <code>BootServices</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/611">Replaced UEFI chapter numbers with function identifiers in the docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/614">Add some documentation for media protocols</a></li>
</ul>
<h4 id="tooling">Tooling</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/601">xtask: Update to mbrman 0.5.1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/615">Editorconfig: switch to max line width of 80</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/veluca93">@veluca93</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, and <a rel="external" href="https://github.com/raccog">@raccog</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/rybot666">@rybot666</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following changes in December:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/400">Adding <code>next_higher_level</code> to <code>PageLevelIndex</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/399">Adding <code>is_empty</code> to <code>PageTable</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/398">fix <code>Page::from_page_table_indices</code></a> <span class="gray">(for upcoming <code>v0.15</code> release)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/TornaxO7">@TornaxO7</a> for their contribution!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!</p>
<!--
    Please use the following template for adding items:
    - [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section this month.</em></p>
</span>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="theseus-os"><a rel="external" href="https://github.com/theseus-os/Theseus">Theseus OS</a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://www.theseus-os.com/kevinaboos/">Kevin Boos</a> (<a rel="external" href="https://github.com/kevinaboos">@kevinaboos</a>))</span></p>
<p>Theseus is a safe-language OS written from scratch in Rust that is in the midst of a shift from academic research to usability and legacy compatibility.
Theseus loads and links all components at runtime, and executes everything at a single privilege level in a single address space, relying on Rust safety for isolation and correctness.</p>
<p>As a fully open-source project, we welcome and encourage contributions from everyone!</p>
<p>Since our <a rel="external" href="https://rust-osdev.com/this-month/2022-09/index.html#theseus-os">last update</a> here a few months ago, we have worked on the following things:</p>
<ul>
<li>Introduced <code>dreadnought</code>, a basic async executor that brings Rust's <code>async</code>/<code>await</code> syntax to Theseus
<ul>
<li>Usable by both applications and low-level kernel components</li>
<li>Integrated the concept of wakers with Theseus's native task subsystem</li>
<li>Currently, there is a 1-to-1 relationship between async <code>dreadnought</code> tasks and native Theseus tasks</li>
</ul>
</li>
<li>Rewrote our networking interface to offer better, simpler, and cleaner abstractions
<ul>
<li>It now supports the latest <code>smoltcp</code> version, <code>0.8</code></li>
</ul>
</li>
<li>Added support for booting Theseus on UEFI
<ul>
<li>Previously, Theseus could boot from only multiboot2-compliant bootloaders using legacy BIOS</li>
<li>UEFI on x86_64 now successfully boots after significant redesign of early bootstrap routines</li>
<li>New custom <code>uefi_loader</code> tool, loosely based on the rust-osdev org's <code>bootloader</code> project</li>
<li>Early graphical display for basic text printing is a work-in-progress</li>
<li>UEFI is required to boot Theseus on aarch64; this is also a work-in-progress</li>
</ul>
</li>
<li>Almost completed porting core subsystems to aarch64
<ul>
<li>Bootstrap and logging over UART</li>
<li>Memory management: page table modification, arch-agnostic PTE flags and basic memory types, etc</li>
<li>Basic context switching and task bootstrap</li>
<li>SMP multicore, plus identification of CPU cores</li>
<li>Interrupt handling via GIC</li>
</ul>
</li>
<li>Redesigned the drivers for PS/2 controller, keyboard, and mouse in an intralingual manner that fully leverages Rust's strong type system.</li>
<li>Started implementing a brand new graphics stack and window manager, <code>Porthole</code>, from scratch
<ul>
<li>Added support for x86's Page Attribute Table, which allows Theseus to control the caching properties of individual memory pages</li>
<li>We now map graphics video memory as <em>write-combining</em> instead of cache-disabled, which significantly improves performance</li>
</ul>
</li>
<li>Redesigned task management to give arbitrary tasks fewer privileges
<ul>
<li>Two new types: <code>JoinableTaskRef</code> and <code>ExitableTaskRef</code>
<ul>
<li><code>JoinableTaskRef</code> is similar to <code>std::task::JoinHandle</code>, but is fully safe
<ul>
<li>Ensures that a task can only be <code>join</code>ed by the "parent" task that spawned it</li>
<li>Remove distinction between <code>join</code>ing a task and obtaining its <code>ExitValue</code></li>
<li>Automatically reaps "orphan" tasks that are no longer joinable</li>
</ul>
</li>
<li><code>ExitableTaskRef</code> statically ensures that only a task itself can mark itself as exited
<ul>
<li>Now, a given task can no longer invalidly mark another arbitrary task as exited</li>
</ul>
</li>
</ul>
</li>
<li>Refactored scheduler and task switching to not hold any <code>TaskRef</code>s during a context switch
<ul>
<li>Ensures that exited tasks are dropped and cleaned up expediently</li>
</ul>
</li>
<li>Native ELF Thread-Local Storage (TLS) variables are used to store the current task
<ul>
<li>Accessing the current task is much faster, albeit slightly more complicated to initialize</li>
</ul>
</li>
</ul>
</li>
<li>Implemented a new shell called <code>hull</code>, plus new terminal, console, and TTY components
<ul>
<li>Theseus can now run headlessly, e.g., interactively over a serial port instead of via a graphical display.</li>
</ul>
</li>
<li>Removed usage of <code>owning_ref</code>, a crate with unsoundness, in favor of our own types:
<ul>
<li><code>BorrowedMappedPages&lt;T&gt;</code>: a pseudo-self-referential type that allows persistent, efficient borrowing of a <code>MappedPages</code> memory region as a specific type <code>T</code>
<ul>
<li>Accepts a <code>Mutability</code> type parameter for either immutable (<code>&amp;T</code>) or mutable (<code>&amp;mut T</code>) borrowing</li>
<li>Sister type <code>BorrowedSliceMappedPages</code> also supports dynamically-sized slices, i.e., <code>&amp;[T]</code> and <code>&amp;mut [T]</code></li>
<li>Much more efficient than <code>owning_ref</code> because <code>MappedPages</code> is always pinned in memory, avoiding the need for <code>Box</code> allocation</li>
</ul>
</li>
<li><code>dereffer</code>: a new library crate that provides <code>DerefsTo&lt;T&gt;</code>, a generic wrapper type that allows the enclosed object <code>T</code> to be arbitrarily dereferenced to <em>any</em> inner type reachable from that object <code>T</code>
<ul>
<li>Supports much more arbitrary and complex deref functions than <code>std::ops::Deref</code></li>
</ul>
</li>
</ul>
</li>
<li>Canonicalized the content of Theseus's <code>x86_64-unknown-theseus</code> target spec
<ul>
<li>Codegen flags are now moved into the target spec, making out-of-tree builds easier and more repeatable</li>
<li>Target specs are now ready to be upstreamed into <code>rustc</code> as built-in targets</li>
</ul>
</li>
<li><code>owned_borrowed_trait</code>: a new library crate that abstracts over Owned values vs. Borrowed refs
<ul>
<li>Uses traits and marker types instead of the existing enum-based designs (like <code>Cow</code>)</li>
<li>Doesn't require <code>Clone</code> or care about any characteristics of the inner type <code>T</code></li>
<li>Allows you to use generics and associated <code>const</code>s to conditionally branch based on whether an owned value or borrowed reference was passed into a function</li>
<li>Allows you to return a different (generic) type from a function based on whether an owned value or borrowed reference was passed in</li>
</ul>
</li>
</ul>
<p>Check out the <a rel="external" href="https://www.theseus-os.com/">Theseus OS blog</a> for more.</p>
<h3 id="andy-python-programmer-aero"><a rel="external" href="https://github.com/Andy-Python-Programmer/aero"><code>Andy-Python-Programmer/Aero</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/Andy-Python-Programmer">@Andy-Python-Programmer</a>)</span></p>
<p>Aero is a new modern, experimental, unix-like operating system following the monolithic kernel design. Supporting modern PC features such as long mode, 5-level paging, and SMP (multicore), to name a few.</p>
<p>This month, Aero successfully managed to get <a rel="external" href="https://github.com/freedesktop/mesa-demos"><code>mesa-demos</code></a> and <a rel="external" href="https://github.com/alacritty/alacritty"><code>alacritty</code></a> running.</p>
<p><img src="https://rust-osdev.com/this-month/2022-12/aero.png" alt="Aero" /></p>
<p>In addition, <code>deps.sh</code> script was added to automate the process of installing the required dependencies on the host to build the sysroot.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog in the past two months:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1131">[Chinese] Translate posts 5-8 and improve translation of posts 1-4</a>
<ul>
<li>Thanks to <a rel="external" href="https://github.com/liuyuran">@liuyuran</a> for creating this translation.</li>
<li>Thanks to <a rel="external" href="https://github.com/JiangengDong">@JiangengDong</a> and <a rel="external" href="https://github.com/Byacrya">@Byacrya</a> for reviewing.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1175">[Translation][Korean] post-06</a> and <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1177">[Translation][Korean] post-07</a>
<ul>
<li>Thanks to <a rel="external" href="https://github.com/JOE1994">@JOE1994</a> for creating these translations.</li>
<li>Thanks to <a rel="external" href="https://github.com/dalinaum">@dalinaum</a> for reviewing.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1166">French translation's links fixes</a> <span class="gray">(thanks to <a rel="external" href="https://github.com/alaincao">@alaincao</a>)</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1176">Specify latest 0.9 patch version of <code>bootloader</code></a> <span class="gray">(thanks to <a rel="external" href="https://github.com/seewishnew">@seewishnew</a>)</li>
</ul>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: November 2022</title>
            <pubDate>Wed, 07 Dec 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-11/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-11/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-11/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-11/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<p>We have some new sections this month, we hope you like the content!</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (November 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="infrastructure-and-tooling">Infrastructure and Tooling</h2>
<p>In this section, we collect recent updates to <code>rustc</code>, <code>cargo</code>, and other tooling that are relevant to Rust OS development.</p>
<h3 id="uefi-targets-are-now-tier-2">UEFI Targets are now Tier 2</h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>)</span></p>
<p>The <a rel="external" href="https://github.com/rust-lang/compiler-team/issues/555">MCP to raise the three UEFI targets to tier 2</a> by <a rel="external" href="https://github.com/dvdhrm">@dvdhrm</a> was recently approved.
Following that we merged a PR to <a rel="external" href="https://github.com/rust-lang/rust/pull/103933">dist builds of the UEFI targets</a> so that you can install them via rustup (e.g. <code>rustup target add --toolchain nightly x86_64-unknown-uefi</code>), and a PR to <a rel="external" href="https://github.com/rust-lang/rust/pull/101703">add an initial QEMU test</a> for the x86_64 UEFI target to help prevent regressions from landing.</p>
<p>The initial nightlies containing the prebuilt UEFI targets revealed some issues in <code>compiler_builtins</code> which we fixed and are in the <a rel="external" href="https://github.com/rust-lang/compiler-builtins/compare/0.1.83...0.1.84">0.1.84</a> release.
Finally, we <a rel="external" href="https://github.com/rust-lang/rust/pull/104622">changed the C compiler for the UEFI targets from gcc to clang</a>, which resolved some linker problems.
As of the 2022-11-22 nightly, the three UEFI targets should be fully usable, which means you no longer need to use the unstable <code>-Zbuild-std</code> feature.</p>
<h2 id="announcements-news-and-blog-posts">Announcements, News, and Blog Posts</h2>
<ul>
<li><a rel="external" href="https://www.redox-os.org/news/release-0.8.0/">Redox OS 0.8.0</a></li>
<li><span class="gray">[Talk]</span> <a rel="external" href="https://www.youtube.com/watch?v=osepBlSQjY8">FerrOS: Rust-y unikernels on seL4</a></li>
<li><a rel="external" href="https://www.reddit.com/r/rust/comments/ytrpss/aero_a_new_modern_os_made_in_rust_and_is_now_able/">Aero, a new modern OS made in rust and is now able to run Xorg</a></li>
<li><a rel="external" href="https://asahilinux.org/2022/11/tales-of-the-m1-gpu/">Tales of the M1 GPU</a>
<ul>
<li>Asahi Lina shares her experience with writing a Linux kernel driver for the Apple M1 GPU in Rust.</li>
</ul>
</li>
<li><a rel="external" href="https://security.googleblog.com/2022/12/memory-safe-languages-in-android-13.html">Memory Safe Languages in Android 13</a>
<ul>
<li>There are now ~1.5 million lines of Rust code in AOSP.</li>
<li>"Based on this historical vulnerability density, it’s likely that using Rust has already prevented hundreds of vulnerabilities from reaching production."</li>
</ul>
</li>
<li><a rel="external" href="https://www.phoronix.com/news/More-Rust-Upstream-Prep-Linux">Rust Developers Move Ahead With Preparing To Upstream More Code Into The Linux Kernel</a></li>
</ul>
<!--
Here we collect news, blog posts, etc. related to OS development in Rust.
Please follow this template:

- [Title](https://example.com)
  - (optional) Some additional context
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>Just a few days ago, we finally <a rel="external" href="https://github.com/rust-osdev/bootloader/pull/293">released</a> version <code>0.11.0</code> of the the <code>bootloader</code> crate. This release is a <a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232">major rewrite</a> with various new features and also breaking changes:</p>
<ul>
<li><strong>Separate API crate:</strong> The bootloader is now split into two parts: A <a rel="external" href="https://docs.rs/bootloader_api/0.11.0/bootloader_api/"><code>bootloader_api</code></a> crate to make kernels loadable by the bootloader and the actual bootloader implementation. This makes the build process for kernels much easier and faster.</li>
<li><strong>New config system:</strong> Instead of configuring the bootloader via a special table in the <code>Cargo.toml</code>, the configuration now happens through a normal Rust struct, which is part of the <a rel="external" href="https://docs.rs/bootloader_api/0.11.0/bootloader_api/macro.entry_point.html"><code>entry_point!</code> macro</a>. The macro then serializes the config struct at compile time and places it in a special ELF output section. The compile time serialization happens through a manually implemented <code>const fn</code> of the config struct.</li>
<li><strong>Load the kernel at runtime:</strong> Up to version <code>0.10</code>, the bootloader used to link the kernel at compile time, which required recompiling the bootloader whenever the kernel was modified. In <code>v0.11</code>, we now load both the kernel and the configuration at runtime, so no rebuilding of the bootloader is needed anymore.</li>
<li><strong>Split into sub-crates:</strong> Since the bootloader build process does not need access to the kernel executable or its <code>Cargo.toml</code> anymore, we can build the different parts of the bootloader independently. For example, the BIOS boot sector is now a separate crate, and the UEFI bootloader is too. (We plan to make them proper <a rel="external" href="https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#artifact-dependencies">artifact dependencies</a> as soon as they're allowed on crates.io.)</li>
<li><strong>Library to create disk images:</strong> To create an abstraction the complex build steps of the different bootloader executables, we compile them inside cargo build scripts. At the top level, we provide a <a rel="external" href="https://docs.rs/bootloader/0.11.0/bootloader/"><code>bootloader</code></a> <em>library</em> crate, which compiles everything as part of its build script. This library includes functions for creating BIOS and UEFI disk images for a given kernel. These functions can be used e.g. from a builder crate or a build script of the downstream operating system.</li>
</ul>
<p>See our <a rel="external" href="https://github.com/rust-osdev/bootloader/blob/main/README.md">README</a> for detailed usage instructions. We also created <a rel="external" href="https://github.com/rust-osdev/bootloader/tree/main/docs/migration">migration guides</a> that explain how to update from <code>v0.9</code> and <code>v0.10</code>.</p>
<p>Thanks a lot to the numerous people that tested our beta releases and reported issues!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<h4 id="features">Features</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/544">Make the <code>cstr16!</code> macro usable in const contexts</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/545">const fn for trivial getters where possible</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/549">Support ISA-specific <code>MemoryAttribute</code>s in <code>MemoryDescriptor</code>s</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/552">Allow uefi-services to work when the "logger" feature is disabled in uefi</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/551">Unicode collation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/547">Add structs for all device path node types and a new <code>DevicePathBuilder</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/550">Implement additional <code>BootServices</code> functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/571">Publish new releases</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/546">const fn wherever possible</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/561">rename crate features</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/580">Several small improvements to EqStrUntilNul</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/581"><code>TryFrom&lt;core::ffi::CStr&gt;</code> implementation for <code>CStr8</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/559"><code>Directory::read_entry_boxed</code> plus common abstraction <code>make_boxed</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/587">Implement Error trait for <code>uefi::Error</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/584">Added <code>read_entry_boxed_in</code> and <code>get_boxed_info_in</code> that use the <code>allocator_api</code></a></li>
</ul>
<h4 id="docs">Docs</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/577">Add uefi/README.md</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/555">Install UEFI targets via rustup</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/586">book: Add a graphics example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/556">documentation and code improvements for Status, Error, and read()</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/589">Clean up crate feature list documentation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/590">Add <code>unstable</code> feature and improve CI for feature flags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/588">Doc updates: add "Running on Hardware" to book and drop BUILDING.md</a></li>
</ul>
<h4 id="internal">Internal</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/543">Update <code>mbrman</code> to 0.5.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/534">Don't explicitly require compiler-builtins(-mem)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/574">Add temporary workaround for yanked dependency</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/566">workspace: uefi (main library) is in a dedicated directory now</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/576">Copy LICENSE to the new uefi directory</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/578">Improve clap help for <code>--target</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/562">several unrelated cleanups</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/579">uefi-test-runner: Assume that we're running in the special QEMU env</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/582">Simplify serial usage in test-runner and check that tests completed</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/592">clippy: require must_use_candidate lint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/569">doc: add '--document-private-items' to <code>cargo xtask doc</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/595">test-runner: Make some tests stricter</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/598">test-runner: Open serial device in exclusive mode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/599">Make GOP test work on aarch64</a></li>
</ul>
<!--
#### Other, less notable changes
- [Fix `cargo xtask test` help text](https://github.com/rust-osdev/uefi-rs/pull/542)
- [Fix location of a changelog item](https://github.com/rust-osdev/uefi-rs/pull/548)
- [fs-tests: doc improvements](https://github.com/rust-osdev/uefi-rs/pull/558)
- [changelog: add publish date to all versions](https://github.com/rust-osdev/uefi-rs/pull/567)
- [update PUBLISHING.md](https://github.com/rust-osdev/uefi-rs/pull/568)
- [build(deps): update nix requirement from 0.25.0 to 0.26.1](https://github.com/rust-osdev/uefi-rs/pull/597)
-->
<p>Thanks to <a rel="external" href="https://github.com/blitz">@blitz</a>, <a rel="external" href="https://github.com/YtvwlD">@YtvwlD</a>, <a rel="external" href="https://github.com/timrobertsdev">@timrobertsdev</a>, <a rel="external" href="https://github.com/NathanRoyer">@NathanRoyer</a>, and <a rel="external" href="https://github.com/d-sonuga">@d-sonuga</a> for their contributions!</p>
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a></span></p>
<p>We merged the following tooling changes this month to make the crate more reliable:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/73">Detect fragmentation when fuzzing</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/75">Fix miri test failures caused by address unleaking of heap data in tests</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/evanrichter">@evanrichter</a> for their contribution!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/132">Improve <code>PciConfigRegions</code> API</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/semiviral">@semiviral</a> for their contribution!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!</p>
<!--
    Please use the following template for adding items:
    - [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section this month.</em></p>
</span>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="bendudson-euralios"><a rel="external" href="https://github.com/bendudson/EuraliOS"><code>bendudson/EuraliOS</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/bendudson">@bendudson</a>)</span></p>
<p>EuraliOS is a hobby multitasking operating system written in
Rust. It's based on a microkernel ("Merriwig") that provides on-demand
paging, stack and heap memory management for multi-threaded user
processes. Drivers run in Ring 3 and communication between processes
is by Rendezvous message passing. Each process can have its own
virtual file system, enabling multiple users to be isolated from each
other.</p>
<p>This still has many rough edges and doesn't have many drivers:
EuraliOS only has ramdisk storage, but does have a TCP stack thanks to
the <a rel="external" href="https://github.com/smoltcp-rs/smoltcp">smoltcp</a> crate. The only
user programs are a simple shell and a
<a rel="external" href="https://en.wikipedia.org/wiki/Gopher_(protocol)">Gopher</a> client; I'm
trying to port the <a rel="external" href="https://github.com/ilai-deutel/kibi">kibi</a> text
editor but have a lot of work to do on the standard library.</p>
<p>This was based on <a rel="external" href="https://os.phil-opp.com/">Phil's blog</a> and uses
many rust-osdev crates including
<a rel="external" href="https://github.com/rust-osdev/x86_64">x86_64</a>,
<a rel="external" href="https://github.com/rust-osdev/bootloader">bootloader</a> and
<a rel="external" href="https://github.com/rust-osdev/vga">vga</a>. Thanks to Phil and
Rust-OSdev contributors for all their work supporting this community!</p>
<p>I've tried to
<a rel="external" href="https://github.com/bendudson/EuraliOS#documentation">document</a> the
development steps and hope these are useful for others, particularly
the sections on getting into Ring 3, implementing syscalls and
switching stacks with <code>swapgs</code>. Suggestions for improvement welcome!</p>
<h3 id="hermitcore-hermit-sync"><a rel="external" href="https://github.com/hermitcore/hermit-sync"><code>hermitcore/hermit-sync</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/mkroening">@mkroening</a>)</span></p>
<p>While working on the <a rel="external" href="https://github.com/hermitcore/libhermit-rs"><code>libhermit-rs</code></a> kernel, I moved the synchronization primitives targeted at kernel development into a separate crate: <a rel="external" href="https://github.com/hermitcore/hermit-sync"><code>hermit-sync</code></a>.
Whilst I was there, I also enhanced the code and made it independent from libhermit, so the code can now be used in other projects as well; at least x86_64 and aarch64 ones for the moment.</p>
<p>The crate contains the following features:</p>
<ul>
<li>a function for running a closure without interrupts</li>
<li>a simple spinlock with exponential backoff</li>
<li>a fair ticket lock with exponential backoff</li>
<li><code>OnceCell</code> and <code>Lazy</code> based on <a rel="external" href="https://github.com/mkroening/generic_once_cell"><code>generic_once_cell</code></a> (another recent project of mine)</li>
</ul>
<p>All of these primitives are available with and without interrupt safety.
See the <a rel="external" href="https://docs.rs/hermit-sync">API docs</a> for more details.</p>
<p>Any feedback is very welcome of course.</p>
<h3 id="phip1611-paging-calculator"><a rel="external" href="https://github.com/phip1611/paging-calculator"><code>phip1611/paging-calculator</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>I worked on setting up page tables in a low-level project and noticed that there is lots of room for
confusion. For example, x86 has at least four different modes of paging: 32-bit paging, 32-bit
paging with PAE, 64-bit 4-level paging, and 64-bit 5-level paging. 32-bit without PAE paging uses 10
bits to index into a page table while 64-bit paging uses 9 bits to index into the table of each
level. To demystify the magic a little, I created a CLI utility called <code>paging-calculator</code> that
takes a virtual address as input and shows you the indices the hardware will use. You can find the
utility on <a rel="external" href="https://crates.io/crates/paging-calculator">crates.io</a>.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: October 2022</title>
            <pubDate>Mon, 07 Nov 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-10/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-10/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-10/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-10/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (October 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/507">Change <code>Event</code> to be FFI-safe using <code>NonNull</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/536">Add <code>guid!</code> macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/535">Add Guid methods to convert to/from byte arrays</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/529">Fixes and improvements for <code>Revision</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/539">Replace <code>UnalignedCStr16</code> with <code>UnalignedSlice</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/537">Add new <code>DeviceSubType</code> values</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/538">Fix clippy warnings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/526">uefi-services: Change panic handler log message.</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/timrobertsdev">@timrobertsdev</a> and <a rel="external" href="https://github.com/raccog">@raccog</a> for their contributions!</p>
<!--
- [Copy license file to uefi-macros and uefi-services](https://github.com/rust-osdev/uefi-rs/pull/520)
- [Fix clippy lint by removing unnecessary cast](https://github.com/rust-osdev/uefi-rs/pull/525)
- [Update documentation section of readme](https://github.com/rust-osdev/uefi-rs/pull/519)
- [Fix warning from unneeded `macro_use`](https://github.com/rust-osdev/uefi-rs/pull/527)
- [Add option to disable network tests](https://github.com/rust-osdev/uefi-rs/pull/528)
- [Tweak pull request template wrapping](https://github.com/rust-osdev/uefi-rs/pull/533)
- [ci: Simplify some jobs with ubuntu-22.04 runner](https://github.com/rust-osdev/uefi-rs/pull/532)
-->
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/71">Consider regions that lead to very small back paddings as unsuitable</a>
<ul>
<li>Fixes a potential <a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/issues/66">memory leak</a> that was introduced with <code>v0.10</code>.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/69">Add a random action fuzzer</a>
<ul>
<li>Runs randomized tests against the <code>allocate_first_fit</code>, <code>deallocate</code>, and <code>extend</code> methods</li>
<li>This is the fuzzer that was used to discover the <a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/security/advisories/GHSA-xg8p-34w2-j49j">possible out-of-bounds writes in versions <code>&lt;=0.10.1</code></a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/72">Run new cargo-fuzz job on CI with time limit</a>
<ul>
<li>Fuzzes each commit and PR for 5 minutes as a guard against regressions</li>
<li>The CI job is also run on schedule every day to test against the latest Rust nightly and to increase the chance of finding improbably bugs over time.</li>
</ul>
</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/evanrichter">@evanrichter</a> for their contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/rybot666">@rybot666</a>, and <a rel="external" href="https://github.com/64">@64</a></span></p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/267">Update <code>noto-sans-mono-bitmap</code> to <code>v0.2.0</code></a>
<ul>
<li>now supports more unicode ranges, including the fallback character <code>�</code></li>
<li>code ranges are optional via cargo features to minimize binary size</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/269">implement read-only relocations</a>
<ul>
<li>implements <code>GNU_RELRO</code> program header handling to make relocations read-only</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/268">allow booting without a UEFI graphics output</a>
<ul>
<li>don't error if no UEFI framebuffer is detected</li>
<li>this was merged into the <code>next</code> branch for the upcoming <code>v0.11</code> release</li>
</ul>
</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/phip1611">@phip1611</a>, and <a rel="external" href="https://github.com/Freax13">@Freax13</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>This month, we began work to remove <code>acpi</code>'s dependence on the <code>alloc</code> crate for allocations, instead directly
using the <a rel="external" href="https://doc.rust-lang.org/beta/core/alloc/trait.Allocator.html"><code>core::alloc::Allocator</code></a> API. This
improves support for bootloaders and kernels that want to treat memory allocation as fallible, allowing them to
more gracefully recover from out-of-memory situations. In the future, we hope that this support will be brought
into <code>alloc</code>, so that the library can return to using the standard containers.</p>
<p>These changes are not yet finished or released, but a new major version will likely be out in December with these
changes, as well as better support for PCI topologies with multiple segment groups, and a few other changes. If
you'd like to make use of these new features as they're developed, they're already in <code>main</code>, so you can use a Git
dependency.</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/131">Rework crate to work without allocations</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/128">Add Debug implementations</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/semiviral">@semiviral</a>, and <a rel="external" href="https://github.com/mattfbacon">@mattfbacon</a> for their contributions!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!</p>
<!--
    Please use the following template for adding items:
    - [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section this month.</em></p>
</span>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="d-sonuga-blog-blasterball"><a rel="external" href="https://github.com/d-sonuga/blog-blasterball/"><code>d-sonuga/blog-blasterball</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/d-sonuga">@d-sonuga</a>)</span></p>
<p><a rel="external" href="https://d-sonuga.netlify.app/">Demilade Sonuga's Blog</a> is a new blog on writing a
simple blasterball game with no OS, no engine and minimal external crates. The blog's aim is to take a Rust
beginner from starting the project to finishing it and understanding everything involved in the project's
creation.</p>
<p>The project is still in it's early stages, so lots of feedback is very much needed.</p>
<p>If you're interested, please take a look, and send your thoughts to <a rel="external" href="https://twitter.com/d_sonuga/">@d_sonuga</a>
on Twitter.</p>
<h3 id="talk-on-windows-linked-lists-in-safe-and-idiomatic-rust">Talk on Windows Linked Lists in safe and idiomatic Rust</h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/ColinFinck">@ColinFinck</a>)</span></p>
<p>At the first ever EuroRust conference from 13th to 14th October, Colin Finck gave a talk about the challenges of developing his <a rel="external" href="https://github.com/ColinFinck/nt-list"><code>nt-list</code></a> crate.
The crate provides a safe and idiomatic Rust wrapper around the Windows variant of Linked Lists.
It was presented on this blog <a href="https://rust-osdev.com/this-month/../this-month/2022-07/#nt-list-windows-linked-lists-in-idiomatic-rust">in July</a>.</p>
<p>A <a rel="external" href="https://www.youtube.com/watch?v=IxhZIyXOIw8">recording</a> of the talk has just been uploaded.
Check it out, and also check out the <a rel="external" href="https://www.youtube.com/channel/UCR3gXcme1HMK7_TrUaNZOqw/videos">other videos</a> from that conference for some great takes on Rust!</p>
<p><a rel="external" href="https://www.youtube.com/watch?v=IxhZIyXOIw8"><img src="https://rust-osdev.com/this-month/2022-10/nt-list-video.jpg" alt="Preview of video: Windows linked lists in safe and idiomatic Rust - Colin Finck - EuroRust 2022" title="Preview of video: Windows linked lists in safe and idiomatic Rust - Colin Finck - EuroRust 2022" /></a></p>
<h3 id="madernoob-galloc"><a rel="external" href="https://github.com/MaderNoob/galloc"><code>MaderNoob/galloc</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>The new <a rel="external" href="https://crates.io/crates/good_memory_allocator"><code>good_memory_allocator</code></a> crate implements a <code>no_std</code>-compatible linked list allocator, inspired by the <a rel="external" href="https://gee.cs.oswego.edu/dl/html/malloc.html"><code>dlmalloc</code></a> algorithm. It stores an additional <code>usize</code> of metadata per allocation, which decreases memory efficiency, but increased runtime efficiency. The <code>README</code> includes promising <a rel="external" href="https://github.com/MaderNoob/galloc#benchmarks">benchmark results</a> that compare the crate against the <a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a> and <a rel="external" href="https://github.com/phip1611/simple-chunk-allocator"><code>simple-chunk-allocator</code></a> crates.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1135">Korean translation of <em>Testing</em> post</a>
<ul>
<li>Read it at <a rel="external" href="https://os.phil-opp.com/ko/testing/">https://os.phil-opp.com/ko/testing/</a></li>
<li>Thanks to <a rel="external" href="https://github.com/JOE1994">@JOE1994</a> for creating the translation and to <a rel="external" href="https://github.com/SNOOPYOF">@SNOOPYOF</a> and <a rel="external" href="https://github.com/dalinaum">@dalinaum</a> for reviewing!</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1162">Korean translation of <em>CPU Exceptions</em> post</a>
<ul>
<li>Read it at <a rel="external" href="https://os.phil-opp.com/ko/cpu-exceptions/">https://os.phil-opp.com/ko/cpu-exceptions/</a></li>
<li>Thanks to <a rel="external" href="https://github.com/JOE1994">@JOE1994</a> for creating the translation and to <a rel="external" href="https://github.com/KimWang906">@KimWang906</a> for reviewing!</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1144">French translation of <em>A Minimal Rust Kernel</em> post</a>
<ul>
<li>Read it at <a rel="external" href="https://os.phil-opp.com/fr/minimal-rust-kernel/">https://os.phil-opp.com/fr/minimal-rust-kernel/</a></li>
<li>Thanks to <a rel="external" href="https://github.com/TheMimiCodes">@TheMimiCodes</a> and <a rel="external" href="https://github.com/maximevaillancourt">@maximevaillancourt</a> for creating the translation and to <a rel="external" href="https://github.com/alaincao">@alaincao</a> for reviewing (and for <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1166">fixing links</a>)!</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1147">Update zola to v0.16.1</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1146">Fixes bad URL from <code>post-09</code> address calculation section</a> <span class="gray">(thanks to <a rel="external" href="https://github.com/seewishnew">@seewishnew</a>)</span></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1151">Remove warning output from QEMU command</a> <span class="gray">(thanks to <a rel="external" href="https://github.com/lovemeforareason">@lovemeforareason</a>)</span></li>
</ul>
<h2 id="other-news">Other News</h2>
<ul>
<li><a rel="external" href="https://www.phoronix.com/news/Rust-UEFI-Promoted-Tier-2">Rust UEFI Firmware Targets Promoted To Tier-2 Status</a></li>
<li><a rel="external" href="https://twitter.com/dwizzzleMSFT/status/1578532292662005760">Microsoft seems to ship Rust code in Windows Font Parsing (dwrite)</a></li>
<li>Announcement of <a rel="external" href="https://github.com/pop-os/cosmic-text">COSMIC Text</a>, a pure Rust library for font shaping, layout, and rendering
<ul>
<li>Based on <a rel="external" href="https://github.com/RazrFalcon/rustybuzz"><code>rustybuzz</code></a> and <a rel="external" href="https://github.com/dfrg/swash"><code>swash</code></a>, with custom layout and font fallback implementations</li>
<li>Developed for the upcoming Rust-based desktop environment for <a rel="external" href="https://pop.system76.com/">Pop_OS</a> and also usable for <a rel="external" href="https://www.redox-os.org/">Redox OS</a></li>
</ul>
</li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: September 2022</title>
            <pubDate>Fri, 07 Oct 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-09/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-09/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-09/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-09/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (September 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/rybot666">@rybot666</a>, and <a rel="external" href="https://github.com/64">@64</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.</p>
<p>We encountered various boot issues with the new <code>v7.1.0</code> release of QEMU in September. This also affected downstream projects such as <a rel="external" href="https://github.com/phil-opp/blog_os/issues/1138"><code>phil-opp/blog_os</code></a> and <a rel="external" href="https://github.com/hawkw/mycelium/issues/321"><code>hawkw/mycelium</code></a>. After some debugging, we found out that QEMU now reports a new memory region at offset ~1 TiB in the physical memory map, which was much higher than expected by the bootloader crate. As a result, BIOS booting became unusably slow (because of the initial identity mapping) and the automated offset selection for the physical memory map ran into a panic. For full details, see the <a rel="external" href="https://github.com/rust-osdev/bootloader/issues/259">summary issue</a>.</p>
<p>We fixed the issues in the following way:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/260">Limit BIOS bootloader's <code>max_phys_addr</code> to 4 GiB</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/265">Only perform a single TLB flush after identity mapping</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/263">fix <code>get_free_address</code> for large sizes (0.10)</a> <span class="gray">(published as <code>0.10.13</code>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/264">allow allocating more than one level 4 entry (0.9)</a>  <span class="gray">(published as <code>0.9.23</code>)</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/hawkw">@hawkw</a> and <a rel="external" href="https://github.com/Freax13">@Freax13</a> for these contributions!</p>
<p>We also brought the <a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232">upcoming <code>v0.11</code> release</a> even closer to the finish line. Thanks to an extensive review of <a rel="external" href="https://github.com/Freax13">@Freax13</a>, we found and fixed multiple remaining issues. Also thanks to <a rel="external" href="https://github.com/asensio-project">@asensio-project</a> and <a rel="external" href="https://github.com/TheBotlyNoob">@TheBotlyNoob</a> for testing the new version and reporting bugs! Some notable changes are:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/08e4b5829bf5882d9d396e641e32b65de72704b2">Allocate kernel as normal UEFI loader data</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/667e57f552e214f9c19848306e03b00d91a8114f">Preserve <code>RUNTIME_SERVICES_*</code> memory regions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/454f70740df13107d4748d63b1d646f176f6fa62">Update usage instructions and architecture description in README</a></li>
</ul>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/515">Add an mdBook</a>
<ul>
<li>Read it at <a rel="external" href="https://rust-osdev.github.io/uefi-rs/HEAD/">https://rust-osdev.github.io/uefi-rs/HEAD/</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/478">More protocol safety improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/497">Implement <code>HardDriveMediaDevicePath</code> (along with MBR and GPT tests). </a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/479">Drop use of unstable try_trait_v2 feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/475">"is_regular_file" for file trait + integration test</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/506"><code>CStr8</code> cleanup and enhancements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/476">Transform feature "ignore-logger-errors" to additive feature.</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/513">Release <code>uefi-macros-0.8.0</code>, <code>uefi-0.17.0</code>, <code>uefi-services-0.14.0</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/518">Add <code>PhysicalAddress</code> and <code>VirtualAddress</code> type aliases</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/514">Change DevicePath[From|To]Text methods to return a Result</a></li>
</ul>
<!--
- [`is_media_preset` -> `is_media_present` in `BlockIOMedia`](https://github.com/rust-osdev/uefi-rs/pull/495)
- [Update changelog](https://github.com/rust-osdev/uefi-rs/pull/499)
- [Add rust-toolchain.toml and pin to a working nightly](https://github.com/rust-osdev/uefi-rs/pull/502)
- [Create `pull_request_template.md`](https://github.com/rust-osdev/uefi-rs/pull/503)
- [Update changelog for uefi-macros](https://github.com/rust-osdev/uefi-rs/pull/505)
- [Temporarily revert use of `core::ffi::CStr`](https://github.com/rust-osdev/uefi-rs/pull/509)
- [Update uefi changelog](https://github.com/rust-osdev/uefi-rs/pull/512)
- [ci: Test the build on an old nightly](https://github.com/rust-osdev/uefi-rs/pull/517)
- [Switch the toolchain back to latest nightly](https://github.com/rust-osdev/uefi-rs/pull/516)
- [Update clap requirement from 3.2.1 to 4.0.4](https://github.com/rust-osdev/uefi-rs/pull/521)

-->
<p>Thanks to <a rel="external" href="https://github.com/ColinFinck">@ColinFinck</a> for their contribution!</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a></span></p>
<p>The <code>xhci</code> crate provides types of xHCI structures, such as Registers and TRBs.</p>
<p>We merged the following changes in September:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/147">Implement Default for registers without RsvdP bits</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/148">Add set_0_* to rw1c! macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/149">Release 0.9.1</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Demindiro">@Demindiro</a> for their contribution!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!</p>
<!--
    Please use the following template for adding items:
    - [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1131#issuecomment-1251963782">(<code>phil-opp/blog_os</code>) Looking for a reviewer for a Chinese translation</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1135#issuecomment-1264665246">(<code>phil-opp/blog_os</code>) Looking for a reviewer for a Korean translation</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1144">(<code>phil-opp/blog_os</code>) Looking for a reviewer for a French translation</a></li>
</ul>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h3 id="theseus-os"><a rel="external" href="https://github.com/theseus-os/Theseus">Theseus OS</a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://www.theseus-os.com/kevinaboos/">Kevin Boos</a> (<a rel="external" href="https://github.com/kevinaboos">@kevinaboos</a>))</span></p>
<p>Theseus is a safe-language OS written from scratch in Rust that is in the process of migrating from pure academic research objectives to more general usability and legacy compatibility.
As a fully open-source project, we welcome and encourage contributions from everyone!</p>
<p>Since our <a rel="external" href="https://rust-osdev.com/this-month/2022-07/index.html#theseus-os">last update</a> here two months ago, we have worked on the following things:</p>
<ul>
<li>Continued our port of Rust <code>std</code> to Theseus
<ul>
<li>Follow our progress in <a rel="external" href="https://github.com/theseus-os/rust/issues/12">this tracking issue</a></li>
<li>Completed: <a rel="external" href="https://github.com/theseus-os/Theseus/pull/581">environment variables</a>, <a rel="external" href="https://github.com/theseus-os/Theseus/pull/582">RNGs</a></li>
<li>In progress: timekeeping, proper virtual filesystem implementation, raw synchronization primitives</li>
</ul>
</li>
<li>Began adding support for the <code>aarch64</code> ARM architecture to Theseus
<ul>
<li>Still an early work-in-progress</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/theseus-os/Theseus/pull/592">Redesigned our Local APIC implementation</a> to avoid unnecessary conditionals and panics
<ul>
<li>Now the abstraction of functionality across xAPIC and x2APIC is cleaner</li>
</ul>
</li>
<li>Only disable preemption, not interrupts, during sensitive task management functions
<ul>
<li>Introduced a <a rel="external" href="https://github.com/theseus-os/Theseus/pull/595">safe abstraction for a preemption-disabling guard type</a></li>
<li>Added a <a rel="external" href="https://github.com/theseus-os/Theseus/pull/627">preemption-safe <code>Mutex</code> and <code>RwLock</code> implementation</a></li>
<li>We now use preemption-safe guards for <a rel="external" href="https://github.com/theseus-os/Theseus/pull/603">task switching</a>, <a rel="external" href="https://github.com/theseus-os/Theseus/pull/616">task lifecycle/cleanup functions</a>, and <a rel="external" href="https://github.com/theseus-os/Theseus/pull/629">runqueue management</a></li>
</ul>
</li>
<li>Improved task management functions to expediently clean up existed tasks
<ul>
<li>Introduced a clear concept of a <a rel="external" href="https://github.com/theseus-os/Theseus/pull/600">post-context switch action</a>
<ul>
<li>Guarantees that the post-context switch action will <em>always</em> occur, even when switching to a brand new task or switching away from an exited task</li>
</ul>
</li>
<li>Clarified the <a rel="external" href="https://github.com/theseus-os/Theseus/pull/630">ownership of the next task's <code>TaskRef</code> during a task switch</a>, ensuring that it is dropped at the right time to avoid delays in its cleanup</li>
<li>Ensured that <a rel="external" href="https://github.com/theseus-os/Theseus/pull/614">orphaned tasks are properly reaped</a> via the <code>JoinableTaskRef</code> type</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/theseus-os/Theseus/pull/605">Avoided using <code>lazy_static</code> where possible</a> in favor of plain <code>const</code> expressions
<ul>
<li>Rust's <code>const_btree_new</code> nightly feature allows <code>BTree::new()</code> to be <code>const</code></li>
<li>Also <a rel="external" href="https://github.com/jeffparsons/rangemap/pull/52">contributed a PR to the <code>rangemap</code> crate</a> such that it can optionally use that new feature
<ul>
<li>This makes it <a rel="external" href="https://github.com/theseus-os/Theseus/pull/606">faster to access and generate TLS data images</a> for new Task creation in Theseus</li>
</ul>
</li>
</ul>
</li>
<li>Refactored all interrupt handlers into a more conventional design
<ul>
<li>Previously, the single <code>interrupts</code> crate would statically register device-specific interrupt handlers</li>
<li>Now, each device crate dynamically registers their interrupt handlers with the <code>interrupts</code> crate when they initialize themselves
<ul>
<li>Examples: PS2 <a rel="external" href="https://github.com/theseus-os/Theseus/commit/5423124bd54003c015ec66b68c797d1a7686b550">mouse</a>, <a rel="external" href="https://github.com/theseus-os/Theseus/commit/0bebdc1c9a2e058ed50f09313968a6eaf1b4fec2">keyboard</a>, <a rel="external" href="https://github.com/theseus-os/Theseus/pull/611">ATA disks</a>,</li>
</ul>
</li>
<li>The original design favored explicit dependencies from <code>interrupts</code> to <code>&lt;device crate&gt;</code> for predictable behavior over dynamically-registered states, but causes problems with inverted and cyclic dependencies</li>
</ul>
</li>
<li>Introduced <code>clippy</code> CI action and <a rel="external" href="https://github.com/theseus-os/Theseus/issues/526">addressed most lint warnings</a>
<ul>
<li><code>rustfmt</code> is next, with the hope of standardizing our code base</li>
</ul>
</li>
</ul>
<p>Check out the <a rel="external" href="https://www.theseus-os.com/">Theseus OS blog</a> for the latest details.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1141">Translate post-07 to Japanese</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1129">Copyedit edition 2 <code>paging-introduction/index.md</code></a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1142">Fix typo in french translation <code>01-freestanding-rust-binary</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/shimomura1004">@shimomura1004</a>, <a rel="external" href="https://github.com/woodyZootopia">@woodyZootopia</a>, <a rel="external" href="https://github.com/bolded">@bolded</a>, and <a rel="external" href="https://github.com/Firenezz">@Firenezz</a> for their contributions!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: August 2022</title>
            <pubDate>Tue, 06 Sep 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-08/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-08/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-08/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-08/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (August 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<!--
    Please use the following template:

    ### [`repo_name`](https://github.com/rust-osdev/repo_name)
    <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span>

    The `repo_name` crate ...<<short introduction>>...

    We merged the following changes this month:
    <<changelog, either in list or text form>>
-->
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following changes in August:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/467">Add <code>DiskIo</code> and <code>DiskIo2</code> protocols</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/430">Added macros <code>print!</code> and <code>println!</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/487">Use <code>doc_auto_cfg</code> to show feature requirements on docs.rs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/493">add <code>Ord</code> and <code>PartialOrd</code> for <code>Guid</code> struct</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/474">QEMU/OVMF improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/480">Update <code>nix</code> requirement from 0.24.1 to 0.25.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/485">Update deprecation version in <code>ScopedProtocol::interface</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/482">Relax version requirements for various deps</a></li>
</ul>
<p>We also published a subset of the above changes as a new <code>v0.16.1</code> release:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/490">Cherry-pick fixes to the <code>version-0.16</code> branch</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/492">Update changelog for 0.16.1</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/kendase3">@kendase3</a>, <a rel="external" href="https://github.com/JonahPlusPlus">@JonahPlusPlus</a>, and <a rel="external" href="https://github.com/e820">@e820</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/rybot666">@rybot666</a>, and <a rel="external" href="https://github.com/64">@64</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.</p>
<p>This month, we finally finished the new BIOS boot implementation for the <a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232">upcoming <code>v0.11</code> release</a>. It's now almost completely written in Rust (instead of assembly), which should make further improvements much easier.</p>
<p>Some selected commits that might be interesting:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/6492eab051b71a19b58a4f70185e7898fabb2c46">Load a third stage</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/84eea29b69ac75c0d7ce9c36e0d2a1369052dc2b">Load the kernel into buffer memory</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/52ad3e2afab4f902ef5acb3241d7bc34c2a16e94">Copy kernel to protected mode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/7cf073eae6a5c6e30684a67cdac66016c7dcfdf2">Jump to third stage</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/824786b0498a8f02e4d79ca8c8477ed68dae0068">Set up paging and enter long mode (compatibility mode)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/39ba5269eada8ad40963d2ec7c92c4a6410060ab">Create prototype for long mode stage 4 and load it</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/05130d1d356e7e1566f7e576245580fc542184e6">Load long mode <code>GDT</code> and jump to 4th stage</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/d8931970365a2ac26088320678cc8ce6ae60150d">Query vesa modes and filter by resolution</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/557c03427f5d143ee814fb908b05c584ec37b87a">Enable VESA framebuffer and update screen writer in stages 3 and 4</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/232/commits/48cd6dcd109778032ce586735f5be1f1dac67117">Load <code>E820</code> memory map and put everything together</a></li>
</ul>
<p>All the tests are passing now, so we only need to do some cleanup and write proper documentation, then we should be ready to publish an alpha release for testing.</p>
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a></span></p>
<p>The <code>linked-list-allocator</code> crate provides a basic <code>no_std</code> allocator that builds a linked list from freed memory blocks and thus needs no additional data structures.</p>
<p>In August, <a rel="external" href="https://github.com/evanrichter">Evan Richter</a> discovered a <em>vulnerability in <code>Heap::extend</code></em> that could lead to out-of-bound writes. The issue occurred when <code>extend</code> was called with a size smaller than <code>size_of::&lt;usize&gt; * 2</code>, i.e., a size too small to store the metadata for the new memory region.</p>
<p>Upon investigating this issue, we found several similar issues:</p>
<ul>
<li>Initializing a heap with a size smaller than <code>size_of::&lt;usize&gt; * 3</code> could result in an out-of-bounds write too.</li>
<li>Calling <code>extend</code> on an uninitialized heap could also result in an out-of-bounds write.</li>
<li>Calling <code>extend</code> on a heap whose size is not a multiple of the size of two <code>usize</code>s resulted in unaligned writes.</li>
</ul>
<p>We created a <a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/security/advisories/GHSA-xg8p-34w2-j49j">security advisory</a> with more details and released a fix in <code>v0.10.2</code>, with the following changes:</p>
<ul>
<li>The initialization functions now panic if the given size is not large enough to store the necessary metadata. Depending on the alignment of the heap bottom pointer, the minimum size is between <code>2 * size_of::&lt;usize&gt;</code> and <code>3 * size_of::&lt;usize&gt;</code>.</li>
<li>The <code>extend</code> method now panics when trying to extend an uninitialized heap.</li>
<li>Extend calls with a size smaller than <code>size_of::&lt;usize&gt;() * 2</code> are now buffered internally and not added to the list directly. The buffered region will be merged with future <code>extend</code> calls.</li>
<li>The <code>size()</code> method now returns the <em>usable</em> size of the heap, which might be slightly smaller than the <code>top() - bottom()</code> difference because of alignment constraints.</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/evanrichter">@evanrichter</a> for reporting this vulnerability and working with us on a fix.</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a></span></p>
<p>The <code>xhci</code> crate provides types of xHCI structures, such as Registers and TRBs.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/143">Rename <code>InterruptRegisterSet</code> to <code>InterrupterRegisterSet</code></a> <span class="gray">(<a rel="external" href="https://github.com/rust-osdev/xhci/pull/144">published as <code>0.8.7</code></a>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/142">Allow updating single fields of InterrupterRegisterSet</a> <span class="gray">(<a rel="external" href="https://github.com/rust-osdev/xhci/pull/145">published as <code>0.9.0</code></a>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Demindiro">@Demindiro</a> for their contribution!</p>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a></span></p>
<p>The <code>pci_types</code> library provides types for accessing and configuring PCI devices from Rust operating systems.</p>
<p>We merged the following change in August:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/6">64-bit <code>BAR</code> clarification</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/0Killian">@0Killian</a> for this contribution!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>, <a rel="external" href="https://github.com/Restioson">@Restioson</a>, and <a rel="external" href="https://github.com/Gegy">@Gegy</a></span></p>
<p>The <code>acpi</code> 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.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/121">fix <code>HpetInfo::num_comparators</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/123">Various comments, fix <code>PM_TMR_BLK</code> checking of <code>PM_TMR_LEN</code> to match spec</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/semiviral">@semiviral</a>, and <a rel="external" href="https://github.com/Freax13">@Freax13</a> for their contributions!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!</p>
<!--
    Please use the following template for adding items:
    - [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="cdrzewiecki-celos"><a rel="external" href="https://gitlab.com/cdrzewiecki/celos"><code>cdrzewiecki/celos</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/drzewiec">@drzewiec</a>)</span></p>
<p>It's been a while since my last project update! That's partly because life has been busy, but also because this update concerns a huge feature. I'm very pleased to report that I have been able to add preemptive multitasking to CelOS.</p>
<p>This was feature that took a good bit of foundation to be able to implement (hence why it took me so long). I had to spend a good bit of time getting memory allocation (both physical and virtual) into a happier place, as well as add support for ACPI and the APIC. And, of course, there were many snags along the way as I learned (at least some of) the traps that are easy to step into when doing something as delicate as context switching.</p>
<p>Now that I have finished this key feature, I plan to work on setting up the other infrastructure needed to begin writing services in userspace (such as message passing and synchronization primitives). And, hopefully soon, finally make the jump into ring 3!</p>
<p>As always, many thanks to <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> for his hard work on supporting the Rust osdev community, and for writing the <a rel="external" href="https://github.com/rust-osdev/apic">apic</a> crate which helped serve as a sanity check while I wrote my own driver for the IOAPIC and LAPIC. Thanks as well to the maintainers of the excellent <a rel="external" href="https://github.com/rust-osdev/acpi">acpi</a> crate, you guys are doing incredible work out there!</p>
<h3 id="blog-post-gnu-ld-discards-section-containing-code-section-flags-in-assembly-are-important">Blog Post: GNU ld Discards Section Containing Code – Section Flags in Assembly are Important</h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>In late August/early September, I encountered problems when building my Rust kernel. I faced
unintuitive interaction between my global assembly code and the linker. I specified a custom
section in assembly with executable code with <code>.section .bootcode</code>. The linker never linked
the code where I specified it in my linker script. It's address was not what it is supposed to be.
<code>readelf</code> didn't show the section inside the binary either. The section was discarded no matter
how hard I tried to modify the linker, thus, <code>KEEP((.bootcode));</code> also didn't work. An experienced
colleague ensured me that my linker script is correct.</p>
<p>Section names such as <code>.init</code> or <code>.text.bootcode</code> worked by the way. Only my custom name was
rejected somehow. In the end, I figured out writing <code>.section .bootcode, "ax"</code> does the trick. The
difference is small, but the impact to the object file and final executable of those section flags
is big. I could find the answer in the ELF specification. A section needs to be allocatable
(<code>a</code>-flag) so that it can be properly placed in a LOAD segment/program header. The section names
<code>.init</code> and <code>.text.*</code> have this pre-configured but my custom section name <code>.bootcode</code> has not.</p>
<p>I traced it down to a minimal reproducible example that can be found <a rel="external" href="https://github.com/phip1611/gnu-linker-discards-code-section-that-is-not-in-text-section">on GitHub</a>.
A comprehensive write-up can be found on my website <a rel="external" href="https://phip1611.de/blog/gnu-ld-discards-section-containing-code/">Phip's Blog</a>.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>This month, we merged a pull request that fixes numerous grammar and punctuation errors across all posts of the <a rel="external" href="https://os.phil-opp.com/"><em>"Writing an OS in Rust"</em></a> series. Thanks to <a rel="external" href="https://github.com/hecatia-elegua">@hecatia-elegua</a> for this contribution!</p>
<p>We also received multiple pull requests to add and update translations:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1127">Fix Japanese translation of "Double Faults"</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1131">Update the chinese translation</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1135">[Translation][Korean] post-04</a></li>
</ul>
<p>We are still looking for reviewers for the last two PRs. If you speak Chinese or Korean, it would be great if you could take a look!</p>
<p>Thanks to <a rel="external" href="https://github.com/ykomatsu">@ykomatsu</a>, <a rel="external" href="https://github.com/liuyuran">@liuyuran</a>, and <a rel="external" href="https://github.com/JOE1994">@JOE1994</a> for contributing these translations!</p>
<!--
    Please use the following template:

    ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name)
    <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span>

    ...<<your project updates>>...
-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: July 2022</title>
            <pubDate>Wed, 10 Aug 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-07/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-07/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-07/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-07/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (July 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="rust-osdev-projects"><code>rust-osdev</code> Projects</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, and <a rel="external" href="https://github.com/phip1611">@phip1611</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following changes in July:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/460">Protocol safety improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/454">Add MemoryProtection protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/462"><code>EqStrUntilNul</code> trait to compare Rust strings (<code>str</code>, <code>String</code>) against <code>CStr16</code> and <code>CString16</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/456">cargo: additive panic-handler feature</a> (<em>breaking</em>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/463">Allow qemu test to work under Windows without WSL</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/466">xtask: Fix channel of cargo operations</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/471">Improve entry macro tests</a></li>
</ul>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/rybot666">@rybot666</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In July, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/385">Add getters for the page table frame mapping</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/386">Release <code>v0.14.10</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/387">Add missing IDT entries <code>#CP</code> and <code>#HV</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Zildj1an">@Zildj1an</a> for their contribution!</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a></span></p>
<p>The <code>xhci</code> crate provides types of xHCI structures, such as Registers and TRBs.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/138">Remove the line number limitation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/137">feat: added <code>TryFrom&lt;[u32; 4]&gt;</code> to Command/Transfer TRB structs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/139">Release 0.8.5</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/140">Fix <code>try_from!</code> macro not checking MSb of type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/141">Release 0.8.6</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Demindiro">@Demindiro</a> and <a rel="external" href="https://github.com/ytoml">@ytoml</a> for their contributions!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<ul>
<li>
<p><a rel="external" href="https://github.com/rust-osdev/volatile/pull/28">(<code>rust-osdev/volatile</code>) Various improvements for the new design</a></p>
<p>We are currently discussing a new design for the <code>volatile</code> crate based on raw pointer types in order to avoid potential undefined behavior. The linked pull requests proposes an implementation where the volatile wrapper type is <code>Copy</code> and its methods take <code>self</code> by value. We haven't reached a decision yet, so if anyone has more input on this, please join the discussion. For more context, see also <a rel="external" href="https://github.com/rust-osdev/volatile/pull/22">PR #22</a>.</p>
</li>
</ul>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="rust-lang-rust"><a rel="external" href="https://github.com/rust-lang/rust/"><code>rust-lang/rust</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>This Month, <a rel="external" href="https://github.com/dvdhrm">@dvdhrm</a> started an initiative to get the <code>*-unknown-uefi</code> targets to <a rel="external" href="https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-2-without-host-tools">Tier-2</a>. As a first step, they <a rel="external" href="https://github.com/rust-lang/rust/pull/99760">added a detailed description of the platform</a> to the rustc book. The entry is already published <a rel="external" href="https://doc.rust-lang.org/nightly/rustc/platform-support/unknown-uefi.html">in the nightly release of the book</a>.</p>
<p>Please reach out if you would like to help with this!</p>
<h3 id="theseus-os"><a rel="external" href="https://github.com/theseus-os/Theseus">Theseus OS</a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://www.theseus-os.com/kevinaboos/">Kevin Boos</a> (<a rel="external" href="https://github.com/kevinaboos">@kevinaboos</a>))</span></p>
<p>Theseus is a safe-language OS written from scratch in Rust that is in the process of migrating from pure academic research objectives to more general usability and legacy compatibility.</p>
<p>Theseus dynamically loads and links all components at runtime, and executes everything in a single address space and at a single privilege level.
With this, Theseus employs <em>intralingual</em> design principles to maximally leverage the strengths of the Rust language, allowing the compiler to both view and semantically understand (and thus extend its safety checks to) all components from top-level apps to low-level kernel entities.
Theseus strives to not only ensure isolation between different entity components and subsystems in the OS, but also to go further than language safety to provide various invariants that guarantee properties about most system-provided types.
For more, check out <a rel="external" href="https://www.theseus-os.com/Theseus/book/index.html">the Theseus OS Book</a> or our <a rel="external" href="https://www.theseus-os.com/Theseus/book/misc/papers_presentations.html">academic papers and presentations</a>.</p>
<p>Theseus is fully open-source and always welcomes <a rel="external" href="https://www.theseus-os.com/Theseus/book/contribute/contribute.html">contributions</a> from anyone.</p>
<p>Over the past month (or two), Theseus OS made significant progress on a variety of topics:</p>
<ul>
<li>Finished the first known port of Wasmtime to <code>no_std</code>, enabling us to <a rel="external" href="https://github.com/theseus-os/Theseus/pull/556">run WASM binary workloads on Theseus</a> with relative ease.
<ul>
<li>Importantly, this overcomes the classic limitation of safe-language OSes -- that all components must be written in that safe language -- to allow unsafe (e.g., C, C++) programs to run on Theseus in a sandboxed WASM environment.</li>
<li>See our <a rel="external" href="https://www.theseus-os.com/2022/06/21/wasmtime-complete-no_std-port.html">blog post with more info</a> on this endeavor.</li>
</ul>
</li>
<li>Thanks to funding from Futurewei Technologies, Theseus Systems <a rel="external" href="https://www.theseus-os.com/2022/04/29/Theseus-Is-Hiring.html">hired two developers</a> to work on Theseus's next several milestones, <a rel="external" href="https://github.com/NathanRoyer">Nathan Royer</a> and <a rel="external" href="https://github.com/tsoutsman/">Klim Tsoutsman</a>.,
<ul>
<li>Thanks to everyone who reached out to us and participated in interviews; we received a lot more interest than expected!</li>
</ul>
</li>
<li>Began work on porting the Rust <code>std</code> library to Theseus.</li>
<li>Designed a <a rel="external" href="https://github.com/theseus-os/Theseus/pull/522">completely new configuration interface based on cargo features</a>, which enables one to easily include or exclude specific Theseus crates in a build of Theseus, but in a safe, dependency-aware manner.</li>
<li>Significantly improved speed and memory usage of our runtime loader and linker:
<ul>
<li>Introduced a <a rel="external" href="https://github.com/theseus-os/Theseus/pull/562">custom linker script and linker pass</a> that performs partial relinking of object files to merge their per-function/per-data sections together.
<ul>
<li>This results in a <strong>30-40%</strong> reduction in object file size and a <strong>15-18x</strong> improvement in loading/linking times. For example, loading and linking the full Wasmtime project (60+ crates) now takes ~100ms instead of 15 seconds.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/theseus-os/Theseus/pull/549">De-duplicated strings in our metadata</a> related to crate loading, which reduces heap usage by about 20%.</li>
</ul>
</li>
<li>Added support for <a rel="external" href="https://github.com/theseus-os/Theseus/pull/541">booting Theseus using the <code>limine</code> bootloader</a> and for <a rel="external" href="https://github.com/theseus-os/Theseus/pull/536">building Theseus on non-Debian Linux distributions like Fedora</a>.</li>
<li>Improved support for the <a rel="external" href="https://github.com/theseus-os/Theseus/pull/523">IXGBE ethernet NIC</a>.</li>
<li><a rel="external" href="https://github.com/theseus-os/Theseus/pull/565">Sped up post-<code>rustc</code> build steps by about 15-20 seconds</a> with simple Makefile loop parallelization.</li>
</ul>
<p>Check out the <a rel="external" href="https://www.theseus-os.com/">Theseus OS blog</a> for the latest details.</p>
<h3 id="nt-list-windows-linked-lists-in-idiomatic-rust"><a rel="external" href="https://colinfinck.de/posts/nt-list-windows-linked-lists-in-idiomatic-rust/"><code>nt-list</code>: Windows Linked Lists in idiomatic Rust</a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/ColinFinck">@ColinFinck</a>)</span></p>
<p>On his quest to develop a ReactOS/Windows bootloader in Rust, Colin Finck released another building block as a reusable <code>no_std</code> crate this month.
After <a rel="external" href="https://github.com/ColinFinck/nt-hive">nt-hive</a> for reading Windows registry hive files and <a rel="external" href="https://github.com/ColinFinck/ntfs">ntfs</a> to access Microsoft's proprietary NTFS filesystem, the <a rel="external" href="https://github.com/ColinFinck/nt-list">nt-list</a> crate provides a type-safe and idiomatic Rust interface to work with Windows Linked Lists, known as <a rel="external" href="https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-list_entry"><code>LIST_ENTRY</code></a> and <a rel="external" href="https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-single_list_entry"><code>SINGLE_LIST_ENTRY</code></a>.
This is what Windows, Windows drivers, and components influenced by Windows (e.g. UEFI) have been using for a long time to uniformly handle linked lists.</p>
<p><a rel="external" href="https://colinfinck.de/posts/nt-list-windows-linked-lists-in-idiomatic-rust/">Colin's blog post</a> goes into detail about some of the differences between textbook and Windows linked lists and the challenges in coming up with a safe Rust implementation.
The final interface provided by nt-list is as simple to use as <code>Vec</code> while being fully compatible to the original <code>LIST_ENTRY</code>.
The compatibility is proven in a WinDbg debugging session:</p>
<p><a href="https://rust-osdev.com/this-month/2022-07/windbg.png"><img src="https://rust-osdev.com/this-month/2022-07/windbg.png" alt="Using WinDbg to traverse a Windows Linked List created by the nt-list Rust crate" title="Using WinDbg to traverse a Windows Linked List created by the nt-list Rust crate" /></a></p>
<p>If you want to give it a spin, the crate is available on <a rel="external" href="https://crates.io/crates/nt-list">crates.io</a>, and make sure to also check the <a rel="external" href="https://docs.rs/nt-list/">docs</a>.</p>
<h3 id="comparison-between-phip1611-simple-chunk-allocator-and-rust-osdev-linked-list-allocator">Comparison between <a rel="external" href="https://github.com/phip1611/simple-chunk-allocator"><code>phip1611/simple-chunk-allocator</code></a> and <a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>rust-osdev/linked-list-allocator</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>In March 2022, Philipp Schuster proposed his <a rel="external" href="https://github.com/phip1611/simple-chunk-allocator"><code>simple-chunk-allocator</code></a>
crate. It focuses on being a very simple-to-use general purpose allocator that "just works" for various workloads
in <code>no_std</code> context. However, there are other allocators, such as <a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>rust-osdev/linked-list-allocator</code></a>.
When you choose an allocator, you should not only consider the API and how to set it up, but actually the runtime
characteristics. OS research has shown us that there is no perfect allocator. You can optimize an allocator for speed,
memory utilization (i.e., prevent fragmentation), code simplicity, and worst case execution time. There exist different
strategies to reach those goals: first-fit, next-fit, best-fit</p>
<p>Recently, Philipp benchmarked his <code>simple-chunk-allocator</code> against <a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>rust-osdev/linked-list-allocator</code></a>
to learn under which conditions which performs better. But at first, let's point out some differences. <code>simple-chunk-allocator</code> needs
a static backing storage for heap and an additional static backing storage for its internal bookkeeping. <code>linked-list-allocator</code>
can solve this better by organizing the heap with the heap backing memory itself. <code>simple-chunk-allocator</code> uses a slightly
adjusted variant of best-fit that tries to reduce fragmentation. <code>linked-list-allocator</code> is a first-fit allocator that
has a lower performance to more heap is used.</p>
<p>The relevant outcome is that <code>simple-chunk-allocator</code> always outperforms <code>linked-list-allocator</code> in median allocation time.
For stress tests with a low heap consumption, thus, no long stress test with 90% and more heap usage, <code>simple-chunk-allocator</code>
also outperforms <code>linked-list-allocator</code> in average allocation time. However, if the heap is full and frequent allocations
happen, the average (but not the median) allocation time of <code>linked-list-allocator</code> is better. Also, <code>linked-list-allocator</code>
can come close to 100% heap usage which is not the case for <code>simple-chunk-allocator</code>, because it suffers from internal
fragmentation under certain circumstances. Last but not least, even small allocations always takes up a multiple of the
used chunk size in <code>simple-chunk-allocator</code>.</p>
<p>In the end, there is no optimal allocator. You must choose which properties are more relevant for your scenario.
For concrete measurements, please head to the README of <a rel="external" href="https://github.com/phip1611/simple-chunk-allocator"><code>simple-chunk-allocator</code></a>.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: June 2022</title>
            <pubDate>Sun, 10 Jul 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-06/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-06/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-06/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-06/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (June 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="linked-list-allocator"><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator"><code>linked-list-allocator</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a></span></p>
<p>The <code>linked-list-allocator</code> crate provides a basic <code>no_std</code> allocator that builds a linked list from freed memory blocks and thus needs no additional data structures.</p>
<p>This month, <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a> redesigned the internal API for traversing the linked list in order to pass the strict tests of <a rel="external" href="https://github.com/rust-lang/miri"><code>miri</code></a>, which is an experimental interpreter for Rust's intermediate representation (MIR). Among other things, <code>miri</code> checks that pointers are correctly aligned and that no invalid aliasing occurs (based on different formal models). By checking our implementation against <code>miri</code>, we make it more robust and reduce the chance that undefined behavior occurs with future compiler versions.</p>
<p>The change was implemented across the following pull requests:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/62">Refactor with Cursor-based API, and passing Miri tests</a> <span class="gray">(published as <code>v0.10.0</code>, but yanked later)</span></li>
<li>(<a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/63">fix(deallocate_middle): advance to next in <code>try_insert_after</code></a>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/64">Fix free logic</a> <span class="gray">(<a rel="external" href="https://github.com/rust-osdev/linked-list-allocator/pull/65">published</a> as <code>v0.10.1</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a> for the redesign and <a rel="external" href="https://github.com/haraldh">@haraldh</a> for reporting a critical issue in the <code>v0.10.0</code> release and providing a fix! Also, we would like to welcome <a rel="external" href="https://github.com/jamesmunns">@jamesmunns</a> as a maintainer of this crate!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, <a rel="external" href="https://github.com/robert-w-gries">@robert-w-gries</a>, <a rel="external" href="https://github.com/ahmedcharles">@ahmedcharles</a>, and <a rel="external" href="https://github.com/Caduser2020">@Caduser2020</a></span></p>
<p>The <code>multiboot2</code> crate provides abstraction types for the multiboot information structure (MBI)
of multiboot2 bootloaders. The latest release of the <code>multiboot2</code>-crate is now <code>v.0.14.0</code> (was
<code>v0.13.2</code>). It contains some small breaking changes because so far, we used some unsafe code and
relied on having not to verify UTF-8 strings. For a full changelog, please refer to the
<a rel="external" href="https://github.com/rust-osdev/multiboot2/blob/main/multiboot2/Changelog.md">GitHub repo</a>.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a> and <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following changes in June:</p>
<h4 id="fixes">Fixes</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/443">Remove <code>exts::allocate_buffer</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/447">Fix incorrect pointer cast in get_rng</a></li>
</ul>
<h4 id="improvements">Improvements</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/450">Remove unused <code>From&lt;ucs2::Error&gt;</code> impls</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/451">Remove <code>eh_personality</code> lang item</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/453">Simplify <code>uefi-services</code> panic handler</a></li>
</ul>
<h4 id="internal-changes">Internal changes</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/442">Fix <code>query_variable_info</code> test</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/445">Fix errors due to deprecations in the <code>clap</code> API</a></li>
</ul>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/rybot666">@rybot666</a>, and <a rel="external" href="https://github.com/64">@64</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we made more progress on the upcoming <code>v0.11</code> version:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/3b6aa00dc33005f4353568c5dccad694d0f54f90">WIP: try to start loading FAT partition in second stage</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/abfdba522e990fcaf865302b7b7d91f0abef04a7">Start custom FAT implementation based on <code>mini_fat</code> crate</a> (to keep the executable size down)</li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/96d2bdbae6fdc91c8df958fd09d4207a3ab20020">Read root dir entries from FAT partition</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/eef2109861d718e0da82b3c5e4c2d9308d34da56">Use segment-based addressing for DAP to support loading larger second stages</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/1d7ff1f0627fa33dab3f811af150a547e1f48172">Implement looking up <code>kernel-x86_64</code> file on FAT partition</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/06d3b9521cc8bac981068bafe0ab84b5c4a7e8c0">Read FAT clusters of kernel file</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/6e8f9fa964bfcd23b95fe902fe3a5f2c55065e27">Ensure proper alignment of DAP target buffer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/7a24837692d96c8e9b04377fa2e7646648637dcb">Enter unreal mode</a></li>
</ul>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/rybot666">@rybot666</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In June, we merged the following pull request:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/286">Add <code>registers::debug</code></a> <span class="gray">(<a rel="external" href="https://github.com/rust-osdev/x86_64/pull/386">published</a> as <code>v0.14.10</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> for this contribution!</p>
<h3 id="cargo-xbuild"><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>cargo-xbuild</code> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>. It is mostly useful in situations, where cargo's unstable <code>-Zbuild-std</code> flag is not usable.</p>
<p>This month, we fixed a build error of the <code>alloc</code> crate on the latest nightlies:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/105">Fix: The alloc crate uses the Rust 2021 edition now</a> <span class="gray">(published as <code>v0.6.6</code>)</span></li>
</ul>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<ul>
<li>
<p><a rel="external" href="https://github.com/rust-osdev/volatile/pull/28">(<code>rust-osdev/volatile</code>) New design based on pointer types</a></p>
<p>We are currently discussing a new design for the <code>volatile</code> crate based on raw pointer types in order to avoid potential undefined behavior. The linked pull requests proposes an implementation where the volatile wrapper type is <code>Copy</code> and its methods take <code>self</code> by value. We haven't reached a decision yet, so if anyone has more input on this, please join the discussion. For more context, see also <a rel="external" href="https://github.com/rust-osdev/volatile/pull/22">PR #22</a>.</p>
</li>
</ul>
<!-- <span class="gray">

_No tasks were proposed for this section._

</span> -->
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="google-gpt-disk-rs"><a rel="external" href="https://github.com/google/gpt-disk-rs"><code>google/gpt-disk-rs</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>)</span></p>
<p><code>gpt-disk-rs</code> is a collection of three libraries related to <a rel="external" href="https://en.wikipedia.org/wiki/GUID_Partition_Table">GPT</a> (GUID Partition Table) disk data. The crates are no-std by default, have minimal dependencies, and include a lot of documentation. I'm hoping they'll be a suitable base for any project that wants to read or write GPT data.</p>
<ul>
<li><a rel="external" href="https://crates.io/crates/uguid"><code>uguid</code></a>: GUID data type.</li>
<li><a rel="external" href="https://crates.io/crates/gpt_disk_types"><code>gpt_disk_types</code></a>: all the GPT types defined by the UEFI specification</li>
<li><a rel="external" href="https://crates.io/crates/gpt_disk_io"><code>gpt_disk_io</code></a>: types for reading and writing GPT data to an abstract block IO device.</li>
</ul>
<h3 id="vinc-moros"><a rel="external" href="https://github.com/vinc/moros"><code>vinc/moros</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/vinc">@vinc</a>)</span></p>
<p>MOROS is a text-based hobby operating system targeting computers with a x86-64 architecture and a BIOS. It is inspired by Unix and ITS but is closer to a modern DOS at the moment in term of features.</p>
<p>In the last month I finally managed to run rust programs (without alloc) inside the OS after being limited to nasm programs for a long time. This triggered a lot of refactoring and improvements in the shell and the lisp language used for scripting.</p>
<p>Next step will be publishing a 0.8.0 release and working on userspace allocation.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>This month, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1121">[Translation][Korean] post-03 (edition-2)</a>
<ul>
<li>Thanks to <a rel="external" href="https://github.com/JOE1994">@JOE1994</a> for creating the translation and <a rel="external" href="https://github.com/QuqqU">@QuqqU</a> for reviewing it!</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1122">Fix typo in Japanese translation</a> (thanks to <a rel="external" href="https://github.com/KisaragiEffective">@KisaragiEffective</a>)</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1118">Translate the giscus comment system</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1116">Move comment threads for translated posts to separate category</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1117">Remove goatcounter analytics again</a></li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: May 2022</title>
            <pubDate>Wed, 08 Jun 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-05/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-05/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-05/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-05/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (May 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a> and <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following changes in May:</p>
<h4 id="improvements">Improvements</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/429">Change logger max level to be set by feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/432">Release new versions of the crates</a> <span class="gray">(published <code>uefi v0.16.0</code>, <code>uefi-macros v0.7.0</code>, and <code>uefi-services v0.13.0</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/434">Implement <code>Deref</code> and <code>DerefMut</code> for <code>ScopedProtocol</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/437">Implement <code>core::fmt::Write</code> for <code>Serial</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/426">Add documentation links</a></li>
</ul>
<h4 id="fixes">Fixes</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/423">Fix an accidental <code>*const</code> conversion</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/438">Fix compilation of the xtask package under Windows and add to CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/435">Switch back to automatic <code>Debug</code> derive for <code>Header</code> struct</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/436">Check table version before calling UEFI 2.0+ functions</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/JonahPlusPlus">@JonahPlusPlus</a>, <a rel="external" href="https://github.com/raccog">@raccog</a>, and <a rel="external" href="https://github.com/verticalegg">@verticalegg</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/rybot666">@rybot666</a>, and <a rel="external" href="https://github.com/64">@64</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following new feature:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/237">Add UEFI PXE support</a> to load a kernel from a TFTP server</li>
</ul>
<p>This feature will be part of the upcoming <code>v0.11</code> release. Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> for this contribution!</p>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p>The <code>pci_types</code> library provides types for accessing and configuring PCI devices from Rust operating systems. Lots of this code (e.g. identifying devices by class codes) can be shared
between projects, and would benefit from community contributions.</p>
<p>We merged the following change in May:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/pull/3">PCI capabilities and status register support</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/alesharik">@alesharik</a> for this contribution!</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a></span></p>
<p>The <code>xhci</code> crate provides types of xHCI structures, such as Registers and TRBs.</p>
<p>We merged the following fix this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/134">fix(StructuralParameters2): Bit range in <code>max_scratchpad_buffers_hi</code></a> <span class="gray">(<a rel="external" href="https://github.com/rust-osdev/xhci/pull/135">published</a> as <code>v0.8.4</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Yuna-Tomi">@Yuna-Tomi</a> for this contribution!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section this month.</em></p>
</span>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<span class="gray">
<p><em>No projects were proposed for this section this month.</em></p>
</span>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: April 2022</title>
            <pubDate>Sat, 07 May 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-04/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-04/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-04/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-04/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (April 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/rybot666">@rybot666</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In April, we merged the following improvements and fixes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/373">Provide null segment selector as associated constant on SegmentSelector</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/374">Correct wrong comment</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/375">Fix align functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/376">Cleanup Segment macros</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/382">Update comment and docs</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/prinzdezibel">@prinzdezibel</a> for their contribution!</p>
<p>We also merged two updates into the <code>next</code> branch for the upcoming <code>v0.15</code> release:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/380">Add <code>structures::gdt::Entry</code> type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/381">Allow GDT to be loaded with shared reference</a></li>
</ul>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a> and <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following changes in April:</p>
<h4 id="features">Features</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/398">Add support to get the file path of loaded image</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/404">Add <code>FilePathMediaDevicePath</code> (and a bunch of supporting code)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/421">Improve device path API</a></li>
</ul>
<h4 id="bug-fixes">Bug fixes</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/407">Fix undefined behavior in <code>File::get_boxed_info</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/408">Fix potential undefined behavior in file info</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/415">Fix <code>test_get_boxed_info</code> when <code>-Zmiri-tag-raw-pointers</code> is enabled</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/422">Fix off-by-one test error</a></li>
</ul>
<h4 id="ci-and-linting">CI and linting</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/410">Enable the <code>clippy::ptr_as_ptr</code> lint</a></li>
</ul>
<h4 id="documentation-improvements">Documentation improvements</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/405">Add changelog entries for recent PRs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/409">Add documentation on why <code>UnsafeCell</code> is used for protocols</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/419">Add documentation links for <code>BootServices</code> and <code>RuntimeServices</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/supdrewin">@supdrewin</a>, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> and <a rel="external" href="https://github.com/raccog">@raccog</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/rybot666">@rybot666</a>, and <a rel="external" href="https://github.com/64">@64</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/229">Add dynamic range configuration</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/228">Correct typos in <code>src/binary/level_4_entries.rs</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> and <a rel="external" href="https://github.com/toothbrush7777777">@toothbrush7777777</a> for these contributions!</p>
<p>We also made some good progress on the upcoming <code>v0.11</code> version of the crate:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/ee9bf20314be3e304f4210c03ba73348d4868c7c">Replace artifact dependency with build script</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/aefa4aa68fa25c7c52a2d84dbf4f664dee3e6390">Add function to create UEFI disk image to library</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/fd7b2cfc1c5ddf0c6253a61fbba9012718c91754">Adjust and merge PR #219 into next</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/fdf9d4bfd10adc66c23c1b3a07ba22f3b716d35a">Integrate latest changes from <code>main</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/4d4b5849831c12e81e2c6897fbf051fda73aa02d">Update test framework to rewrite</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/3aef58c1b59c1ee1529d079145cf3c2de1c51302">Merge PR #229 into next and adjust it to new config system</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/5dbc5038d71af72095315c7de194370f1ddb8540">Remove uefi dependency of common crate</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/6134fedfa1ce0cf7adddc3f8b13cca21201f7cbd">Replace <code>rand_chacha</code> with <code>rand_hc</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/eb6d71f244c54031bddbf87042d710bcdd1aa0bb">Start integrating BIOS bootloader into build system</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/0d77948df2c331612c94e186672a34a1694f23de">Simplify MBR code and choose bootable partition</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/d8b50dcb801dfc775e6f211a8f0e3d3bf2486ad7">Refactor FAT creation function to take arbitrary file list</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/5310e4b97743094d45dd0711939e1961463da9e3">Integrate BIOS bootsector into build system</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/b3207dbf62b27202f3afa2fc19e0b8bf4893b1fb">Build and load a second stage</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/4d41efe84c14487d824f5270667ed93baa274772">Use pie relocation model for second stage</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/5fd311542c73f3014136ce0b4ecbed133443c01b">Clean up boot sector code</a></li>
</ul>
<p>The next steps now are: setting up unreal mode on the CPU, loading the kernel from the FAT partition, loading the memory map, and setting up the page tables.</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, <a rel="external" href="https://github.com/robert-w-gries">@robert-w-gries</a>, <a rel="external" href="https://github.com/ahmedcharles">@ahmedcharles</a>, and <a rel="external" href="https://github.com/Caduser2020">@Caduser2020</a></span></p>
<p>The <code>multiboot2</code> crate provides abstraction types for the multiboot information structure (MBI) of multiboot2
bootloaders. The latest release of the <code>multiboot2</code>-crate is now <code>v.0.13.2</code> (was <code>v0.13.1</code>). It contains minor
improvements, such as that <code>TagType</code> implements <code>Ord</code>.</p>
<h3 id="multboot2-header"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multboot2-header</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, <a rel="external" href="https://github.com/robert-w-gries">@robert-w-gries</a>, <a rel="external" href="https://github.com/ahmedcharles">@ahmedcharles</a>, and <a rel="external" href="https://github.com/Caduser2020">@Caduser2020</a></span></p>
<p>The <code>multiboot2-header</code> crate provides abstraction types for Multiboot2 headers and a builder struct to construct such
headers. The latest release of the <code>multiboot2-header</code>-crate is now <code>v0.2.0</code> (was <code>v0.1.0</code>). The changes include a
bugfix that prevented the usage in <code>no_std</code> contexts. Furthermore, overall code quality was improved. The internal CI
was updated to verify <code>no_std</code> builds as well as regular builds.
Full changelog: <a rel="external" href="https://github.com/rust-osdev/multiboot2/releases/tag/multiboot2-header-v0.2.0">https://github.com/rust-osdev/multiboot2/releases/tag/multiboot2-header-v0.2.0</a></p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/24">Remove use of <code>stable</code> and <code>nightly</code> features</a> <span class="gray">(published as <code>v0.2.18</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/josephlr">@josephlr</a> for this contribution!</p>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>volatile</code> crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers or framebuffers. In April, we merged the following pull request:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/25">Remove the const_generics feature flag</a> <span class="gray">(published as <code>v0.4.5</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/hawkw">@hawkw</a> for this contribution!</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a></span></p>
<p>The <code>xhci</code> crate provides types of xHCI structures, such as Registers and TRBs.</p>
<p>In this month, we released a new version 0.8.3 which includes <a rel="external" href="https://github.com/rust-osdev/xhci/pull/132">a bug fix</a> reported and committed by <a rel="external" href="https://github.com/Yuna-Tomi">@Yuna-Tomi</a>. The bug was that <code>EventRingDequeuePointerRegister::event_ring_dequeue_pointer()</code> did not return the correct address. Thanks for the contribution!.</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/issues/100">(<code>multiboot2</code>) Missing Tags</a></li>
</ul>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="rust-embedded-rust-raspberrypi-os-tutorials"><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials"><code>rust-embedded/rust-raspberrypi-OS-tutorials</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/andre-richter">@andre-richter</a>)</span></p>
<p>The <a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials">Operating System development tutorials in Rust on the Raspberry Pi</a> project
saw two more tutorial releases:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/17_kernel_symbols">Tutorial 17 - <code>Kernel Symbols</code></a></li>
<li><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/18_backtrace">Tutorial 18 - <code>Backtracing</code></a></li>
</ul>
<p>The two tutorials implement the generation of backtraces that show address and symbol information. Here is an example of the of a backtrace generated as part of  the kernel's panic handler:</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="plain"><span class="giallo-l"><span>[    0.002782] Writing to bottom of address space to address 1 GiB...</span></span>
<span class="giallo-l"><span>[    0.004623] Kernel panic!</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span>Panic location:</span></span>
<span class="giallo-l"><span>      File &#39;kernel/src/_arch/aarch64/exception.rs&#39;, line 59, column 5</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span>[...]</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span>Backtrace:</span></span>
<span class="giallo-l"><span>      ----------------------------------------------------------</span></span>
<span class="giallo-l"><span>          Address            Function containing address</span></span>
<span class="giallo-l"><span>      ----------------------------------------------------------</span></span>
<span class="giallo-l"><span>       1. ffffffffc0001294 | core::fmt::write</span></span>
<span class="giallo-l"><span>       2. ffffffffc0005560 | libkernel::panic_wait::_panic_print</span></span>
<span class="giallo-l"><span>       3. ffffffffc00054a0 | rust_begin_unwind</span></span>
<span class="giallo-l"><span>       4. ffffffffc0002950 | core::panicking::panic_fmt</span></span>
<span class="giallo-l"><span>       5. ffffffffc0004898 | current_elx_synchronous</span></span>
<span class="giallo-l"><span>       6. ffffffffc0000a74 | __vector_current_elx_synchronous</span></span>
<span class="giallo-l"><span>       7. ffffffffc000111c | kernel_init</span></span>
<span class="giallo-l"><span>      -----------------------------------------------------------</span></span></code></pre><h3 id="metta-systems-vesper"><a rel="external" href="https://github.com/metta-systems/vesper"><code>metta-systems/vesper</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/berkus">@berkus</a>)</span></p>
<p>Vesper is a capability-based single-address-space nanokernel. This means it is aiming to be small, to provide only isolation primitives; at the same time SAS makes it a lot easier to perform cross-process operations (because all addresses are the same across all processes). It uses capabilities to provide security for such operations, so that unauthorized processes will not be able to intervene in legitimate traffic.</p>
<p>The kernel is in very early stages of development. This time I will update on the progress of tooling and my next steps. As usual, I will link directly to my blog for more details. <a rel="external" href="https://metta.systems/blog/osdev-tooling-3/">Read the full article here</a>.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following improvements for the "Writing an OS in Rust" blog this in April:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1101">Korean translation for chapter 2</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1099">Update the code in the <code>post-06</code> branch</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1103">fix: typo</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/JOE1994">@JOE1994</a>, <a rel="external" href="https://github.com/QuqqU">@QuqqU</a>, <a rel="external" href="https://github.com/ruhuang2001">@ruhuang2001</a>, and <a rel="external" href="https://github.com/PoorlyDefinedBehaviour">@PoorlyDefinedBehaviour</a> for their contributions!</p>
<p>For the current status of the upcoming third edition, see <a rel="external" href="https://github.com/phil-opp/blog_os/issues/1025#issuecomment-1107843473">my comment</a> on the related GitHub issue.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: March 2022</title>
            <pubDate>Thu, 07 Apr 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-03/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-03/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-03/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-03/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (March 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/josephlr">@josephlr</a>, <a rel="external" href="https://github.com/Freax13">@Freax13</a>, and <a rel="external" href="https://github.com/rybot666">@rybot666</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>This month, we released version <strong><code>0.14.9</code></strong> of the <code>x86_64</code> crate with lots of improvements:</p>
<h4 id="new-features">New Features</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/349">Add <code>UCet</code> and <code>SCet</code> registers</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/355">Specific MSRV now noted in <code>README</code></a></li>
<li>Use <a rel="external" href="https://crates.io/crates/rustversion"><code>rustversion</code></a> to <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/353">mark certain functions <code>const fn</code> on Rust 1.61</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/354"><code>Entry::handler_addr()</code> is now public</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/362">Increase packed structure alignment</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/369">Make more address methods <code>const fn</code></a>
<ul>
<li><code>VirtAddr::as_ptr()</code></li>
<li><code>VirtAddr::as_mut_ptr()</code></li>
<li><code>PhysAddr::new()</code></li>
<li><code>PhysAddr::try_new()</code></li>
</ul>
</li>
</ul>
<p><em>Already merged last month:</em></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/343">Remove all uses of external assembly</a>
<ul>
<li><code>external_asm</code> and <code>inline_asm</code> features are deprecated and now have no effect.</li>
<li><code>instructions</code> feature (on by default) now requires Rust 1.59</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/342">Implement <code>core::iter::Step</code> for <code>VirtAddr</code> and <code>Page</code></a>
<ul>
<li>This trait is only available on nightly.</li>
<li>Gated behind <code>step_trait</code> feature flag</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/340">Address in <code>VirtAddrNotValid</code> and <code>PhysAddrNotValid</code> is now public</a>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/347">This field now contains the whole invalid address</a></li>
</ul>
</li>
</ul>
<h4 id="bug-fixes-and-documentation">Bug fixes and Documentation</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/351">Fixed overflow bug in <code>PageRangeInclusive</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/352">Remove stabilized <code>const_fn_fn_ptr_basics</code> and <code>const_fn_trait_bound</code> features</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/358">Don't set <code>nomem</code> in <code>load_tss</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/357">Correctly initialize TSS's IOPB to be empty</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/361">Improve <code>GlobalDescriptorTable::add_entry</code> error handling</a>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/366">Update <code>tss_segment</code> documentation</a>)</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jarkkojs">@jarkkojs</a>, <a rel="external" href="https://github.com/drzewiec">@drzewiec</a>, and <a rel="external" href="https://github.com/kevinaboos">@kevinaboos</a> for contributing to this release!</p>
<h4 id="v0-15">v0.15</h4>
<p>We also merged some breaking changes which will be published in the upcoming <code>v0.15</code> release:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/360">Allow the GDT to be of any length</a>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/365">gdt: Check that MAX is in range</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/370"><code>VirtAddr</code> improvements</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/363">Remove <code>software_interrupt!</code> macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/364">Remove usize trait impls</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/368">Remove deprecated functions/flags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/359">Update "next" MSRV to 1.59</a></li>
</ul>
<p>Special thanks to our co-maintainer <a rel="external" href="https://github.com/josephlr">@josephlr</a>, who did a lot of great work this month!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a> and <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>One of the pain points of developers building software using <code>uefi-rs</code> has been the <code>Completion</code> type, which is like an expanded <code>Result</code> type which also handles warnings (besides successes and errors). The <a rel="external" href="https://github.com/rust-osdev/uefi-rs/issues/360">RFC for the removal of the <code>Completion</code> type</a> has been accepted and the corresponding changes <a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/361">have been merged</a> in March: the <code>Completion</code> type has been removed and the crate has reverted to using more standard <code>Result</code>s everywhere, by treating all warnings as errors.</p>
<p>We merged the following changes in March:</p>
<h4 id="new-features-protocols">New features/protocols</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/311">Implement the <code>connect_controller</code>/<code>disconnect_controller</code> methods</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/380">Implement <code>BootServices::locate_handle_buffer</code> function</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/386">Add rng protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/383">Add <code>BootServices::load_image</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/388">Add <code>GptPartitionAttributes</code> bitflags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/392">Add <code>FileHandle</code> convenience methods and new file system tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/396">Add <code>RuntimeServices::query_variable_info</code></a></li>
</ul>
<h4 id="refactorings">Refactorings</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/382">Make <code>Error</code> public</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/361">Simplify <code>uefi::Result</code> type and remove <code>Completion</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/395">Improve <code>Time</code> struct</a></li>
</ul>
<h4 id="bug-fixes">Bug fixes</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/377">Fix alignment issues in file info types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/373">Update changelog for file info changes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/375">Make <code>LoadedImage</code>'s load options API safer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/389">Fix status to <code>Result</code> conversions</a></li>
</ul>
<h4 id="ci-testing">CI &amp; testing</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/381">Add miri action to <code>xtask</code> and CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/378">Don't run doctests with invalid pointers</a></li>
</ul>
<h4 id="misc-chores">Misc &amp; chores</h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/385">Add package sections to changelog</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/387">Remove some no-longer-needed unstable features</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/393">Drop maintenance badges from the README</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/394">Remove no-longer-needed allows for clippy lints</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/390">Publish new versions of the crates</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, <a rel="external" href="https://github.com/sven-eliasen">@sven-eliasen</a>, <a rel="external" href="https://github.com/necauqua">@necauqua</a> and <a rel="external" href="https://github.com/AtsukiTak">@AtsukiTak</a> for their contributions!</p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a></span></p>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/22">Remove stabilized nightly feature <code>const_ptr_offset</code></a> <span class="gray">(published as <code>v0.2.17</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/tsatke">@tsatke</a> for this contribution!</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a></span></p>
<p>The <code>xhci</code> crate provides types of xHCI structures such as Contexts, Extended Capabilities, Registers, and TRBs. This month, we merged some cleanups:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/130">fix: clippy warnings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/xhci/pull/129">ci(deps): enable dependabot</a></li>
</ul>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section.</em></p>
</span>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phip1611-simple-chunk-allocator"><a rel="external" href="https://github.com/phip1611/simple-chunk-allocator"><code>phip1611/simple-chunk-allocator</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>Philipp Schuster recently released an initial version of his <a rel="external" href="https://github.com/phip1611/simple-chunk-allocator">simple-chunk-allocator</a>
crate. It focuses on being a very simple-to-use general purpose allocator that "just works" for various workloads
in <code>no_std</code> context. A bitmap is used for bookkeeping of used blocks/chunks. This enables a simple algorithm that is easy
to understand. The allocator uses a combination of the strategies "next fit" and "best fit". It is usable as <code>#[global_allocator]</code>
and operates on static memory, i.e., no paging mechanism involved. The crate is suited to manage the heap inside a kernel
or in a similar <code>no_std</code> application. It is part of the roottask in <a rel="external" href="https://github.com/phip1611/diplomarbeit-impl">Philipp's Diplom (Master) Thesis</a>
where he wrote a runtime system for a Microkernel in Rust.</p>
<h3 id="phip1611-linux-libc-auxv"><a rel="external" href="https://github.com/phip1611/linux-libc-auxv"><code>phip1611/linux-libc-auxv</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>Philipp Schuster recently released an initial version of his <a rel="external" href="https://github.com/phip1611/linux-libc-auxv">linux-libc-auxv</a>
crate. The crate enables the creation and the parsing of the initial Linux stack layout. This layout is a
special data structure that Linux prepares for applications before they start execution. The C runtime behind the
<code>_start</code> symbol of a libc implementation uses this to find program arguments, environment variables, and the
auxiliary vector. The layout is tricky to create because the creator must ensure that the layout is valid in the
address space of the target. However, <code>linux-libc-auxv</code> found a way to cope with this.</p>
<p>You can write a "freestanding" binary, i.e., without libc, with this crate, run it under Linux and parse the stack
layout yourself. This is similar to what the libc does, before Rust's runtime starts, that eventually calls the
main function of a Rust program.</p>
<p>The crate is part of <a rel="external" href="https://github.com/phip1611/diplomarbeit-impl">Philipp's Diplom (Master) Thesis</a>
where he wrote a runtime system for a Microkernel in Rust that can emulate Linux behaviour and run unmodified
Linux applications.</p>
<h3 id="phip1611-diplomarbeit-impl"><a rel="external" href="https://github.com/phip1611/diplomarbeit-impl"><code>phip1611/diplomarbeit-impl</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>Philipp Schuster submitted his Diplom (Master) Thesis at TU Dresden where he build a policy-free system-call layer for
the Hedron microhypervisor. The project comes with a runtime system written in Rust for the microkernel and involves
a roottask that enables the execution of unmodified Linux binaries through an OS personality/Linux emulation. The
runtime system covers several interesting aspects of OS development, such as interaction with a kernel, system call
emulation, and starting programs from ELF files.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged a <a rel="external" href="https://github.com/JOE1994">new Korean translation</a> of first post of <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month. Thanks a lot to <a rel="external" href="https://github.com/JOE1994">@JOE1994</a> for creating this translation and <a rel="external" href="https://github.com/QuqqU">@QuqqU</a> for reviewing it!</p>
<p>We also received lots of smaller fixes, by <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1080">@MaxDesiatov</a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1089">@alaincao</a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1096">@Programatic</a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1091">@ruhuang2001</a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1093">@Hofer-Julian</a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1094">@SilensAngelusNex</a>, and <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1095">@julien-me</a>. Thank you all for your contributions!</p>
<p>Unfortunately I didn't have time to work on the new version of the <code>bootloader</code> crate for the upcoming third edition of the blog this month. However, there was some surprising development on the Rust side that should help us with the new build system: <a rel="external" href="https://github.com/bstrie">@bstrie</a> created a <em>Major Change Proposal</em> to <a rel="external" href="https://github.com/rust-lang/compiler-team/issues/499">promote the <code>x86_64-unknown-none</code> target to Tier 2</a>. This is a bare-metal target that should be compatible with our kernel, so we might not need <code>-Zbuild-std</code> anymore in the future. Instead, we could download a precompiled version of the <code>core</code>/<code>alloc</code> crates via <code>rustup target add</code>. The great news is that the proposal was already accepted and the <a rel="external" href="https://github.com/rust-lang/rust/pull/95705">corresponding implementation PR</a> is ready for review too!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev: February 2022</title>
            <pubDate>Sun, 06 Mar 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-02/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-02/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-02/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-02/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (February 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/GabrielMajeri">@GabrielMajeri</a> and <a rel="external" href="https://github.com/orgs/rust-osdev/people/nicholasbishop">@nicholasbishop</a></span></p>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>One of the pain points of developers building software using <code>uefi-rs</code> has been the <code>Completion</code> type, which is like an expanded <code>Result</code> type which also handles warnings (besides successes and errors). There's an <a rel="external" href="https://github.com/rust-osdev/uefi-rs/issues/360">open proposal</a> to drop this type and revert to using more standard <code>Result</code>s everywhere, by treating all warnings as errors. Initial feedback suggests that such a change would be beneficial to the project, but comments and suggestions are welcome on the linked issue.</p>
<p>We merged the following changes in February:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/353">Run tests on AArch64 VM in CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/354">Add IA32 target to <code>xtask</code> and test it in CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/356">Fix links in project template <code>README</code> file</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/357">Remove <code>CStr16::as_string</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/355">Fix status code check at end of VM test</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/348">Automatically test latest crate release on latest nightly in CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/193">Fix various phrasing inconsistencies and spelling errors in protocol docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/363">Remove implicit string conversion from <code>File::open</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/367">Expand <code>Align</code> trait docstring</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/366">Add string equality operator impls</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/365">Fix file info structures' sizes and add tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/364">Implicitly run tests with <code>+nightly</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/368">Remove more implicit string conversions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/369">Add a <code>CHANGELOG.md</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/370">Add minimal test for <code>LoadedImage</code> protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/374">Fix <code>ProtocolsPerHandle</code> internal slice property</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/373">Update changelog for file info changes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/375">Make the load options API on <code>LoadedImage</code> protocol safer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/376">Switch all packages to the 2021 edition</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, <a rel="external" href="https://github.com/Stzx">@Stzx</a>, <a rel="external" href="https://github.com/avirule">@avirule</a> and <a rel="external" href="https://github.com/AtsukiTak">@AtsukiTak</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/josephlr">@josephlr</a>, <a rel="external" href="https://github.com/orgs/rust-osdev/people/Freax13">@Freax13</a>, and <a rel="external" href="https://github.com/orgs/rust-osdev/people/rybot666">@rybot666</a></span></p>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In February, we merged the following pull requests:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/343">Remove external assembly</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/342">Implement <code>core::iter::Step</code> for <code>VirtAddr</code> and <code>Page</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/340">Make fields of <code>VirtAddrNotValid</code> and <code>PhysAddrNotValid</code> public</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/347">Fix: <code>VirtAddrNotValid</code> and <code>PhysAddrNotValid</code> should contain the whole address</a></li>
</ul>
<p>We also merged a few breaking changes, which will be part of the upcoming <code>v0.15</code> release:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/338">Merge latest changes from <code>master</code> into <code>next</code> and migrate code</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/335">Make <code>Cr2::read</code> return a result</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/345">Remove <code>external_asm</code> and <code>inline_asm</code> features</a></li>
</ul>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>, <a rel="external" href="https://github.com/rybot666">@rybot666</a>, and <a rel="external" href="https://github.com/64">@64</a></span></p>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.</p>
<p>We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/221">Add ASLR</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/222"><code>maybe_uninit_extra</code> is no longer feature-gated</a> <span class="gray">(published as <code>v0.10.12</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/227">[v0.9] Remove the <code>asm</code> and <code>global_asm</code> features, which are now stable</a> <span class="gray">(published as <code>v0.9.22</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> and <a rel="external" href="https://github.com/kennystrawnmusic">@kennystrawnmusic</a> for their contributions!</p>
<p>We also pushed a <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/8fb5eff0de2f776979271b771e78c94af752135e">big restructuring</a> to the <a rel="external" href="https://github.com/rust-osdev/bootloader/tree/next"><code>next</code></a> branch, which will become the <code>v0.11</code> version eventually. The branch is still in an experimental state and not documented yet, so it's probably a bit early to try it out. But we are making good progress!</p>
<h3 id="vga"><a rel="external" href="https://github.com/rust-osdev/vga"><code>vga</code></a></h3>
<p><span class="maintainers">Maintained by <a rel="external" href="https://github.com/RKennedy9064">@RKennedy9064</a></span></p>
<p>The work-in-progress <code>vga</code> crate allows the configuration of the VGA hardware, e.g. switching from text-based mode to a pixel-based graphics mode. This month, we merged the following pull request:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/vga/pull/26">Set color palette to standard 256 VGA palette</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/clavierpaul">@clavierpaul</a> for this contribution!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/issues/360">(<code>rust-osdev/uefi</code>) Feedback requested: Treat UEFI warnings as errors</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1079">(<code>phil-opp/blog_os</code>) Looking for a reviewer for a new Korean translation</a></li>
</ul>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="maintainers">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged two fixes for the <em>Writing an OS in Rust</em> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1077">Fix link to MS Docs</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1080">Fix typo in <code>02-minimal-rust-kernel</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/kITerE">@kITerE</a> and <a rel="external" href="https://github.com/MaxDesiatov">@MaxDesiatov</a> for these contributions!</p>
<p>I'm also still working on the third edition of the blog. The current state is the following:</p>
<ul>
<li>This month, cargo finally gained <a rel="external" href="https://github.com/rust-lang/cargo/pull/9992">support for artifact dependencies</a>, which is a feature that I plan to use for the edition. There are still a few issues with it, for example <a rel="external" href="https://github.com/rust-lang/cargo/issues/10444">a panic in combination with <code>-Zbuild-std</code></a> and that there is currently no way to enable <code>-Zbuild-std=core</code> for an artifact dependency without enabling it globally.</li>
<li>The upcoming <code>v0.11</code> version of the <code>bootloader</code> crate is already finished for the UEFI part. I'm still working on the BIOS implementation, which is more difficult unfortunately.</li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (January 2022)</title>
            <pubDate>Thu, 03 Feb 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2022-01/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2022-01/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2022-01/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2022-01/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (January 2022)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In January, we merged the following pull requests:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/334">Add <code>Cr2::read_raw</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/336">Add support for <code>MXCSR</code> register</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/339">Bump version to <code>0.14.8</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jarkkojs">@jarkkojs</a> for their contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.</p>
<p>This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/211">Use <code>set_reg</code> method of <code>CS</code>, <code>DS</code>, <code>ES</code> and <code>SS</code> segment structs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/210">Remove feature flag for <code>lang_items</code>, <code>asm</code> and <code>global_asm</code></a> <span class="gray">(published as <code>v0.10.11</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/206">Add support for position independent executables</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/213">Logger: nicer font rendering into framebuffer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/219">Rework <code>UsedLevel4Entries</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/220">Add small doc-comment to <code>entry_point!</code> macro</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/abachmann">@abachmann</a>, <a rel="external" href="https://github.com/Freax13">@Freax13</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, and <a rel="external" href="https://github.com/georglauterbach">@georglauterbach</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following changes in January:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/341">Release version 0.14.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/342">Release <code>uefi-services</code> version 0.11.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/338">System Table and Handle: From-implementation to create objects from raw pointers</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/335">Replace build.py with the xtask pattern</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/336">Fix logs cut off after screenshot test</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/347">Remove <code>vec_spare_capacity</code> nightly feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/350">uefi-macros: fix new clippy lint</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/phip1611">@phip1611</a> for their contribution!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p>The <code>multiboot2</code> crate provides abstraction types for the boot information of multiboot2 bootloaders.
The latest release of the <code>multiboot2</code>-crate is now <code>v.0.13.1</code> (was <code>v0.12.2</code>). It contains minor improvements,
such as new getters that were originally missing.</p>
<p>The combined diff of all changes can be found <a rel="external" href="https://github.com/rust-osdev/multiboot2/compare/multiboot2-header-v0.1.0...multiboot2-v0.13.1">here</a>.</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section.</em></p>
</span>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="ntfs"><a rel="external" href="https://github.com/ColinFinck/ntfs"><code>ntfs</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/ColinFinck">@ColinFinck</a>)</span></p>
<p>Colin Finck released an initial version of his <a rel="external" href="https://github.com/ColinFinck/ntfs">ntfs</a> crate this month, a Rust library to access Microsoft's proprietary NTFS filesystem.</p>
<p>For those of you who are not running Windows:
NTFS is the primary filesystem in Windows, from Windows NT's release in 1993 up to the current Windows 11.
Unlike FAT32, NTFS has no practical limits for file and partition sizes, comes with B-Tree Indexes for faster lookups, and adds a few resilience and efficiency features (such as journaling, compression, and sparse files).</p>
<p>The ntfs crate supports Rust's no_std environment and is therefore not tied to a specific platform API.
It aims to be embeddable in firmware-level code and kernels just as well as in user-mode applications.</p>
<p>Colin Finck will <a rel="external" href="https://fosdem.org/2022/schedule/event/misc_ntfs_rust/">talk about NTFS</a> and his adventures in writing a filesystem crate in Rust on the upcoming FOSDEM conference.
The talk is on Saturday, 5 February at 17:00 (CET, UTC+1).
The conference is virtual and admission is free.</p>
<h3 id="phip1611-noto-sans-mono-bitmap-rs"><a rel="external" href="https://github.com/phip1611/noto-sans-mono-bitmap-rs"><code>phip1611/noto-sans-mono-bitmap-rs</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phip1611">@phip1611</a>)</span></p>
<p>Philipp Schuster released an initial version of his <a rel="external" href="https://github.com/phip1611/noto-sans-mono-bitmap-rs">noto-sans-mono-bitmap</a>
crate this month. It provides a pre-rasterized bitmap font from <em>Noto Sans Mono</em>, an open font from Google.
The crate is a replacement for legacy bitmap fonts, such as the <a rel="external" href="https://crates.io/crates/font8x8">font8x8 crate</a>.
It is suitable for printing high quality/nice looking text to a framebuffer in bootloaders, kernels and similar
environments where you don't want or can't use the FPU.</p>
<p>To avoid CPU intensive soft float workloads, the crate contains pre-rendered symbols from the <a rel="external" href="https://fonts.google.com/noto/specimen/Noto+Sans+Mono">Noto Sans Mono font</a>
in different sizes and font weights (light, regular, bold) as Rust constants paired with a convenient getter function.</p>
<p><img src="https://rust-osdev.com/this-month/2022-01/framebuffer-font-noto-sans-mono.png" alt="Symbols from the crate &#39;noto-sans-mono-bitmap&#39; in an UEFI framebuffer." title="Symbols from the crate &#39;noto-sans-mono-bitmap&#39; in an UEFI framebuffer." /></p>
<p>The screenshot above shows text that is rendered into an UEFI framebuffer using the bitmap font
from <code>noto-sans-mono-bitmap</code>.</p>
<p>An example of usage can be found in <a rel="external" href="https://github.com/rust-osdev/bootloader/pull/213">PR#213</a> of the
<code>rust-osdev/bootloader</code> crate, where this crate was merged and replaced <code>font8x8</code>.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>This month, we merged three small improvements for the <em>Writing an OS in Rust</em> blog:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1067">Add Chinese translation for index page</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1061">Upgrade to zola 0.15.3</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/b24122a6044879d2305e65d30960dc03cd50ff17">Remove dark mode warning again</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/TisnKu">@TisnKu</a> for their contribution!</p>
<p>I have also brought the <a rel="external" href="https://github.com/phil-opp/blog_os/commits/edition-3"><code>edition-3</code></a> branch up to date again. I marked all the stub posts of the upcoming third edition as drafts, which should allow us to merge the unfinished branch now and then prepare the new edition directly in the <code>main</code> branch (without publishing them yet). This way, we can avoid that the branches diverge too much.</p>
<p>Regarding the state of the new edition: I'm planning to release an extra post about UEFI booting first because that article is almost ready. For the main posts of the edition, I'm still waiting for a few cargo features, namely artifact dependencies, a package/target-specific way to enable the unstable <code>build-std</code> feature, and fixes for the experimental <code>package.forced-target</code> manifest key. I also intend to have the new version of the <code>bootloader</code> crate ready soon, which should make the build and test process simpler and more robust.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (December 2021)</title>
            <pubDate>Sat, 08 Jan 2022 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-12/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-12/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-12/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-12/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (December 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>We merged the following changes in December:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/329">Fix build error on the latest nightly (<code>asm!</code> import)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/326">Remove <code>const_assert!</code> in favor of std's <code>assert!</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/328">Enable <code>unsafe_block_in_unsafe_fn</code> lint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/330">Move bootloader integration test to separate CI job</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/331"><strong>Release version <code>0.14.7</code></strong></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/327">Add an immutable getter for the level 4 page table</a>
<ul>
<li><span class="gray">This breaking change will be part of the upcoming <code>v0.15</code> release.</span></li>
</ul>
</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.</p>
<p>This month, we released new patch versions for both <code>v0.9</code> and <code>v0.10</code> to fix the <code>asm!</code> macro imports on the latest Rust nightlies:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/208">[v0.9] Update x86_64 dependency to <code>v0.14.7</code> to fix nightly breakage</a> <span class="gray">(published as <code>v0.9.20</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/209">Fix <code>asm</code> imports on latest nightly</a> <span class="gray">(published as <code>v0.10.10</code>)</span></li>
</ul>
<p>We also continued the work on the upcoming <code>v0.11</code> version, which will feature the following improvements:</p>
<ul>
<li>Configuration via Rust structs and the <code>entry_point</code> macro, instead of a <code>[package.metadata.bootloader]</code> table in the <code>Cargo.toml</code>.
<ul>
<li>The config data is serialized at compile time and put into a separate ELF section of the kernel executable.</li>
<li>This makes it possible to read the config data dynamically when loading the kernel, so we no longer need to recompile the bootloader on config changes.</li>
<li>The build process is also simplified as we don't need to read the kernel's <code>Cargo.toml</code> anymore.</li>
</ul>
</li>
<li>Instead of including the kernel ELF file using the <a rel="external" href="https://doc.rust-lang.org/stable/core/macro.include_bytes.html"><code>include_bytes</code></a> macro, we read the file dynamically from disk during the boot process.
<ul>
<li>The boot image is now a proper FAT partition for both UEFI and BIOS. The kernel file is simply copied to this partition.</li>
<li>In combination with the new config mechanism, the dynamic loading means that the bootloader only needs to be compiled once.</li>
</ul>
</li>
<li>The bootloader crate is split into three subcrates:
<ul>
<li>an API crate that defines the configuration and boot information structs, and provides the <code>entry_point</code> macro (this will be used by kernels)</li>
<li>an implementation crate that contains the actual BIOS and UEFI bootloader code</li>
<li>a builder crate that allows to turn kernel ELF files into bootable disk images
<ul>
<li>includes the compiled implementation crate, either by including a precompiled binary or through cargo's upcoming <a rel="external" href="https://github.com/rust-lang/cargo/pull/9992"><em>artifact dependencies</em></a> feature</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>The <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/b3df5e8debad2cfd9d0cad5c4b3914568ec613c7">new configuration system</a> is already done and working for both the BIOS and UEFI implementations. For UEFI, we also implemented the <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/a9c8e9e79cf58cd6b0a0a9024fc06be00bc7f2df">kernel loading from a FAT partition</a> already. Unfortunately, this part is more challenging for the BIOS implementation since the loading needs to happen in 16-bit real mode (as it requires calling functions of the BIOS). Parsing a FAT filesystem is not easy using assembly code, so we're currently working on porting all the lower boot stages to Rust. This includes the <a rel="external" href="https://github.com/rust-osdev/bootloader/tree/next/bios/first_stage">boot sector</a>, which needs to fit into 448 bytes, so we need some trickery to get a Rust executable that is small enough.</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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.</p>
<p>December was a fairly quiet month, but <a rel="external" href="https://github.com/rust-osdev/acpi/pull/114">an important bug-fix landed</a> that corrected the way we handled <code>_CRS</code> objects in a structure
called the <code>_PRT</code>, which are found on PCI root bridges and tell the OS how interrupt pins on PCI devices have been routed to the platform's interrupt controller. Each pin can be
hardwired to a specific interrupt, or more commonly, can be dynamically assigned using a 'Link Object' through a set of control methods: <code>_PRS</code>, <code>_CRS</code>, <code>_SRS</code>, and <code>_DIS</code>.
However, many platforms implement Link Objects that actually hardcode the interrupts (including QEMU) and this is where the bug slipped in: <code>_CRS</code> was being evaluated as a
hardcoded object. We now treat these objects correctly as control methods, supporting properly-configured tables. <span class="gray">(published as <code>aml v0.16.1</code>)</span></p>
<p>Thanks to <a rel="external" href="https://github.com/Dentosal">@Dentosal</a> for this contribution!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/318">Implement <code>open_protocol</code>, use it to fix flaky screenshot test</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/326">Change <code>memory_map_size</code> to return entry size as well</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/322">Document how to publish new versions of the crates</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/319">Improve clippy linting in <code>build.py</code> and CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/323"><code>build.py</code>: fix <code>clippy --verbose</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/324"><code>build.py</code>: deny warnings when running clippy</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/334">Move <code>build.py</code> to the root of the repo</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/330">Fix unused use warning that shows up with some build configs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/328">Fix build error on latest nightly</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/331">Update the version of <code>qemu-exit</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/332">Add missing <code>#[must_use]</code> marker attributes</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/StevenDoesStuffs">@StevenDoesStuffs</a> and <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contributions!</p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/21">Add <code>send_raw()</code> function to allow sending arbitrary binary data using the serial port</a> <span class="gray">(published as <code>v0.2.16</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/olivercalder">@olivercalder</a> for this contribution and <a rel="external" href="https://github.com/Kazurin-775">@Kazurin-775</a> for reporting this problem!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section.</em></p>
</span>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="other-projects">Other Projects</h2>
<p>In this section, we describe updates to Rust OS projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="metta-systems-vesper"><a rel="external" href="https://github.com/metta-systems/vesper"><code>metta-systems/vesper</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/berkus">@berkus</a>)</span></p>
<p>Vesper is a capability-based single-address-space nanokernel. This means it is aiming to be small, to provide only isolation primitives; at the same time SAS makes it a lot easier to perform cross-process operations (because all addresses are the same across all processes). It uses capabilities to provide security for such operations, so that unauthorized processes will not be able to intervene in legitimate traffic.</p>
<p>The kernel is in very early stages of development, while I am building up tooling support to make future development fast and painless. This is my second post here and as usual, I will link directly to my blog for more details. <a rel="external" href="https://metta.systems/blog/osdev-tooling-2/">Read the full article here</a>.</p>
<p>Just a note: since features described in the article are not fully finalized, they are not merged to the main development branch yet and live in <a rel="external" href="https://github.com/metta-systems/vesper/tree/feature/chainboot">their own branch</a>, which is subject to frequent rebases. Caveat emptor!</p>
<h3 id="rusty-hermit"><a rel="external" href="https://crates.io/crates/rusty-hermit"><code>rusty-hermit</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/stlankes">@stlankes</a>)</span></p>
<p>RustyHermit is a unikernel targeting a scalable and predictable runtime for high-performance and cloud computing.</p>
<p>This month, we integrated a <a rel="external" href="https://docs.oasis-open.org/virtio/virtio/v1.1/csprd01/virtio-v1.1-csprd01.html">virtual i/o device driver</a>, which is based on memory mapped i/o and doesn't depend on PCI device specification.
For instance, micro VMs like <a rel="external" href="https://firecracker-microvm.github.io">Firecracker</a> and Qemu's <a rel="external" href="https://www.qemu.org/docs/master/system/i386/microvm.html">microvm machine type</a> don't support the PCI specification to accelerate the boot time and to improve the performance.
With this device driver, <code>rusty-hermit</code> is able to run on Qemu's microvm platform.
We are working to support Firecracker in the near future.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>This month, we merged a small translation improvement to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1067">Add Chinese translation to <code>_index.zh-CN.md</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/TisnKu">@TisnKu</a> for this contribution!</p>
<p>My personal focus this month has been on the new bootloader version <a href="https://rust-osdev.com/this-month/2021-12/#bootloader">mentioned above</a>, which I plan to use for the third edition of the blog. I'm also thinking about writing a post about creating a basic BIOS bootloader in Rust if I can find the time.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (November 2021)</title>
            <pubDate>Mon, 06 Dec 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-11/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-11/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-11/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-11/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (November 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/308">loaded_image: document size argument unit</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/312">Revert "Temporarily disable a false-positive clippy lint"</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/310">Fix <code>locate_device_path</code> impl argument pointer</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/309">Change <code>Handle</code> representation to be non-nullable so that <code>Option&lt;Handle&gt;</code> is FFI-safe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/314">Improve <code>Handle</code> buffer handling code</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/291">Add <code>CStr16::from_str_with_buf</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/315">Update and reorganize documentation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/316">Add flag to <code>build.py</code> for disabling KVM</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/necauqua">@necauqua</a> and <a rel="external" href="https://github.com/baloo">@baloo</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In November, <a rel="external" href="https://github.com/Freax13">@Freax13</a> joined our <code>x86_64</code> maintenance team after doing <a rel="external" href="https://github.com/rust-osdev/x86_64/pulls?q=is%3Apr+is%3Aclosed+author%3AFreax13">a lot of great work</a> on the crate. Welcome!</p>
<p>We merged the following non-breaking changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/285">Add <code>set_general_handler</code> macro</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/313">Add the VMM Communication Exception (<code>#VC</code>) to the <code>InterruptDescriptorTable</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/315">Derive common traits for number, range and enum types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/314">Remove redundant alignment check</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/321">fix(idt): fix panic messages for index and <code>#VC</code></a></li>
</ul>
<p>We also merged a number of breaking changes that will go into the <a rel="external" href="https://github.com/rust-osdev/x86_64/issues/262">upcoming 0.15 release</a>:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/319">Implement <code>Index&lt;u8&gt;</code> for IDT instead of <code>Index&lt;usize&gt;</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/323">Fix memory safety of <code>load_tss</code> and <code>GlobalDescriptorTable</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/324">Change type of <code>InterruptStackFrameValue::cpu_flags</code> to <code>RFlags</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/317">Add <code>InvalidStarSegmentSelectors</code> error type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/316">Add <code>PcidTooBig</code> error</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/320">Activate <code>feature(asm_const)</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a>, <a rel="external" href="https://github.com/haraldh">@haraldh</a>, and <a rel="external" href="https://github.com/mpajkowski">@mpajkowski</a> for their contributions!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section.</em></p>
</span>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="metta-systems-vesper"><a rel="external" href="https://github.com/metta-systems/vesper"><code>metta-systems/vesper</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/berkus">@berkus</a>)</span></p>
<p>Vesper is a capability-based single-address-space nanokernel. This means it is aiming to be small, to provide only isolation primitives; at the same time SAS makes it a lot easier to perform cross-process operations (because all addresses are the same across all processes). It uses capabilities to provide security for such operations, so that unauthorized processes will not be able to intervene in legitimate traffic.</p>
<p>It's in very early stages of development and is a basis for a larger envisioned system. The progress is fairly slow, only allowed as my available time permits. This month to motivate me to move it faster I've decided to start posting monthly development updates. The first post is about the tools I use.</p>
<p>Since <a rel="external" href="https://metta.systems/blog/reboot-to-rust/">rebooting to Rust</a> almost 4 years ago I've been constantly amazed by the language ecosystem and what wonders are possible. This time I want to tell about incredible tooling that makes my OSdev experience a sunny warm place in contrast to the barren lands of my previous OSdev environments. <a rel="external" href="https://metta.systems/blog/osdev-tooling/">Read the full article here</a>.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>There were no visible changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> series this month, but I continued working on the new build system for the upcoming third edition. One particular change that I want to highlight is that I redesigned the configuration of the <code>bootloader</code> crate. Instead of passing it via <a rel="external" href="https://docs.rs/bootloader/0.10.9/bootloader/struct.Config.html">a <code>package.metadata.bootloader</code> section</a> in the kernel's <code>Cargo.toml</code>, users will pass a configuration struct to the <a rel="external" href="https://docs.rs/bootloader/0.10.9/bootloader/macro.entry_point.html"><code>entry_point</code></a> macro. This struct is then serialized at compile time into a separate section in the ELF executable, which the bootloader can then read on loading. This change should make the build process easier and more flexible.</p>
<p>I plan to simplify the build system further, but I'm currently waiting on some upcoming <code>cargo</code> features for that. In particular, I think that <a rel="external" href="https://github.com/rust-lang/cargo/pull/9992"><em>artifact dependencies</em></a> and <a rel="external" href="https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336"><em>per-packet configuration</em></a> options will be very useful for the project, especially the config options I mentioned in my <a rel="external" href="https://github.com/phil-opp/blog_os/issues/1063#issuecomment-968341112">status update comment</a> on GitHub.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (October 2021)</title>
            <pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-10/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-10/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-10/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-10/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (October 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>We merged the following PRs this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/293">Implement missing Event-related functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/296">Remove attribute to enable <code>const_panic</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/298">Use build-std-features instead of rlibc</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/301">Update <code>set_virtual_address_map()</code> to allow remapping of <code>SystemTable</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/304">Fix new clippy errors</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/timrobertsdev">@timrobertsdev</a>, <a rel="external" href="https://github.com/YtvwlD">@YtvwlD</a>, and <a rel="external" href="https://github.com/foxcob">@foxcob</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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.</p>
<p>This month, <a rel="external" href="https://github.com/rust-osdev/acpi/pull/113">support for the Boot Graphics Resource Table (BGRT)</a> table was added to <code>acpi</code>. This static table is
passed from firmware to the OS to communicate information about the state of the screen when control is passed
over, as lots of firmwares like to print display a logo when booting. <span class="gray">(published as <code>acpi v4.1.0</code>)</span></p>
<p>Thanks to <a rel="external" href="https://github.com/ethindp">@ethindp</a> for this contribution!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In October, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/312">Enable manipulation of <code>InterruptStackFrame</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/318">Fix docs for <code>page_table_index</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/haraldh">@haraldh</a> and <a rel="external" href="https://github.com/Freax13">@Freax13</a> for their contributions!</p>
<h3 id="multiboot2-header-new"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2-header</code></a> (<strong>new</strong>)</h3>
<p>The <code>multiboot2-header</code> crate provides abstraction types for Multiboot2 headers,
parsing utilities, and a builder to construct such headers. The initial release took
place in early October and now is ready to be used. Because lots of code was published
without any in-depth reviews, further testing and code reviews will be highly appreciated.</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section.</em></p>
</span>
<p>If you maintain a Rust project related to operating system development and are looking for contributors, especially for tasks suited to people getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the <code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1053">Add French translation for the first post</a>
<ul>
<li>Thanks to <a rel="external" href="https://github.com/Alekzus">@Alekzus</a> for this contribution, and <a rel="external" href="https://github.com/dallenng">@dallenng</a> and <a rel="external" href="https://github.com/CBenoit">@CBenoit</a> for reviewing!</li>
<li>Published at <a rel="external" href="https://os.phil-opp.com/fr/">https://os.phil-opp.com/fr/</a>.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1054">Improve our integration of the giscus comment system</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1056">Use Iosevka font for code blocks and inline code</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1057">Initial Dark Mode Support</a> 🌑</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1058">Implement a switch for switching between light and dark mode</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1059">Remember chosen theme in <code>localStorage</code>, add a switch for going back to system theme, improve layout</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1060">Use <code>crate-ci/typos</code> action to check for typos</a></li>
</ul>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (September 2021)</title>
            <pubDate>Thu, 07 Oct 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-09/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-09/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-09/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-09/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (September 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In September, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/264">Add <code>clean_up</code> and <code>clean_up_with_filter</code></a> for deallocating unused page tables</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/303">Add exception vector type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/306">Bump <code>bit_field</code> to 0.10.1</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/304">Release version 0.14.5</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/309">Move segment types into a new registers::segmentation module</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/310">Release version 0.14.6</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a>, <a rel="external" href="https://github.com/npmccallum">@npmccallum</a>, and <a rel="external" href="https://github.com/mkroening">@mkroening</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/277">Improve macro errors</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/290">Implement missing methods of <code>DebugSupport</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/286">macros: add compilation tests</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/296">Remove attribute to enable <code>const_panic</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/283">Add a test command to build.py and also use it in the CI</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/necauqua">@necauqua</a> and <a rel="external" href="https://github.com/timrobertsdev">@timrobertsdev</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.</p>
<p>We finally merged a long-desired feature this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/179">Framebuffer configuration</a> <span class="gray">(published as <code>v0.10.9</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/anellie">@anellie</a> for this contribution!</p>
<h3 id="multboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multboot2</code></a></h3>
<p>The <code>multiboot2</code> crate provides abstraction types for the boot information of multiboot2 bootloaders.</p>
<p>It is now part of a workspace and lives next to the new crate <code>multiboot2-header</code>.</p>
<p>The following changes were merged this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/92">Code style improvements + optional CI job (clippy, rustfmt, rustdoc)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/94">std in tests; hash for TagType</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/93">editorconfig file</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/86">prepared cargo workspace, as discussed in PR #79</a></li>
</ul>
<p>The changes were published as <span class="gray"><code>v0.12.2</code></span>.</p>
<h3 id="multboot2-header-new"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multboot2-header</code></a> (<strong>new</strong>)</h3>
<p>The <code>multiboot2-header</code> crate provides abstraction types for the Multiboot2 header
and a builder struct to construct these headers. The corresponding repository was
prepared (<a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/86">#86</a>) and the initial release
is expected in early October. See <a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/95">#95</a> for more details.</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1053">(<code>phil-opp/blog_os</code>) Looking for a reviewer for a French translation</a></li>
</ul>
<!--
<span class="gray">

_No tasks were proposed for this section._

</span>
-->
<p>If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people
getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the
<code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged two small fixes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1051">Fix typos in code examples in Async/Await post</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1046">Fix link syntax in Russian translation</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/jongillham">@jongillham</a> and <a rel="external" href="https://github.com/non-descriptive">@non-descriptive</a> for these contributions!</p>
<p>I don't have any notable news about the upcoming third edition of the blog yet, but I'm doing my best to get back up to speed soon.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (August 2021)</title>
            <pubDate>Wed, 08 Sep 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-08/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-08/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-08/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-08/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (August 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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.</p>
<p>There was a fair amount of progress this month, including adding support for a major AML feature: buffer fields.
These are objects that represent bit-level slices of buffer objects, allowing a section of a buffer to be read and
written. This requires us to support multiple namespace objects operating on the same underlying data -
currently this is handled simply with spinlocks, but we're looking to improve this situation in the future.
With this, we grew support for the <code>DefCreateBitField</code>, <code>DefCreateByteField</code>, <code>DefCreateWordField</code>,
<code>DefCreateDWordField</code>, <code>DefCreateQWordField</code>, and <code>DefCreateField</code> opcodes, as well as logic for reading and
writing <code>Integer</code>s and <code>Buffer</code>s out of them. <span class="gray">(published as <code>aml v0.16.0</code>)</span></p>
<p>The <code>acpi</code> crate also saw improvement, and unfortunately some more breakage. We now support X2APIC entries
appearing in the MADT, and so have changed the representation of Processor UIDs and Local APIC IDs in
<code>acpi::platform::Processor</code> to <code>u32</code>, to support the wider IDs that X2APIC uses to support more processors. On
older platforms that only support APIC, the upper bits will simply always be zeroed, and so these values can be
cast down to <code>u8</code> when needed. Note that for complex legacy reasons, you cannot rely upon ACPI for detecting
whether a platform has X2APIC support or not, and so whether the MADT actually contained X2APIC entries is not exposed
by this interface - this is by design. <span class="gray">(published as <code>acpi v4.0.0</code>)</span></p>
<p>Other changes were:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/107"><code>aml</code>: the contents of the <code>namespace</code> module were made public</a>.
Thanks to <a rel="external" href="https://github.com/Andy-Python-Programmer">@Andy-Python-Programmer</a> for this contribution!</li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/c1597aba3d39344834292637fb81e2f2971d6c04"><code>aml</code>: store locals and method arguments in arrays</a>. If you're manually calling AML methods
that take arguments, you will need to update how you create them.</li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/514e55df07acbca93dfd4eb2db3cdd6fdea5aaf5"><code>aml</code>: support the <code>DefFatal</code> opcode</a>. <code>DefFatal</code> will cause a panic by default, but this behaviour can be overridden by implementing <code>Handler::handle_fatal_error</code>.</li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/06409b360ef30b3b08b56865f3ee380315751f14"><code>aml</code>: implement the <code>DefWhile</code> opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/da5f5cec8096d2ebd5697212e282abbeaed6edb7"><code>aml</code>: implement the <code>DefBreak</code> opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/ed0400092e18598c73ca6048fb96b2522237808d"><code>aml</code>: implement the <code>DefContinue</code> opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/b854d5491e48e5a4f332ff259ce185cb357261d0"><code>aml</code>: implement the <code>DefIncrement</code> and <code>DefDecrement</code> opcodes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/00a61d8b7471dae725283296f4ee9c0c20013156"><code>aml</code>: implement the <code>ToInteger</code> opcode</a></li>
</ul>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>In August, <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> joined as a co-maintainer of the crate. Welcome!</p>
<p>Many improvements were merged this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/261">Add <code>BootServices::exit</code> method; Make <code>PointerMode</code>'s fields public for checking against support of a pointer device</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/265">Implement <code>PartialEq</code>+<code>Eq</code> for <code>DevicePath</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/248">System table can get debug-formatted</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/266">loaded image: add set_image function</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/249">Better <code>CStr16</code> to <code>String</code> and <code>str</code> conversions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/268">Add a minimal UEFI application template</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/269">Use the built-in <code>aarch64-unknown-uefi</code> target</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/270">Make <code>GraphicsOutput.query_mode(...)</code> public</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/276">Publish new versions of all the crates</a> <span class="gray">(published <code>uefi v0.12.0</code>, <code>uefi-macros v0.4.0</code>, and <code>uefi-services v0.9.0</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/273">Add newtype enum for variable vendors and add <code>IMAGE_SECURITY_DATABASE</code> to it</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/272">Fix doc link and make CI lints stricter</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/274">Add num_bytes method to <code>CStr16</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/275">Add <code>CString16</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/280">Enhance <code>Guid::from_values</code> and <code>Guid::fmt</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/282">Handle panics by unwinding the stack and implement check_event method</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/HTG-YT">@HTG-YT</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a>, <a rel="external" href="https://github.com/Andy-Python-Programmer">@Andy-Python-Programmer</a>, and <a rel="external" href="https://github.com/timrobertsdev">@timrobertsdev</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In August, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/275">Rename <code>XCr0</code> and <code>CR4</code> flags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/297">Fix CI tests on Windows</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/287">Use <code>#[cfg(doc)]</code> instead of docs.rs-specific cfg flag</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/296">Expose <code>MapperFlush::new</code> and <code>MapperFlushAll::new</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/301">docs: Update segment register references in <code>GDT::load*</code> method to non-deprecated methods</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/300">docs(idt): remove a panic note</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/302">Fix typo and doc links in GDT docs</a></li>
</ul>
<p>These changes were not published yet, but a pull request for a new version is open already: <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/304">Release version 0.14.5</a>.</p>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> and <a rel="external" href="https://github.com/ncatelli">@ncatelli</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.</p>
<p>This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/185">[v0.9] Set <code>relocation-model: static</code> and <code>panic-strategy: abort</code> and fix <code>.intel_syntax</code> warnings</a> <span class="gray">(published as <code>v0.9.19</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/186">Fix relocation-model field name in the target spec json</a> <span class="gray">(published as <code>v0.10.7</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/180">Pad uefi fat file length</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/182">Also check cfg gated target field for bootloader dependency</a> <span class="gray">(published as <code>v0.10.8</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/194">Fix typo in link in changelog</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/vinc">@vinc</a>, <a rel="external" href="https://github.com/bjorn3">@bjorn3</a>, <a rel="external" href="https://github.com/Freax13">@Freax13</a>, <a rel="external" href="https://github.com/yusdacra">@yusdacra</a>, and <a rel="external" href="https://github.com/martica">@martica</a> for their contributions!</p>
<h3 id="multboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multboot2</code></a></h3>
<p>The <code>multiboot2</code> crate provides abstraction types for the boot information of multiboot2 bootloaders.</p>
<p>The following changes were merged this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/89">Unpublic tags bugfix</a> <span class="gray">(published as <code>v0.12.1</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/91">Fix <code>ModuleTag</code> cmdline</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/90">Stricter typing + better split of modules + bugfix</a></li>
</ul>
<h3 id="pic-8259"><a rel="external" href="https://github.com/rust-osdev/pic8259"><code>pic_8259</code></a></h3>
<p>The <code>pic_8259</code> crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs).</p>
<p>In August, we added cargo features to make the crate buildable on stable:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pic8259/pull/1">Add <code>nightly</code> and <code>stable</code> feature flags to enable compilation on stable Rust</a> <span class="gray">(published as <code>v0.10.2</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for this contribution!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section.</em></p>
</span>
<p>If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people
getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the
<code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following improvements to the <a rel="external" href="https://os.phil-opp.com"><em>Writing an OS in Rust</em></a> blog:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1031">Update crate versions across translations</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1034">Replace MS doc link that linked to a German page</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/c1e6a66e356653c166426adbcdbb158792bc408c">Fix link: The const_fn unstable feature no longer exists</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/27ab4518acbb132e327ed4f4f0508393e9d4d684">Replace fathom analytics with goatcounter</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1040">fix: typo</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1046">Fix links in Russian translation</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Foo-x">@Foo-x</a>, <a rel="external" href="https://github.com/adi-g15">@adi-g15</a>, <a rel="external" href="https://github.com/Kalbiq">@Kalbiq</a>, and <a rel="external" href="https://github.com/non-descriptive">@non-descriptive</a> for their contributions!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (July 2021)</title>
            <pubDate>Sat, 07 Aug 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-07/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-07/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-07/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-07/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (July 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In July, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/245">Add support for getting/setting variables</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/246">Better logger that includes filename and line</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/250">device path: add constants for all subtypes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/251">device path: change the length type to u16</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/253">Implement <code>BootServices::protocols_per_handle</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/254">Add method to get variable names</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/256">Better <code>fmt::Debug</code> for <code>Time</code> struct + <code>fmt::Display</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/257">Fix <code>BltRegion::Full</code> bounds check</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/260">Fix procedural macros</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/263">device path: add header struct</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/264">device path: add iter method and test</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, <a rel="external" href="https://github.com/MaulingMonkey">@MaulingMoneky</a>, <a rel="external" href="https://github.com/phip1611">@phip1611</a> and <a rel="external" href="https://github.com/necauqua">@necauqua</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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.
This month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/103">Definitions were added for the FADT's fixed and architecture flags</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/103">Table signatures were added for more static tables</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/7f6bb2ee53c9abb6c552434dbdb4e13cf38b6b26">AML: support was added for the <code>DefPowerResource</code> opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/a55d82bad3e5b7ffd42d19487a57ca65359e3bad">AML: support was added for the <code>DefThermalZone</code> opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/188d62fdab853c16e9c3e66bb183acc3e1c9f134">AML: support was added for the <code>DefExternal</code> opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/6f92f675a4b0e21a5bc63edd99de1010efdb61fa">AML: support was added for the <code>DefConcat</code> opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/a883868dd57473a61a095c56d3e7490dfe012700">AML: support was added for the <code>DefConcatRes</code> opcode</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/a37008df127c6f2160c1a2ac3ba5f536f8616732">AML: support was added for the <code>DefMid</code> opcode</a></li>
</ul>
<p>These changes were published as <code>acpi v3.1.0</code> and <code>aml v0.14.0</code>. Thanks to <a rel="external" href="https://github.com/ethindp">@ethindp</a>
and <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contributions.</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2"><code>multiboot2</code></a></h3>
<p>The <code>multiboot2</code> crate provides abstraction types for the boot information of multiboot2 bootloaders.</p>
<p>In July, our <code>multiboot2</code> maintenance team gained <a rel="external" href="https://github.com/phip1611">@phip1611</a> as a new member. Welcome!</p>
<p>The following changes were merged this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/76">much improved debug output of BootInformation + enum TagType</a> <span class="gray">(published as <code>v0.11.0</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/commit/1d7c0e21fe532550f5ee9757252881e18c88a063">Set up CI on Github Actions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/77">Add multiboot2 magic number</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/82">Fixing future compiler error "unaligned_references" (82523)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/84">Rust edition 2018 + formatting + clippy</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/80"><strong>Breaking:</strong> <code>load</code> returns a result now (no more assertions that could panic)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/85">Renamed multiboot2 bootloader magic constant</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/87">Cargo toml prepare release v0.12 + changelog</a> <span class="gray">(published as <code>v0.12.0</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2/pull/88">Rename old Github urls in README</a></li>
</ul>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In July, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/271">feat(idt): make it available in the stable Rust</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/269">gdt: Fix off-by-one error in from_raw_slice()</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/270">Make align_up and align_down const</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/274">Add a SelectorErrorCode to segment_not_present in IDT</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/273">Add flags for CR0, CR4 and XCR0, as well as extra checks for modification of XCR0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/278">fix(Changelog.md): typo #278</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/279">feat(instructions): define <code>tables::sgdt</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/281">Create a CI script for automated releases</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/282">CI: Use more efficient crates.io API endpoint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/283">Release version to 0.14.4</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/275">Rename XCr0 and CR4 flags</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/budde25">@budde25</a> and <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contributions.</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section.</em></p>
</span>
<p>If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people
getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the
<code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>This month, the <a rel="external" href="https://os.phil-opp.com"><em>Writing an OS in Rust</em></a> blog received the following updates:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1029">Translate first two posts into Russian</a>
<ul>
<li>Thanks to <a rel="external" href="https://github.com/MrZloHex">@MrZloHex</a> for the translation and <a rel="external" href="https://github.com/SnejUgal">@SnejUgal</a> and <a rel="external" href="https://github.com/vdjagilev">@vdjagilev</a> for reviewing!</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1031">docs: update version of crates</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1034">Replace MS doc link in german</a></li>
<li>Typo fixes in the <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1032"><em>Paging Implementation</em></a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1040"><em>Allocator Designs</em></a>, and <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1036"><em>Async Await</em></a> posts.</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Foo-x">@Foo-x</a>, <a rel="external" href="https://github.com/adi-g15">@adi-g15</a>, <a rel="external" href="https://github.com/Kalbiq">@Kalbiq</a>, and <a rel="external" href="https://github.com/MrZloHex">@MrZloHex</a> for their contributions.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (June 2021)</title>
            <pubDate>Thu, 08 Jul 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-06/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-06/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-06/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-06/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (June 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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.</p>
<p>This month, both the <code>rsdp</code> and <code>acpi</code> crates saw breaking changes. These changes should require minimal work to migrate to;
please file an issue if you encounter any difficulties. <span class="gray">(published as <code>rsdp v2.0.0</code> and <code>acpi v3.0.0</code>)</span></p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/99">Basic support for the MADT's new Multiprocessor Wakeup Structure was added</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/101"><code>PhysicalMapping</code> now implements <code>Send</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/102"><code>PhysicalMapping</code>'s fields were made private, preventing construction of unsound mappings in safe code</a>.
The <code>unmap_physical_region</code> method of <code>AcpiHandler</code> also lost its <code>self</code> type - handlers that used <code>self</code> should
instead access themselves through the <code>PhysicalMapping::handler</code> method. This prevents a mapping from being
unmapped using a different handler to the one that mapped it.</li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/d58e64b39e9f22367bc76b64a68826a519615226">Accesses to potentially unaligned packed field were fixed</a>.
<code>repr(packed)</code> structures are very common in OS Dev, and make sure the layout of Rust's structures matches the
hardware's. Unfortunately, they can be slightly tricky to work with - creating an unaligned reference is
undefined behaviour, and references can transiently be created by, for example, calling a method on an unaligned
field of a packed structure (e.g. <code>entry.flags.get_bit(4)</code>). You can read more about this issue <a rel="external" href="https://github.com/rust-lang/rust/issues/82523">here</a>.</li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/fdd88add32497411d439c2d18fe28258a3fe6525"><code>acpi::platform</code> no longer re-exports the contents of its <code>interrupt</code> submodule</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/wusyong">@wusyong</a> and <a rel="external" href="https://github.com/wusyong">@Freax13</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In June, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/229">Make the <code>qemu-exit</code> dependency optional</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/234">Fix type of the media field in the <code>BlockIO</code> protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/230">Use <code>newtype_enum</code> for <code>DevicePath</code> enums</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/231">Make <code>DevicePath</code> and <code>AcpiDevicePath</code> unaligned</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/233">Derive <code>Debug</code> for <code>CharConversionError</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/235">Rename boot services' <code>memset</code> to <code>set_mem</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/237">Implement image loading/starting</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/238">Add <code>num_blocks</code> method to <code>GptPartitionEntry</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/227"><code>ShimLock</code> protocol uses <code>sysv64</code> function ABI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/240">Make using the <code>stdio</code> handles require a mutable ref</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/243">Fix AArch64 build</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a>, <a rel="external" href="https://github.com/iankronquist">@iankronquist</a> and <a rel="external" href="https://github.com/josephlr">@josephlr</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In June, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/258">Add common abstractions for x86 Segments</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/267">Specify sysv64 for the calling convention of the external assembly functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/271">Make IDT module available on stable Rust</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/269">Fix off-by-one error in GDT <code>from_raw_slice()</code></a></li>
</ul>
<p>We did not issue a new crates.io release with these changes yet, but we plan to do so soon.</p>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contribution!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:

> **[`repo_name`](link-to-repo):**
>
> - [Issue Description](https://example.com/link-to-issue)
-->
<p><strong><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a>:</strong></p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1029">New Russian translation needs a reviewer</a>: We're looking for someone that is speaking Russian to review the new Russian translation of <a rel="external" href="https://github.com/MrZloHex">@MrZloHex</a>.</li>
</ul>
<p>If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people
getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the
<code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>The <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog received the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/996">Switch comments from utterances to giscus</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1007">giscus: Use specific search term instead of <code>og:title</code></a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/1010">giscus: Make it possible to set discussion thread manually per post</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/977">Translate <code>post-12</code> to Japanese</a></li>
<li>Lots of smaller improvements and typo fixes: <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1021">#1021</a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1023">#1023</a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1026">#1026</a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1028">#1028</a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/1032">#1032</a></li>
</ul>
<p>Thanks to:</p>
<ul>
<li><a rel="external" href="https://github.com/kahirokunn">@kahirokunn</a> for the new Japanese translation,</li>
<li><a rel="external" href="https://github.com/woodyZootopia">@woodyZootopia</a>, <a rel="external" href="https://github.com/JohnTitor">@JohnTitor</a>, and <a rel="external" href="https://github.com/sozysozbot">@sozysozbot</a> for reviewing this translation, and</li>
<li><a rel="external" href="https://github.com/Foo-x">@Foo-x</a>, <a rel="external" href="https://github.com/tsao-chi">@tsao-chi</a>, and <a rel="external" href="https://github.com/conorbros">@conorbros</a> for fixing typos.</li>
</ul>
<p>Unfortunately, I didn't have time to work on the upcoming third edition this month. I'll try my best to continue working on it soon!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (May 2021)</title>
            <pubDate>Mon, 07 Jun 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-05/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-05/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-05/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-05/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (May 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In May, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/250">Use new <code>const_fn_trait_bound</code> feature to fix build on latest nightly</a> <span class="gray">(published as <code>v0.14.1</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/251">Multiple improvements to the inline assembly code</a> <span class="gray">(published as <code>v0.14.2</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/253">Minor lint fixes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/255">Cleanup <code>const_fn!</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/248">Use marker types for Port read/write access</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/256">Bump version to 0.14.3</a> <span class="gray">(published as <code>v0.14.3</code>)</span></li>
</ul>
<p>We also started to <a rel="external" href="https://github.com/rust-osdev/x86_64/issues/262">prepare a <code>v0.15</code> release</a>, for which we already implemented the following breaking changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/259">Replace <code>software_interrupt!</code> macro with generic function</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/260"><code>software_interrupt</code>: Add additional testing</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/265">Fix typo in docs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/226">idt: Fixup Options structure and cleanup <code>set_handler_fn</code></a> (resubmitted in <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/261">#261</a>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/263">Use SegmentSelector in InterruptStackFrame</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/dbeckwith">@dbeckwith</a> and <a rel="external" href="https://github.com/Freax13">@Freax13</a> for their contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/156">Change register used in setting <code>SS</code> in <code>stage_4</code></a> <span class="gray">(published as <code>v0.10.3</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/162">Fix build on latest Rust nightly by updating to <code>uefi</code> v0.9.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/161">Fix higher half kernels by identity mapping context switch fn earlier</a> <span class="gray">(published as <code>v0.10.4</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/170">Make bootloader v0.10 compatible with latest Rust nightlies by updating uefi-rs dependency</a> <span class="gray">(published as <code>v0.10.5</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/166">Add some usage examples</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/174">Uefi: Look for an ACPI2 RSDP first</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/175">Identity-map GDT into kernel address space</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/176">Don't check target architecture for builder crate to support cross-compiling</a> <span class="gray">(published as <code>v0.10.6</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Elekrisk">@Elekrisk</a> for their contribution!</p>
<p>We also published the following backport to <code>v0.9</code>:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/168">Fix nightly regression by manually passing <code>--gc-sections</code></a> <span class="gray">(published as <code>v0.9.18</code>)</span></li>
</ul>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In May, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/221">Switch to the newer <code>Try</code> trait API</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/223">Add <code>FromResidual&lt;Result&lt;!, Error&gt;&gt;</code> impl for <code>Status</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/225">Add <code>PartitionInfo</code> protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/226">Add shim lock protocol</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> and <a rel="external" href="https://github.com/nicholasbishop">@nicholasbishop</a> for their contributions!</p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/16">SerialPort::new() no longer requires nightly</a> <span class="gray">(published as <code>v0.2.14</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/15">Add support for memory mapped UARTs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/18">Improvements to new MMIO support</a> <span class="gray">(published as <code>v0.2.15</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/josephlr">@josephlr</a> and <a rel="external" href="https://github.com/remimimimi">@remimimimi</a> for their contributions!</p>
<h3 id="pic-8259"><a rel="external" href="https://github.com/rust-osdev/pic8259"><code>pic_8259</code></a></h3>
<p>The <code>pic_8259</code> crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs). It is a new fork of the <a rel="external" href="https://github.com/emk/toyos-rs/tree/master/crates/pic8259_simple"><code>pic8259_simple</code></a> crate, which appears to be no longer maintained.</p>
<p>We merged the following changes on top of the original <code>pic8259_simple</code> crate:</p>
<ul>
<li><a rel="external" href="https://github.com/emk/toyos-rs/pull/7">PIC: Masks</a></li>
<li><a rel="external" href="https://github.com/emk/toyos-rs/pull/9">cpuio: Use new feature flag for const functions</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pic8259/commit/92f7a123224e7fa1ce3813fc62b84e290d2fc799">Replace <code>cpuio</code> dependency with <code>x86_64</code> crate</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pic8259/commit/3e5602aaff3d30f6371c4976149eb693d5838d7c">Rename to pic8259 and bump version to 0.10.0</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> and <a rel="external" href="https://github.com/hanmertens">@hanmertens</a> for their contributions!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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.</p>
<p>This month was fairly quiet, but an important regression was fixed. When native methods were introduced in March,
<code>AmlContext</code> lost its <code>Send + Sync</code>, as these native methods weren't required to be thread-safe. This meant that
<code>AmlContext</code> could no longer be stored in types such as <code>spin::Once</code>, or shared between threads/tasks. This is
undesirable for <code>AmlContext</code>, as it is very expensive to construct, and AML does (in theory) provide mechanisms to
make itself thread-safe, so any probject should only need one.</p>
<p>This was fixed by requiring native methods to be <code>Send + Sync</code>. If you're hitting this issue, please upgrade to the
latest version. <span class="gray">(published as <code>v0.13.0</code>)</span></p>
<p>Thanks to <a rel="external" href="https://github.com/michaelmelanson">@michaelmelanson</a> for his contribution!</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p>The <code>xhci</code> crate provides types of xHCI structures such as Contexts, Extended Capabilities, Registers, and TRBs.</p>
<p>In May we finished implementing all of these structures and field getters/setters. Still there may exist missing. If you find one, feel free to send a PR!</p>
<h3 id="spinning-top"><a rel="external" href="https://github.com/rust-osdev/spinning_top"><code>spinning_top</code></a></h3>
<p>The <code>spinning_top</code> crate provides a simple spinlock implementation based on the abstractions of the <a rel="external" href="https://docs.rs/lock_api/0.4.1/lock_api/"><code>lock_api</code></a> crate. This month, we released version <code>v0.2.4</code> with the following small improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/12">Define <code>MappedSpinlockGuard</code> alias</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/11/files">Fix unclosed code block in doc comment</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for these contributions!</p>
<h3 id="vga"><a rel="external" href="https://github.com/rust-osdev/vga"><code>vga</code></a></h3>
<p>The work-in-progress <code>vga</code> crate allows the configuration of the VGA hardware, e.g. switching from text-based mode to a pixel-based graphics mode. This month, we fixed a nightly build error:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/vga/pull/23">Update dependencies to latest versions to fix E0557</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/vga/pull/24">Update testing</a> <span class="gray">(published as <code>v0.2.7</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/ethindp">@ethindp</a> for their contribution!</p>
<h3 id="ps2-mouse"><a rel="external" href="https://github.com/rust-osdev/ps2-mouse"><code>ps2-mouse</code></a></h3>
<p>The <code>ps2-mouse</code> library provides a basic interface for interacting with a PS/2 mouse. It was also affected by the nightly breakage in <code>x86_64</code>, so it required a dependency update too:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ps2-mouse/pull/2">Update x86_64 to 0.14.2</a> <span class="gray">(published as <code>v0.1.4</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/littledivy">@littledivy</a> for this contribution!</p>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:
- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/issues/96">(<code>acpi</code>) Add initial support for <code>DefExternal</code> opcodes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/issues/98">(<code>acpi</code>) Add test to make sure <code>AmlContext</code> remains <code>Send + Sync</code></a></li>
</ul>
<p>If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people
getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the
<code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following improvements to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/990">Update posts to fix build on latest nightly</a>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/984">Update x86_64 dependency to v0.14.2 to fix nightly breakage</a></li>
<li>Adjust <code>post-XX</code> tags for x86_64 v0.14: <a rel="external" href="https://github.com/phil-opp/blog_os/pull/985"><code>post-05</code></a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/986"><code>post-06</code></a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/987"><code>post-07</code></a>, <a rel="external" href="https://github.com/phil-opp/blog_os/pull/988"><code>post-08</code></a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/987">Switch to <code>pic8259</code> fork</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/989">Update <code>linked_list_allocator</code> dependency to v0.9.0</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/954">Translate post 08 to Japanese</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/983">Remove wrong suggestion part</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/978">Fix typo</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/981">Fix typos in edition 3 uefi booting post</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/woodyZootopia">@woodyZootopia</a>, <a rel="external" href="https://github.com/kahirokunn">@kahirokunn</a>, <a rel="external" href="https://github.com/HKalbasi">@HKalbasi</a>, and <a rel="external" href="https://github.com/bjorn3">@bjorn3</a> for their contributions!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (April 2021)</title>
            <pubDate>Wed, 05 May 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-04/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-04/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-04/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-04/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (April 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In April, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/239">Added XCR0 register</a> <span class="gray">(published as <code>v0.13.5</code>)</span></li>
<li><em>Breaking:</em> <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/242">Fixes for x86-interrupt calling convention</a> <span class="gray">(published as <code>v0.14.0</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/243">Fix some warnings</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/246">Add <code>sidt</code> support</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/249">Fix <code>Debug</code> and <code>PartialEq</code> implementations for <code>IDT</code> entry type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/247">Looser trait bounds for <code>Port</code> types</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Luis-Hebendanz">@Luis-Hebendanz</a>, <a rel="external" href="https://github.com/CraftSpider">@CraftSpider</a>, and <a rel="external" href="https://github.com/dbeckwith">@dbeckwith</a> for their contributions!</p>
<p>We also prepared a pull request to fix the build on the latest Rust nightlies:</p>
<ul>
<li>Use new <code>const_fn_trait_bound</code> feature to fix build on latest nightly (<a rel="external" href="https://github.com/rust-osdev/x86_64/pull/250">#250</a>)</li>
</ul>
<p>Since <code>rustfmt</code> is <a rel="external" href="https://github.com/rust-lang/rust/issues/84538">currently broken</a> on the affected newer nightlies, many users are still on older nightlies where the <code>const_fn_trait_bound</code> feature does not exist yet (<code>rustup update</code> skips nightlies where an installed component is missing). For this reason, we decided to wait with merging the fix until the <code>rustfmt</code> component is fixed. For people that want to use the latest nightly already, we pre-published the above fix as version <code>v0.14.1-beta</code>.</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we finally merged the UEFI rewrite branch:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130">Rewrite for UEFI support</a> <span class="gray">(published as <code>v0.10.0</code>)</span></li>
</ul>
<p>This pull request changes the build process completely so that <code>v0.10.0</code> is no longer compatible with <code>v0.9.x</code> and below. Instead of using the <a rel="external" href="https://github.com/rust-osdev/bootimage"><code>bootimage</code></a> crate, it is now recommended to create a custom builder crate. See the <a rel="external" href="https://docs.rs/bootloader/0.10.2/bootloader/">API docs</a> for more details. In addition to the build system changes, there are also some API changes such as a new <code>BootInfo</code> struct and a different system init state (e.g. a pixel-based framebuffer instead of the VGA text mode). Right now the documentation for the new version is still a bit sparse. We plan to improve this soon, including an update to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog (see below).</p>
<p>In addition to the UEFI pull request, we merged the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/147">Fix documented type for entry point function</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/154"><code>llvm_asm!</code> -&gt; <code>asm!</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/155">Reduce the number of used unstable features of <code>x86_64</code> crate</a> <span class="gray">(published as <code>v0.10.2</code>)</span>
<ul>
<li>Backported as <code>v0.9.17</code> to fix compilation on latest nighlies.</li>
</ul>
</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mkroening">@mkroening</a> and <a rel="external" href="https://github.com/CraftSpider">@CraftSpider</a> for their contributions!</p>
<h3 id="xhci"><a rel="external" href="https://github.com/rust-osdev/xhci"><code>xhci</code></a></h3>
<p>The <code>xhci</code> crate provides types of xHCI structures such as Contexts, Extended Capabilities, Registers, and TRBs.</p>
<p>Previously the repository was hosted under <a rel="external" href="https://github.com/toku-sa-n"><code>@toku-sa-n</code></a>. Since April, the Rust OSDev team hosts the repository.</p>
<p>This crate is still under depelopment. Some types or field accessors may be missing. If you find missing features, feel free to send a PR!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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.
This month, we improved diagnostics by recording the original and target AML types in the <code>AmlError::IncompatibleValueConversion</code> error. This error is emitted when AML tries to convert a value
to a data type that it can't be interpreted as - AML's rules on possible type conversions and where they can occur are very elaborate, so it helps to know the conversion that was actually attempted.
<span class="gray">(published as <code>v0.12.0</code>)</span></p>
<p>Thanks to <a rel="external" href="https://github.com/KnapSac">@Knapsac</a> and <a rel="external" href="https://github.com/toothbrush7777777">@toothbrush7777777</a> for their contributions!</p>
<h3 id="ovmf-prebuilt"><a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt"><code>ovmf-prebuilt</code></a></h3>
<p>In order to make it easier to run UEFI disk images in <a rel="external" href="https://www.qemu.org/">QEMU</a> using <a rel="external" href="https://github.com/tianocore/tianocore.github.io/wiki/OVMF">OVMF</a>, we created a new <code>ovmf-prebuilt</code> project this month. The projects automatically downloads the latest prebuilt OVMF RPM images from <a rel="external" href="https://web.archive.org/web/20250505152052/https://www.kraxel.org/repos/">Gerd Hoffman's firmware repository</a> and publishes the extracted <code>OVMF_*.fd</code> files as <a rel="external" href="https://github.com/rust-osdev/ovmf-prebuilt/releases">GitHub releases</a>. A new release is created daily through a CI script. Note that the licensing terms of the <a rel="external" href="https://github.com/tianocore/edk2"><code>tianocore/edk2</code></a> repository apply to the released files.</p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. In April, we updated the <code>x86_64</code> dependency to fix the build on the latest nightlies:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/14">Update x86_64 dependency and make it more robust</a> <span class="gray">(published as <code>v0.2.13</code>)</span></li>
</ul>
<p>This pull request also minimizes the number of unstable features that are enabled for the <code>x86_64</code> dependency to prevent breakage on future <code>const_fn</code> changes.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In April, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/205">Expose NamedFileProtocolInfo's Header types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/207">Upgrade to GitHub-native Dependabot</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/ocadaruma">@ocadaruma</a> for their contribution!</p>
<h3 id="spinning-top"><a rel="external" href="https://github.com/rust-osdev/spinning_top"><code>spinning_top</code></a></h3>
<p>The <code>spinning_top</code> crate provides a simple spinlock implementation based on the abstractions of the <a rel="external" href="https://docs.rs/lock_api/0.4.1/lock_api/"><code>lock_api</code></a> crate. This month, we fixed a compiler warning:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/10">Fix <code>spin_loop_hint</code> warning on Rust 1.51</a> <span class="gray">(published as <code>v0.2.3</code>)</span></li>
</ul>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<!--
Please use the following template for adding items:

- [(`repo_name`) Issue Description](https://example.com/link-to-issue)
-->
<span class="gray">
<p><em>No tasks were proposed for this section.</em></p>
</span>
<p>If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people
getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the
<code>next</code> branch with the tasks you want to include in the next issue.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following improvements to the [<em>Writing an OS in Rust</em>] blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/962">Translate common texts into Chinese</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/964">Remove note about previously updated dependency</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/963">The <code>wake_trait</code> feature is now stable</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/974">Suggestion for <code>.cargo/config.toml</code> Explanation</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/960">Add missing word</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/978">Fix typo</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/alexxroche">@alexxroche</a>, <a rel="external" href="https://github.com/hi-rustin">@hi-rustin</a>, <a rel="external" href="https://github.com/moomoolive">@moomoolive</a>, and <a rel="external" href="https://github.com/kahirokunn">@kahirokunn</a> for their contributions!</p>
<p>We also made some further progress on the upcoming third edition of the blog:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/0b9231f0ba57c189f747660f92bb1e4087e2b20b">Minor improvements to UEFI code examples</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/1aa7d21d8b3aabd3d4bb2e345f5590451e4dc2da">Finish first draft of 'UEFI Booting' post</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/c61c37643aee942bea7c8dbbb235d0dffa6218bf">Resolve some TODOs</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/b3eace12608d9def1a996f5e2e46549858ba76c4">Explain how to run the disk images in QEMU (both BIOS and UEFI)</a></li>
</ul>
<h3 id="cdrzewiecki-celos"><a rel="external" href="https://gitlab.com/cdrzewiecki/celos"><code>cdrzewiecki/celos</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/drzewiec">@drzewiec</a>)</span></p>
<p>Over the past couple of months I have made some great strides on my OS.</p>
<ul>
<li>Migrated the kernel to the higher half of virtual memory</li>
<li>Added double fault handling</li>
<li>Added page fault handling which will attempt to (safely) expand the kernel stack if it overflows</li>
<li>Related to the above, added more robust frame allocation</li>
<li>Added basic heap allocation</li>
</ul>
<p>Still working hard on squashing bugs, adding all of the things above gave me some pretty serious memory allocation bugs and it's taken me a while to get those worked out. I still want to do more testing to make sure I have all the bugs here worked out before moving on.</p>
<p>Next steps will be to get nicer font drawing, and then attempt to implement process support.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (March 2021)</title>
            <pubDate>Mon, 05 Apr 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-03/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-03/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-03/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-03/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we fixed some build errors that were caused by the update to LLVM 12 in recent Rust nightlies:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/139">Fix linker errors on latest nightlies</a> <span class="gray">(published as <code>v0.9.15</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/140">Replace all remaining <code>lea</code>s with <code>mov</code> + <code>offset</code></a> <span class="gray">(published as <code>v0.9.16</code>)</span></li>
</ul>
<p>We also made some good progress on the <a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130">UEFI rewrite</a>:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130/commits/7f7fec78ffb7125a7eb0312698714d7897bf9fb9">Set up VESA mode properly instead of hardcoding it</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130/commits/58564910a743ec48e6c1b3113151d96c7b54ca63">Detect actual pixel format instead of hardcoding it (BIOS)</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130/commits/f7478eba3034c98bde0c7725ce21a7b56a473d61">Use <code>quote</code> crate for creating <code>Config</code> struct instead of debug impls</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130/commits/ba9d943dbb18ef756979f1d2c14df297c1003b45">Allow specifying addresses as TOML integers too</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130/commits/536e0f6b53b8dcd53b6125c3383dec3bdb7a3cc3">Add docs for crate and <code>Config</code> struct</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130/commits/eccb89d61a3e390b36f767d6d8780187bd962e58">Document the created disk images</a></li>
</ul>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In March, we merged these changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/236">Implement <code>Clone</code> for <code>PageTable</code></a> <span class="gray">(published as <code>v0.13.3</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/237">Implement more fmt traits for addr types</a> <span class="gray">(published as <code>v0.13.4</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> and <a rel="external" href="https://github.com/dbeckwith">@dbeckwith</a> for their contributions!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In March, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/202">Expose device path types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/203">Fix running tests in CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/204">Fix typo in regular.rs</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/gil0mendes">@gil0mendes</a> and <a rel="external" href="https://github.com/ocadaruma">@ocadaruma</a> for their contributions!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64"><code>multiboot2</code></a></h3>
<p>The <code>multiboot2</code> crate provides abstraction types for the boot information of multiboot2 bootloaders. We merged the following updates this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64/pull/72">Use <code>impl Iterator</code> as return type instead of named types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64/pull/73">Docs: Remove fragile <code>asm!</code> code example</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64/pull/74">Apply <code>rustfmt</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contributions!</p>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p>The <code>volatile</code> crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers or framebuffers. In March, we fixed a build error that was caused by a change in nightly Rust:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/21">Replace feature <code>range_bounds_assert_len</code> with <code>slice_range</code></a> <span class="gray">(published as <code>v0.4.4</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/commit/15bbfac9c7cb42ff56698ac5c00daeddbcdb6a0d">Add a test for <code>slice::as_chunks_mut</code> usage</a>
<ul>
<li>By using <code>as_chunks_mut</code>, it is possible read and write multiple slice elements through a single volatile operation. This allows the compiler to optimize the code better (compared to reading the elements one by one).</li>
</ul>
</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/KernelFreeze">@KernelFreeze</a> for their contribution!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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. This month has seen substantial changes to both
the <code>acpi</code> and <code>aml</code> crates:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/86">We made the types that represent raw ACPI tables public</a>. This allows library users to work directly with tables such as the
<a rel="external" href="https://docs.rs/acpi/2.3.1/acpi/fadt/struct.Fadt.html">FADT</a> if they need to, which is needed to access power
management features we don't yet expose. <span class="gray">(published as <code>acpi v2.3.1</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/88">Native functions are now supported by the AML interpreter!</a>. A
'native function' is an AML method that is defined in Rust, rather than using AML bytecode. This is useful for
defining "up-call" methods (where a method is provided by the OS, and called by the firmware), and will hopefully
by useful in the future for patching methods in broken tables. A native method can easily be created with
the <a rel="external" href="https://docs.rs/aml/0.11.0/aml/value/enum.AmlValue.html#method.native_method"><code>AmlValue::native_method</code> constructor</a>.</li>
<li>However, supporting native functions needed a bit of breakage - <code>AmlValue</code> no longer implements <code>PartialEq</code> or <code>Eq</code>. This actually improves correctness,
as correctly comparing two <code>AmlValue</code>s may require type conversions to be done, and so should be done with the
<a rel="external" href="https://docs.rs/aml/0.11.0/aml/value/enum.AmlValue.html#method.cmp"><code>AmlValue::cmp</code></a> method, but does make <code>aml v0.11.0</code> a breaking change.</li>
<li>We also used this opportunity to remove the <code>legacy_mode</code> parameter to <code>AmlContext::new</code>, which will affect all
crate users, but makes user's lives simpler - handling old tables will now be done automatically.</li>
<li>Fallout from <code>AmlValue</code> no longer being <code>Eq</code> also led to some cleanups in how control flow is handled in the
interpreter. This is not likely to affect users, but the "fake" error <code>AmlError::Return</code> has been removed, which
is also technically a breaking change in <code>aml v0.11.0</code>.</li>
<li>The AML interpreter now correctly supplies the <code>\_OS</code>, <code>\_OSI</code>, and <code>\_REV</code> objects. These objects were designed
to allow firmware to detect OS support for new AML features, but <a rel="external" href="https://www.kernel.org/doc/html/latest/firmware-guide/acpi/osi.html">come with a bit of baggage</a>.
This is important for supporting running on real hardware, which often assumes the existence of these objects.
<span class="gray">(published as <code>aml v0.11.0</code>)</span></li>
</ul>
<h2 id="call-for-participation">Call for Participation</h2>
<p>Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding
issues in one of our projects and get started!</p>
<p>If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people
getting started in this space, please <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a PR</a> against the
<code>next</code> branch with the tasks you want to include in the next issue.</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/issues/53">(<code>acpi</code>) Record attempted conversion in <code>AmlError::IncompatibleValueConversion</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/issues/87">(<code>acpi</code>) Support the new MADT Multiprocessor Wakeup structure</a></li>
</ul>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>The <a rel="external" href="https://os.phil-opp.com"><em>"Writing an OS in Rust"</em></a> blog received the following updates this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/941">Translate post-05 to Japanese</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/943">Fix rendering of Japanese translation: Add spaces around some "two asterisk" notations</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/f87cc129fc660473f2d14e9c8d1f8f1e484e105d">Convert <code>before_build.py</code> to python3</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pulls?q=is%3Apr+is%3Aclosed+merged%3A2021-03-22..2021-03-31+">Lots of grammar and typo fixes</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/woodyZootopia">@woodyZootopia</a>, <a rel="external" href="https://github.com/alexxroche">@alexxroche</a>, and <a rel="external" href="https://github.com/ClementNerma">@ClementNerma</a> for their contributions!</p>
<p>The third edition is making progress too. I mostly worked on the post about UEFI booting this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/8740b619a5debe3fa1069c47c61ceed471a3b2f6">Describe how to include the uefi crate</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/9c1babd0273ff3d4f632b6e1acf288267138b90f">Describe how to use various UEFI protocols with the <code>uefi</code> crate</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/db47b2702446c1a469e8e064fb090370040bfa2e">Provide a high-level explanation on how to create bootloader</a></li>
</ul>
<h3 id="rust-embedded-rust-raspberrypi-os-tutorials"><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials"><code>rust-embedded/rust-raspberrypi-OS-tutorials</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/andre-richter">@andre-richter</a>)</span></p>
<p>The <a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials">Operating System development tutorials in Rust on the Raspberry Pi</a> project
got two more tutorials this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/15_virtual_mem_part3_precomputed_tables">Tutorial 15 - <code>Virtual Memory Part 3: Precomputed Translation Tables</code></a></li>
<li><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/16_virtual_mem_part4_higher_half_kernel">Tutorial 16 - <code>Virtual Memory Part 4: Higher-Half Kernel</code></a></li>
</ul>
<p>The two tutorials finally conclude the challenging but rewarding journey of enabling the kernel to execute <strong>from the top of the 64 bit virtual address space</strong>.</p>
<p>Here is a sneak peek of the end result when booting the <code>kernel</code> on a <strong>Raspberry Pi 4</strong> (slightly modified to fit on the page):</p>
<pre class="giallo" style="color: #BABED8; background-color: #0F111A;"><code data-lang="plain"><span class="giallo-l"><span>[5.011] Booting on: Raspberry Pi 4</span></span>
<span class="giallo-l"><span>[5.011] MMU online:</span></span>
<span class="giallo-l"><span>[5.011]   --------------------------------------------------------------------------</span></span>
<span class="giallo-l"><span>[5.013]           Virtual            Physical      Size      Attr       Entity</span></span>
<span class="giallo-l"><span>[5.015]   --------------------------------------------------------------------------</span></span>
<span class="giallo-l"><span>[5.017]   0xffff_ffff_8008_0000 --&gt; 0x0008_0000 |  64 KiB | C RO X  | Kernel code</span></span>
<span class="giallo-l"><span>[5.018]   0xffff_ffff_8009_0000 --&gt; 0x0009_0000 | 448 KiB | C RW XN | Kernel data</span></span>
<span class="giallo-l"><span>[5.020]   0xffff_ffff_8011_0000 --&gt; 0x0011_0000 | 512 KiB | C RW XN | Kernel stack</span></span>
<span class="giallo-l"><span>[5.021]   0xffff_ffff_f000_0000 --&gt; 0xfe20_0000 |  64 KiB | D RW XN | BCM GPIO</span></span>
<span class="giallo-l"><span>[5.023]                                                             | BCM PL011 UART</span></span>
<span class="giallo-l"><span>[5.024]   0xffff_ffff_f001_0000 --&gt; 0xff84_0000 |  64 KiB | D RW XN | GICD</span></span>
<span class="giallo-l"><span>[5.026]                                                             | GICC</span></span>
<span class="giallo-l"><span>[5.027]   --------------------------------------------------------------------------</span></span>
<span class="giallo-l"><span>[5.029] Current privilege level: EL1</span></span></code></pre><h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (February 2021)</title>
            <pubDate>Mon, 08 Mar 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-02/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-02/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-02/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-02/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (February 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In February, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/201">Add helper function for retrieving the boot filesystem</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/200">Add support for the block I/O protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/198">Update <code>x86_64</code> dependency to version 0.13.2</a> (to fix nightly breakage)</li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/193">Fix some issues with the documentation of the <code>DevicePath</code> and <code>LoadedImage</code> protocols</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/gil0mendes">@gil0mendes</a>, <a rel="external" href="https://github.com/sreehax">@sreehax</a>, and <a rel="external" href="https://github.com/avirule">@avirule</a> for their contributions!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In February, the unstable <a rel="external" href="https://github.com/rust-lang/rust/issues/49147"><code>const_in_array_repeat_expressions</code> feature</a> was <a rel="external" href="https://github.com/rust-lang/rust/pull/80404">removed</a> from Rust because it <a rel="external" href="https://github.com/rust-lang/rust/issues/49147#issuecomment-766372999">implicitly changed drop behavior</a>. This lead to a compile error of the <code>x86_64</code> crate because it still had that feature enabled. Interestingly, we no longer needed this feature after <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/175">#175</a> (and an <a rel="external" href="https://github.com/rust-lang/rust/pull/79270">accidental stabilization</a> in Rust), so the fix was quite simple:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/230">Fix build on latest nightly</a> <span class="gray">(published as <code>v0.13.2</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/KernelFreeze">@KernelFreeze</a> for this contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged two small updates to fix build errors and warnings on newer Rust nightlies:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/135">Fix build on latest nightly by updating x86_64 to v0.13.2</a> <span class="gray">(published as <code>v0.9.12</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/138">Fix "panic message is not a string literal"</a> <span class="gray">(published as <code>v0.9.14</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/dspencer12">@dspencer12</a> for their contribution!</p>
<p>There was also some more progress on the <code>uefi</code> branch, which contains the upcoming new bootloader version with UEFI support:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/d55f1c87c34e8bba61adc6abffa78ba431aac69f">Improve reporting of config parse errors</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/6a0fd74ecb052ef3f1fa7ce3e556c895c66dfc4e">Add a test for the <code>map-physical-memory</code> config key</a></li>
<li>Add more checks for the given <code>--kernel-manifest</code> path: it should <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/38fd48622c3a6f22d64a65528a56d2471168cb78">point to a file named <code>Cargo.toml</code></a>, <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/9a8ace78650d75189d567618a90a4f039525f369">exist</a>, and the referenced <code>Cargo.toml</code> should <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/873351c575bdefd1c6c78b27de2bc0494698c0d5">depend on the bootloader crate</a>.</li>
</ul>
<p>The UEFI rewrite is almost done, but we still need to update the docs, improve the configurability of the framebuffer, and add more testing.</p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. Since the crate also depends on <code>x86_64</code>, it needed a dependency update to fix the mentioned build error on the latest nightly:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/12">Fix build on nightly by updating to x86_64 v0.13.2</a> <span class="gray">(published as <code>v0.2.12</code>)</span></li>
</ul>
<h3 id="vga"><a rel="external" href="https://github.com/rust-osdev/vga"><code>vga</code></a></h3>
<p>The work-in-progress <code>vga</code> crate allows the configuration of the VGA hardware, e.g. switching from text-based mode to a pixel-based graphics mode. The nightly build error of <code>x86_64</code> also affected this crate, so it needed a fix too:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/vga/pull/20">fix: should now compile</a> <span class="gray">(published as <code>v0.2.6</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Pollux3737">@Pollux3737</a> for this contribution!</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>The <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog received the following updates this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/913">Translate post-08 to Persian</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/917">Add ja translation for double faults</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/920">Update post to use x86_64 v0.13.2</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/932">Remove note on builtin memory optimizations</a>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/935">Remove it from Japanese translation as well</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/928">Minor fix in post 6</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/927">Fix typo</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/MHBahrampour">@MHBahrampour</a>, <a rel="external" href="https://github.com/garasubo">@garasubo</a>, <a rel="external" href="https://github.com/dspencer12">@dspencer12</a>, <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a>, and <a rel="external" href="https://github.com/16yuki0702">@16yuki0702</a> for their contributions!</p>
<p>I also made some progress on the upcoming third edition. Some potentially interesting commits are:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/acb478c0b51b0cdf2124772aca00502f15d6cbb6">Finish first draft of 'Minimal Kernel' post</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/aaae70974f180321ab8bc25eca2052f98695b39a">Simplify boot crate</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/c2fe9960a743bcb32d5a41e5a02e0f84266d950a">Add boilerplate for new 'UEFI Booting' post</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/033be9ac25a146eb4819d9c6799bd6362d97e036">Explain how to create minimal UEFI app</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/83be6c7868f269084ebe4758ad82db9d7f187061">Explain how to create FAT filesystem and GPT disk image</a></li>
</ul>
<h3 id="cdrzewiecki-celos"><a rel="external" href="https://gitlab.com/cdrzewiecki/celos"><code>cdrzewiecki/celos</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/drzewiec">@drzewiec</a>)</span></p>
<p>I have been working on an OS following along with <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>'s tutorial series for a while, but recently decided I would rework my OS based on the first edition of the blog (since I preferred to use GRUB as my bootloader). This is the first progress I have to share on CelOS, and indeed the first time I've published one of these updates in general.</p>
<p>In February, I made a lot of great progress on CelOS. I have the complete physical memory (plus the framebuffer provided by GRUB) mapped to virtual memory, and a pixel-based framebuffer working with text output. Things are not very optimized right now (for one thing I'm stretching the <code>font8x8</code> font into 8x12), but this is a great first step that I can build on. Next planned steps are:</p>
<ul>
<li>Move the kernel in virtual memory so that it occupies the higher half of the 48-bit address space</li>
<li>Create some page fault interrupt handling so that the kernel can at least attempt to handle page faults (rather than triple faulting as it does now)</li>
<li>Set up memory allocation for the kernel, to get heap allocation</li>
<li>Once heap allocation is in place, utilize some existing crate to handle TrueType fonts so that text will look a bit nicer on screen</li>
</ul>
<p>I probably won't get all of that done in March, but those are my planned next steps. Thanks to this great community and to <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> for being so helpful in the osdev journey!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (January 2021)</title>
            <pubDate>Sat, 06 Feb 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2021-01/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2021-01/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2021-01/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our <a href="https://rust-osdev.com/this-month/2021-01/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (January 2021)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="showcase">Showcase</h2>
<p>We started a new <a rel="external" href="https://rust-osdev.com/showcase/"><em>Showcase</em></a> section this month, where we introduce and present interesting Rust OSDev projects. The first post of this section is:</p>
<ul>
<li><a href="https://rust-osdev.com/showcase/hermit/">The <code>RustyHermit</code> Unikernel</a> written by <a rel="external" href="https://github.com/stlankes">@stlankes</a></li>
</ul>
<p>If you like to present your project too, just let us know!</p>
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. While we didn't merge any commits to our <code>main</code> branch this month, we made good process on the <a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130">UEFI rewrite</a>:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/06f41a28c3227ea28e3d99c12237461b92130d07">Update uefi crate to v0.7.0</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/0c33cec02a897585bf21d21bac5e1e72854b0a18">Add bootloader version to boot info</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/86d1db72fd334e34dcfc17c78540b8365a974199">Make boot info FFI-safe</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/92b069a3414f423789e9921107120c7231608360">Start providing API docs for all public items</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/dc1267b73faeb40fd0ee33f03331f3439f545b34">Add a test that checks boot info values</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/2ac0c8260ca2838ec461ea3a390a383f3cc82958">Create FAT file system image from <code>.efi</code> image</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/c7828d311f25acc4b9929ce80aadbea197cf5dd0">Create a GPT disk image with an UEFI boot partition</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/commit/14c4e62adb6e05128755646d7fd5f6990a2385c9">Only copy first level 4 entry to bootloader page table</a></li>
</ul>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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. In January, we added some updates to the <code>aml</code> crate:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/8b5b45795be895eab21a8c5b23978a0c4ce8f11f">Parse DefNoop</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/e4b49be7befca30dcc53b6b1a0c78793e928941a">Parse DefBreakPoint</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/2fec65aacf5ddc962c87274561f764beb4c69b33">Implement DefAdd</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/501b18023cc8c1f9ae0739ed5075df3ba9861b83">Fix lack of store in DefAnd</a></li>
</ul>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. The crate received the following maintenance update in January:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/commit/cd497a98dabc66ba151218451d07f856950d443d">Use stabilized <code>hint::spin_loop</code> instead of deprecated <code>atomic::spin_loop_hint</code></a></li>
</ul>
<h3 id="cargo-xbuild"><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a></h3>
<p>The <code>cargo-xbuild</code> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>. This month, we fixed an error that occurred in combination with the <code>XARGO_RUST_SRC</code> environment variable:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/98">Ensure copied Cargo.lock is writable</a> <span class="gray">(published as <code>v0.6.5</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/astro">@astro</a> for this contribution!</p>
<p>Even though we still maintain the <code>cargo-xbuild</code> crate, we recommend switching to cargo's own <code>build-std</code> feature that is always up-to-date with the latest Rust/Cargo changes. We wrote a short guide on how to switch to it, which is available <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo">in our Readme</a>.</p>
<h3 id="rusty-hermit"><a rel="external" href="https://crates.io/crates/rusty-hermit"><code>rusty-hermit</code></a></h3>
<p>RustyHermit is a unikernel targeting a scalable and predictable runtime for high-performance and cloud computing.
This month, we revise the paravirtualized network driver (virtio) and add a simple driver for RTL8139, which Qemu is able to emulate.
With the support of <a rel="external" href="https://kubevirt.io">KubeVirt</a>, Kubernetes is able to orchestrate RustyHermit applications.
As <a rel="external" href="https://rusty-hermit.k8s.eonerc.rwth-aachen.de/">simple show</a> case is explained in <a rel="external" href="https://github.com/hermitcore/rusty-hermit/wiki/RustyHermit-on-K8S">RustyHermit's wiki</a>.</p>
<p>Thanks to <a rel="external" href="https://github.com/tlambertz">@tlambertz</a> and <a rel="external" href="https://github.com/mustermeiszer">@mustermeiszer</a> for the contribution!</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We made good progress on the Persian and Japanese translations of the <a rel="external" href="https://os.phil-opp.com/">"Writing an OS in Rust"</a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/899">Make index page translatable</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/901">Improve multilingual support and Persian translation</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/904">Persian translation of chapter Interrupts</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/896">Fix layout of right-to-left in homepage and tables</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/909">Adding tracking issue for Persian</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/903">Translate post-04 to Japanese</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/905">Translate common texts into Japanese</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/907">Translate the index page to Japanese</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/hamidrezakp">@hamidrezakp</a>, <a rel="external" href="https://github.com/MHBahrampour">@MHBahrampour</a>, <a rel="external" href="https://github.com/woodyZootopia">@woodyZootopia</a>, and <a rel="external" href="https://github.com/JohnTitor">@JohnTitor</a> for creating the translations!</p>
<p>In addition to the new translations, we merged the following improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/897">Improve explanation for <code>BootInfoFrameAllocator::usable_frames</code></a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/910">Added note to specify version 0.2.6 of volatile</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/898">Remove unused import</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/900">Fix typo</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/912">Remove trailing comma in JSON example</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/cd8e139ab0e3c7cd47de1845c354fc7ddfad4887">Fix memory address in self-referential struct example</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/delta1">@delta1</a>, <a rel="external" href="https://github.com/NickSchmitt">@NickSchmitt</a>, <a rel="external" href="https://github.com/nana0-0">@nana0-0</a>, and <a rel="external" href="https://github.com/EvanMu96">@EvanMu96</a> for these contributions!</p>
<h4 id="third-edition">Third Edition</h4>
<p>As I already mentioned in the previous posts, I'm working on a new 3rd edition of the blog. The new edition will be compatible with UEFI, use a pixel-based framebuffer, and utilize the APIC instead of the legacy PIC for interrupt handling.</p>
<p>As mentioned above, we added support for UEFI disk image creation to the new <code>bootloader</code> version this month. This made it finally possible to start the rewritten <code>blog_os</code> code in UEFI mode on real hardware:</p>
<p><img src="https://rust-osdev.com/this-month/2021-01/blog-os-uefi.jpg" alt="Photo of the laptop display, showing some text output" /></p>
<p>This is an old Acer TravelMate laptop of mine, booting from a USB stick. The output shows that it successfully sets up the local and IO-APIC for interrupt handling and then listens for timer and keyboard interrupts, just as before. The screen output is now based on a pixel-based framebuffer, using the <a rel="external" href="https://docs.rs/font8x8/0.2.7/font8x8/"><code>font8x8</code></a> crate for simple font rendering. The memory management code required almost no changes, since the interface provided by the bootloader stayed almost the same (there are only some differences in the memory map format).</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>The Hermit Operating System</title>
            <pubDate>Fri, 22 Jan 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/showcase/hermit/</link>
            <guid isPermaLink="true">https://rust-osdev.com/showcase/hermit/</guid>
            <description xml:base="https://rust-osdev.com/showcase/hermit/">
            <![CDATA[&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;hermit-os.org&quot;&gt;Hermit&lt;&#x2F;a&gt; is a unikernel project, that is completely written in Rust.
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;unikernel.org&#x2F;&quot;&gt;Unikernels&lt;&#x2F;a&gt; are application images that directly contain the kernel as a library, so they do not require an installed operating system (OS).
They are typically used in virtualized environments, which build the backbone of typical cloud and edge infrastructures.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p><a rel="external" href="http://hermit-os.org">Hermit</a> is a unikernel project, that is completely written in Rust.
<a rel="external" href="http://unikernel.org/">Unikernels</a> are application images that directly contain the kernel as a library, so they do not require an installed operating system (OS).
They are typically used in virtualized environments, which build the backbone of typical cloud and edge infrastructures.</p>
<span id="continue-reading"></span><!-- showcase-intro -->
<h2 id="virtualization-designs">Virtualization Designs</h2>
<p>Common virtualized environments are based on classical <strong><em>virtual machines</em></strong>.
In this case, complete machines are emulated or virtualized, and common operating systems are running on both the host and guest sides:</p>
<p><img src="https://rust-osdev.com/showcase/hermit/common_vm.png" alt="Structure of a common virtualization environment" /></p>
<p>This technique is established (VMware, Hyper-V, etc.) and widely used.
However, it introduces additional overhead, especially regarding memory consumption and performance.</p>
<p>An alternative approach to common virtual machines is <strong><em>OS-level virtualization</em></strong>, where the kernel allows the existence of multiple isolated user-space instances.
These isolated instances are also known as “containers.”
Typical representatives are LXC and Docker, which promise less overhead in comparison to common virtual machines.
However, the isolation between the processes is weaker and may provide less security.</p>
<h2 id="unikernels">Unikernels</h2>
<p>Often, only one application (e.g., a web server) is running in the container or the virtual machine.
In this case, a <em>unikernel</em> is an attractive solution.
The kernel is provided as a static library and linked to the application.
As the images directly contain the OS kernel, unikernels can be directly booted inside a virtual machine and do not require the typical software stack containing a Linux kernel and its user land within the VM.</p>
<p>Unikernels do not provide system calls in the classical sense, as everything is running with the privilege level of a kernel, and what is typically done via system calls is provided via a common function call.
At first glance, this sounds more insecure than previous approaches.
However, these kernels are expected to run within a virtual machine, which isolates the application from the real system.
In addition, common compiler analysis is used to check the complete software stack, and unneeded components can even be removed, which can reduce the attack surface of the application.</p>
<p><img src="https://rust-osdev.com/showcase/hermit/libos.png" alt="Structure of a library operating system" /></p>
<p>Well-known unikernels are kernels such as <a rel="external" href="https://mirage.io/">MirageOS</a> and <a rel="external" href="http://www.unikraft.org/">Unikraft</a>.
MirageOS is written in OCaml, while Unikraft still uses C as the programming language of choice.
In contrast to these kernels, Hermit is completely written in Rust to benefit from Rust's performance and security behavior.</p>
<h2 id="hermit">Hermit</h2>
<p>In principle, every existing Rust application can be built on top of Hermit.
However, unikernels are single-tasking operating systems.
Consequently, support for the system call <code>fork</code> and inter-process communication is missing.
In addition, a classical C library is missing, which is typically used as an interface to the operating system.
Every crate that bypasses the standard runtime and tries to communicate directly with the operating system does not work without modifications.
However, many applications do not depend on these features and work on Hermit.</p>
<h3 id="performance">Performance</h3>
<p>Unikernels can be highly optimized.
For instance, we optimized the network stack of Hermit.
Hermit uses <a rel="external" href="https://github.com/smoltcp-rs/smoltcp">smoltcp</a> as the network stack, which is completely written in Rust.
As the interface between the guest and host operating systems, we use <a rel="external" href="https://www.linux-kvm.org/page/Virtio">virtio</a>, which is a para-virtualized driver for KVM and widely used in virtualized Linux environments.</p>
<p>The following figure compares Linux with Hermit, where both are running as guests inside a virtual machine running on top of a Linux-based host system:</p>
<p><img src="https://rust-osdev.com/showcase/hermit/bandwidth.png" alt="Bandwidth of the Hermit&#39;s experimental network interface" /></p>
<p>Especially for small messages, Hermit is faster than Linux.</p>
<h3 id="research">Research</h3>
<p>Hermit is also a research project to evaluate new operating system designs, that improve the scalability and security of operating systems in cloud environments.
For instance, Hermit provides classical techniques to improve security behavior, like stack guards and separating the application stack from the libOS stack.
However, a library operating system typically uses a common function call to enter the kernel.
A classical separation of user and kernel space by entering a higher privilege level is missing.</p>
<p>In a <a rel="external" href="https://www.ssrg.ece.vt.edu/papers/vee20-mpk.pdf">paper</a>, we presented a modified version of Hermit, which provides intra-unikernel isolation with <em>Intel Memory Protection Keys</em> (MPK).
MPK is a relatively new hardware primitive that provides per-thread permission control over groups of pages in a single address space with <a rel="external" href="https://www.usenix.org/conference/atc19/presentation/park-soyeon">negligible switching overhead</a>, making it a compelling candidate for use in unikernels.</p>
<p>MPK requires modification of page tables at a small performance cost.
Four previously unused bits of each page table entry (the 62nd to the 59th on x86-64) are exploited by MPK.
Since MPK exploits four bits of the page table entry, it supports up to 15 protection keys.
MPK controls per-thread permission on groups of pages.
Each core has a PKRU register (32 bits) containing a permission value.
The value of the PKRU register defines the permission of the thread currently running on that core for each group of pages containing a protection key in their page table entries.
Unlike page-table-level permission, MPK provides thread-local memory permission.</p>
<p>We provide user and kernel separation, so we simply see the entire application as an untrusted component, independently of application-specific characteristics such as the language it is written in or the level of skill of the application’s programmer.
In addition, we divide the kernel code into trusted and untrusted components.
Trusted kernel components represent pieces of code written in a memory-safe language, i.e., offering strong security guarantees.
Untrusted kernel components correspond to code written either in memory-unsafe languages or in unsafe Rust code blocks.</p>
<p>By entering the library operating system through the application binary interface, the protection keys will be automatically changed, which allows access to the kernel stack and the kernel heap.
Unauthorized access from within the application will trigger a page fault, which will be handled by the library operating system.</p>
<h3 id="getting-started">Getting Started</h3>
<p>Take a look at <a rel="external" href="https://github.com/hermit-os/hermit-rs-template">hermit-os/hermit-rs-template</a> for a simple starter application.</p>
<p>The Hermit platform is an <a rel="external" href="https://doc.rust-lang.org/nightly/rustc/platform-support/hermit.html">official Rust target</a>.
You can either use our <a rel="external" href="https://github.com/hermit-os/rust-std-hermit">prebuilt <code>rust-std</code> artifacts</a> on stable Rust or use <code>build-std</code> on nightly Rust.
Alternatively, you can compile the whole Rust compiler for Hermit, of course.</p>
<h3 id="roadmap">Roadmap</h3>
<p>In the near future, we plan to stabilize the interface to the hardware.
For instance, the support of <a rel="external" href="https://virtio-fs.gitlab.io/">virtiofs</a> is at an early stage.
In addition, the integration into the Rust standard library isn't finalized yet, and the current version runs only on x86-64.
In the future, we want to also support AArch64 as a processor architecture.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (December 2020)</title>
            <pubDate>Thu, 07 Jan 2021 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2020-12/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2020-12/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2020-12/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a> or using our new <a href="https://rust-osdev.com/this-month/2020-12/#comment-form"><em>comment form</em></a> at the bottom of this page.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (December 2020)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In December, we published the following three new releases:</p>
<h4 id="v0-12-4"><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/220"><code>v0.12.4</code></a></h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/208">Add and fix some intra-doc links</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/210">GDT: Add <code>load_unchecked</code>, <code>from_raw_slice</code>, and <code>as_raw_slice</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/218">Fix bad conversion from llvm_asm! to asm!</a>
<ul>
<li><em>Heads up:</em> <a rel="external" href="https://github.com/rust-lang/rust/issues/80440">Rust does not check the assembly in <code>asm!</code> unless its used</a></li>
</ul>
</li>
</ul>
<h4 id="v0-13-0-breaking"><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/223"><code>v0.13.0</code> (breaking)</a></h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/207">Also return flags for <code>MapperAllSizes::translate()</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/211">Restructure the <code>TranslateResult</code> type and create separate <code>Translate</code> trait</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/214">Rename <code>PhysToVirt</code> trait to <code>PageTableFrameMapping</code></a>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/199">Use custom error types instead of <code>()</code></a>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/223/commits/2df2b97cb53e593b89ab2dbee6669e63d4898386">Remove deprecated items</a>: <code>UnusedPhysFrame</code>, <code>ExceptionStackFrame</code>, <code>VirtAddr::new_unchecked</code>, <code>interrupts::enable_interrupts_and_hlt</code></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/215">Make <code>DescriptorTablePointer::base</code> a <code>VirtAddr</code></a>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/216">Change return type of <code>read_rip</code> to <code>VirtAddr</code></a>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/219">Make writing the RFLAGS register unsafe</a>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/217">Remove <code>PortReadWrite</code> trait, which is no longer needed</a>)</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/204">Relaxe <code>Sized</code> requirement for <code>FrameAllocator</code> in <code>Mapper::map_to</code></a></li>
</ul>
<h4 id="v0-13-1"><a rel="external" href="https://github.com/rust-osdev/x86_64/commit/4d5058c1a1c3873294b92a628be0bb151d37ca6a"><code>v0.13.1</code></a></h4>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/169">PCID support instructions</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mental32">@mental32</a>, <a rel="external" href="https://github.com/vinaychandra">@vinaychandra</a>, <a rel="external" href="https://github.com/tomaka">@tomaka</a>, <a rel="external" href="https://github.com/haraldh">@haraldh</a>, <a rel="external" href="https://github.com/tscs37">@tscs37</a>, and <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contributions!</p>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p>The <code>volatile</code> crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers or framebuffers. In December, we added to new methods for creating read/write-only <code>Volatile</code> instances:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/19">Add methods to restrict access</a> <span class="gray">(published as <code>v0.4.3</code>)</span></li>
</ul>
<h3 id="bootimage"><a rel="external" href="https://github.com/rust-osdev/bootimage"><code>bootimage</code></a></h3>
<p>The <code>bootimage</code> tool allows the creation of bootable disk images for <code>bootloader</code>-based kernels. It also provides a runner executable for <code>cargo</code> to make <code>cargo run</code> and <code>cargo test</code> work using QEMU. This month, we fixed a nightly breakage:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/69">Fix nightly breakage of doctests in workspaces</a> <span class="gray">(published as <code>v0.10.2</code>)</span></li>
</ul>
<h3 id="cargo-xbuild"><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a></h3>
<p>The <code>cargo-xbuild</code> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>. This month, we merged a small error reporting improvement:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/100">Don't panic on metadata errors</a> <span class="gray">(published as <code>v0.6.4</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/parasyte">@parasyte</a> for this contribution!</p>
<p>Even though we still maintain the <code>cargo-xbuild</code> crate, we recommend switching to cargo's own <code>build-std</code> feature that is always up-to-date with the latest Rust/Cargo changes. We wrote a short guide on how to switch to it, which is available <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo">in our Readme</a>.</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. In December, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/134">Document the build process</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/compare/530b26f86ae0c7cf8906de0d7f5184bb206bcb7c...d8f7a20bb24e9f1d36f86010e1ce00bdfc51d045">Fix CI after breaking change of Github Actions</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Luis-Hebendanz">@Luis-Hebendanz</a> for their contribution!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In December, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/185">Clarify how new protocols can be defined</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/187">Add support for the device path protocol</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/188">Fix breakage with the latest nightlies</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/189">Publish new versions of the crates</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/avirule">@avirule</a> for their contribution!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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. In December, we:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/83">Exposed the Power Management Timer, part of the ACPI hardware platform</a>. Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contribution!</li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/issues/79">Improved the behaviour of the BIOS RSDP search algorithm</a>. If
you're coming across the same problem as the reporter, try updating to <code>rsdp v1.1.0</code> or <code>acpi v2.2.0</code>.</li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/47c4aec17e7995beeaad004447505ab08b84578a">Improved codegen for the <code>choice!</code> macro</a>. This fixes limitations in how large parsers can get before they break <code>rustc</code>'s type limit.
The new version allows better ergonomics, but also generates much less work for the type checker and so speeds up the compilation of the <code>aml</code> crate.</li>
<li>Fixed a few bugs in the handling of <code>DefBuffer</code> and <code>DefPackage</code> objects (<a rel="external" href="https://github.com/rust-osdev/acpi/commit/4286dfc6a9f683dc652cd019bbc6d018e96e8359">1</a>, <a rel="external" href="https://github.com/rust-osdev/acpi/commit/0c64768a9eb415a0a9081adf0ebec2ff3aa50503">2</a>, <a rel="external" href="https://github.com/rust-osdev/acpi/commit/6146d0fa2d22a4191f5d13bd653f8d45c1edb796">3</a>).</li>
</ul>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>We merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog this month:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/887">Translate post-03 to Japanese</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/890">Rename edition folders</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/894">Minor grammar fixes</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/893">Add filepath to code block</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/888">Fix broken QEMU link</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/woodyZootopia">@woodyZootopia</a>, <a rel="external" href="https://github.com/JohnTitor">@JohnTitor</a>, <a rel="external" href="https://github.com/delta1">@delta1</a>, and <a rel="external" href="https://github.com/16yuki0702">@16yuki0702</a> for their contributions!</p>
<h4 id="third-edition">Third Edition?</h4>
<p>Last month, I mentioned that I'm <a href="https://rust-osdev.com/this-month/2020-11/#phil-opp-blog-os">working on a new revision of the blog</a> with support for UEFI booting, a pixel-based framebuffer, and the APIC interrupt controller. I also mentioned that the Cargo team approved my <a rel="external" href="https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336">proposal to replicate some <code>cargo/config</code> settings in the <code>Cargo.toml</code></a>, which will be required for the new build system of the blog. In December, we now saw the first pull request based on this proposal: <a rel="external" href="https://github.com/rust-lang/cargo/pull/9030"><em>Expose build.target .cargo/config setting as packages.target in Cargo.toml</em></a>. Thanks a lot to <a rel="external" href="https://github.com/Ekleog">@Ekleog</a> for tackling this!</p>
<p>While I had planned the new revision for a long time already, there was still one open question: Should I integrate the changes into the second edition or start a new, third edition of the blog? Originally, I tended to integrate the changes into the second edition since a new edition is a lot of work and only a few posts would require substantial changes anyway. However, the recent translation efforts by many great people (thanks to all contributors!) have changed my mind on this because I don't want to throw away any of their work. For this reason I decided to start working on a new, <em>third edition of the blog 🎉!</em></p>
<p>Apart from the changes mentioned above, the new edition will have some additional "fun" posts at the start that show how to create a simple shell and some basic games (instead of directly jumping into interrupt handling and memory management). In addition to the <a rel="external" href="https://os.phil-opp.com/testing/"><em>Testing</em></a> post we already have, there will be some posts about debugging with GDB and QEMU. There will also be some design improvements such as a refreshed index page and a dark mode. I hope you like these ideas and I look forward to releasing a first draft of the new edition soon!</p>
<h3 id="phil-opp-linked-list-allocator"><a rel="external" href="https://github.com/phil-opp/linked-list-allocator"><code>phil-opp/linked-list-allocator</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>The <code>linked_list_allocator</code> crate provides a simple heap allocator that is usable on <code>no_std</code> systems. It keeps track of free memory blocks by turning them into a linked list data structure.</p>
<p>In December, the crate received the following updates:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/linked-list-allocator/pull/42">Use new nightly Allocator trait</a></li>
<li><a rel="external" href="https://github.com/phil-opp/linked-list-allocator/pull/43">Build on stable without features</a> <span class="gray">(published as <code>v0.8.7</code>)</span></li>
<li><a rel="external" href="https://github.com/phil-opp/linked-list-allocator/pull/44">Fix: do not require alloc crate</a> <span class="gray">(published as <code>v0.8.8</code>)</span></li>
<li><a rel="external" href="https://github.com/phil-opp/linked-list-allocator/pull/46">Don't require nightly for <code>use_spin</code> feature</a> <span class="gray">(published as <code>v0.8.9</code>)</span></li>
<li><a rel="external" href="https://github.com/phil-opp/linked-list-allocator/pull/47">Make hole module public for external uses</a> <span class="gray">(published as <code>v0.8.10</code>)</span></li>
<li><a rel="external" href="https://github.com/phil-opp/linked-list-allocator/pull/49">Add new use_spin_nightly feature</a> <span class="gray">(published as <code>v0.8.11</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/haraldh">@haraldh</a>, <a rel="external" href="https://github.com/MarcoCicognani">@MarcoCicognani</a>, and <a rel="external" href="https://github.com/thalesfragoso">@thalesfragoso</a> for their contributions!.</p>
<h3 id="lucis-fluxum-ps2-rs"><a rel="external" href="https://github.com/lucis-fluxum/ps2-rs"><code>lucis-fluxum/ps2-rs</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/lucis-fluxum">@lucis-fluxum</a>)</span></p>
<p>I pushed <a rel="external" href="https://docs.rs/ps2/0.1.1/ps2/">release v0.1.1</a> this month, which is mainly a documentation update aiming
to improve understanding of how to use the library. I've also added links to some reading material that helped me
understand the PS/2 protocol better and much of the surrounding terminology. May the old keyboards live on!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (November 2020)</title>
            <pubDate>Thu, 10 Dec 2020 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2020-11/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2020-11/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2020-11/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a>.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (November 2020)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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. In November, we started fuzzing the AML parser to
help find inputs that crash it and we <a rel="external" href="https://github.com/rust-osdev/acpi/commit/56472490c9564b6740eb5e416624d73be8841faa">found</a>
<a rel="external" href="https://github.com/rust-osdev/acpi/commit/5ab486d1a8a8a8160025b88e369e22dc8d993273">a</a> <a rel="external" href="https://github.com/rust-osdev/acpi/commit/747bcfd28d44bbdfd39ad4805bba574ac320daf8">few</a>.
We even found <a rel="external" href="https://github.com/rust-osdev/acpi/commit/52b05fd91ebb40e9c5511d568b19cb5f10b33d83">a case</a> where
we'd misinterpreted the spec. This is an important task for the project, as the AML parser will often run in
kernelspace, and so should not panic from any input, however invalid (some more work is needed to make this the
case, however).</p>
<p><a rel="external" href="https://github.com/rust-osdev/acpi/commit/6d2045de3acb9b74347ac6ce9ad01051be7bea82">Lexicographic comparison was also implemented for <code>Buffer</code> and <code>String</code> AML objects</a>,
which means we should now be able to perform all comparisons tables are allowed to make (bar some object
conversions, which still need some work).</p>
<p>The changes this month, as well as some made in December that should improve compile speed a little, have been
published as <a rel="external" href="https://crates.io/crates/aml"><code>aml v0.10.0</code></a>.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In November, we merged the following updates:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/201">Don't deny warnings on CI</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/206">Rename <code>enable_interrupts_and_hlt</code> to <code>enable_and_hlt</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/200">Release version 0.12.3</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contribution!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64"><code>multiboot2</code></a></h3>
<p>The <code>multiboot2</code> crate provides abstraction types for the boot information of multiboot2 bootloaders. We merged the following updates this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64/pull/71">Access to non-available memory areas</a> <span class="gray">(published as <code>v0.10.0</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64/commit/a1237bcf357e5d4a5a6c40038fd1e690ef7305d9">Fix a few warnings</a> <span class="gray">(published as <code>v0.10.1</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/CalebLBaker">@CalebLBaker</a> for their contribution!</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="isaacwoods-pebble"><a rel="external" href="https://github.com/IsaacWoods/pebble"><code>IsaacWoods/pebble</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>)</span></p>
<p>Between university and work on <code>acpi</code>, I haven't had a huge amount of time to work on Pebble for the last couple of
months, but in November I:</p>
<ul>
<li>Implemented a basic form of <a rel="external" href="https://en.wikipedia.org/wiki/Thread-local_storage">TLS</a> for userspace tasks. Pebble
doesn't have threads, but an Address Space can have multiple Tasks running from the same image, each of which
need their copy of the master TLS record. TLS support is also needed very early in Rust's <code>std</code>, so this was the
next step in creating a <code>std</code> implementation for Pebble.</li>
<li>Tried to fix a bug in Pebble's UEFI bootloader, where we crash if memory allocated to Boot Services is unmapped
after <code>ExitBootServices</code>. This may be a bug in OVMF - please get in touch if you've come across something
similar and know what's going on!</li>
<li>Continued work on the USB XHCI driver</li>
<li>Improved detection of Intel microarchitectures - we can now differentiate Kaby Lake and Coffee Lake processors
based on their <code>cpuid</code> steppings</li>
</ul>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>In November, we merged the following changes to the <a rel="external" href="https://os.phil-opp.com/"><em>Writing an OS in Rust</em></a> blog:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/875">Add Right-to-Left support for template</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/878">Add Persian translation for posts of <code>Bare Bone</code> Chapter</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/880">Show all available languages</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/883">Emphasize moving code</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/hamidrezakp">@hamidrezakp</a>, <a rel="external" href="https://github.com/Undin">@Undin</a>, and <a rel="external" href="https://github.com/briankung">@briankung</a> for their contributions!</p>
<p>Behind the scenes, I'm still working on the upcoming revision of the blog with UEFI and framebuffer support. One fundamental problem of the new build approach planned for this revision is that we can no longer use <code>.cargo/config</code> files for specifying defaults. See my comment on GitHub for <a rel="external" href="https://github.com/rust-lang/cargo/pull/8757#issuecomment-713897532">more details on the problem</a>.</p>
<p>To solve this issue, I created a proposal on the Rust internals forum to <a rel="external" href="https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336"><em>move some cargo config settings to <code>Cargo.toml</code></em></a>. While it is still not implemented yet, the great news is that the proposal was <a rel="external" href="https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336/14">approved by the Cargo team</a> 🎉! Now I (or someone else) just needs to find the time to implement this, then the last remaining blocker for the new build system should be resolved.</p>
<h3 id="lucis-fluxum-ps2-rs"><a rel="external" href="https://github.com/lucis-fluxum/ps2-rs"><code>lucis-fluxum/ps2-rs</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/lucis-fluxum">@lucis-fluxum</a>)</span></p>
<p>This is a new library I created to provide OS kernels with low-level access to the PS/2 controller and devices. It
uses a poll-based approach with a timeout to read and write data to the IO ports.</p>
<p>While some of the library's functionality won't work on modern devices due to differing implementations of PS/2
emulation between manufacturers, it should be enough to get initialized and receiving scancodes and mouse events.
Theoretically, it should work with PS/2-compatible keyboards all the way back to the IBM Model M!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (October 2020)</title>
            <pubDate>Sat, 07 Nov 2020 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2020-10/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2020-10/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2020-10/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a>.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (October 2020)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In October, we merged following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/184">Provide functions for accessing the underlying L4 table for mapper types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/191">Make <code>GlobalDescriptorTable::add_entry</code> a const fn</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/198">Update docs to suggest <code>TryFrom</code> trait</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contribution! We plan to publish the above changes as <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/200">version <code>0.12.3</code></a> in the next few days.</p>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p>The <code>volatile</code> crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers or framebuffers.</p>
<p>In October, we published a new version to fix the crate's <code>unstable</code> feature on newer Rust nightlies:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/16">Change <code>slice::check_range</code> to <code>RangeBounds::assert_len</code></a> <span class="gray">(published as <code>v0.4.2</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/vetio">@vetio</a> for this contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we published versions <code>0.9.9</code> to <code>0.9.11</code> to fix build errors on the latest nightlies, caused by the new feature gate names for some <code>const fn</code> features.</p>
<p>We we didn't merge any changes to the <code>master</code> branch this month, we made more progress on the rewrite that adds UEFI support: There is now a <a rel="external" href="https://github.com/rust-osdev/bootloader/pull/130">draft pull request</a> that tracks the remaining issues.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In October, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/179">Made <code>panic_handler</code> optional</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/180">Fix Clippy lints</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Swampman08">@Swampman08</a> for their contribution!</p>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p>The <code>pci_types</code> library provides types for accessing and configuring PCI devices from Rust operating systems. Lots of this code (e.g. identifying devices by class codes) can be shared
between projects, and would benefit from community contributions.</p>
<p>This month, we published version <code>0.2.0</code> with the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/commit/e1201d7d8986ff1133e2880b0ba62a3b2d7d891b">Untie accessor from the actual PciHeader type</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/commit/d9cd5809148084d31fe5cc6ddbb5c8129bf23dae">Split out endpoint header to separate struct</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/pci_types/commit/aeb1b249cf6e4563b815011f7ed759198b283405">Provide method for accessing BARs on endpoint headers</a></li>
</ul>
<h3 id="cargo-xbuild"><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a></h3>
<p>The <code>cargo-xbuild</code> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>. This month, we merged the following changes:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/95">Document <code>build-std-features</code> flag for Cargo's <code>build-std</code> feature</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/97">Upgrade the crate to edition 2018</a>  <span class="gray">(published as <code>v0.6.3</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/luqmana">@luqmana</a> and <a rel="external" href="https://github.com/koushiro">@koushiro</a> for these contributions!</p>
<p>Even though we still maintain the <code>cargo-xbuild</code> crate, we recommend switching to cargo's own <code>build-std</code> feature that is always up-to-date with the latest Rust/Cargo changes. We wrote a short guide on how to switch to it, which is available <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo">in our Readme</a>.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="rust-embedded-rust-raspberrypi-os-tutorials"><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials"><code>rust-embedded/rust-raspberrypi-OS-tutorials</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/andre-richter">@andre-richter</a>)</span></p>
<p>The <a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials"><em>Operating System development tutorials in Rust on the Raspberry Pi</em></a> project now provides <a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/15_virtual_mem_part2_mmio_remap">Tutorial 15 - <code>Virtual Memory Part 2: MMIO Remap</code></a>.</p>
<p>It introduces a first set of changes which are eventually needed for separating <code>kernel</code> and <code>user</code> address spaces:</p>
<ul>
<li>The memory mapping strategy gets more sophisticated and no longer <code>identity maps</code> the <em>whole</em> of the board's address space.</li>
<li>Instead, only ranges that are actually needed are mapped:
<ul>
<li>The <code>kernel binary</code> stays <code>identity mapped</code> for now.</li>
<li>Device <code>MMIO regions</code> are remapped lazily to a special virtual address region at the top of the virtual address space during the device driver's <code>init()</code>.</li>
</ul>
</li>
</ul>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>This month, the <em>Writing an OS in Rust</em> series received the following updates:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/865">Remove rlibc and use compiler-builtins-mem feature</a>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/868">Update <code>post-04</code> to use compiler_builtins <code>mem</code> feature instead of <code>rlibc</code></a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/866">Update blog to use <code>mem</code> feature of <code>compiler_builtins</code></a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/871">Translate post 02 to Japanese</a>
<ul>
<li>The translated post is now <a rel="external" href="https://os.phil-opp.com/ja/minimal-rust-kernel/">published</a>.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/875">Add Right-to-Left support for template</a> in preparation for a Persian translation</li>
</ul>
<p>See <a rel="external" href="https://github.com/phil-opp/blog_os/pulls?q=is%3Apr+is%3Aclosed+merged%3A2020-10-01..2020-11-01">the merged pull request list</a> for the complete set of changes this month. Thanks a lot to all contributors!</p>
<p>In case you speak Persian: There is currently an open pull request to <a rel="external" href="https://github.com/phil-opp/blog_os/pull/878">add a Persian translation of <code>Bare Bones</code> chapter</a> that needs reviews. Thanks to everyone involved!</p>
<p>In <a href="https://rust-osdev.com/this-month/2020-09/#phil-opp-blog-os">in our previous status update</a> I described my plans to rewrite the blog on top of the upcoming UEFI bootloader. In the past month I started rewriting the <em>Minimal Rust Kernel</em> post for this. Unfortunately, I'm still facing build-related issues because of <a rel="external" href="https://github.com/rust-lang/cargo/pull/8757#issuecomment-713897532">limitations of Cargo's config files</a>. To resolve these (and other) <code>.cargo/config</code> issues, I created a proposal on the Rust internals forum to <a rel="external" href="https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336">make some <code>.cargo/config</code> options available in <code>Cargo.toml</code> too</a>. Feel free to join the discussion if it's relevant to you!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (September 2020)</title>
            <pubDate>Sun, 04 Oct 2020 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2020-09/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2020-09/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2020-09/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a>.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (September 2020)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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. Lots of work happened this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/76">Support</a> for the <code>Fixed Memory</code>, <code>Word Address Space</code>, <code>DWord Address Space</code>, <code>QWord Address Space</code>, <code>IRQ Format</code>,
<code>DMA Format</code>, and <code>I/O Port Descriptor</code> resource descriptors were added. These appear in <code>_CRS</code> objects - objects
that describe the resources allocated to a particular hardware device. This should be enough support to parse the
<code>_CRS</code> objects of all devices supported by QEMU. Thanks to <a rel="external" href="https://github.com/michaelmelanson"><code>@michaelmelanson</code></a> for his contribution!</li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/75">Version <code>2.0.0</code> of the <code>acpi</code> crate was published</a>, after <a rel="external" href="https://github.com/rust-osdev/acpi/issues/74">consultation with contributors to the Redox project</a>.
This splits the library into two parts - discovering ACPI tables using various methods, and separately, parsing them to discover information about the system.
This provides much more flexibility in how tables are parsed, allows support for OS-specific tables, and is
important to the Redox project as it allows parsing of the ACPI tables in userspace. We also used this
opportunity for breaking changes to clean up a few parts of the library, especially in making our method of
mapping physical memory ranges safer.</li>
<li>A new crate, <a rel="external" href="https://crates.io/crates/rsdp"><code>rsdp</code></a>, was split out from <code>acpi</code>. This new crate provides methods
for searching for the first ACPI table (the Root System Description Pointer (RSDP)) on BIOS systems without
<code>alloc</code> support. This makes it suitable for use from bootloaders and similar applications where heap allocation
is not supported. All types are reexported by the <code>acpi</code> crate, so users can access the same functionality from
the main library.</li>
</ul>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>The crate received the following updates in September:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/174">Add a function for the <code>nop</code> instruction</a> <span class="gray">(published as <code>v0.11.4</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/175">Don't rely on promotion of <code>PageTableEntry::new</code> inside a <code>const fn</code></a> <span class="gray">(published as <code>v0.11.5</code>)</span>
<ul>
<li>Thanks a lot to <a rel="external" href="https://github.com/ecstatic-morse">@ecstatic-morse</a> and the Rust compiler team for preventing an upcoming breakage in our crate!</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/180">Add <code>VirtAddr::is_null</code></a> <span class="gray">(published as <code>v0.11.8</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/179">Decouple instructions into a separate feature flag</a> <span class="gray">(published as <code>v0.12.0</code>)</span>
<ul>
<li>See the <a rel="external" href="https://github.com/rust-osdev/x86_64/blob/master/Changelog.md#0120--2020-09-23">corresponding changelog entry</a> for a summary of the breaking changes introduced by this pull request.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/182">Fix build error on latest nightly</a> caused by new <code>const_mut_refs</code> feature gate <span class="gray">(published as <code>v0.12.1</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/181">Add remaining GDT flags</a>, which also makes our GDT descriptors compatible with the <code>syscall</code>/<code>sysenter</code> instructions</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/186">Fix another build error on latest nightly</a>, this time caused by the new <code>const_fn_fn_ptr_basics</code> feature gate <span class="gray">(published together with <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/181">#181</a> as <code>v0.12.2</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/ecstatic-morse">@ecstatic-morse</a>, <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a>, <a rel="external" href="https://github.com/h33p">@h33p</a>, and <a rel="external" href="https://github.com/josephlr">@josephlr</a> for their contributions!</p>
<p>We would also like to welcome <a rel="external" href="https://github.com/josephlr">@josephlr</a> to our <code>x86_64</code> review and maintenance team!</p>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p>The <code>volatile</code> crate provides safe wrapper types for implementing volatile read and write operations. This month, we published version <code>0.4.0</code>, which <a rel="external" href="https://github.com/rust-osdev/volatile/pull/13">completely rewrites the crate based on reference values</a>. Instead of wrapping the target value directly as e.g. <code>Volatile&lt;u32&gt;</code>, the new implementation works by wrapping reference types such as <code>Volatile&lt;&amp;mut u32&gt;</code>. See <a rel="external" href="https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html">our completely revamped documentation</a> for more details.</p>
<p>The main advantage of the new reference-based implementation is that it is now possible to work with volatile arrays and slices, at least on nightly Rust. Through the <a rel="external" href="https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html#method.index"><code>index</code></a> and <a rel="external" href="https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html#method.index_mut"><code>index_mut</code></a> methods it is possible to create sub-slices, which can then be read and written efficiently through the <a rel="external" href="https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html#method.copy_into_slice"><code>copy_into_slice</code></a> and <a rel="external" href="https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html#method.copy_from_slice"><code>copy_from_slice</code></a> methods. All these operations perform volatile memory accesses, so that the compiler won't optimize them away.</p>
<h3 id="pci-types"><a rel="external" href="https://github.com/rust-osdev/pci_types"><code>pci_types</code></a></h3>
<p><code>pci_types</code> is a new library in the Rust OSDev organisation that provides types for accessing and configuring PCI
devices from Rust operating systems. Lots of this code (e.g. identifying devices by class codes) can be shared
between projects, and would benefit from community contributions. This month, work started on some types for
representing PCIe addresses, the layout of the configuration space for <em>endpoints</em>, device types, and a trait that
allows the library to access the PCIe configuration space in whichever way the platform exposes it.</p>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their <a rel="external" href="https://github.com/rust-osdev/pci_types/pull/1">contribution</a>!</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In September, the crate was <a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/167">updated to Rust's new inline assembly</a> implementation. We also published version <code>0.6.0</code> of the crate, including all the improvements added in the past two months.</p>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contribution!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <code>bootloader</code> crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we published versions <code>0.9.9</code> to <code>0.9.11</code> to fix build errors on the latest nightlies, caused by the new feature gate names for some <code>const fn</code> features.</p>
<p>We also made some more progress on the rewrite with UEFI support. It now <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/3237429457d3df58080fa284d9c2b7138e3fff3a">passes additional framebuffer information</a> and the <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/694d3139fe24bce0184da3bb9096e6540ee1fa3d">address of the RSDP structure of ACPI</a> in the boot info. (We later updated the RSDP code to <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/cb8345bd3c45fc3c56a631a3b416137c45f828f9">use the new <code>rsdp</code> crate</a>). The bootloader also gained support for <a rel="external" href="https://github.com/rust-osdev/bootloader/commit/34a5da852ba8f6b0abfafb5c5a68adc4cae638fa">setting up a recursive page table mapping</a>, which makes it almost feature-equivalent with the current implementation. There are still a few things missing, but it should be ready to be published soon.</p>
<h3 id="cargo-xbuild"><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a></h3>
<p>The <code>cargo-xbuild</code> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>. This month, we merged some maintenance updates to increase platform compatibility:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/91">Remove fs2 dependency for broader platform support</a> <span class="gray">(published as <code>v0.6.1</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/94">Fix winapi issues from flock() rework</a> <span class="gray">(published as <code>v0.6.2</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/pfmooney">@pfmooney</a> for these contributions!</p>
<p>Even though we still maintain the <code>cargo-xbuild</code> crate, we recommend switching to cargo's own <code>build-std</code> feature that is always up-to-date with the latest Rust/Cargo changes. We wrote a short guide on how to switch to it, which is available <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo">in our Readme</a>.</p>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. Like the <code>x86_64</code> and <code>bootloader</code> crates, this crate received some dependency updates this month to fix nightly breakage. In the process, we released versions <code>0.2.8</code> to <code>0.2.10</code>. Since none of these versions are semver-breaking, a normal <code>cargo update</code> should suffice to update to the latest version.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="isaacwoods-pebble"><a rel="external" href="https://github.com/IsaacWoods/pebble"><code>IsaacWoods/pebble</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>)</span></p>
<p>A fairly large amount of progress has been made on Pebble over the last two months, and a prototype of Pebble's
defining feature (easy message passing between tasks) is now working!</p>
<ul>
<li>The first, basic, version of Pebble's wire format, <a rel="external" href="https://github.com/IsaacWoods/pebble/tree/master/lib/ptah">ptah</a> has been completed.
This first version is implemented as a Serde format, but libraries could be written for any language that can
manipulate a byte stream.</li>
<li>Two system calls, <code>send_message</code> and <code>get_message</code>, were added that allows a message (a series of bytes, and
optionally a number of <em>handles</em> (effectively, permission to access a certain <em>kernel object</em>)) to be sent
down a <em>channel</em>, between two tasks.</li>
<li>Infrastructure for another of Pebble's key features, <em>services</em>, was added. This allows userspace tasks to
advertise their ability to provide some kind of 'service' to other tasks. A task called <a rel="external" href="https://github.com/IsaacWoods/pebble/blob/master/user/echo/src/main.rs"><code>echo</code></a>
was built to test this - it provides a service that simply echos any messages sent down it back to the sending
task.</li>
<li>Work started on the Platform Bus, a concept inspired by another hobby OS <a rel="external" href="https://github.com/managarm/managarm/blob/master/docs/src/design/mbus/index.md">managarm's <code>mbus</code></a>.
All hardware devices on the platform will be added to the Platform Bus by <em>Bus Drivers</em>, and described using <em>properties</em> (as an
example, a PCI device will have properties such as <code>pci.vendor_id</code>, and <code>pci.class</code>). <em>Device drivers</em> will be
able to apply to manage devices by sending a <em>Filter</em> to the Platform Bus, which specifies which devices they are
able to handle, based on a device's properties. In the future, Platform Bus will be responsible for handling all
PCI, USB, and hardwired devices on all platforms.</li>
<li>The first <em>Bus Driver</em> was added to manage PCI devices. It uses a new system call, <code>pci_get_info</code>, to get the raw
information about PCI from the kernel, and then creates a Platform Bus device for each function, with the correct
properties. It uses the new <code>pci_types</code> library in the Rust OSDev organisation to identify each device (in the
future, this will be extended to know about specific vendor+device ID combinations, to identify specific devices
such as a particular graphics card).</li>
</ul>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>This month, the "Writing an OS in Rust" blog received a few minor updates:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/850">Update Zola to 0.11.0</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/858">Update <code>x86_64</code> to v0.12.1</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/860">Use new <code>const_mut_refs</code> feature gate</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/861">Update to zola v0.12.1</a></li>
</ul>
<p>Apart from that, I did a lot of preparation for the upcoming switch to the UEFI bootloader. My prototype implementation of the <code>blog_os</code> system on top of the new UEFI bootloader has now reached feature parity with the existing implementation:</p>
<p><img src="https://rust-osdev.com/this-month/2020-09/blog_os-rewrite.png" alt="QEMU output of new bootloader implementation, including local APIC and I/O APIC debug output, the timer interrupt dots, and the keyboard input &quot;Hello!!!&quot;" /></p>
<p>The output looks different now because we are using a pixel based framebuffer instead of the VGA text mode. This is required because the VGA text mode is no longer supported with UEFI. For the framebuffer implementation I'm using the <a href="https://rust-osdev.com/this-month/2020-09/#volatile">new version of the <code>volatile</code> crate</a> and the <a rel="external" href="https://docs.rs/font8x8/0.2.5/font8x8/"><code>font8x8</code></a> crate for font rendering.</p>
<p>You can also see some log output related to the APIC interrupt controller (not to be confused with the ACPI standard). I'm using the APIC instead of the legacy PIC because the latter is not supported anymore on most UEFI systems. For that, I started working on a new <code>apic</code> crate, which will include abstractions for the registers of the local APIC and the IOAPIC.</p>
<p>For the coming month(s), I'm planning to revamp the "Writing an OS in Rust" blog based on this prototype implementation. This will require complete rewrites of the <a rel="external" href="https://os.phil-opp.com/vga-text-mode/"><em>VGA Text Mode</em></a> and <a rel="external" href="https://os.phil-opp.com/hardware-interrupts/"><em>Hardware Interrupts</em></a> posts, an update of the bootloader build process in <a rel="external" href="https://os.phil-opp.com/minimal-rust-kernel/"><em>A Minimal Rust Kernel</em></a>, and replacing the QEMU screenshots across all posts. So I expect that it will take some time until the new version is ready.</p>
<h3 id="andre-richter-qemu-exit"><a rel="external" href="https://github.com/andre-richter/qemu-exit"><code>andre-richter/qemu-exit</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/andre-richter">@andre-richter</a>)</span></p>
<p>Version <code>1.0.x</code> of the crate has been released!</p>
<p><code>qemu-exit</code> is a crate that allows you quit a running QEMU session with a user-defined exit code. This is useful for <code>unit</code> or <code>integration tests</code> of bare-metal software (e.g. OS kernels) that are tested in QEMU.</p>
<p>The crate supports the following architectures:</p>
<ul>
<li><code>AArch64</code></li>
<li><code>RISC-V 64</code></li>
<li><code>x86_64</code></li>
</ul>
<p>If you want to see the crate in action, you can have a look at how it is used in the <a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/13_integrated_testing#quitting-qemu-with-user-defined-exit-codes">rust-raspberrypi-OS-tutorials project</a>.</p>
<p>Shoutout to <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> for inspiring this crate with his original blog post and to <a rel="external" href="https://github.com/Skallwar">@Skallwar</a> for his many contributions.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (August 2020)</title>
            <pubDate>Wed, 09 Sep 2020 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2020-08/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2020-08/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2020-08/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a>.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (August 2020)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.
    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS. In August, the crate received a large number of improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/149">Add method to return (image_base, image_size) to LoadedImage</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/153">Rename <code>image_info</code> to <code>info</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/154">Hide the <code>MemoryMapIter</code> type from the API</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/156">Upstream two changes from Pebble's fork</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/157">Update to new <code>alloc</code> API</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/158">Publish new versions of the crates</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/161">Make memory map iterator clonable</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/163">Fix the <code>text::Output::current_mode</code> method</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/164">Use exact size iterators where possible</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/165">Use <code>ExactSizeIterator</code> in <code>exit_boot_services</code></a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/tomoyat1">@tomoyat1</a> for their contribution!</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64"><code>multiboot2</code></a></h3>
<p>The <code>multiboot2</code> crate provides abstraction types for the boot information of multiboot2 bootloaders. The most important change this month was the update to the latest release of the multiboot2 specification:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64/pull/66">Add support for multiboot2</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64/pull/68">Improve usage of repr(packed)</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Caduser2020">@Caduser2020</a> for these contributions and welcome to the <code>multiboot2</code> team!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code> crate</a> implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. We did not publish any changes to the bootloader crate this month, but we made good progress on the UEFI implementation. See <a rel="external" href="https://github.com/phil-opp/blog_os/issues/349#issuecomment-677645694">these issue comments</a> for a detailed status report.</p>
<p>The rewrite of the real mode and protected mode stages of the BIOS bootloader is also <a rel="external" href="https://gitter.im/rust-osdev/bootloader?at=5f4594ed9566774dfe3167bc">making progress</a>. The goal is to replace as much of the existing assembly code with Rust as possible, in order to make the code more robust and easier to understand.</p>
<h3 id="ansi-rgb"><a rel="external" href="https://github.com/rust-osdev/ansi_rgb"><code>ansi_rgb</code></a></h3>
<p>The <code>ansi_rgb</code> crate implements <code>no_std</code>-compatible support for colored terminal text using ANSI escape sequences. The crate is still in an early state, but it received lots of new features this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/pull/11">More colors and some minor changes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/commit/19891574e3a4df81716973cf4c88ad965596c043">Demo using RGB and 3- and 4-bit colors</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/commit/ebcb75b4f273fdeaef6fde051ca5dccb83560c13">Merge <code>Foreground</code> and <code>Background</code> traits</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/commit/d6ed54ae50ab3653f9c94275efc369472c5278a9">Add 8-bit colors</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/commit/0d77122be5a449a9c03f04421d43df90a7fd708e">Combine <code>WithForeground</code> and <code>WithBackground</code> into <code>Colored</code></a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/commit/9e10f6bac075b980cef66f4ddc9efab25c0a5504">Document extension to other color types</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/pull/12">Add Color8 constructors for RGB and gray</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/pull/13">Fix bounds check for Color8::new_rgb</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/commit/3eb8c16681878ae97f8249524609f0611d9eddf6">Go back to <code>WithForeground</code> and <code>WithBackground</code> structs</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/ansi_rgb/commit/9dd8d1828b1d0b3b707cb1f22c28074a6ce82ca5">Fix (and document/test) nesting</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/hanmertens">@hanmertens</a> for their contributions!</p>
<h3 id="bootimage"><a rel="external" href="https://github.com/rust-osdev/bootimage"><code>bootimage</code></a></h3>
<p>The <code>bootimage</code> tool allows the creation of bootable disk images for <code>bootloader</code>-based kernels. It also provides a runner executable for <code>cargo</code> to make <code>cargo run</code> and <code>cargo test</code> work using QEMU. In August, we changed the test behavior to fix a bug where a triple fault is interpreted as a test success. We also fixed a small bug related to the <code>--version</code> argument. The relevant pull requests are:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/65">Consider all other exit codes besides 'test-success-exit-code' as failures</a> <span class="gray">(published as <code>v0.10.0</code>)</span>
<ul>
<li>Also runs tests with -no-reboot by default, configurable through a new test-no-reboot config key</li>
<li>This is technically <strong>breaking change</strong>, but it should not affect most people.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/67">Parse <code>--version</code> argument without subcommand (<code>bootimage --version</code>)</a> <span class="gray">(published as <code>v0.10.1</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> for their contribution!</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>This month, we added some functions for reading and writing the <code>FS</code> and <code>GS</code> segment base registers:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/172">Add rdfsbase, rdgsbase, wrfsbase, wrgsbase</a> <span class="gray">(published as <code>v0.11.2</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/haraldh">@haraldh</a> for this contribution!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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. This month, support for more opcodes was added to the AML parser:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/438bd9e4cc98bdac29a9eeccf0877592dd70c540">Factor out value comparison code from DefLEqual</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/28e46b3cd2f68b033ae9559d84e0d8784a527422">Make all type-2 opcode parsers concrete to avoid type limit</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/compare/438bd9e4cc98bdac29a9eeccf0877592dd70c540...8dd5b21cf225e267d9786036ed134a45fc34b5f1">Implement some <code>DefL*</code> opcodes</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/e54158ee0128c47acb5e34509e390010ee1feb74">Only read from field if update rule is Preserve</a></li>
</ul>
<h3 id="spinning-top"><a rel="external" href="https://github.com/rust-osdev/spinning_top"><code>spinning_top</code></a></h3>
<p>The <code>spinning_top</code> crate provides a simple spinlock implementation based on the abstractions of the <a rel="external" href="https://docs.rs/lock_api/0.4.1/lock_api/"><code>lock_api</code></a> crate. This month, we added an optional feature to make the crate compatible with the <code>owning_ref</code> crate:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/7">Add owning_ref support</a> <span class="gray">(published as <code>v0.2.2</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/not-a-seagull">@not-a-seagull</a> for this contribution!</p>
<h3 id="cargo-xbuild"><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a></h3>
<p>The <code>cargo-xbuild</code> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>. At the beginning of this month, we had to update the crate for the new rustc directory layout. The crate also received a small cleanup:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/87">Update cargo-xbuild to new rust directory layout</a> <span class="gray">(published as <code>v0.6.0</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/86">Cleanup: Use eprintln! instead of writeln! with stderr</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/toku-sa-n">@toku-sa-n</a> for their contribution!</p>
<p>Even though we still maintain the <code>cargo-xbuild</code> crate, we recommend switching to cargo's own <code>build-std</code> feature that is always up-to-date with the latest Rust/Cargo changes. We wrote a short guide on how to switch to it, which is available <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo">in our Readme</a>.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>I'm still mostly working on the new bootloader with UEFI support, so there were no major changes to the <em>Writing an OS in Rust</em> series this month. However, I'm making good progress on the bootloader <a href="https://rust-osdev.com/this-month/2020-08/#bootloader">as noted above</a> and I hope to finish the rewrite soon.</p>
<p>If all goes well, the new version will no longer require the <code>bootimage</code> tool and instead let the users create a simple build script for the bootloader themselves. It will also set up a pixel based framebuffer, which means that we will be able to do display proper graphics instead of just VGA-based text. Unfortunately, I'm currently a bit blocked by limitations of cargo configuration files (our default target should not apply to our build script), but I hope that we can <a rel="external" href="https://github.com/rust-lang/cargo/issues/8687">find a solution for this</a> soon.</p>
<p>While I focused most of my time on the bootloader and the cargo config files, I also merged a few few minor improvements for my blog:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/843">Change <code>rustup override add</code> to <code>rustup override set</code></a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/845">Add (initial) Japanese translation</a> (see below)</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/commit/0425bd3c819bd26910c4e82a7a24c2a5126d4116">Increase double fault stack size in Double Faults post</a>
<ul>
<li>The previous stack size was too small in debug mode since our double fault handler uses the rather stack-intensive <code>core::fmt</code> functions.</li>
<li>Since the dobule fault stack has no guard page, this stack overflow <a rel="external" href="https://github.com/phil-opp/blog_os/issues/449#issuecomment-667638975">resulted in undefined behavior</a>. For example, it caused the system to hang or lead to a triple fault.</li>
<li>The stack size increase only works around this problem, but is not a clear fix. I plan to introduce a proper stack allocation function in the upcoming post about threading, which will create stacks with a proper guard page so that stack overflows deterministically lead to a page fault.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/846">Use workflow dispatch event to trigger scheduled builds of code branches</a>
<ul>
<li>Enables nightly builds of all <code>post-XX</code> branches, so that we can be sure that our code always builds with the latest Rust nightly versions.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/850">Update Zola to 0.11.0</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/RWOverdijk">@RWOverdijk</a> and <a rel="external" href="https://github.com/JohnTitor">@JohnTitor</a> for their contributions!</p>
<h4 id="japanese-translations">Japanese translations</h4>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/JohnTitor">@JohnTitor</a>)</span></p>
<p>This month, we also <a rel="external" href="https://github.com/phil-opp/blog_os/pull/845">added a Japanese translation</a> newly. You can find the languages list in the sidebar and Japanese if you enable that language in your browser.
Only one post is currently translated, but we'd like to translate more posts in the future.
Want to participate in the translation or find a typo? Feel free to open a PR/issue on <a rel="external" href="https://github.com/phil-opp/blog_os">the repository</a>
(please use English in the description if possible)!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (July 2020)</title>
            <pubDate>Sun, 02 Aug 2020 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2020-07/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2020-07/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2020-07/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a>.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (July 2020)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.

    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="bootimage"><a rel="external" href="https://github.com/rust-osdev/bootimage"><code>bootimage</code></a></h3>
<p>The <code>bootimage</code> tool allows the creation of bootable disk images for <code>bootloader</code>-based kernels. It also provides a runner executable for <code>cargo</code> to make <code>cargo run</code> and <code>cargo test</code> work using QEMU. In July, the crate was updated to work with cargo's own <code>build-std</code> feature instead of relying on the <code>cargo-xbuild</code> crate:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/62">Add support for building bootloaders using <code>-Zbuild-std</code></a> <span class="gray">(published as <code>v0.8.1</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/63">Make <code>cargo bootimage</code> use <code>cargo build</code> instead of <code>cargo xbuild</code></a> <span class="gray">(published as <code>v0.9.0</code>)</span></li>
</ul>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code> crate</a> implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. In July, we switched the crate from <code>cargo-xbuild</code> to the <code>build-std</code> feature of cargo and fixed a bug that prevented booting in VirtualBox:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/123">Change 1st stage int 13h addressing</a> <span class="gray">(published as <code>v0.9.6</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/125">Make bootloader buildable with <code>-Zbuild-std</code></a> <span class="gray">(published as <code>v0.9.7</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/126">Enable rlibc dependency only with <code>binary</code> feature</a> <span class="gray">(published as <code>v0.9.8</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/rsribeiro">@rsribeiro</a> for their contribution!</p>
<p>We also made some progress on adding UEFI support to the bootloader. Our prototype is now able to set up a pixel-based framebuffer, map a given kernel ELF file into virtual memory, and then pass control to its entry point. The next steps are the construction of the boot information structure, including a memory map. You can find a link to the code and the build instructions in <a rel="external" href="https://github.com/phil-opp/blog_os/issues/349#issuecomment-663562464">this comment</a>.</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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. This month saw some substantial improvements to our AML handling:</p>
<ul>
<li>Objects defined by AML tables exist within a namespace, with objects referred to by paths such as <code>\_SB.PCI0.ISA.COM1</code>. Until now, we represented this namespace using a <code>BTreeMap</code> between the path (allocated on the heap) and a handle to the
object, meaning that there was both a heap-allocated container, and a heap allocation for every single path within the namespace. <a rel="external" href="https://github.com/rust-osdev/acpi/pull/72">In this PR</a>, we moved the library to use a new representation that has
a <code>BTreeMap</code> for each <em>level</em> of the namespace. Because each level of the path can only be 4 characters long (<code>_SB</code>, <code>PCI0</code>, <code>ISA</code>, and <code>COM1</code> are the <em>name segments</em> in the example above), storing the path of each level no longer requires a heap
allocation per object, which reduces the heap-burden of the library significantly.</li>
<li>Some more opcodes were implemented: <code>Target</code>, <code>DefShiftLeft</code>, <code>DefShiftRight</code>, <code>DefLOr</code>, and <code>DefAnd</code>. These all appear in QEMU's tables.</li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/73">A fairly large PR</a> was merged that provides the ability to traverse the namespace and initialize devices - this is a mechanism that ACPI provides that allows an OS to initialize hardware that it does
not have drivers for, and is a compulsory step in getting modern chipsets to function properly. This required us to build up a lot of functionality, including namespace traversal, reading and writing from <em>operation regions</em>, recursively invoking
control methods, and asking the OS to perform hardware configuration for us (such as reading and writing to IO ports and PCI configuration space). There is still a lot of work in getting all of this working robustly, but this is a great start.</li>
</ul>
<h3 id="uefi-rs"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi-rs</code></a></h3>
<p>The <code>uefi-rs</code> crate provides safe and performant wrappers for <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface">UEFI</a>, the successor to the BIOS.</p>
<p>The major changes which happened in this month are:</p>
<ul>
<li>We've tested out support for AArch64. No updates to the code are needed, just <a rel="external" href="https://github.com/rust-osdev/uefi-rs/blob/e2748687bdafcc21f35e6d4db27b4b1b31bdcf6e/uefi-test-runner/aarch64-unknown-uefi.json">add a custom target file</a> for 64-bit ARM UEFI and then compile your project with it.</li>
<li>The <code>LoadedImage</code> protocol now <a rel="external" href="https://docs.rs/uefi/0.4.7/uefi/proto/loaded_image/struct.LoadedImage.html#method.device">exposes the handle</a> for the device where the binary is stored.</li>
<li>Our CI is now green again! There is <a rel="external" href="https://github.com/rust-osdev/uefi-rs/issues/103#issuecomment-604728460">only one test</a> which breaks QEMU, and it's going to stay disabled until it gets fixed.</li>
<li>Building the repository no longer requires <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild">cargo-xbuild</a>, we've switched to nightly Cargo's <a rel="external" href="https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std">build-std</a> feature.</li>
<li>Updated documentation in various places.</li>
</ul>
<h3 id="spinning-top"><a rel="external" href="https://github.com/rust-osdev/spinning_top"><code>spinning_top</code></a></h3>
<p>The <code>spinning_top</code> crate provides a simple spinlock implementation based on the abstractions of the <a rel="external" href="https://docs.rs/lock_api/0.4.1/lock_api/"><code>lock_api</code></a> crate. We created the crate to provide an alternative to the no-longer maintained <a rel="external" href="https://github.com/mvdnes/spin-rs"><code>spin</code></a> crate. In July, the crate received the following updates:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/4">Implement <code>try_lock_weak</code> for use in <code>lock</code> loop</a> <span class="gray">(published as <code>v0.1.1</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/3">Upgrade <code>lock_api</code> to 0.4.0</a> <span class="gray">(published as <code>v0.2.0</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/spinning_top/pull/5">Implement <code>const_spinlock</code> convenience function</a> <span class="gray">(published as <code>v0.2.1</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/akiekintveld">@akiekintveld</a> for their contributions!</p>
<h3 id="volatile"><a rel="external" href="https://github.com/rust-osdev/volatile"><code>volatile</code></a></h3>
<p>The <code>volatile</code> crate provides safe wrapper types for implementing volatile read and write operations. The crate received the following changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/10">Derive Default for Volatile, WriteOnly and ReadOnly</a> <span class="gray">(published as <code>v0.2.7</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/volatile/pull/12">Remove <code>Debug</code> and <code>Clone</code> derives for <code>WriteOnly</code></a> <span class="gray">(published as <code>v0.3.0</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> for their contributions!</p>
<p>We are also considering a complete rewrite of the crate to wrap references instead of values directly. The main advantage of this is that it makes working with slices possible. See the <a rel="external" href="https://github.com/rust-osdev/volatile/pull/13">pull request</a> for details.</p>
<h3 id="multiboot2"><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64"><code>multiboot2</code></a></h3>
<p>The <code>multiboot2</code> crate provides abstraction types for the boot information of multiboot2 bootloaders. In July, we merged a change that makes the checksum field of the RSDP tag more useful:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/multiboot2-elf64/pull/64">Add a <code>validate_checksum</code> method to rsdp</a> <span class="gray">(published as <code>v0.9.0</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/dlrobertson">@dlrobertson</a> for this contribution!</p>
<h3 id="cargo-xbuild"><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a></h3>
<p>The <code>cargo-xbuild</code> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>. While there were no updates to the crate itself in July, we added a guide on how to switch from <code>cargo-xbuild</code> to cargo's own <code>build-std</code> feature to the Readme. You can read it <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo">here</a>.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="isaacwoods-pebble"><a rel="external" href="https://github.com/IsaacWoods/pebble"><code>IsaacWoods/pebble</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>)</span></p>
<p>Between my work on <code>acpi</code> and university commitments, I have not had much time to work on Pebble this month, but
some small clean-ups were made:</p>
<ul>
<li>The migration from Travis CI to Github Actions was completed, allowing Pebble to be emulated on CI.</li>
<li>Pebble uses a HAL (hardware abstraction layer) to separate hardware access from kernel logic. Various parts of the <code>x86_64</code> implementation of the HAL were made common to support code-reuse across architectures.</li>
<li>Some <a rel="external" href="https://github.com/IsaacWoods/pebble/blob/master/kernel/src/memory/buddy_allocator.rs#L202">tests</a> were added to the buddy allocator (Pebble's physical memory manager). This was to rule out physical memory
allocation as the cause of a bug where user stacks are occasionally corrupted at the userspace-kernel boundary, which unfortunately has still not been fixed.</li>
<li>Our <a rel="external" href="https://github.com/IsaacWoods/pebble/blob/master/kernel/hal_x86_64/src/paging.rs#L376-L481">algorithm</a> for efficiently mapping arbitrary areas was rewritten and extended to support 1GiB pages.</li>
<li>Work has started on a <em>topology layer</em> - data structures that represent features of the platform such as processors, caches, <a rel="external" href="https://en.wikipedia.org/wiki/Non-uniform_memory_access">NUMA</a> nodes, and
microarchitectural information. This will help in allowing Pebble to make more intelligent decisions about scheduling and resource usage in the future.</li>
</ul>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>The main change this month was the migration from <code>cargo-xbuild</code> to the <code>build-std</code> feature of cargo. This means that we can now use the normal <code>cargo build</code>/<code>cargo run</code>/<code>cargo test</code> commands for our kernel 🎉.</p>
<p>The full list of notable changes is:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/835">Migrate code from cargo-xbuild to <code>-Zbuild-std</code></a>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/836">Update blog to use <code>build-std</code> feature instead of cargo-xbuild</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/838">Link 'This Month in Rust OSDev' posts in status updates section</a></li>
</ul>
<p>There were also <a rel="external" href="https://github.com/phil-opp/blog_os/pulls?q=is%3Apr+is%3Aclosed+merged%3A2020-06-01..2020-07-01">some contributions</a> this month that fixed typos and updated links. Thanks a lot to all contributors!</p>
<p>For the next weeks/months, my plan is to finish the UEFI bootloader implementation and then adjust the blog to work with both the BIOS and UEFI bootloaders. Among other things, this will require that we switch from the VGA text buffer to a pixel-based framebuffer because the VGA text mode is not available with UEFI. While this makes things more complicated (we need to do some simple font rendering and add slice support to <code>volatile</code> crate), it will allow us to create our own graphical user interface, render a mouse pointer, or display images.</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (June 2020)</title>
            <pubDate>Sun, 12 Jul 2020 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2020-06/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2020-06/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2020-06/">
            <![CDATA[&lt;p&gt;Welcome to a new issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to a new issue of <em>"This Month in Rust OSDev"</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a>.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (June 2020)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.

    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In June, the crate received some smaller improvements:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/159">Remove needless <code>try_into</code> calls</a> to fix clippy warnings</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/161">Correct Cr2::read documentation</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/163">Export <code>PhysAddrNotValid</code> and <code>VirtAddrNotValid</code></a> <span class="gray">(published as <code>v0.11.1</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/samueltardieu">@samueltardieu</a> and <a rel="external" href="https://github.com/leecannon">@leecannon</a> for their contributions!</p>
<h3 id="cargo-xbuild"><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a></h3>
<p>The <code>cargo-xbuild</code> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>. This month, support for the <code>cargo-features</code> manifest key was added and a deprecated dependency was replaced:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/82">Propagate <code>cargo-features</code> from project's Cargo.toml</a> <span class="gray">(published as <code>v0.5.34</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/84">Replace tempdir with tempfile</a> <span class="gray">(published as <code>v0.5.35</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/eggyal">@eggyal</a> and <a rel="external" href="https://github.com/Eijebong">@Eijebong</a> for these contributions!</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code> crate</a> implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we fixed a newly introduced Rust warning:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/122">Rename <code>_improper_ctypes_check</code> functions</a> <span class="gray">(published as <code>v0.9.5</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> for this contribution!</p>
<p>While we do not have to report any news yet, we are still working on a rewrite of the crate in order to make it more robust (use Rust instead of assembly for boot stages) and composable (in order to add UEFI and multiboot2 support).</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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. This month, the crate received two small improvements to the <a rel="external" href="https://wiki.osdev.org/RSDP">RSDP</a>-related code:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/43df4bc79611d311c4a50978ebc4babe78b46074">Use RSDP's length field in revisions 1+</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/commit/a37cf48429334dc3dfd98e065656c374cc907a4a">Use fold to sum RSDP bytes</a></li>
</ul>
<h3 id="uefi"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi</code></a></h3>
<p>The <code>uefi</code> crate provides abstractions for the <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface"><code>UEFI</code></a> standard that replaces the traditional BIOS on modern systems. This month, the contribution docs were extended with information how to add new UEFI protocols:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/commit/56375412e62d41122aba5b2c86c365373ca31ecd">Tutorial on how to add protocols</a></li>
</ul>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>In June, I pushed two small improvements to the <code>blog_os</code> repository and the <em>Writing an OS in Rust</em> blog:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/816">Create a testable trait for printing test messages automatically</a>. This required updates to some blog posts:
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/817">Update Testing post to use Testable trait for automatic printing</a></li>
<li>Update remaining posts: <a rel="external" href="https://github.com/phil-opp/blog_os/pull/819">Remove superfluous printing from tests</a></li>
</ul>
</li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/818">Do a volatile read in stack_overflow test to avoid tail recursion</a>. This required an update to the <em>Double Faults</em> post:
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/820">Update Double Faults post to prevent tail recursion in test</a></li>
</ul>
</li>
</ul>
<p>There were also <a rel="external" href="https://github.com/phil-opp/blog_os/pulls?q=is%3Apr+is%3Aclosed+merged%3A2020-06-01..2020-07-01">lots of small contributions</a> this month that fixed typos and dead links and updated the Chinese translation. Thanks a lot to all contributors!</p>
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (May 2020)</title>
            <pubDate>Sun, 07 Jun 2020 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2020-05/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2020-05/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2020-05/">
            <![CDATA[&lt;p&gt;Welcome to the second issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to the second issue of <em>"This Month in Rust OSDev"</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p>
<span id="continue-reading"></span>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a>.</p>
<!--
    This is a draft for the upcoming "This Month in Rust OSDev (May 2020)" post.
    Feel free to create pull requests against the `next` branch to add your
    content here.

    Please take a look at the past posts on https://rust-osdev.com/ to see the
    general structure of these posts.
-->
<!--

## News and Blog Posts

We try to collect posts that are relevant to Rust-based OS development each month. Please create pull requests for any posts that you want linked in the next issue.

-->
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code></a></h3>
<p>The <code>x86_64</code> crate provides various abstractions for <code>x86_64</code> 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.</p>
<p>In May, the crate received a bugfix for inclusive page/frame ranges. We also landed a long-awaited change to the <code>Mapper::map_to</code> function to set certain page table flags also in higher level page tables:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/156">Fix: Inclusive ranges is_empty() comparison</a> <span class="gray">(published as <code>v0.10.3</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/114">Handle parent table flags in Mapper methods</a> <span class="gray">(published as <code>v0.11.0</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/haraldh">@haraldh</a> and <a rel="external" href="https://github.com/mrll">@mrll</a> for their contributions!</p>
<h3 id="cargo-xbuild"><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a></h3>
<p>The <code>cargo-xbuild</code> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>.</p>
<p>This month, <code>rustc</code>/<code>cargo</code> <a rel="external" href="https://github.com/rust-lang/cargo/pull/8192">changed their codegen behavior for builds with link-time optimization (LTO)</a>, which lead to <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/issues/69">breakage for LTO builds with <code>cargo-xbuild</code></a>. Fixing this issue was not easy and required <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/70">multiple</a> <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/71">tries</a> until we found a proper <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/73">solution</a>.</p>
<p>Unfortunately, the solution still led to <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/issues/72">link issues</a> for some people, which was caused by a <a rel="external" href="https://github.com/rust-lang/cargo/issues/8239">bug in <code>cargo</code>/<code>rustc</code></a>. Thanks to <a rel="external" href="https://github.com/alexcrichton">@alexcrichton</a>, this was quickly <a rel="external" href="https://github.com/rust-lang/rust/pull/72325">fixed in <code>rustc</code></a>, so that now everything should work again.</p>
<p>Apart from these bugfixes, there were also two other changes this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/75">Respect Cargo.lock file for sysroot build</a> <span class="gray">(published as <code>v0.32</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/79">Don't print warning about missing root package in quiet mode</a> <span class="gray">(published as <code>v0.5.33</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Nils-TUD">@Nils-TUD</a> for their contribution and to all the people that helped investigating the build errors!</p>
<h3 id="acpi"><a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code></a></h3>
<p>The <code>acpi</code> 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.</p>
<p>Not a lot happened this month, but preparations
were made to change how the AML namespace is stored on the heap, in order to avoid a lot of small heap allocations
for AML paths, and reduce the number of heap allocations overall. However, some more profiling infrastructure will
need to be built before starting this.</p>
<p>In preparation, a <a rel="external" href="https://github.com/rust-osdev/acpi/commit/3b08721981d85e7bd82124db8c72e0c31d243771">change to how <code>DefName</code>s are stored in the namespace</a> was made, which avoids an extra heap
allocation per <code>DefName</code>, and also allows us to simplify some code around the <code>aml</code> crate.</p>
<h3 id="bootloader"><a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code></a></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code> crate</a> implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. It received the following updates this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/117">Update x86_64 dependency to version 0.11.0</a> <span class="gray">(published as <code>v0.9.3</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/118">Remove unused feature gates</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/116">Add recursive_idx for boot info</a> <span class="gray">(published as <code>v0.9.4</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/mark-i-m">@mark-i-m</a> and <a rel="external" href="https://github.com/Aaron1011">@Aaron1011</a> for their contributions!</p>
<h3 id="bootimage"><a rel="external" href="https://github.com/rust-osdev/bootimage"><code>bootimage</code></a></h3>
<p>The <code>bootimage</code> tool allows the creation of bootable disk images for <code>bootloader</code>-based kernels. It also provides a runner executable for <code>cargo</code> to make <code>cargo xrun</code> and <code>cargo xtest</code> work using QEMU. In May, the crate was almost completely rewritten with a smaller API to make it more maintainable:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/55">Rewrite: Remove support for <code>bootimage {run, test}</code></a> <span class="gray">(published as <code>v0.8.0</code>)</span></li>
</ul>
<h3 id="uart-16550"><a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code></a></h3>
<p>The <code>uart_16550</code> crate provides basic support for serial port I/O for 16550-compatible UARTs. This month, the crate received the following updates:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/9">Use <code>spin_loop_hint</code> while waiting for data</a> <span class="gray">(published as <code>v0.2.6</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/commit/7faedcab2d266e758913d394c499db8dc2d40aed">Update x86_64 dependency to v0.11.0</a> <span class="gray">(published as <code>v0.2.7</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/dbeckwith">@dbeckwith</a> for their contribution!</p>
<h3 id="uefi"><a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi</code></a></h3>
<p>The <code>uefi</code> crate provides abstractions for the <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface"><code>UEFI</code></a> standard that replaces the traditional BIOS on modern systems. This month, the crate's dependencies were updated, and a bug was fixed in the graphics protocol:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/134">Bump x86_64 dependency version to fix build on latest nightlies</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/135">Fix <code>BltPixel::from</code> conversion</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/imtsuki">@imtsuki</a> and <a rel="external" href="https://github.com/BinaryTENSHi">@BinaryTENSHi</a> for their contributions!</p>
<!--
## New Projects

There are a number of new projects in the `rust-osdev` organization:
-->
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="isaacwoods-pebble"><a rel="external" href="https://github.com/IsaacWoods/pebble"><code>IsaacWoods/pebble</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a>)</span></p>
<p>This month, I've been tracking down a bug in the kernel that causes usermode stacks to become corrupted on the
return of some system calls. While I've not found the root cause, I've taken this opportunity to add some more
debugging capabilities, which have found a number of other kernel bugs.</p>
<p>I also started working on the Rust implementation of <a rel="external" href="https://github.com/IsaacWoods/pebble/tree/master/lib/ptah/src">Ptah</a>,
the wire format for Pebble's message passing interface. It allows libraries to easily use <a rel="external" href="https://serde.rs/">Serde</a> to
serialize and deserialize Rust types to and from the wire format. In the future, a compiler will be able to
generate bindings for <code>Ptah</code> for a number of different supported languages, which will allow tasks written in
different languages to communicate over Pebble <code>Channel</code>s using idiomatic types.</p>
<h3 id="rustyhermit"><a rel="external" href="https://github.com/hermitcore/rusty-hermit"><code>RustyHermit</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/stlankes">@stlankes</a>)</span></p>
<p>RustyHermit is a <a rel="external" href="http://unikernel.org">unikernel</a> targeting a scalable and predictable runtime. Unikernel means, you bundle your application directly with the kernel library, so that it can run without any installed operating system.
This reduces image size and overhead, therefore, interesting applications include virtual machines and high-performance computing.</p>
<p>This month the integration of <a rel="external" href="https://github.com/smoltcp-rs/smoltcp">smoltcp</a> has been improved and first support for virtio has been integrated. The integration in Rust's standard runtime is already in progress and clients can be developed with <code>TcpStream</code>. Server side applications will follow soon.</p>
<h3 id="phil-opp-blog-os"><a rel="external" href="https://github.com/phil-opp/blog_os"><code>phil-opp/blog_os</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>This month, support for the legacy <code>asm!</code> macro was removed from <code>rustc</code>. This lead to build errors for the <em>Writing an OS in Rust</em> project because some dependencies were still using the macro. To fix this, I landed a number of dependency updates:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/808">Update bootloader to v0.9.3</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/809">Update x86_64 dependency to version 0.11.0</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/810">Update Hardware Interrupts post to use pic8259_simple v0.2.0</a></li>
</ul>
<p>I also decided to change the design of the executor in the Async/Await post to simplify it:</p>
<ul>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/804">Simplify executor by merging task_queue and wake_queue</a></li>
<li><a rel="external" href="https://github.com/phil-opp/blog_os/pull/805">Update Async/Await post for simplified executor design</a></li>
</ul>
<p>While I already started a draft on the next blog post about processes, I currently plan to look into adding UEFI support to the <code>bootloader</code> crate first. The reason is that UEFI support will require some fundamental changes to the blog because the VGA text buffer and the legacy PIC are not supported on UEFI. This is also relevant to the upcoming post about processes, since different designs would be possible if we used the APIC instead of the legacy PIC. It therefore makes most sense to me to sort this out first.</p>
<h3 id="rust-embedded-rust-raspberrypi-os-tutorials"><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials"><code>rust-embedded/rust-raspberrypi-OS-tutorials</code></a></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/andre-richter">@andre-richter</a>)</span></p>
<p>May was a quiet month for the project, since I am currently taking a little hiatus. I am planning to restart working on new content two or three months down the road.</p>
<p>Therefore, only some maintenance updates went in, e.g. bumping all dependency crates to versions that support the new <code>llvm_asm!</code> macros. Also, the :cn: chinese translations received updates/additions (<a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/blob/master/README.CN.md">main <code>Readme</code></a>; <a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/blob/master/00_before_we_start/README.CN.md"><code>00_before_we_start</code></a>).</p>
<!--
## Call for Participation
-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
        <item>
            <title>This Month in Rust OSDev (April 2020)</title>
            <pubDate>Wed, 06 May 2020 00:00:00 +0000</pubDate>
            <link>https://rust-osdev.com/this-month/2020-04/</link>
            <guid isPermaLink="true">https://rust-osdev.com/this-month/2020-04/</guid>
            <description xml:base="https://rust-osdev.com/this-month/2020-04/">
            <![CDATA[&lt;p&gt;Welcome to the first issue of &lt;em&gt;&quot;This Month in Rust OSDev&quot;&lt;&#x2F;em&gt;. In these posts, we will give a regular overview of notable changes in the Rust operating system development community.&lt;&#x2F;p&gt;]]>
            </description>
            <content:encoded>
				
				
                <![CDATA[<p>Welcome to the first issue of <em>"This Month in Rust OSDev"</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development community.</p>
<span id="continue-reading"></span>
<p>These posts are the successor of the <a rel="external" href="https://os.phil-opp.com/status-update/"><em>"Status Update"</em> posts</a> on the <em>"Writing an OS in Rust"</em> blog. Instead of only focusing on the updates to the blog and the directly related crates, we try to give an overview of the full Rust OSDev ecosystem in this new series. This includes all the projects under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> GitHub organization, relevant projects of other organizations, and also personal OS projects.</p>
<p>This series is openly developed <a rel="external" href="https://github.com/rust-osdev/homepage/">on GitHub</a>. 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 <a rel="external" href="https://github.com/rust-osdev/homepage/issues/new">creating an issue</a>.</p>
<h2 id="news-and-blog-posts">News and Blog Posts</h2>
<p>We try to collect posts that are relevant to Rust-based OS development each month. Please create pull requests for any posts that you want linked in the next issue.</p>
<ul>
<li><a rel="external" href="https://blogs.windows.com/windowsdeveloper/2020/04/30/rust-winrt-public-preview/">Rust/WinRT Public Preview</a></li>
<li><a rel="external" href="https://web.archive.org/web/20210303034834/https://tc.gts3.org/cs3210/2020/spring/lab.html">Georgia Tech CS-3210: Write an OS for the Raspberry Pi in Rust</a></li>
<li><a rel="external" href="https://www.phoronix.com/scan.php?page=news_item&amp;px=Redox-OS-On-Threadripper-3990X">Rust-Written Redox OS Booting The 128-Thread AMD Ryzen Threadripper 3990X</a></li>
</ul>
<h2 id="project-updates">Project Updates</h2>
<p>In this section, we give an overview of notable changes to the projects hosted under the <a rel="external" href="https://github.com/rust-osdev/about"><code>rust-osdev</code></a> organization.</p>
<h3 id="x86-64"><code>x86_64</code></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/x86_64"><code>x86_64</code> crate</a> provides various abstractions for <code>x86_64</code> 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.</p>
<p>This month, we released version <code>0.10.0</code> of <code>x86_64</code>, which includes some breaking changes:</p>
<ul>
<li><em>Breaking:</em> <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/135">Make <code>map_to</code> and <code>update_flags</code> unsafe</a></li>
<li><em>Breaking:</em> <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/146">Make FrameDeallocator::deallocate_frame unsafe</a></li>
<li><em>Breaking:</em> <a rel="external" href="https://github.com/rust-osdev/x86_64/pull/147">Don't pass small trivially copyable types by reference</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/145">Use <code>#[inline]</code> everywhere</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/142">Add <code>{PhysFrame,Page}::from_start_address_unchecked</code></a></li>
</ul>
<p>After <code>v0.10.0</code>, the following changes were merged:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/137">Add <code>InterruptDescriptorTable::load_unsafe</code></a> <span class="gray">(published as <code>v0.10.1</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/151">Use <code>llvm_asm!</code> instead of deprecated <code>asm!</code> macro</a>
<ul>
<li>This might break older nightlies. Given that version <code>0.10.x</code> is so recent, we still decided to release only a patch version. Note that this isn't a breaking change in the <code>semver</code> sense since we only guarantee compatibility with recent nightlies.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-osdev/x86_64/pull/153">Return the correct RPL from <code>GDT::add_entry()</code></a> <span class="gray">(published as <code>v0.10.2</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/m-ou-se">@m-ou-se</a>, <a rel="external" href="https://github.com/tomaka">@tomaka</a>, <a rel="external" href="https://github.com/haraldh">@haraldh</a>, and <a rel="external" href="https://github.com/imtsuki">@imtsuki</a> for their contributions!</p>
<h3 id="acpi-and-aml"><code>acpi</code> and <code>aml</code></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/acpi"><code>acpi</code> repository</a> contains crates for parsing the <a rel="external" href="https://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface">ACPI</a> tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. The crate for parsing the static tables (<a rel="external" href="https://crates.io/crates/acpi"><code>acpi</code></a>) was stabilised this month – while it needs more work to support the entire spec, it is now in the state where it can be integrated into a Rust kernel to provide useful information, and its overall architecture is unlikely to change in the near future.</p>
<p>The full set of changes is:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/69">Remove two nightly features in the ACPI crate</a></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/68">Make local NMI line table optional</a> <span class="gray">(published as v0.8.0)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/acpi/pull/70">Prepare for stabilisation of the <code>acpi</code> crate</a> (🎉 published as v1.0.0 🎉)</li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/tomaka">@tomaka</a> for their contribution and congratulations to the creator and maintainer <a rel="external" href="https://github.com/IsaacWoods">@IsaacWoods</a> on the <code>1.0</code> release!</p>
<h3 id="bootloader"><code>bootloader</code></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/bootloader"><code>bootloader</code> crate</a> implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. It received the following updates this month:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/105">SSE feature: remove inline assembly + don't set reserved bits</a> <span class="gray">(published as <code>v0.9.1</code>)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootloader/pull/108">Use <code>llvm_asm!</code> instead of deprecated <code>asm!</code></a> <span class="gray">(published as <code>v0.9.2</code>)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> and <a rel="external" href="https://github.com/realKennyStrawn93">@realKennyStrawn93</a> for these changes!</p>
<p>Right now, <a rel="external" href="https://github.com/rybot666">@rybot666</a> and <a rel="external" href="https://github.com/phil-opp">@phil-opp</a> are working on a rewrite of the bootloader. The goal is to port the 16-bit and 32-bit stages from assembly to Rust, which should make the crate safer, more composable, and easier to understand for outsiders. Our progress is tracked in the <a rel="external" href="https://github.com/rust-osdev/bootloader/milestone/1"><code>Rewrite</code> milestone</a>.</p>
<h3 id="bootimage"><code>bootimage</code></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/bootimage"><code>bootimage</code> tool</a> allows the creation of bootable disk images for <code>bootloader</code>-based kernels. It also provides a runner executable for <code>cargo</code> to make <code>cargo xrun</code> and <code>cargo xtest</code> work using QEMU. In April, the crate received the following updates:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/51">Set empty RUSTFLAGS to ensure that no .cargo/config applies</a> <span class="gray">(published as v0.7.9)</span></li>
<li><a rel="external" href="https://github.com/rust-osdev/bootimage/pull/52">Add support for doctests</a> <span class="gray">(published as v0.7.10)</span></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/Freax13">@Freax13</a> for their contribution!</p>
<h3 id="uart-16550"><code>uart_16550</code></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/uart_16550"><code>uart_16550</code> crate</a> provides basic support for serial port I/O for 16550-compatible UARTs. This month, the crate received support for serial input:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uart_16550/pull/8">Support receiving bytes from serial ports</a></li>
</ul>
<p>Thanks to <a rel="external" href="https://github.com/imtsuki">@imtsuki</a> for their contribution!</p>
<h3 id="cargo-xbuild"><code>cargo-xbuild</code></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/cargo-xbuild"><code>cargo-xbuild</code></a> project provides <code>cargo</code> command wrappers to cross-compile the sysroot crates <code>core</code> and <code>alloc</code>. This month, we added a new environment variable to help debugging build errors:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/cargo-xbuild/pull/67">Add an environment variable to keep the temp dir</a> <span class="gray">(published as v0.5.29)</span></li>
</ul>
<h3 id="uefi"><code>uefi</code></h3>
<p>The <a rel="external" href="https://github.com/rust-osdev/uefi-rs"><code>uefi</code> crate</a> provides abstractions for the <a rel="external" href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface"><code>UEFI</code></a> standard that replaces the traditional BIOS on modern systems. This month, the crate received a new cargo feature to ignore logger errors:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-osdev/uefi-rs/pull/132">Add cargo feature for ignoring logger errors</a></li>
</ul>
<h2 id="new-projects">New Projects</h2>
<p>There are a number of new projects in the <code>rust-osdev</code> organization:</p>
<ul>
<li>
<p><a rel="external" href="https://github.com/rust-osdev/homepage"><strong><code>homepage</code>:</strong></a> As you might have noticed by now, we have a new organization-level homepage at <a rel="external" href="https://rust-osdev.com/">https://rust-osdev.com/</a>. The <code>homepage</code> repository contains the source code for this website. Right now, it is still a work-in-progress and only contains the very minimum to host this post, but we plan to add more content soon.</p>
<p>Note that we will create a branch for the upcoming May issue of <em>"This Month in Rust OSDev"</em>. Please open pull requests for any content that you would like to see next month.</p>
</li>
<li>
<p><a rel="external" href="https://github.com/rust-osdev/vga"><strong><code>vga</code>:</strong></a> The goal of the <code>vga</code> crate is to allow configuration of the VGA hardware. It already makes it possible to switch from a text-based buffer to a pixel-based framebuffer, which enables drawing of lines, geometric shapes, and even images. The library is created by <a rel="external" href="https://github.com/RKennedy9064">@RKennedy9064</a>.</p>
</li>
<li>
<p><a rel="external" href="https://github.com/rust-osdev/ps2-mouse"><strong><code>ps2-mouse</code>:</strong></a> The library provides a basic interface for interacting with a PS/2 mouse. It is also created by <a rel="external" href="https://github.com/RKennedy9064">@RKennedy9064</a>.</p>
</li>
</ul>
<h2 id="personal-projects">Personal Projects</h2>
<p>In this section, we describe updates to personal projects that are not directly related to the <code>rust-osdev</code> organization. Feel free to <a rel="external" href="https://github.com/rust-osdev/homepage/pulls">create a pull request</a> with the updates of your OS project for the next post.</p>
<h3 id="isaacwoods-pebble"><code>IsaacWoods/pebble</code></h3>
<p><span class="gray">(Section written by <a href="ttps://github.com/IsaacWoods">@IsaacWoods</a>)</span></p>
<p><a rel="external" href="https://github.com/IsaacWoods/pebble">Pebble</a> has been undergoing a bit of a reorganisation, in the interests of supporting a second architecture (ARM64). A hardware abstraction layer (HAL) has been introduced that abstracts away the platform-specifics of managing page tables, creating processes etc. so that the main <code>kernel</code> crate is now completely platform-independent.</p>
<p>I also wrote a <a rel="external" href="https://github.com/IsaacWoods/pebble/blob/master/tools/tftp_serve/src/main.rs">little TFTP server</a> for netbooting a Raspberry Pi 4 from a development machine. This makes iterating the kernel a lot easier because there's no need to write it to an SD card after every compile. In the next few weeks, I hope to clean this code up and publish it for use as both a library and CLI application, and maybe write a blog-post on the intricacies of netbooting the Pi.</p>
<h3 id="rust-embedded-rust-raspberrypi-os-tutorials"><code>rust-embedded/rust-raspberrypi-OS-tutorials</code></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/andre-richter">@andre-richter</a>)</span></p>
<p>The <a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials"><em>Operating System development tutorials in Rust on the Raspberry Pi</em></a> project received the following updates recently:</p>
<ul>
<li><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/14_exceptions_part2_peripheral_IRQs">Add <code>tutorial 14</code></a>: Exceptions Part 2: Peripheral IRQs.
<ul>
<li>We write <code>device drivers</code> for the two interrupt controllers on the <em>Raspberry Pi 3</em> (Broadcom
custom controller) and <em>Pi 4</em> (ARM Generic Interrupt Controller v2, <code>GICv2</code>).</li>
<li>Modularity is ensured by interfacing everything through a trait named <code>IRQManager</code>.</li>
<li>Handling for our first peripheral IRQ is implemented: The <code>UART</code>'s receive IRQ - one IRQ per
received character.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/commit/3a794448adc26bcd318df47ae1a81ab56203364a">Set chainloader relocation address to <code>32 MiB</code></a>.
<ul>
<li>Enables booting on Pi3 A+ devices.</li>
</ul>
</li>
<li><a rel="external" href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/commit/089565762a60462c527a907fba2caeee583fa58d">Run the chainloader natively on non-Linux Unix systems</a>.
<ul>
<li>Adds experimental support for <code>macOS</code> and other Unix systems which have <code>Ruby</code> available.</li>
</ul>
</li>
</ul>
<h3 id="phil-opp-blog-os"><code>phil-opp/blog_os</code></h3>
<p><span class="gray">(Section written by <a rel="external" href="https://github.com/phil-opp">@phil-opp</a>)</span></p>
<p>Apart from a few <a rel="external" href="https://github.com/phil-opp/blog_os/pulls?q=is%3Apr+is%3Aclosed+merged%3A2020-04-02..2020-05-01">minor fixes</a> (thanks for all the contributions!), April was a quiet month for the <a rel="external" href="https://os.phil-opp.com/"><em>"Writing an OS in Rust"</em></a> project. I focused my work this month on the <code>x86_64</code> library, the rewrite of the bootloader, and my job search instead. In this regard, I'm excited to announce that I have decided to do Rust-related freelance work for now, which will allow me to continue dedicating some of my time to open-source work.</p>
<!-- Maybe next month

## Call for Participation

-->
<h2 id="join-us">Join Us?</h2>
<p>Are you interested in Rust-based operating system development? Our <code>rust-osdev</code> 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 <a rel="external" href="https://rust-osdev.zulipchat.com">Zulip chat</a>.</p>
]]>
            </content:encoded>
        </item>
    </channel>
</rss>
