|
| 1 | ++++ |
| 2 | +title = "This Month in Rust OSDev: April 2024" |
| 3 | +date = 2024-05-03 |
| 4 | + |
| 5 | +[extra] |
| 6 | +month = "April 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 (April 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 | +- [Testing Virtualization Stacks by Utilizing Mini Operating System Kernels](https://cyberus-technology.de/articles/testing-virtualization-stacks-utilizing-mini-kernels) \ |
| 36 | + Multiple mini OS kernels help Cyberus Technology to investigate issues |
| 37 | + related to complicated problems in virtualization stacks, such as never |
| 38 | + delivered interrupts. Although the Cyberus Guest Tests are written in C++, |
| 39 | + they help to find issues and problems in Cloud-Hypervisor, |
| 40 | + **a VMM written in Rust**. For better debugging capabilities of the Guest |
| 41 | + Tests, Cyberus Technology [upstreamed support for the Debug Console](https://github.com/cloud-hypervisor/cloud-hypervisor/pull/6012) |
| 42 | + to Cloud Hypervisor, which is present since `v38`. The [source code of the Guest Tests is on GitHub](https://github.com/cyberus-technology/guest-tests). |
| 43 | +- [Redox OS - April 2024 Report](https://redox-os.org/news/this-month-240430/) |
| 44 | +- [Giving Rust a chance for in-kernel codecs](https://lwn.net/SubscriberLink/970565/ac5ffc2e9ad20f1e/) |
| 45 | +- Video: [From C to Rust: Bringing Rust Abstractions to Embedded Linux](https://www.youtube.com/watch?v=hmQr4fq6sH0) |
| 46 | +- The Embedded Rustacean [Issue #17](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-17) and [Issue #18](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-18) |
| 47 | +- [Rust-Written LAVD Kernel Scheduler Shows Promising Results For Linux Gaming](https://www.phoronix.com/news/LAVD-Scheduler-Linux-Gaming) |
| 48 | +- Video: [LinuxFest Northwest 2024: Meet COSMIC DE](https://www.youtube.com/watch?v=JHLfsWhDvz0) |
| 49 | +- New [`offset-allocator`](https://github.com/pcwalton/offset-allocator) crate, providing a fast, simple, hard real time allocator |
| 50 | + - not `no_std` yet, but should be easy to port (only requires a `Vec`-like type) |
| 51 | +- [Making an RISC-V OS (Part 3): Managing free memory](https://traxys.me/riscv_os_buddy.html) |
| 52 | +- [Asterinas](https://asterinas.github.io/): a secure, fast, and general-purpose OS kernel written in Rust and compatible with Linux |
| 53 | + |
| 54 | +## Infrastructure and Tooling |
| 55 | + |
| 56 | +In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. |
| 57 | + |
| 58 | +<!-- |
| 59 | + Please use the following template: |
| 60 | +
|
| 61 | +- [Title](https://example.com) |
| 62 | + - (optional) Some additional context |
| 63 | +--> |
| 64 | + |
| 65 | +- [`f16` and `f128` step 4: basic library support](https://github.com/rust-lang/rust/pull/122470) |
| 66 | +- [Stabilise `inline_const`](https://github.com/rust-lang/rust/pull/104087) |
| 67 | +- [Introduce perma-unstable `wasm-c-abi` flag](https://github.com/rust-lang/rust/pull/117919) |
| 68 | +- [Stabilize `(const_)slice_ptr_len` and `(const_)slice_ptr_is_empty_nonnull`](https://github.com/rust-lang/rust/pull/123868) |
| 69 | +- [Add `aarch64-apple-visionos` and `aarch64-apple-visionos-sim` tier 3 targets](https://github.com/rust-lang/rust/pull/121419) |
| 70 | + |
| 71 | +## `rust-osdev` Projects |
| 72 | + |
| 73 | +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. |
| 74 | + |
| 75 | +<!-- |
| 76 | + Please use the following template: |
| 77 | +
|
| 78 | + ### [`repo_name`](https://github.com/rust-osdev/repo_name) |
| 79 | + <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span> |
| 80 | +
|
| 81 | + The `repo_name` crate ...<<short introduction>>... |
| 82 | +
|
| 83 | + We merged the following changes this month: |
| 84 | + <<changelog, either in list or text form>> |
| 85 | +--> |
| 86 | + |
| 87 | +### [`volatile`](https://github.com/rust-osdev/volatile) |
| 88 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp)</span> |
| 89 | + |
| 90 | +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. |
| 91 | + |
| 92 | +We merged the following PRs this month: |
| 93 | + |
| 94 | +- [Add `VolatileRef::restrict` and `VolatilePtr::restrict`](https://github.com/rust-osdev/volatile/pull/47) |
| 95 | +- [Add `VolatileRef::borrow` and `VolatileRef::borrow_mut`](https://github.com/rust-osdev/volatile/pull/46) |
| 96 | +- [docs: remove unused `NonNull` imports](https://github.com/rust-osdev/volatile/pull/48) |
| 97 | +- [Add support for nested `map_field` operations](https://github.com/rust-osdev/volatile/pull/50) |
| 98 | +- [Add `#[derive(VolatileFieldAccess)]` for easy, access-limited field-based access to structs](https://github.com/rust-osdev/volatile/pull/49) |
| 99 | +- [fix(Cargo.toml): add categories](https://github.com/rust-osdev/volatile/pull/52) |
| 100 | +- [ci: migrate away from unmaintained actions](https://github.com/rust-osdev/volatile/pull/51) |
| 101 | +- [Enable all features and `doc_auto_cfg` on docs.rs](https://github.com/rust-osdev/volatile/pull/55) |
| 102 | +- [Release v0.5.3](https://github.com/rust-osdev/volatile/pull/53) |
| 103 | +- [Fix warnings and deny warnings in CI](https://github.com/rust-osdev/volatile/pull/56) |
| 104 | +- [fix(macro): support `#[repr(align(N))]`](https://github.com/rust-osdev/volatile/pull/57) |
| 105 | +- [fix(access): properly seal access traits](https://github.com/rust-osdev/volatile/pull/59) |
| 106 | +- [Release v0.5.4](https://github.com/rust-osdev/volatile/pull/62) |
| 107 | +- [Add a semver checks CI job](https://github.com/rust-osdev/volatile/pull/63) |
| 108 | +- [feat: introduce `RestrictAccess<To>` and generalize `restrict` to all access types](https://github.com/rust-osdev/volatile/pull/60) |
| 109 | +- [feat: implement derive macro for all access types](https://github.com/rust-osdev/volatile/pull/61) |
| 110 | +- [fix: add `#[must_use]` to volatile types, `read`, and `as_raw_ptr`](https://github.com/rust-osdev/volatile/pull/58) |
| 111 | + |
| 112 | +Thanks to [@mkroening](https://github.com/mkroening) for their contributions! |
| 113 | + |
| 114 | +### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) |
| 115 | +<span class="maintainers">Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611)</span> |
| 116 | + |
| 117 | +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: |
| 118 | + |
| 119 | +- [Add timestamp protocol](https://github.com/rust-osdev/uefi-rs/pull/1109) |
| 120 | +- [Replace some `as` casts](https://github.com/rust-osdev/uefi-rs/pull/1108) |
| 121 | +- [uefi: Add UnalignedSlice::as_ptr](https://github.com/rust-osdev/uefi-rs/pull/1117) |
| 122 | +- [Add device path text protocols to uefi-raw and re-use in uefi](https://github.com/rust-osdev/uefi-rs/pull/1118) |
| 123 | +- [uefi-services: Fix warning with `--no-default-features`](https://github.com/rust-osdev/uefi-rs/pull/1119) |
| 124 | +- [uefi: Add more derives for Handle and Event](https://github.com/rust-osdev/uefi-rs/pull/1120) |
| 125 | +- [misc: nix/niv updates and typo updates](https://github.com/rust-osdev/uefi-rs/pull/1125) |
| 126 | +- [doc: update fs documentation](https://github.com/rust-osdev/uefi-rs/pull/1126) |
| 127 | +- [doc: update README](https://github.com/rust-osdev/uefi-rs/pull/1127) |
| 128 | +- [Deprecate `uefi-services` and add `uefi::helpers` as replacement](https://github.com/rust-osdev/uefi-rs/pull/1128) |
| 129 | +- [Fix some warnings, and ensure CI catches them in the future](https://github.com/rust-osdev/uefi-rs/pull/1134) |
| 130 | +- [release: uefi-raw-0.5.2, uefi-0.28.0, uefi-services-0.25.0](https://github.com/rust-osdev/uefi-rs/pull/1140) |
| 131 | +- [build(deps): bump rustls from 0.22.2 to 0.22.4](https://github.com/rust-osdev/uefi-rs/pull/1142) |
| 132 | +- [Nuke uefi services from repository](https://github.com/rust-osdev/uefi-rs/pull/1141) |
| 133 | +- [[Misc] Add ResetNotification protocol. Add Misc to uefi-test-runner.](https://github.com/rust-osdev/uefi-rs/pull/1116) |
| 134 | +- [Minor import/export cleanups](https://github.com/rust-osdev/uefi-rs/pull/1144) |
| 135 | +- [uefi: Drop the panic-on-logger-errors feature](https://github.com/rust-osdev/uefi-rs/pull/1143) |
| 136 | +- [Replace `cstr16!` with a declarative macro](https://github.com/rust-osdev/uefi-rs/pull/1145) |
| 137 | +- [Replace `cstr8!` with a declarative macro](https://github.com/rust-osdev/uefi-rs/pull/1151) |
| 138 | +- [Remove xtask from MSRV build and update clap](https://github.com/rust-osdev/uefi-rs/pull/1152) |
| 139 | + |
| 140 | +<!-- - [fix(deps): update rust crate serde_json to v1.0.115](https://github.com/rust-osdev/uefi-rs/pull/1111) --> |
| 141 | +<!-- - [chore(deps): update rust crate trybuild to v1.0.91](https://github.com/rust-osdev/uefi-rs/pull/1110) --> |
| 142 | +<!-- - [fix(deps): update rust crate syn to v2.0.57](https://github.com/rust-osdev/uefi-rs/pull/1112) --> |
| 143 | +<!-- - [chore(deps): update rust crate bitflags to v2.5.0](https://github.com/rust-osdev/uefi-rs/pull/1113) --> |
| 144 | +<!-- - [fix(deps): update rust crate ucs2 to v0.3.3](https://github.com/rust-osdev/uefi-rs/pull/1122) --> |
| 145 | +<!-- - [fix(deps): update rust crate syn to v2.0.58](https://github.com/rust-osdev/uefi-rs/pull/1121) --> |
| 146 | +<!-- - [chore(deps): update crate-ci/typos action to v1.20.8](https://github.com/rust-osdev/uefi-rs/pull/1132) --> |
| 147 | +<!-- - [fix(deps): update rust crate anyhow to v1.0.82](https://github.com/rust-osdev/uefi-rs/pull/1133) --> |
| 148 | +<!-- - [fix(deps): update rust crate quote to v1.0.36](https://github.com/rust-osdev/uefi-rs/pull/1136) --> |
| 149 | +<!-- - [fix(deps): update rust crate proc-macro2 to v1.0.80](https://github.com/rust-osdev/uefi-rs/pull/1135) --> |
| 150 | +<!-- - [chore(deps): update crate-ci/typos action to v1.20.9](https://github.com/rust-osdev/uefi-rs/pull/1146) --> |
| 151 | +<!-- - [fix(deps): update rust crate proc-macro2 to v1.0.81](https://github.com/rust-osdev/uefi-rs/pull/1147) --> |
| 152 | +<!-- - [fix(deps): update rust crate syn to v2.0.60](https://github.com/rust-osdev/uefi-rs/pull/1149) --> |
| 153 | +<!-- - [fix(deps): update rust crate serde_json to v1.0.116](https://github.com/rust-osdev/uefi-rs/pull/1148) --> |
| 154 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1150) --> |
| 155 | +<!-- - [chore(deps): update crate-ci/typos action to v1.20.10](https://github.com/rust-osdev/uefi-rs/pull/1153) --> |
| 156 | +<!-- - [fix(deps): update rust crate ureq to v2.9.7](https://github.com/rust-osdev/uefi-rs/pull/1154) --> |
| 157 | + |
| 158 | +Thanks to [@sky5454](https://github.com/sky5454) for their contributions! |
| 159 | + |
| 160 | +### [`ucs2-rs`](https://github.com/rust-osdev/ucs2-rs) |
| 161 | +<span class="maintainers">Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611)</span> |
| 162 | + |
| 163 | +- [Add `ucs2_cstr!` macro](https://github.com/rust-osdev/ucs2-rs/pull/21) |
| 164 | +- [release: 0.3.3](https://github.com/rust-osdev/ucs2-rs/pull/22) |
| 165 | + |
| 166 | + |
| 167 | +### [`acpi`](https://github.com/rust-osdev/acpi) |
| 168 | +<span class="maintainers">Maintained by [@IsaacWoods](https://github.com/IsaacWoods)</span> |
| 169 | + |
| 170 | +The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: |
| 171 | + |
| 172 | +- [AML: Allow Field in ToInteger (rebased)](https://github.com/rust-osdev/acpi/pull/213) |
| 173 | + |
| 174 | +Thanks to [@rw-vanc](https://github.com/rw-vanc) for their contribution! |
| 175 | + |
| 176 | + |
| 177 | +### [`x86_64`](https://github.com/rust-osdev/x86_64) |
| 178 | +<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> |
| 179 | + |
| 180 | +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. |
| 181 | + |
| 182 | +We merged the following PRs this month: |
| 183 | + |
| 184 | +- [docs: fix and detect warnings](https://github.com/rust-osdev/x86_64/pull/475) |
| 185 | +- [docs: add aliases for `in{,b,w,l}` and `out{,b,w,l}`](https://github.com/rust-osdev/x86_64/pull/474) |
| 186 | +- [ci: migrate away from unmaintained actions](https://github.com/rust-osdev/x86_64/pull/478) |
| 187 | +- [chore: migrate from legacy `rust-toolchain` to `rust-toolchain.toml`](https://github.com/rust-osdev/x86_64/pull/479) |
| 188 | +- [test: replace `x86_64-bare-metal.json` with `x86_64-unknown-none`](https://github.com/rust-osdev/x86_64/pull/477) |
| 189 | +- [fix and detect warnings](https://github.com/rust-osdev/x86_64/pull/476) |
| 190 | +- [CI: Set `-Crelocation-model=static` in `RUSTFLAGS` for bootloader test job](https://github.com/rust-osdev/x86_64/pull/480) |
| 191 | +- [silence warning about cast](https://github.com/rust-osdev/x86_64/pull/482) |
| 192 | +- [Only enable instructions on `x86_64`](https://github.com/rust-osdev/x86_64/pull/483) |
| 193 | + |
| 194 | +Thanks to [@mkroening](https://github.com/mkroening) for their contributions! |
| 195 | + |
| 196 | + |
| 197 | +### [`bootloader`](https://github.com/rust-osdev/bootloader) |
| 198 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13)</span> |
| 199 | + |
| 200 | +The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: |
| 201 | + |
| 202 | +- [CI: Fix macOS errors](https://github.com/rust-osdev/bootloader/pull/435) |
| 203 | +- [[v0.9] Silence dead code warning](https://github.com/rust-osdev/bootloader/pull/436) |
| 204 | +- [[v0.9] Rename `.cargo/config` to `.cargo/config.toml`](https://github.com/rust-osdev/bootloader/pull/437) |
| 205 | + |
| 206 | + |
| 207 | +### [`multiboot2`](https://github.com/rust-osdev/multiboot2) |
| 208 | +<span class="maintainers">Maintained by [@phip1611](https://github.com/phip1611)</span> |
| 209 | + |
| 210 | +The `multiboot2` crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month: |
| 211 | + |
| 212 | +- [misc: various improvements](https://github.com/rust-osdev/multiboot2/pull/208) |
| 213 | +<!-- - [build(deps): bump crate-ci/typos from 1.16.26 to 1.19.0](https://github.com/rust-osdev/multiboot2/pull/206) |
| 214 | +- [build(deps): bump cachix/install-nix-action from 24 to 26](https://github.com/rust-osdev/multiboot2/pull/207) |
| 215 | +- [build(deps): bump actions/cache from 3 to 4](https://github.com/rust-osdev/multiboot2/pull/200) --> |
| 216 | + |
| 217 | + |
| 218 | +## Other Projects |
| 219 | + |
| 220 | +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. |
| 221 | + |
| 222 | +<!-- |
| 223 | + Please use the following template: |
| 224 | +
|
| 225 | + ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name) |
| 226 | + <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span> |
| 227 | +
|
| 228 | + ...<<your project updates>>... |
| 229 | +--> |
| 230 | + |
| 231 | +### [RatCornu/efs](https://codeberg.org/RatCornu/efs) |
| 232 | + |
| 233 | +[`efs`](https://crates.io/efs) is a recently published `no-std` library which provides an OS and architecture independent implementation of some UNIX filesystems in Rust. |
| 234 | + |
| 235 | +Currently only the [ext2 filesystem](https://fr.wikipedia.org/wiki/Ext2) is directly implemented, but I will soonly work on other filesystems! |
| 236 | + |
| 237 | +It's still young so it may contain bugs, but it's hugely tested so that it does not happen. |
| 238 | + |
| 239 | +Some of the features provided : |
| 240 | + |
| 241 | +* `no_std` support (enabled by default) |
| 242 | +* General interface for UNIX files and filesystems |
| 243 | +* `read/write` regular files |
| 244 | +* retrieve, add and remove directory entries directly from a path and a current working directory. |
| 245 | + |
| 246 | +I hope you will find this useful! If you have any remark, idea or issue, do not hesitate to submit an issue! |
| 247 | + |
| 248 | +## Join Us? |
| 249 | + |
| 250 | +Are you interested in Rust-based operating system development? Our `rust-osdev` organization is always open to new members and new projects. Just let us know if you want to join! A good way for getting in touch is our [Zulip chat](https://rust-osdev.zulipchat.com). |
0 commit comments