|
| 1 | ++++ |
| 2 | +title = "This Month in Rust OSDev: June 2024" |
| 3 | +date = 2024-07-10 |
| 4 | + |
| 5 | +[extra] |
| 6 | +month = "June 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 (June 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 | +- [Redox OS - Software Showcase #1](https://youtu.be/s-gxAsBTPxA?si=IAPJ25EYP-XxS_FB) |
| 29 | + - This is our first showcase video, showing several programs running on Redox OS |
| 30 | +- [This Month in Redox - June 2024](https://www.redox-os.org/news/this-month-240630/) |
| 31 | +- [k23 - Experimental WASM Microkernel](https://github.com/JonasKruckenberg/k23) |
| 32 | + - First announced at RustNL 2024, k23 is an experimental microkernel written in Rust that runs WebAssembly programs. Now Open Source! |
| 33 | + |
| 34 | +<!-- |
| 35 | +Please follow this template: |
| 36 | +
|
| 37 | +- [Title](https://example.com) |
| 38 | + - (optional) Some additional context |
| 39 | +--> |
| 40 | + |
| 41 | + |
| 42 | +## Infrastructure and Tooling |
| 43 | + |
| 44 | +In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. |
| 45 | + |
| 46 | +- [Split core's PanicInfo and std's PanicInfo](https://github.com/rust-lang/rust/pull/115974) |
| 47 | +- [Stabilize `PanicInfo::message()` and `PanicMessage`](https://github.com/rust-lang/rust/pull/126732) |
| 48 | +- [Unsafe extern blocks](https://github.com/rust-lang/rust/pull/124482) |
| 49 | +- [Size optimize int formatting](https://github.com/rust-lang/rust/pull/125606) |
| 50 | +- [Add `f16` inline ASM support for RISC-V](https://github.com/rust-lang/rust/pull/126530) |
| 51 | + |
| 52 | +<!-- |
| 53 | + Please use the following template: |
| 54 | +
|
| 55 | +- [Title](https://example.com) |
| 56 | + - (optional) Some additional context |
| 57 | +--> |
| 58 | + |
| 59 | + |
| 60 | +## `rust-osdev` Projects |
| 61 | + |
| 62 | +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. |
| 63 | + |
| 64 | +<!-- |
| 65 | + Please use the following template: |
| 66 | +
|
| 67 | + ### [`repo_name`](https://github.com/rust-osdev/repo_name) |
| 68 | + <span class="maintainers">Maintained by [@maintainer_1](https://github.com/maintainer_1)</span> |
| 69 | +
|
| 70 | + The `repo_name` crate ...<<short introduction>>... |
| 71 | +
|
| 72 | + We merged the following changes this month: |
| 73 | + <<changelog, either in list or text form>> |
| 74 | +--> |
| 75 | + |
| 76 | +### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) |
| 77 | +<span class="maintainers">Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611)</span> |
| 78 | + |
| 79 | +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: |
| 80 | + |
| 81 | +- [uefi: Stop enabling `error_in_core` feature](https://github.com/rust-osdev/uefi-rs/pull/1194) |
| 82 | +- [reorganize deps](https://github.com/rust-osdev/uefi-rs/pull/1196) |
| 83 | +- [uefi: Add TryFrom u8 slice to DevicePathHeader ](https://github.com/rust-osdev/uefi-rs/pull/1199) |
| 84 | +- [test-runner: Consistently use global image handle](https://github.com/rust-osdev/uefi-rs/pull/1189) |
| 85 | +- [uefi: Add TryFrom u8 slice to DevicePathNode](https://github.com/rust-osdev/uefi-rs/pull/1197) |
| 86 | +- [Clean up duplicate global system table pointer in `uefi::helpers`](https://github.com/rust-osdev/uefi-rs/pull/1188) |
| 87 | +- [uefi: make DevicePathHeader::try_from idiomatic](https://github.com/rust-osdev/uefi-rs/pull/1202) |
| 88 | +- [uefi: Add TryFrom u8 slice to DevicePath](https://github.com/rust-osdev/uefi-rs/pull/1201) |
| 89 | +- [uefi: re-export CapsuleFlags](https://github.com/rust-osdev/uefi-rs/pull/1203) |
| 90 | +- [ci: Temporarily turn off warnings-as-errors for nightly CI jobs](https://github.com/rust-osdev/uefi-rs/pull/1206) |
| 91 | +- [uefi: use UNSPECIFIED_TIMEZONE instead of magic number](https://github.com/rust-osdev/uefi-rs/pull/1210) |
| 92 | +- [uefi: Make TimeError more descriptive](https://github.com/rust-osdev/uefi-rs/pull/1211) |
| 93 | +- [Fix versions](https://github.com/rust-osdev/uefi-rs/pull/1187) |
| 94 | +- [uefi-test-runner: speed up ploting of sierpinski triangle by updating changed pixel only](https://github.com/rust-osdev/uefi-rs/pull/1209) |
| 95 | +- [memory map: improvements to fight pitfalls (MemoryMap now owns the memory)](https://github.com/rust-osdev/uefi-rs/pull/1175) |
| 96 | +- [uefi: simplify usage of Mode](https://github.com/rust-osdev/uefi-rs/pull/1214) |
| 97 | +- [template: fix build failure](https://github.com/rust-osdev/uefi-rs/pull/1217) |
| 98 | +- [uefi: Add TryFrom<&[u8]> for Time](https://github.com/rust-osdev/uefi-rs/pull/1212) |
| 99 | + |
| 100 | +Thanks to [@LightAndLight](https://github.com/LightAndLight), [@andre-braga](https://github.com/andre-braga), and [@JeffLi01](https://github.com/JeffLi01) for their contributions! |
| 101 | + |
| 102 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1184) --> |
| 103 | +<!-- - [chore(deps): update crate-ci/typos action to v1.22.3](https://github.com/rust-osdev/uefi-rs/pull/1193) --> |
| 104 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1195) --> |
| 105 | +<!-- - [chore(deps): update crate-ci/typos action to v1.22.7](https://github.com/rust-osdev/uefi-rs/pull/1207) --> |
| 106 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1208) --> |
| 107 | +<!-- - [nix/niv: update nixpkgs to nixos-24.05](https://github.com/rust-osdev/uefi-rs/pull/1213) --> |
| 108 | +<!-- - [chore(deps): update crate-ci/typos action to v1.22.9](https://github.com/rust-osdev/uefi-rs/pull/1215) --> |
| 109 | +<!-- - [chore(deps): lock file maintenance](https://github.com/rust-osdev/uefi-rs/pull/1218) --> |
| 110 | + |
| 111 | +### [`bootloader`](https://github.com/rust-osdev/bootloader) |
| 112 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13)</span> |
| 113 | + |
| 114 | +The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: |
| 115 | + |
| 116 | +- [Guard the lower 1MB of memory](https://github.com/rust-osdev/bootloader/pull/446) |
| 117 | + |
| 118 | +Thanks to [@Wasabi375](https://github.com/Wasabi375) for their contributions! |
| 119 | + |
| 120 | + |
| 121 | +### [`pci_types`](https://github.com/rust-osdev/pci_types) |
| 122 | +<span class="maintainers">Maintained by [@IsaacWoods](https://github.com/IsaacWoods)</span> |
| 123 | + |
| 124 | +The `pci_types` library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month: |
| 125 | + |
| 126 | +- [feat: accept `FnOnce` for updating commands](https://github.com/rust-osdev/pci_types/pull/15) |
| 127 | +- [ci: add workflow](https://github.com/rust-osdev/pci_types/pull/17) |
| 128 | +- [feat: don't truncate reserved bits in `CommandRegister`](https://github.com/rust-osdev/pci_types/pull/16) |
| 129 | +- [fix(breaking): clippy lints](https://github.com/rust-osdev/pci_types/pull/18) |
| 130 | +- [style: update `rustfmt.toml`](https://github.com/rust-osdev/pci_types/pull/19) |
| 131 | +- [feat: derive additional traits for `CommandRegister`](https://github.com/rust-osdev/pci_types/pull/20) |
| 132 | +- [feat: add `EndpointHeader::update_interrupt`](https://github.com/rust-osdev/pci_types/pull/21) |
| 133 | +- [feat: don't take explicit references to `ConfigRegionAccess`](https://github.com/rust-osdev/pci_types/pull/22) |
| 134 | +- [feat: implement `Copy` for all types that already implement `Clone`](https://github.com/rust-osdev/pci_types/pull/23) |
| 135 | +- [fix: don't take explicit reference in `update_interrupt`](https://github.com/rust-osdev/pci_types/pull/24) |
| 136 | +- [Add method to get the address of any capability](https://github.com/rust-osdev/pci_types/pull/27) |
| 137 | +- [Fix docs rendering for MsixCapability::set_enabled](https://github.com/rust-osdev/pci_types/pull/28) |
| 138 | +- [feat: make `update_command` take `&mut self`](https://github.com/rust-osdev/pci_types/pull/32) |
| 139 | +- [Add method to enable/disable function masking for MSI-X](https://github.com/rust-osdev/pci_types/pull/29) |
| 140 | +- [Add unwrap_io and unwrap_mem convenience methods on Bar](https://github.com/rust-osdev/pci_types/pull/25) |
| 141 | +- [Remove the function_exists method of ConfigRegionAccess](https://github.com/rust-osdev/pci_types/pull/26) |
| 142 | +- [Support 64-bit addressing in MSI capabilities and improve uniformity with rest of library](https://github.com/rust-osdev/pci_types/pull/33) |
| 143 | + |
| 144 | +Thanks to [@IsaacWoods](https://github.com/IsaacWoods), [@bjorn3](https://github.com/bjorn3), and [@mkroening](https://github.com/mkroening) for their contributions! |
| 145 | + |
| 146 | + |
| 147 | + |
| 148 | +### [`x86_64`](https://github.com/rust-osdev/x86_64) |
| 149 | +<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> |
| 150 | + |
| 151 | +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. |
| 152 | + |
| 153 | +We merged the following PR this month: |
| 154 | + |
| 155 | +- [constify PhysFrame functions](https://github.com/rust-osdev/x86_64/pull/489) |
| 156 | + |
| 157 | +### [`volatile`](https://github.com/rust-osdev/volatile) |
| 158 | +<span class="maintainers">Maintained by [@phil-opp](https://github.com/phil-opp)</span> |
| 159 | + |
| 160 | +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. |
| 161 | + |
| 162 | +We merged the following PR this month: |
| 163 | + |
| 164 | +- [Release v0.6.0](https://github.com/rust-osdev/volatile/pull/64) |
| 165 | + |
| 166 | + |
| 167 | +## Other Projects |
| 168 | + |
| 169 | +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. |
| 170 | + |
| 171 | +<!-- |
| 172 | + Please use the following template: |
| 173 | +
|
| 174 | + ### [`owner_name/repo_name`](https://github.com/rust-osdev/owner_name/repo_name) |
| 175 | + <span class="maintainers">(Section written by [@your_github_name](https://github.com/your_github_name))</span> |
| 176 | +
|
| 177 | + ...<<your project updates>>... |
| 178 | +--> |
| 179 | + |
| 180 | +### [`nicholasbishop/ext4-view-rs`](https://github.com/nicholasbishop/ext4-view-rs) |
| 181 | +<span class="maintainers">(Section written by [@nicholasbishop](https://github.com/nicholasbishop))</span> |
| 182 | + |
| 183 | +I've released a new Rust crate for reading ext4 filesystems. It's easy to use, with an API very similar to [`std::fs`](https://doc.rust-lang.org/std/fs/index.html). The crate is no-std compatible, but does require an allocator. |
| 184 | + |
| 185 | +Note that by design this crate will remain read-only; writing to an ext4 filesystem is not a goal. |
| 186 | + |
| 187 | +Thanks to [@tedbrandston](https://github.com/tedbrandston) for doing a ton of code review on this project! |
| 188 | + |
| 189 | +## Join Us? |
| 190 | + |
| 191 | +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