|
| 1 | ++++ |
| 2 | +title = "This Month in Rust OSDev: March 2024" |
| 3 | +date = 2024-04-10 |
| 4 | + |
| 5 | +[extra] |
| 6 | +month = "March 2024" |
| 7 | +editors = ["phil-opp"] |
| 8 | ++++ |
| 9 | + |
| 10 | +Welcome to a new issue of _"This Month in Rust OSDev"_. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem. |
| 11 | + |
| 12 | +<!-- more --> |
| 13 | + |
| 14 | +This series is openly developed [on GitHub](https://github.com/rust-osdev/homepage/). Feel free to open pull requests there with content you would like to see in the next issue. If you find some issues on this page, please report them by [creating an issue](https://github.com/rust-osdev/homepage/issues/new) or using our <a href="#comment-form">_comment form_</a> at the bottom of this page. |
| 15 | + |
| 16 | +<!-- |
| 17 | + This is a draft for the upcoming "This Month in Rust OSDev (March 2024)" post. |
| 18 | + Feel free to create pull requests against the `next` branch to add your |
| 19 | + content here. |
| 20 | + Please take a look at the past posts on https://rust-osdev.com/ to see the |
| 21 | + general structure of these posts. |
| 22 | +--> |
| 23 | + |
| 24 | +## Announcements, News, and Blog Posts |
| 25 | + |
| 26 | +Here we collect news, blog posts, etc. related to OS development in Rust. |
| 27 | + |
| 28 | +<!-- |
| 29 | +Please follow this template: |
| 30 | +
|
| 31 | +- [Title](https://example.com) |
| 32 | + - (optional) Some additional context |
| 33 | +--> |
| 34 | + |
| 35 | +- [An IRC client in your motherboard](https://axleos.com/an-irc-client-in-your-motherboard/) |
| 36 | +- [octox: Writing a Unix-like OS in Rust](https://vmm.dev/en/rust/osinrust.md) |
| 37 | +- [This Month in Redox](https://redox-os.org/news/this-month-240330/) |
| 38 | +- [Redox Kernel Improvements](https://redox-os.org/news/kernel-10/) |
| 39 | +- [MOROS 0.10.3](https://github.com/vinc/moros/releases/tag/v0.10.3) |
| 40 | +- [The server chose violence: Hubris's oddest syscall](https://cliffle.com/blog/hubris-reply-fault/) |
| 41 | +- [Red Hat's Long, Rust'ed Road Ahead For Nova As Nouveau Driver Successor](https://www.phoronix.com/news/Red-Hat-Nova-Rust-Abstractions) |
| 42 | +- [A memory model for Rust code in the Linux kernel](https://lwn.net/SubscriberLink/967049/0ffb9b9ed8940013/) |
| 43 | +- [Embedded Rust Bluetooth on ESP: BLE Client](https://apollolabsblog.hashnode.dev/embedded-rust-bluetooth-on-esp-ble-client) |
| 44 | +- [EtherCrab 0.4: Distributed Clocks, `io_uring`, Derives, Oh My](https://wapl.es/ethercrab-0-4-io-uring-derives-ethercat-distributed-clocks/) |
| 45 | +- The Embedded Rustacean: [Issue 15](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-15) and [Issue 16](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-16) |
| 46 | + |
| 47 | +## Infrastructure and Tooling |
| 48 | + |
| 49 | +In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. |
| 50 | + |
| 51 | +<!-- |
| 52 | + Please use the following template: |
| 53 | +
|
| 54 | +- [Title](https://example.com) |
| 55 | + - (optional) Some additional context |
| 56 | +--> |
| 57 | + |
| 58 | +- [Add basic trait impls for `f16` and `f128`](https://github.com/rust-lang/rust/pull/123085) |
| 59 | +- [Add aarch64-apple-visionos and aarch64-apple-visionos-sim tier 3 targets](https://github.com/rust-lang/rust/pull/121419) |
| 60 | +- [Changes to Rust's WASI targets](https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html) |
| 61 | +- [RFC: patchable-function-entry](https://github.com/rust-lang/rfcs/pull/3543) was merged |
| 62 | +- [unsafe attributes RFC](https://github.com/rust-lang/rfcs/pull/3325) completed FCP |
| 63 | +- FCP complete to stabilize [raw slice len() method (slice_ptr_len, const_slice_ptr_len)](https://github.com/rust-lang/rust/issues/71146) |
| 64 | +- [stabilize ptr.is_aligned](https://github.com/rust-lang/rust/pull/121948) |
| 65 | +- [downgrade ptr.is_aligned_to crate-private](https://github.com/rust-lang/rust/pull/121920) |
| 66 | +- [transmute: caution against int2ptr transmutation](https://github.com/rust-lang/rust/pull/122379) |
| 67 | +- New RFC: [Add realign_stack attribute to rustc](https://github.com/rust-lang/rfcs/pull/3594) |
| 68 | +- [`c_unwind` full stabilization request: change in extern "C" behavior](https://github.com/rust-lang/rust/issues/115285) |
| 69 | + |
| 70 | +## `rust-osdev` Projects |
| 71 | + |
| 72 | +In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`](https://github.com/rust-osdev/about) organization. |
| 73 | + |
| 74 | +<!-- |
| 75 | + Please use the following template: |
| 76 | +
|
| 77 | + ### [`repo_name`](https://github.com/rust-osdev/repo_name) |
| 78 | + <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span> |
| 79 | +
|
| 80 | + The `repo_name` crate ...<<short introduction>>... |
| 81 | +
|
| 82 | + We merged the following changes this month: |
| 83 | + <<changelog, either in list or text form>> |
| 84 | +--> |
| 85 | + |
| 86 | +### [`acpi`](https://github.com/rust-osdev/acpi) |
| 87 | +<span class="maintainers">Maintained by [@IsaacWoods](https://github.com/IsaacWoods)</span> |
| 88 | + |
| 89 | +The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: |
| 90 | + |
| 91 | +- [AML: Correctly invoke `_SEG`,`_BBN`, and `_ADR` methods for PCI region accesses, plus assorted bits](https://github.com/rust-osdev/acpi/pull/208) |
| 92 | +- [acpi: Add `SdtHeaderIterator` to get all headers.](https://github.com/rust-osdev/acpi/pull/202) |
| 93 | +- [aml: add extra debug info on parsing error](https://github.com/rust-osdev/acpi/pull/207) |
| 94 | +- [AML: implement boolean field](https://github.com/rust-osdev/acpi/pull/211) |
| 95 | + |
| 96 | +Thanks to [@fslongjin](https://github.com/fslongjin) and [@rw-vanc](https://github.com/rw-vanc) for their contributions! |
| 97 | + |
| 98 | + |
| 99 | +### [`x86_64`](https://github.com/rust-osdev/x86_64) |
| 100 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp), [@josephlr](https://github.com/orgs/rust-osdev/people/josephlr), and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13)</span> |
| 101 | + |
| 102 | +The `x86_64` crate provides various abstractions for `x86_64` systems, including wrappers for CPU instructions, access to processor-specific registers, and abstraction types for architecture-specific structures such as page tables and descriptor tables. |
| 103 | + |
| 104 | +We merged the following PRs this month: |
| 105 | + |
| 106 | +- [miscellaneous improvements](https://github.com/rust-osdev/x86_64/pull/464) |
| 107 | +- [release v0.15.0](https://github.com/rust-osdev/x86_64/pull/463) |
| 108 | +- [doc: added help on update_flags to get flags](https://github.com/rust-osdev/x86_64/pull/465) |
| 109 | +- [Feat: add constructor for `InterruptStackFrameValue`](https://github.com/rust-osdev/x86_64/pull/467) |
| 110 | +- [properly jump the address gap in CleanUp](https://github.com/rust-osdev/x86_64/pull/469) |
| 111 | +- [expose DEBUG_STR more directly](https://github.com/rust-osdev/x86_64/pull/471) |
| 112 | +- [add write_pcid_no_flush](https://github.com/rust-osdev/x86_64/pull/472) |
| 113 | +- [release 0.15.1](https://github.com/rust-osdev/x86_64/pull/473) |
| 114 | +- [Implement function for creating a gdt in a const environment](https://github.com/rust-osdev/x86_64/pull/413) |
| 115 | + |
| 116 | +Thanks to [@uglyoldbob](https://github.com/uglyoldbob), [@GZTimeWalker](https://github.com/GZTimeWalker), and [@Sxmourai](https://github.com/Sxmourai) for their contributions! |
| 117 | + |
| 118 | + |
| 119 | +### [`bootloader`](https://github.com/rust-osdev/bootloader) |
| 120 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13)</span> |
| 121 | + |
| 122 | +The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: |
| 123 | + |
| 124 | +- [Change gitter badge to zulip badge](https://github.com/rust-osdev/bootloader/pull/431) |
| 125 | +- [avoid 32-bit relocation to `__BOOTLOADER_CONFIG`](https://github.com/rust-osdev/bootloader/pull/428) |
| 126 | + |
| 127 | +Thanks to [@nicholasbishop](https://github.com/nicholasbishop), and [@Freax13](https://github.com/Freax13) for their contributions! |
| 128 | + |
| 129 | + |
| 130 | +### [`ucs2-rs`](https://github.com/rust-osdev/ucs2-rs) |
| 131 | +<span class="maintainers">Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611)</span> |
| 132 | + |
| 133 | +- [Update Cargo.toml metadata](https://github.com/rust-osdev/ucs2-rs/pull/16) |
| 134 | +- [Add a short changelog](https://github.com/rust-osdev/ucs2-rs/pull/17) |
| 135 | +- [Add auto-release workflow](https://github.com/rust-osdev/ucs2-rs/pull/18) |
| 136 | +- [Set MSRV and add CI job to check it](https://github.com/rust-osdev/ucs2-rs/pull/19) |
| 137 | +- [Improve test coverage](https://github.com/rust-osdev/ucs2-rs/pull/20) |
| 138 | + |
| 139 | + |
| 140 | +### [`pic8259`](https://github.com/rust-osdev/pic8259) |
| 141 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp)</span> |
| 142 | + |
| 143 | +The `pic_8259` crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs). |
| 144 | + |
| 145 | +We merged the following PR this month: |
| 146 | + |
| 147 | +- [Update x86_64 dependency to version 0.15.0](https://github.com/rust-osdev/pic8259/pull/6) |
| 148 | + |
| 149 | +Thanks to [@iTitus](https://github.com/iTitus) for their contribution! |
| 150 | + |
| 151 | + |
| 152 | +### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) |
| 153 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp) and [@nicholasbishop](https://github.com/nicholasbishop)</span> |
| 154 | + |
| 155 | +The `ovmf-prebuilt` project provides pre-built [edk2](https://github.com/tianocore/edk2) releases to make it easier to set up OVMF. We merged the following improvement this month: |
| 156 | + |
| 157 | +- [Transition to a workspace](https://github.com/rust-osdev/ovmf-prebuilt/pull/39) |
| 158 | +- [Add empty ovmf-prebuilt package](https://github.com/rust-osdev/ovmf-prebuilt/pull/45) |
| 159 | +- [fix(deps): update rust crate clap to v4.5.4](https://github.com/rust-osdev/ovmf-prebuilt/pull/46) |
| 160 | + |
| 161 | + |
| 162 | +### [`volatile`](https://github.com/rust-osdev/volatile) |
| 163 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp)</span> |
| 164 | + |
| 165 | +The `volatile` 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. |
| 166 | + |
| 167 | +We merged the following PRs this month: |
| 168 | + |
| 169 | +- [Implement some useful traits](https://github.com/rust-osdev/volatile/pull/41) |
| 170 | +- [Fix clippy warning about clone implementation](https://github.com/rust-osdev/volatile/pull/44) |
| 171 | +- [Fix build with `very_unstable` feature](https://github.com/rust-osdev/volatile/pull/45) |
| 172 | +- [Remove `Sized` requirement for `Send` and `Sync` on `VolatileRef`](https://github.com/rust-osdev/volatile/pull/42) |
| 173 | + |
| 174 | +Thanks to [@nspin](https://github.com/nspin) and [@kadiwa4](https://github.com/kadiwa4) for their contributions! |
| 175 | + |
| 176 | + |
| 177 | +### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) |
| 178 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns)</span> |
| 179 | + |
| 180 | +The `linked-list-allocator` crate provides a basic `no_std` allocator that builds a linked list from freed memory blocks and thus needs no additional data structures. We merged the following PR this month: |
| 181 | + |
| 182 | +- [Remove stabilized feature](https://github.com/rust-osdev/linked-list-allocator/pull/81) |
| 183 | + |
| 184 | + |
| 185 | +### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) |
| 186 | +<span class="maintainers">Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611)</span> |
| 187 | + |
| 188 | +The `uefi-rs` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. We merged the following PRs this month: |
| 189 | + |
| 190 | +<!-- |
| 191 | +- [chore(deps): update rust crate log to v0.4.21](https://github.com/rust-osdev/uefi-rs/pull/1087) |
| 192 | +- [fix(deps): update rust crate syn to v2.0.52](https://github.com/rust-osdev/uefi-rs/pull/1088) |
| 193 | +- [chore(deps): update crate-ci/typos action to v1.19.0](https://github.com/rust-osdev/uefi-rs/pull/1090) |
| 194 | +- [fix(deps): update rust crate tempfile to v3.10.1](https://github.com/rust-osdev/uefi-rs/pull/1089) |
| 195 | +- [fix(deps): update rust crate proc-macro2 to v1.0.79](https://github.com/rust-osdev/uefi-rs/pull/1095) |
| 196 | +- [fix(deps): update rust crate anyhow to v1.0.81](https://github.com/rust-osdev/uefi-rs/pull/1094) |
| 197 | +- [chore(deps): update rust crate trybuild to v1.0.90](https://github.com/rust-osdev/uefi-rs/pull/1093) |
| 198 | +- [fix(deps): update rust crate syn to v2.0.53](https://github.com/rust-osdev/uefi-rs/pull/1096) |
| 199 | +- [chore(deps): update cachix/install-nix-action action to v26](https://github.com/rust-osdev/uefi-rs/pull/1098) |
| 200 | +- [fix(deps): update rust crate walkdir to v2.5.0](https://github.com/rust-osdev/uefi-rs/pull/1102) |
| 201 | +- [fix(deps): update rust crate os_info to v3.8.1](https://github.com/rust-osdev/uefi-rs/pull/1101) |
| 202 | +- [fix(deps): update rust crate nix to 0.28.0](https://github.com/rust-osdev/uefi-rs/pull/1100) |
| 203 | +- [fix(deps): update rust crate regex to v1.10.4](https://github.com/rust-osdev/uefi-rs/pull/1106) |
| 204 | +- [fix(deps): update rust crate os_info to v3.8.2](https://github.com/rust-osdev/uefi-rs/pull/1105) |
| 205 | +
|
| 206 | +--> |
| 207 | + |
| 208 | +- [uefi: Derive Hash for all char and string types](https://github.com/rust-osdev/uefi-rs/pull/1086) |
| 209 | +- [uefi_raw: Add firmware_storage module](https://github.com/rust-osdev/uefi-rs/pull/1085) |
| 210 | +- [Use auto-release from crates.io to release](https://github.com/rust-osdev/uefi-rs/pull/1068) |
| 211 | +- [uefi-services: Use "dep:" syntax](https://github.com/rust-osdev/uefi-rs/pull/1091) |
| 212 | +- [release: uefi-raw-0.5.1, uefi-0.27.0, uefi-services-0.24.0](https://github.com/rust-osdev/uefi-rs/pull/1092) |
| 213 | +- [Fix some new lints/warnings](https://github.com/rust-osdev/uefi-rs/pull/1103) |
| 214 | + |
| 215 | + |
| 216 | +## Other Projects |
| 217 | + |
| 218 | +In this section, we describe updates to Rust OS projects that are not directly related to the `rust-osdev` organization. Feel free to [create a pull request](https://github.com/rust-osdev/homepage/pulls) with the updates of your OS project for the next post. |
| 219 | + |
| 220 | +<!-- |
| 221 | + Please use the following template: |
| 222 | +
|
| 223 | + ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name) |
| 224 | + <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span> |
| 225 | +
|
| 226 | + ...<<your project updates>>... |
| 227 | +--> |
| 228 | + |
| 229 | +<span class="gray">No projects updates were submitted this month.</span> |
| 230 | + |
| 231 | +## Join Us? |
| 232 | + |
| 233 | +Are you interested in Rust-based operating system development? Our `rust-osdev` organization is always open to new members and new projects. Just let us know if you want to join! A good way for getting in touch is our [gitter channel](https://gitter.im/rust-osdev/Lobby). |
0 commit comments