├── .github └── workflows │ └── build-site.yml ├── .gitignore ├── .typos.toml ├── LICENSE-APACHE ├── LICENSE-MIT ├── README.md ├── collect-changes ├── .gitignore ├── Cargo.lock ├── Cargo.toml └── src │ └── main.rs ├── config.toml ├── content ├── pages │ ├── _index.md │ └── contact.md ├── showcase │ ├── _index.md │ ├── cluu │ │ ├── index.md │ │ ├── screen.png │ │ └── serial_out.png │ └── hermit │ │ ├── bandwidth.png │ │ ├── common_vm.png │ │ ├── index.md │ │ └── libos.png └── this-month │ ├── 2020-04 │ └── index.md │ ├── 2020-05 │ └── index.md │ ├── 2020-06 │ └── index.md │ ├── 2020-07 │ └── index.md │ ├── 2020-08 │ └── index.md │ ├── 2020-09 │ ├── blog_os-rewrite.png │ └── index.md │ ├── 2020-10 │ └── index.md │ ├── 2020-11 │ └── index.md │ ├── 2020-12 │ └── index.md │ ├── 2021-01 │ ├── blog-os-uefi.jpg │ └── index.md │ ├── 2021-02 │ └── index.md │ ├── 2021-03 │ └── index.md │ ├── 2021-04 │ └── index.md │ ├── 2021-05 │ └── index.md │ ├── 2021-06 │ └── index.md │ ├── 2021-07 │ └── index.md │ ├── 2021-08 │ └── index.md │ ├── 2021-09 │ └── index.md │ ├── 2021-10 │ └── index.md │ ├── 2021-11 │ └── index.md │ ├── 2021-12 │ └── index.md │ ├── 2022-01 │ ├── framebuffer-font-noto-sans-mono.png │ └── index.md │ ├── 2022-02 │ └── index.md │ ├── 2022-03 │ └── index.md │ ├── 2022-04 │ └── index.md │ ├── 2022-05 │ └── index.md │ ├── 2022-06 │ └── index.md │ ├── 2022-07 │ ├── index.md │ └── windbg.png │ ├── 2022-08 │ └── index.md │ ├── 2022-09 │ └── index.md │ ├── 2022-10 │ ├── index.md │ └── nt-list-video.jpg │ ├── 2022-11 │ └── index.md │ ├── 2022-12 │ ├── aero.png │ └── index.md │ ├── 2023-01 │ └── index.md │ ├── 2023-02 │ └── index.md │ ├── 2023-03 │ ├── index.md │ └── screenshot-paging-calculator-x86-pae.png │ ├── 2023-04 │ └── index.md │ ├── 2023-05 │ └── index.md │ ├── 2023-06 │ └── index.md │ ├── 2023-07 │ └── index.md │ ├── 2023-08 │ └── index.md │ ├── 2023-09 │ └── index.md │ ├── 2023-10 │ └── index.md │ ├── 2023-11 │ └── index.md │ ├── 2023-12 │ └── index.md │ ├── 2024-01 │ └── index.md │ ├── 2024-02 │ └── index.md │ ├── 2024-03 │ └── index.md │ ├── 2024-04 │ └── index.md │ ├── 2024-05 │ └── index.md │ ├── 2024-06 │ └── index.md │ ├── 2024-07 │ └── index.md │ ├── 2024-08 │ └── index.md │ ├── 2024-09 │ └── index.md │ ├── 2024-10 │ └── index.md │ ├── 2024-11 │ └── index.md │ ├── 2024-12 │ └── index.md │ ├── 2025-01 │ └── index.md │ ├── 2025-02 │ └── index.md │ ├── 2025-03 │ └── index.md │ ├── 2025-04 │ └── index.md │ ├── 2025-05 │ └── index.md │ └── _index.md ├── static ├── CNAME ├── css │ ├── main.css │ └── poole.css └── uefi-book │ └── index.html └── templates ├── base.html ├── index.html ├── page.html ├── plain.html ├── section.html ├── showcase.html └── snippets.html /.github/workflows/build-site.yml: -------------------------------------------------------------------------------- 1 | name: Build Site 2 | 3 | on: 4 | push: 5 | branches: 6 | - "*" 7 | - "!staging.tmp" 8 | tags: 9 | - "*" 10 | pull_request: 11 | schedule: 12 | - cron: "0 0 1/4 * *" # every 4 days 13 | 14 | jobs: 15 | build_site: 16 | name: "Zola Build" 17 | runs-on: ubuntu-latest 18 | 19 | steps: 20 | - uses: actions/checkout@v2 21 | 22 | - name: "Download Zola" 23 | run: curl -sL https://github.com/getzola/zola/releases/download/v0.16.1/zola-v0.16.1-x86_64-unknown-linux-gnu.tar.gz | tar zxv 24 | 25 | - name: "Build Site" 26 | run: ./zola build 27 | 28 | - name: Upload Generated Site 29 | uses: actions/upload-artifact@v4 30 | with: 31 | name: generated_site 32 | path: public 33 | 34 | zola_check: 35 | name: "Zola Check" 36 | runs-on: ubuntu-latest 37 | 38 | steps: 39 | - uses: actions/checkout@v2 40 | 41 | - name: "Download Zola" 42 | run: curl -sL https://github.com/getzola/zola/releases/download/v0.16.1/zola-v0.16.1-x86_64-unknown-linux-gnu.tar.gz | tar zxv 43 | 44 | - name: "Run zola check" 45 | run: ./zola check 46 | 47 | check_spelling: 48 | name: "Check Spelling" 49 | runs-on: ubuntu-latest 50 | 51 | steps: 52 | - uses: actions/checkout@v2 53 | 54 | - run: curl -L https://git.io/misspell | bash 55 | name: "Install misspell" 56 | - run: bin/misspell -error content 57 | name: "Check for common typos using `misspell`" 58 | # Executes "typos ." 59 | - uses: crate-ci/typos@v1.16.12 60 | name: "Check for common typos using `typos`" 61 | 62 | deploy_site: 63 | name: "Deploy Generated Site" 64 | runs-on: ubuntu-latest 65 | needs: [build_site, check_spelling] 66 | if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'schedule') && github.repository == 'rust-osdev/homepage' 67 | permissions: 68 | contents: write 69 | issues: write 70 | 71 | steps: 72 | - name: "Download Generated Site" 73 | uses: actions/download-artifact@v4.1.7 74 | with: 75 | name: generated_site 76 | path: generated_site 77 | 78 | - name: Check out gh-pages branch 79 | uses: actions/checkout@v2 80 | with: 81 | ref: "gh-pages" 82 | path: "gh-pages" 83 | 84 | - name: "Set Up Git Identity" 85 | run: | 86 | git config --local user.name "GitHub Actions Deploy" 87 | git config --local user.email "github-actions-deploy@rust-osdev.com" 88 | working-directory: "gh-pages" 89 | 90 | - name: "Delete Old Content" 91 | run: "rm -r ./*" 92 | working-directory: "gh-pages" 93 | 94 | - name: "Add New Content" 95 | run: cp -r generated_site/* gh-pages 96 | 97 | - name: "Commit New Content" 98 | run: | 99 | git add . 100 | git commit --allow-empty -m "Deploy ${GITHUB_SHA} 101 | 102 | Deploy of commit https://github.com/rust-osdev/homepage/commit/${GITHUB_SHA}" 103 | 104 | if git show HEAD --summary | grep -P 'create mode \d+ this-month/\d{4}-\d{2}/index.html' 105 | then 106 | # This might do something weird if there are multiple such pages. Hopefully that should never happen. 107 | new_page=$(git show HEAD --summary | grep -P 'create mode \d+ this-month/\d{4}-\d{2}/index.html' | cut -d' ' -f5) 108 | echo "Detected a new monthly page:" $new_page 109 | curl -s -X POST \ 110 | https://api.github.com/repos/rust-osdev/homepage/issues/212/comments \ 111 | -d "{\"body\":\"New issue published: [**$new_page**](https://rust-osdev.com/$new_page). Beep boop.\"}" \ 112 | -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" 113 | fi 114 | working-directory: "gh-pages" 115 | 116 | - name: "Show Changes" 117 | run: "git show" 118 | working-directory: "gh-pages" 119 | 120 | - name: "Push Changes" 121 | run: "git push" 122 | working-directory: "gh-pages" 123 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /public -------------------------------------------------------------------------------- /.typos.toml: -------------------------------------------------------------------------------- 1 | # Configuration for https://github.com/crate-ci/typos 2 | 3 | [files] 4 | extend-exclude = [ 5 | # List of files (without leading ./) 6 | ] 7 | 8 | [default] 9 | extend-ignore-identifiers-re = [ 10 | "^BARs$", 11 | "[@Programatic]", 12 | ] 13 | 14 | [default.extend-words] 15 | 16 | [default.extend-identifiers] 17 | -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2020 The Rust OSDev Developers 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # homepage 2 | 3 | This repository contains the source code for our organization homepage at . 4 | 5 | # Development 6 | In order to build the website, first you will need to install the [zola](https://github.com/getzola/zola/releases) static site generator. 7 | 8 | Then you can run: 9 | ``` 10 | ./zola serve 11 | ``` 12 | and open localhost:1111 13 | 14 | ## License 15 | 16 | Licensed under either of 17 | 18 | - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or 19 | http://www.apache.org/licenses/LICENSE-2.0) 20 | - MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) 21 | 22 | at your option. 23 | 24 | Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. 25 | -------------------------------------------------------------------------------- /collect-changes/.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | -------------------------------------------------------------------------------- /collect-changes/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "collect-changes" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | chrono = { version = "0.4.21", default-features = false } 10 | eyre = "0.6.8" 11 | octocrab = { version = "0.18.1", default-features = false, features = [ 12 | "rustls", 13 | ] } 14 | tokio = { version = "1.20.4", features = ["full"] } 15 | -------------------------------------------------------------------------------- /collect-changes/src/main.rs: -------------------------------------------------------------------------------- 1 | use chrono::{Datelike, Duration, Utc}; 2 | use octocrab::params; 3 | use std::collections::{BTreeMap, HashMap}; 4 | 5 | #[tokio::main] 6 | async fn main() -> eyre::Result<()> { 7 | let last_month = { 8 | let twenty_days_ago = Utc::now().checked_sub_signed(Duration::days(20)).unwrap(); 9 | let first_of_month = twenty_days_ago.with_day(1).unwrap().date(); 10 | first_of_month.and_hms_opt(0, 0, 0).unwrap() 11 | }; 12 | let year = last_month.year(); 13 | let month = last_month.month(); 14 | println!("Creating changelog for {year}/{month}",); 15 | 16 | let gh = { 17 | let mut builder = octocrab::OctocrabBuilder::new(); 18 | builder = if let Ok(token) = std::env::var("GITHUB_TOKEN") { 19 | println!("Using GITHUB_TOKEN"); 20 | builder.personal_token(token) 21 | } else { 22 | builder 23 | }; 24 | builder.build()? 25 | }; 26 | let repo_page = gh 27 | .orgs("rust-osdev") 28 | .list_repos() 29 | .repo_type(params::repos::Type::Sources) 30 | .sort(params::repos::Sort::Pushed) 31 | .direction(params::Direction::Descending) 32 | .per_page(100) 33 | .send() 34 | .await?; 35 | let all_repos = gh.all_pages(repo_page).await?; 36 | 37 | let mut changes: HashMap<_, Vec<_>> = HashMap::new(); 38 | let mut repos = HashMap::new(); 39 | for repo in all_repos { 40 | let mut pulls = gh 41 | .pulls("rust-osdev", &repo.name) 42 | .list() 43 | .state(params::State::Closed) 44 | .sort(params::pulls::Sort::Updated) 45 | .direction(params::Direction::Descending) 46 | .per_page(100) 47 | .send() 48 | .await?; 49 | let entry = changes.entry(repo.name.clone()).or_default(); 50 | repos.insert(repo.name.clone(), repo); 51 | loop { 52 | let items = pulls.take_items(); 53 | let merged = items 54 | .iter() 55 | .cloned() 56 | .filter_map(|p| p.merged_at.map(|t| (p, t))) 57 | .filter(|(_, t)| t.year() == year && t.month() == month); 58 | entry.extend(merged); 59 | if items 60 | .last() 61 | .and_then(|p| p.updated_at) 62 | .map(|u| u < last_month) 63 | .unwrap_or(true) 64 | { 65 | break; 66 | } 67 | match gh.get_page(&pulls.next).await? { 68 | None => break, 69 | Some(next_page) => pulls = next_page, 70 | } 71 | } 72 | } 73 | changes.retain(|_, pulls| !pulls.is_empty()); 74 | 75 | for (repo_name, mut pulls) in changes { 76 | let repo = &repos[&repo_name]; 77 | println!( 78 | "\n\n### [`{}`]({})\n", 79 | repo.name, 80 | repo.html_url.as_ref().unwrap() 81 | ); 82 | 83 | let mut thanks = BTreeMap::new(); 84 | 85 | pulls.sort_by_key(|(_, merged_at)| *merged_at); 86 | for (pull, _) in pulls { 87 | println!("- [{}]({})", pull.title.unwrap(), pull.html_url.unwrap()); 88 | 89 | let author = pull.user.unwrap(); 90 | thanks.insert(author.id, author); 91 | } 92 | 93 | if !thanks.is_empty() { 94 | print!("\nThanks to "); 95 | let last_idx = thanks.len() - 1; 96 | for (i, author) in thanks.into_values().enumerate() { 97 | match i { 98 | 0 => {} 99 | i if i == last_idx => print!(", and "), 100 | _ => print!(", "), 101 | } 102 | print!("[@{}]({})", author.login, author.html_url); 103 | } 104 | println!(" for their contributions!"); 105 | } 106 | } 107 | 108 | Ok(()) 109 | } 110 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | # The URL the site will be built for 2 | base_url = "https://rust-osdev.com" 3 | 4 | title = "Rust OSDev" 5 | description = "Operating System Development in Rust" 6 | 7 | # Whether to automatically compile all Sass files in the sass directory 8 | compile_sass = false 9 | 10 | # Whether to build a search index to be used later on by a JavaScript library 11 | build_search_index = false 12 | 13 | # Generate RSS feed 14 | generate_feed = true 15 | feed_filename = "rss.xml" 16 | 17 | [markdown] 18 | highlight_code = true 19 | 20 | [link_checker] 21 | skip_prefixes = [ 22 | "https://crates.io/crates", # see https://github.com/rust-lang/crates.io/issues/788 23 | "https://github.com", # because of rate limiting 24 | "https://rusty-hermit.k8s.eonerc.rwth-aachen.de/", # RustyHermit show case 25 | "https://www.linux-kvm.org", # see https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/ 26 | "https://twitter.com/", # too many redirects 27 | "https://nitter.net/", # 403 forbidden 28 | "https://www.reddit.com/", # 403 forbidden 29 | "https://blog.rust.careers", # Expired certificate 30 | "https://gee.cs.oswego.edu", # times out 31 | "https://web.archive.org", # times out 32 | "https://apollolabsblog.hashnode.dev", # requires js 33 | "https://doi.org", # 403 forbidden 34 | ] 35 | 36 | [extra] 37 | # Put all your custom variables here 38 | -------------------------------------------------------------------------------- /content/pages/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Pages" 3 | render = false 4 | +++ 5 | -------------------------------------------------------------------------------- /content/pages/contact.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Contact" 3 | path = "contact" 4 | template = "plain.html" 5 | +++ 6 | 7 | Philipp Oppermann 8 | 9 | contact@phil-opp.com 10 | 11 | Erna-Hötzel-Str. 3, 76344 Eggenstein, Germany 12 | -------------------------------------------------------------------------------- /content/showcase/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Showcase" 3 | sort_by = "date" 4 | page_template = "showcase.html" 5 | +++ 6 | 7 | In this section, we present interesting operating system projects written in Rust. Feel free to add your own project by [creating a pull request](https://github.com/rust-osdev/homepage/pulls). 8 | -------------------------------------------------------------------------------- /content/showcase/cluu/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "CLUU (Compact Lightweight Unix Utopia)" 3 | date = 2023-06-14 4 | 5 | [extra] 6 | authors = ["valibali"] 7 | +++ 8 | 9 |
10 | 11 | [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/valibali/cluu/blob/master/LICENSE) [![Documentation](https://img.shields.io/badge/documentation-RUSTDOCS-blue.svg)](https://valibali.github.io/cluu/) [![Repository](https://img.shields.io/badge/repository-GitHub-green.svg)](https://github.com/valibali/cluu) 12 | 13 |
14 | 15 | 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 **fun and joy**, drawing inspiration from various operating systems and projects while incorporating unique approaches and ideas. 16 | 17 | 18 | 19 | 20 | 21 | 22 | ## Motivation 23 | 24 | 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. 25 | 26 | ## Project Information 27 | 28 | CLUU draws inspiration from the following operating systems: 29 | 30 | - [Plan 9](https://github.com/plan9foundation/plan9): 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. 31 | - [BSD](https://github.com/freebsd/freebsd): 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. 32 | 33 | As well as heavily influenced by the following projects: 34 | 35 | - [RedoxOS](https://github.com/redox-os/redox): 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. 36 | - [k4dos](https://github.com/clstatham/k4dos): 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 37 | - [blog_os](https://os.phil-opp.com/): 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. 38 | 39 | 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. 40 | 41 | ## Current State and Goals 42 | 43 | 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: 44 | 45 | - **UART16550 driver**: A driver for UART16550, allowing communication with the serial port for debugging and logging purposes. 46 | - **Preparation for PIO and MMIO**: The groundwork has been laid for implementing both Programmed I/O (PIO) and Memory-Mapped I/O (MMIO) for interacting with hardware devices. 47 | - **Framebuffer driver**: A driver for the framebuffer, providing a graphical output display. 48 | - **Simple graphics and writing**: Basic graphical capabilities have been implemented, allowing for drawing and writing on the screen using a PSF font. 49 | - **Basic Logging framework**: A basic logging framework has been developed to facilitate debugging and information output during the development process. 50 | 51 | ![Screencheck](screen.png) ![serial_output](serial_out.png) 52 | 53 | As the project progresses, the focus will shift towards implementing additional features, such as: 54 | 55 | - **Kernel Implementation**: Further development of the microkernel's core functionality, including process management, interprocess communication, and resource management. 56 | - **Device Drivers**: Continued development of drivers for essential hardware components, including keyboard, storage devices, and other peripherals. 57 | - **Filesystem Support**: Introducing filesystem support to enable file I/O operations and provide a foundation for user-level processes and applications. 58 | 59 | 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 [GitHub repository](https://github.com/valibali/cluu). 60 | 61 | ## License 62 | 63 | CLUU is licensed under the MIT License. See [LICENSE](https://github.com/valibali/cluu/blob/master/LICENSE) for more information. 64 | -------------------------------------------------------------------------------- /content/showcase/cluu/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/showcase/cluu/screen.png -------------------------------------------------------------------------------- /content/showcase/cluu/serial_out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/showcase/cluu/serial_out.png -------------------------------------------------------------------------------- /content/showcase/hermit/bandwidth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/showcase/hermit/bandwidth.png -------------------------------------------------------------------------------- /content/showcase/hermit/common_vm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/showcase/hermit/common_vm.png -------------------------------------------------------------------------------- /content/showcase/hermit/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "The Hermit Operating System" 3 | date = 2021-01-22 4 | aliases = ["showcase/rusty-hermit"] 5 | 6 | [extra] 7 | authors = ["stlankes", "mkroening"] 8 | +++ 9 | 10 | [Hermit](http://hermit-os.org) is a unikernel project, that is completely written in Rust. 11 | [Unikernels](http://unikernel.org/) are application images that directly contain the kernel as a library, so they do not require an installed operating system (OS). 12 | They are typically used in virtualized environments, which build the backbone of typical cloud and edge infrastructures. 13 | 14 | 15 | 16 | 17 | 18 | ## Virtualization Designs 19 | 20 | Common virtualized environments are based on classical **_virtual machines_**. 21 | In this case, complete machines are emulated or virtualized, and common operating systems are running on both the host and guest sides: 22 | 23 | ![Structure of a common virtualization environment](common_vm.png) 24 | 25 | This technique is established (VMware, Hyper-V, etc.) and widely used. 26 | However, it introduces additional overhead, especially regarding memory consumption and performance. 27 | 28 | An alternative approach to common virtual machines is **_OS-level virtualization_**, where the kernel allows the existence of multiple isolated user-space instances. 29 | These isolated instances are also known as “containers.” 30 | Typical representatives are LXC and Docker, which promise less overhead in comparison to common virtual machines. 31 | However, the isolation between the processes is weaker and may provide less security. 32 | 33 | ## Unikernels 34 | 35 | Often, only one application (e.g., a web server) is running in the container or the virtual machine. 36 | In this case, a _unikernel_ is an attractive solution. 37 | The kernel is provided as a static library and linked to the application. 38 | 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. 39 | 40 | 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. 41 | At first glance, this sounds more insecure than previous approaches. 42 | However, these kernels are expected to run within a virtual machine, which isolates the application from the real system. 43 | 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. 44 | 45 | ![Structure of a library operating system](libos.png) 46 | 47 | Well-known unikernels are kernels such as [MirageOS](https://mirage.io/) and [Unikraft](http://www.unikraft.org/). 48 | MirageOS is written in OCaml, while Unikraft still uses C as the programming language of choice. 49 | In contrast to these kernels, Hermit is completely written in Rust to benefit from Rust's performance and security behavior. 50 | 51 | ## Hermit 52 | 53 | In principle, every existing Rust application can be built on top of Hermit. 54 | However, unikernels are single-tasking operating systems. 55 | Consequently, support for the system call `fork` and inter-process communication is missing. 56 | In addition, a classical C library is missing, which is typically used as an interface to the operating system. 57 | Every crate that bypasses the standard runtime and tries to communicate directly with the operating system does not work without modifications. 58 | However, many applications do not depend on these features and work on Hermit. 59 | 60 | ### Performance 61 | 62 | Unikernels can be highly optimized. 63 | For instance, we optimized the network stack of Hermit. 64 | Hermit uses [smoltcp](https://github.com/smoltcp-rs/smoltcp) as the network stack, which is completely written in Rust. 65 | As the interface between the guest and host operating systems, we use [virtio](https://www.linux-kvm.org/page/Virtio), which is a para-virtualized driver for KVM and widely used in virtualized Linux environments. 66 | 67 | 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: 68 | 69 | ![Bandwidth of the Hermit's experimental network interface](bandwidth.png) 70 | 71 | Especially for small messages, Hermit is faster than Linux. 72 | 73 | ### Research 74 | 75 | Hermit is also a research project to evaluate new operating system designs, that improve the scalability and security of operating systems in cloud environments. 76 | For instance, Hermit provides classical techniques to improve security behavior, like stack guards and separating the application stack from the libOS stack. 77 | However, a library operating system typically uses a common function call to enter the kernel. 78 | A classical separation of user and kernel space by entering a higher privilege level is missing. 79 | 80 | In a [paper](https://www.ssrg.ece.vt.edu/papers/vee20-mpk.pdf), we presented a modified version of Hermit, which provides intra-unikernel isolation with _Intel Memory Protection Keys_ (MPK). 81 | MPK is a relatively new hardware primitive that provides per-thread permission control over groups of pages in a single address space with [negligible switching overhead](https://www.usenix.org/conference/atc19/presentation/park-soyeon), making it a compelling candidate for use in unikernels. 82 | 83 | MPK requires modification of page tables at a small performance cost. 84 | Four previously unused bits of each page table entry (the 62nd to the 59th on x86-64) are exploited by MPK. 85 | Since MPK exploits four bits of the page table entry, it supports up to 15 protection keys. 86 | MPK controls per-thread permission on groups of pages. 87 | Each core has a PKRU register (32 bits) containing a permission value. 88 | 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. 89 | Unlike page-table-level permission, MPK provides thread-local memory permission. 90 | 91 | 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. 92 | In addition, we divide the kernel code into trusted and untrusted components. 93 | Trusted kernel components represent pieces of code written in a memory-safe language, i.e., offering strong security guarantees. 94 | Untrusted kernel components correspond to code written either in memory-unsafe languages or in unsafe Rust code blocks. 95 | 96 | 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. 97 | Unauthorized access from within the application will trigger a page fault, which will be handled by the library operating system. 98 | 99 | ### Getting Started 100 | 101 | Take a look at [hermit-os/hermit-rs-template](https://github.com/hermit-os/hermit-rs-template) for a simple starter application. 102 | 103 | The Hermit platform is an [official Rust target](https://doc.rust-lang.org/nightly/rustc/platform-support/hermit.html). 104 | You can either use our [prebuilt `rust-std` artifacts](https://github.com/hermit-os/rust-std-hermit) on stable Rust or use `build-std` on nightly Rust. 105 | Alternatively, you can compile the whole Rust compiler for Hermit, of course. 106 | 107 | ### Roadmap 108 | 109 | In the near future, we plan to stabilize the interface to the hardware. 110 | For instance, the support of [virtiofs](https://virtio-fs.gitlab.io/) is at an early stage. 111 | In addition, the integration into the Rust standard library isn't finalized yet, and the current version runs only on x86-64. 112 | In the future, we want to also support AArch64 as a processor architecture. 113 | -------------------------------------------------------------------------------- /content/showcase/hermit/libos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/showcase/hermit/libos.png -------------------------------------------------------------------------------- /content/this-month/2020-06/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (June 2020)" 3 | date = 2020-07-12 4 | 5 | [extra] 6 | month = "June 2020" 7 | authors = [ 8 | "phil-opp", 9 | # add yourself here 10 | ] 11 | +++ 12 | 13 | Welcome to a new issue of _"This Month in Rust OSDev"_. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem. 14 | 15 | 16 | 17 | 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). 18 | 19 | 27 | 28 | ## Project Updates 29 | 30 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 31 | 32 | [`rust-osdev`]: https://github.com/rust-osdev/about 33 | 34 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 35 | 36 | 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. 37 | 38 | In June, the crate received some smaller improvements: 39 | 40 | - [Remove needless `try_into` calls](https://github.com/rust-osdev/x86_64/pull/159) to fix clippy warnings 41 | - [Correct Cr2::read documentation](https://github.com/rust-osdev/x86_64/pull/161) 42 | - [Export `PhysAddrNotValid` and `VirtAddrNotValid`](https://github.com/rust-osdev/x86_64/pull/163) (published as `v0.11.1`) 43 | 44 | Thanks to [@samueltardieu](https://github.com/samueltardieu) and [@leecannon](https://github.com/leecannon) for their contributions! 45 | 46 | ### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) 47 | 48 | The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, support for the `cargo-features` manifest key was added and a deprecated dependency was replaced: 49 | 50 | - [Propagate `cargo-features` from project's Cargo.toml](https://github.com/rust-osdev/cargo-xbuild/pull/82) (published as `v0.5.34`) 51 | - [Replace tempdir with tempfile](https://github.com/rust-osdev/cargo-xbuild/pull/84) (published as `v0.5.35`) 52 | 53 | Thanks to [@eggyal](https://github.com/eggyal) and [@Eijebong](https://github.com/Eijebong) for these contributions! 54 | 55 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 56 | 57 | The [`bootloader` crate](https://github.com/rust-osdev/bootloader) implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we fixed a newly introduced Rust warning: 58 | 59 | - [Rename `_improper_ctypes_check` functions](https://github.com/rust-osdev/bootloader/pull/122) (published as `v0.9.5`) 60 | 61 | Thanks to [@Freax13](https://github.com/Freax13) for this contribution! 62 | 63 | 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). 64 | 65 | ### [`acpi`](https://github.com/rust-osdev/acpi) 66 | 67 | 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. This month, the crate received two small improvements to the [RSDP](https://wiki.osdev.org/RSDP)-related code: 68 | 69 | - [Use RSDP's length field in revisions 1+](https://github.com/rust-osdev/acpi/commit/43df4bc79611d311c4a50978ebc4babe78b46074) 70 | - [Use fold to sum RSDP bytes](https://github.com/rust-osdev/acpi/commit/a37cf48429334dc3dfd98e065656c374cc907a4a) 71 | 72 | ### [`uefi`](https://github.com/rust-osdev/uefi-rs) 73 | 74 | The `uefi` crate provides abstractions for the [`UEFI`](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface) standard that replaces the traditional BIOS on modern systems. This month, the contribution docs were extended with information how to add new UEFI protocols: 75 | 76 | - [Tutorial on how to add protocols](https://github.com/rust-osdev/uefi-rs/commit/56375412e62d41122aba5b2c86c365373ca31ecd) 77 | 78 | ## Personal Projects 79 | 80 | In this section, we describe updates to personal 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. 81 | 82 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 83 | 84 | (Section written by [@phil-opp](https://github.com/phil-opp)) 85 | 86 | In June, I pushed two small improvements to the `blog_os` repository and the _Writing an OS in Rust_ blog: 87 | 88 | - [Create a testable trait for printing test messages automatically](https://github.com/phil-opp/blog_os/pull/816). This required updates to some blog posts: 89 | - [Update Testing post to use Testable trait for automatic printing](https://github.com/phil-opp/blog_os/pull/817) 90 | - Update remaining posts: [Remove superfluous printing from tests](https://github.com/phil-opp/blog_os/pull/819) 91 | - [Do a volatile read in stack_overflow test to avoid tail recursion](https://github.com/phil-opp/blog_os/pull/818). This required an update to the _Double Faults_ post: 92 | - [Update Double Faults post to prevent tail recursion in test](https://github.com/phil-opp/blog_os/pull/820) 93 | 94 | There were also [lots of small contributions](https://github.com/phil-opp/blog_os/pulls?q=is%3Apr+is%3Aclosed+merged%3A2020-06-01..2020-07-01) this month that fixed typos and dead links and updated the Chinese translation. Thanks a lot to all contributors! 95 | 96 | ## Join Us? 97 | 98 | 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). 99 | -------------------------------------------------------------------------------- /content/this-month/2020-09/blog_os-rewrite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/this-month/2020-09/blog_os-rewrite.png -------------------------------------------------------------------------------- /content/this-month/2020-10/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (October 2020)" 3 | date = 2020-11-07 4 | 5 | [extra] 6 | month = "October 2020" 7 | authors = [ 8 | "phil-opp", 9 | # add yourself here 10 | ] 11 | +++ 12 | 13 | Welcome to a new issue of _"This Month in Rust OSDev"_. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem. 14 | 15 | 16 | 17 | 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). 18 | 19 | 26 | 27 | ## Project Updates 28 | 29 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 30 | 31 | [`rust-osdev`]: https://github.com/rust-osdev/about 32 | 33 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 34 | 35 | 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. 36 | 37 | In October, we merged following changes: 38 | 39 | - [Provide functions for accessing the underlying L4 table for mapper types](https://github.com/rust-osdev/x86_64/pull/184) 40 | - [Make `GlobalDescriptorTable::add_entry` a const fn](https://github.com/rust-osdev/x86_64/pull/191) 41 | - [Update docs to suggest `TryFrom` trait](https://github.com/rust-osdev/x86_64/pull/198) 42 | 43 | Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! We plan to publish the above changes as [version `0.12.3`](https://github.com/rust-osdev/x86_64/pull/200) in the next few days. 44 | 45 | ### [`volatile`](https://github.com/rust-osdev/volatile) 46 | 47 | 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 or framebuffers. 48 | 49 | In October, we published a new version to fix the crate's `unstable` feature on newer Rust nightlies: 50 | 51 | - [Change `slice::check_range` to `RangeBounds::assert_len`](https://github.com/rust-osdev/volatile/pull/16) (published as `v0.4.2`) 52 | 53 | Thanks to [@vetio](https://github.com/vetio) for this contribution! 54 | 55 | 56 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 57 | 58 | The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we published versions `0.9.9` to `0.9.11` to fix build errors on the latest nightlies, caused by the new feature gate names for some `const fn` features. 59 | 60 | We we didn't merge any changes to the `master` branch this month, we made more progress on the rewrite that adds UEFI support: There is now a [draft pull request](https://github.com/rust-osdev/bootloader/pull/130) that tracks the remaining issues. 61 | 62 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 63 | 64 | The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. In October, we merged the following changes: 65 | 66 | - [Made `panic_handler` optional](https://github.com/rust-osdev/uefi-rs/pull/179) 67 | - [Fix Clippy lints](https://github.com/rust-osdev/uefi-rs/pull/180) 68 | 69 | Thanks to [@Swampman08](https://github.com/Swampman08) for their contribution! 70 | 71 | 72 | ### [`pci_types`](https://github.com/rust-osdev/pci_types) 73 | 74 | The `pci_types` 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 75 | between projects, and would benefit from community contributions. 76 | 77 | This month, we published version `0.2.0` with the following changes: 78 | 79 | - [Untie accessor from the actual PciHeader type](https://github.com/rust-osdev/pci_types/commit/e1201d7d8986ff1133e2880b0ba62a3b2d7d891b) 80 | - [Split out endpoint header to separate struct](https://github.com/rust-osdev/pci_types/commit/d9cd5809148084d31fe5cc6ddbb5c8129bf23dae) 81 | - [Provide method for accessing BARs on endpoint headers](https://github.com/rust-osdev/pci_types/commit/aeb1b249cf6e4563b815011f7ed759198b283405) 82 | 83 | 84 | ### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) 85 | 86 | The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we merged the following changes: 87 | 88 | - [Document `build-std-features` flag for Cargo's `build-std` feature](https://github.com/rust-osdev/cargo-xbuild/pull/95) 89 | - [Upgrade the crate to edition 2018](https://github.com/rust-osdev/cargo-xbuild/pull/97) (published as `v0.6.3`) 90 | 91 | Thanks to [@luqmana](https://github.com/luqmana) and [@koushiro](https://github.com/koushiro) for these contributions! 92 | 93 | Even though we still maintain the `cargo-xbuild` crate, we recommend switching to cargo's own `build-std` 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 [in our Readme](https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo). 94 | 95 | ## Personal Projects 96 | 97 | In this section, we describe updates to personal 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. 98 | 99 | ### [`rust-embedded/rust-raspberrypi-OS-tutorials`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) 100 | 101 | (Section written by [@andre-richter](https://github.com/andre-richter)) 102 | 103 | The [_Operating System development tutorials in Rust on the Raspberry Pi_](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) project now provides [Tutorial 15 - `Virtual Memory Part 2: MMIO Remap`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/15_virtual_mem_part2_mmio_remap). 104 | 105 | It introduces a first set of changes which are eventually needed for separating `kernel` and `user` address spaces: 106 | - The memory mapping strategy gets more sophisticated and no longer `identity maps` the _whole_ of the board's address space. 107 | - Instead, only ranges that are actually needed are mapped: 108 | - The `kernel binary` stays `identity mapped` for now. 109 | - Device `MMIO regions` are remapped lazily to a special virtual address region at the top of the virtual address space during the device driver's `init()`. 110 | 111 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 112 | 113 | (Section written by [@phil-opp](https://github.com/phil-opp)) 114 | 115 | This month, the _Writing an OS in Rust_ series received the following updates: 116 | 117 | - [Remove rlibc and use compiler-builtins-mem feature](https://github.com/phil-opp/blog_os/pull/865) 118 | - [Update `post-04` to use compiler_builtins `mem` feature instead of `rlibc`](https://github.com/phil-opp/blog_os/pull/868) 119 | - [Update blog to use `mem` feature of `compiler_builtins`](https://github.com/phil-opp/blog_os/pull/866) 120 | - [Translate post 02 to Japanese](https://github.com/phil-opp/blog_os/pull/871) 121 | - The translated post is now [published](https://os.phil-opp.com/ja/minimal-rust-kernel/). 122 | - [Add Right-to-Left support for template](https://github.com/phil-opp/blog_os/pull/875) in preparation for a Persian translation 123 | 124 | See [the merged pull request list](https://github.com/phil-opp/blog_os/pulls?q=is%3Apr+is%3Aclosed+merged%3A2020-10-01..2020-11-01) for the complete set of changes this month. Thanks a lot to all contributors! 125 | 126 | In case you speak Persian: There is currently an open pull request to [add a Persian translation of `Bare Bones` chapter](https://github.com/phil-opp/blog_os/pull/878) that needs reviews. Thanks to everyone involved! 127 | 128 | In [in our previous status update](@/this-month/2020-09/index.md#phil-opp-blog-os) I described my plans to rewrite the blog on top of the upcoming UEFI bootloader. In the past month I started rewriting the _Minimal Rust Kernel_ post for this. Unfortunately, I'm still facing build-related issues because of [limitations of Cargo's config files](https://github.com/rust-lang/cargo/pull/8757#issuecomment-713897532). To resolve these (and other) `.cargo/config` issues, I created a proposal on the Rust internals forum to [make some `.cargo/config` options available in `Cargo.toml` too](https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336). Feel free to join the discussion if it's relevant to you! 129 | 130 | ## Join Us? 131 | 132 | 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). 133 | -------------------------------------------------------------------------------- /content/this-month/2020-11/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (November 2020)" 3 | date = 2020-12-10 4 | 5 | [extra] 6 | month = "November 2020" 7 | authors = [ 8 | "phil-opp", 9 | "IsaacWoods", 10 | # add yourself here 11 | ] 12 | +++ 13 | 14 | Welcome to a new issue of _"This Month in Rust OSDev"_. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem. 15 | 16 | 17 | 18 | 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). 19 | 20 | 27 | 28 | ## Project Updates 29 | 30 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 31 | 32 | [`rust-osdev`]: https://github.com/rust-osdev/about 33 | 34 | ### [`acpi`](https://github.com/rust-osdev/acpi) 35 | 36 | The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern 37 | computers use to relay information about the hardware to the OS. In November, we started fuzzing the AML parser to 38 | help find inputs that crash it and we [found](https://github.com/rust-osdev/acpi/commit/56472490c9564b6740eb5e416624d73be8841faa) 39 | [a](https://github.com/rust-osdev/acpi/commit/5ab486d1a8a8a8160025b88e369e22dc8d993273) [few](https://github.com/rust-osdev/acpi/commit/747bcfd28d44bbdfd39ad4805bba574ac320daf8). 40 | We even found [a case](https://github.com/rust-osdev/acpi/commit/52b05fd91ebb40e9c5511d568b19cb5f10b33d83) where 41 | we'd misinterpreted the spec. This is an important task for the project, as the AML parser will often run in 42 | kernelspace, and so should not panic from any input, however invalid (some more work is needed to make this the 43 | case, however). 44 | 45 | [Lexicographic comparison was also implemented for `Buffer` and `String` AML objects](https://github.com/rust-osdev/acpi/commit/6d2045de3acb9b74347ac6ce9ad01051be7bea82), 46 | which means we should now be able to perform all comparisons tables are allowed to make (bar some object 47 | conversions, which still need some work). 48 | 49 | The changes this month, as well as some made in December that should improve compile speed a little, have been 50 | published as [`aml v0.10.0`](https://crates.io/crates/aml). 51 | 52 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 53 | 54 | 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. 55 | 56 | In November, we merged the following updates: 57 | 58 | - [Don't deny warnings on CI](https://github.com/rust-osdev/x86_64/pull/201) 59 | - [Rename `enable_interrupts_and_hlt` to `enable_and_hlt`](https://github.com/rust-osdev/x86_64/pull/206) 60 | - [Release version 0.12.3](https://github.com/rust-osdev/x86_64/pull/200) 61 | 62 | Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! 63 | 64 | ### [`multiboot2`](https://github.com/rust-osdev/multiboot2-elf64) 65 | 66 | The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. We merged the following updates this month: 67 | 68 | - [Access to non-available memory areas](https://github.com/rust-osdev/multiboot2-elf64/pull/71) (published as `v0.10.0`) 69 | - [Fix a few warnings](https://github.com/rust-osdev/multiboot2-elf64/commit/a1237bcf357e5d4a5a6c40038fd1e690ef7305d9) (published as `v0.10.1`) 70 | 71 | Thanks to [@CalebLBaker](https://github.com/CalebLBaker) for their contribution! 72 | 73 | ## Personal Projects 74 | 75 | In this section, we describe updates to personal 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. 76 | 77 | ### [`IsaacWoods/pebble`](https://github.com/IsaacWoods/pebble) 78 | 79 | (Section written by [@IsaacWoods](https://github.com/IsaacWoods)) 80 | 81 | Between university and work on `acpi`, I haven't had a huge amount of time to work on Pebble for the last couple of 82 | months, but in November I: 83 | - Implemented a basic form of [TLS](https://en.wikipedia.org/wiki/Thread-local_storage) for userspace tasks. Pebble 84 | doesn't have threads, but an Address Space can have multiple Tasks running from the same image, each of which 85 | need their copy of the master TLS record. TLS support is also needed very early in Rust's `std`, so this was the 86 | next step in creating a `std` implementation for Pebble. 87 | - Tried to fix a bug in Pebble's UEFI bootloader, where we crash if memory allocated to Boot Services is unmapped 88 | after `ExitBootServices`. This may be a bug in OVMF - please get in touch if you've come across something 89 | similar and know what's going on! 90 | - Continued work on the USB XHCI driver 91 | - Improved detection of Intel microarchitectures - we can now differentiate Kaby Lake and Coffee Lake processors 92 | based on their `cpuid` steppings 93 | 94 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 95 | 96 | (Section written by [@phil-opp](https://github.com/phil-opp)) 97 | 98 | In November, we merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog: 99 | 100 | - [Add Right-to-Left support for template](https://github.com/phil-opp/blog_os/pull/875) 101 | - [Add Persian translation for posts of `Bare Bone` Chapter](https://github.com/phil-opp/blog_os/pull/878) 102 | - [Show all available languages](https://github.com/phil-opp/blog_os/pull/880) 103 | - [Emphasize moving code](https://github.com/phil-opp/blog_os/pull/883) 104 | 105 | Thanks to [@hamidrezakp](https://github.com/hamidrezakp), [@Undin](https://github.com/Undin), and [@briankung](https://github.com/briankung) for their contributions! 106 | 107 | 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 `.cargo/config` files for specifying defaults. See my comment on GitHub for [more details on the problem](https://github.com/rust-lang/cargo/pull/8757#issuecomment-713897532). 108 | 109 | To solve this issue, I created a proposal on the Rust internals forum to [_move some cargo config settings to `Cargo.toml`_](https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336). While it is still not implemented yet, the great news is that the proposal was [approved by the Cargo team](https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336/14) 🎉! 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. 110 | 111 | ### [`lucis-fluxum/ps2-rs`](https://github.com/lucis-fluxum/ps2-rs) 112 | 113 | (Section written by [@lucis-fluxum](https://github.com/lucis-fluxum)) 114 | 115 | This is a new library I created to provide OS kernels with low-level access to the PS/2 controller and devices. It 116 | uses a poll-based approach with a timeout to read and write data to the IO ports. 117 | 118 | While some of the library's functionality won't work on modern devices due to differing implementations of PS/2 119 | emulation between manufacturers, it should be enough to get initialized and receiving scancodes and mouse events. 120 | Theoretically, it should work with PS/2-compatible keyboards all the way back to the IBM Model M! 121 | 122 | ## Join Us? 123 | 124 | 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). 125 | -------------------------------------------------------------------------------- /content/this-month/2021-01/blog-os-uefi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/this-month/2021-01/blog-os-uefi.jpg -------------------------------------------------------------------------------- /content/this-month/2021-01/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (January 2021)" 3 | date = 2021-02-06 4 | 5 | [extra] 6 | month = "January 2021" 7 | authors = [ 8 | "phil-opp", 9 | # add yourself here 10 | ] 11 | +++ 12 | 13 | Welcome to a new issue of _"This Month in Rust OSDev"_. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem. 14 | 15 | 16 | 17 | 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 _comment form_ at the bottom of this page. 18 | 19 | 26 | 27 | ## Showcase 28 | 29 | We started a new [_Showcase_](https://rust-osdev.com/showcase/) section this month, where we introduce and present interesting Rust OSDev projects. The first post of this section is: 30 | 31 | - [The `RustyHermit` Unikernel](@/showcase/hermit/index.md) written by [@stlankes](https://github.com/stlankes) 32 | 33 | If you like to present your project too, just let us know! 34 | 35 | ## Project Updates 36 | 37 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 38 | 39 | [`rust-osdev`]: https://github.com/rust-osdev/about 40 | 41 | 42 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 43 | 44 | The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. While we didn't merge any commits to our `main` branch this month, we made good process on the [UEFI rewrite](https://github.com/rust-osdev/bootloader/pull/130): 45 | 46 | - [Update uefi crate to v0.7.0](https://github.com/rust-osdev/bootloader/commit/06f41a28c3227ea28e3d99c12237461b92130d07) 47 | - [Add bootloader version to boot info](https://github.com/rust-osdev/bootloader/commit/0c33cec02a897585bf21d21bac5e1e72854b0a18) 48 | - [Make boot info FFI-safe](https://github.com/rust-osdev/bootloader/commit/86d1db72fd334e34dcfc17c78540b8365a974199) 49 | - [Start providing API docs for all public items](https://github.com/rust-osdev/bootloader/commit/92b069a3414f423789e9921107120c7231608360) 50 | - [Add a test that checks boot info values](https://github.com/rust-osdev/bootloader/commit/dc1267b73faeb40fd0ee33f03331f3439f545b34) 51 | - [Create FAT file system image from `.efi` image](https://github.com/rust-osdev/bootloader/commit/2ac0c8260ca2838ec461ea3a390a383f3cc82958) 52 | - [Create a GPT disk image with an UEFI boot partition](https://github.com/rust-osdev/bootloader/commit/c7828d311f25acc4b9929ce80aadbea197cf5dd0) 53 | - [Only copy first level 4 entry to bootloader page table](https://github.com/rust-osdev/bootloader/commit/14c4e62adb6e05128755646d7fd5f6990a2385c9) 54 | 55 | 56 | ### [`acpi`](https://github.com/rust-osdev/acpi) 57 | 58 | The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern 59 | computers use to relay information about the hardware to the OS. In January, we added some updates to the `aml` crate: 60 | 61 | - [Parse DefNoop](https://github.com/rust-osdev/acpi/commit/8b5b45795be895eab21a8c5b23978a0c4ce8f11f) 62 | - [Parse DefBreakPoint](https://github.com/rust-osdev/acpi/commit/e4b49be7befca30dcc53b6b1a0c78793e928941a) 63 | - [Implement DefAdd](https://github.com/rust-osdev/acpi/commit/2fec65aacf5ddc962c87274561f764beb4c69b33) 64 | - [Fix lack of store in DefAnd](https://github.com/rust-osdev/acpi/commit/501b18023cc8c1f9ae0739ed5075df3ba9861b83) 65 | 66 | ### [`uart_16550`](https://github.com/rust-osdev/uart_16550) 67 | 68 | The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. The crate received the following maintenance update in January: 69 | 70 | - [Use stabilized `hint::spin_loop` instead of deprecated `atomic::spin_loop_hint`](https://github.com/rust-osdev/uart_16550/commit/cd497a98dabc66ba151218451d07f856950d443d) 71 | 72 | 73 | ### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) 74 | 75 | The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we fixed an error that occurred in combination with the `XARGO_RUST_SRC` environment variable: 76 | 77 | - [Ensure copied Cargo.lock is writable](https://github.com/rust-osdev/cargo-xbuild/pull/98) (published as `v0.6.5`) 78 | 79 | Thanks to [@astro](https://github.com/astro) for this contribution! 80 | 81 | Even though we still maintain the `cargo-xbuild` crate, we recommend switching to cargo's own `build-std` 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 [in our Readme](https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo). 82 | 83 | ### [`rusty-hermit`](https://crates.io/crates/rusty-hermit) 84 | 85 | RustyHermit is a unikernel targeting a scalable and predictable runtime for high-performance and cloud computing. 86 | This month, we revise the paravirtualized network driver (virtio) and add a simple driver for RTL8139, which Qemu is able to emulate. 87 | With the support of [KubeVirt](https://kubevirt.io), Kubernetes is able to orchestrate RustyHermit applications. 88 | As [simple show](https://rusty-hermit.k8s.eonerc.rwth-aachen.de/) case is explained in [RustyHermit's wiki](https://github.com/hermitcore/rusty-hermit/wiki/RustyHermit-on-K8S). 89 | 90 | Thanks to [@tlambertz](https://github.com/tlambertz) and [@mustermeiszer](https://github.com/mustermeiszer) for the contribution! 91 | ## Personal Projects 92 | 93 | In this section, we describe updates to personal 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. 94 | 95 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 96 | 97 | (Section written by [@phil-opp](https://github.com/phil-opp)) 98 | 99 | We made good progress on the Persian and Japanese translations of the ["Writing an OS in Rust"](https://os.phil-opp.com/) blog this month: 100 | 101 | - [Make index page translatable](https://github.com/phil-opp/blog_os/pull/899) 102 | - [Improve multilingual support and Persian translation](https://github.com/phil-opp/blog_os/pull/901) 103 | - [Persian translation of chapter Interrupts](https://github.com/phil-opp/blog_os/pull/904) 104 | - [Fix layout of right-to-left in homepage and tables](https://github.com/phil-opp/blog_os/pull/896) 105 | - [Adding tracking issue for Persian](https://github.com/phil-opp/blog_os/pull/909) 106 | - [Translate post-04 to Japanese](https://github.com/phil-opp/blog_os/pull/903) 107 | - [Translate common texts into Japanese](https://github.com/phil-opp/blog_os/pull/905) 108 | - [Translate the index page to Japanese](https://github.com/phil-opp/blog_os/pull/907) 109 | 110 | Thanks to [@hamidrezakp](https://github.com/hamidrezakp), [@MHBahrampour](https://github.com/MHBahrampour), [@woodyZootopia](https://github.com/woodyZootopia), and [@JohnTitor](https://github.com/JohnTitor) for creating the translations! 111 | 112 | In addition to the new translations, we merged the following improvements: 113 | 114 | - [Improve explanation for `BootInfoFrameAllocator::usable_frames`](https://github.com/phil-opp/blog_os/pull/897) 115 | - [Added note to specify version 0.2.6 of volatile](https://github.com/phil-opp/blog_os/pull/910) 116 | - [Remove unused import](https://github.com/phil-opp/blog_os/pull/898) 117 | - [Fix typo](https://github.com/phil-opp/blog_os/pull/900) 118 | - [Remove trailing comma in JSON example](https://github.com/phil-opp/blog_os/pull/912) 119 | - [Fix memory address in self-referential struct example](https://github.com/phil-opp/blog_os/commit/cd8e139ab0e3c7cd47de1845c354fc7ddfad4887) 120 | 121 | Thanks to [@delta1](https://github.com/delta1), [@NickSchmitt](https://github.com/NickSchmitt), [@nana0-0](https://github.com/nana0-0), and [@EvanMu96](https://github.com/EvanMu96) for these contributions! 122 | 123 | #### Third Edition 124 | 125 | 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. 126 | 127 | As mentioned above, we added support for UEFI disk image creation to the new `bootloader` version this month. This made it finally possible to start the rewritten `blog_os` code in UEFI mode on real hardware: 128 | 129 | ![Photo of the laptop display, showing some text output](blog-os-uefi.jpg) 130 | 131 | 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 [`font8x8`](https://docs.rs/font8x8/0.2.7/font8x8/) 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). 132 | 133 | 134 | 135 | ## Join Us? 136 | 137 | 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). 138 | -------------------------------------------------------------------------------- /content/this-month/2021-02/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (February 2021)" 3 | date = 2021-03-08 4 | 5 | [extra] 6 | month = "February 2021" 7 | authors = [ 8 | "phil-opp", 9 | # add yourself here 10 | ] 11 | +++ 12 | 13 | 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. 14 | 15 | 16 | 17 | 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 _comment form_ at the bottom of this page. 18 | 19 | 26 | 27 | ## Project Updates 28 | 29 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 30 | 31 | [`rust-osdev`]: https://github.com/rust-osdev/about 32 | 33 | 34 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 35 | 36 | The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. In February, we merged the following changes: 37 | 38 | - [Add helper function for retrieving the boot filesystem](https://github.com/rust-osdev/uefi-rs/pull/201) 39 | - [Add support for the block I/O protocol](https://github.com/rust-osdev/uefi-rs/pull/200) 40 | - [Update `x86_64` dependency to version 0.13.2](https://github.com/rust-osdev/uefi-rs/pull/198) (to fix nightly breakage) 41 | - [Fix some issues with the documentation of the `DevicePath` and `LoadedImage` protocols](https://github.com/rust-osdev/uefi-rs/pull/193) 42 | 43 | Thanks to [@gil0mendes](https://github.com/gil0mendes), [@sreehax](https://github.com/sreehax), and [@avirule](https://github.com/avirule) for their contributions! 44 | 45 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 46 | 47 | 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. 48 | 49 | In February, the unstable [`const_in_array_repeat_expressions` feature](https://github.com/rust-lang/rust/issues/49147) was [removed](https://github.com/rust-lang/rust/pull/80404) from Rust because it [implicitly changed drop behavior](https://github.com/rust-lang/rust/issues/49147#issuecomment-766372999). This lead to a compile error of the `x86_64` crate because it still had that feature enabled. Interestingly, we no longer needed this feature after [#175](https://github.com/rust-osdev/x86_64/pull/175) (and an [accidental stabilization](https://github.com/rust-lang/rust/pull/79270) in Rust), so the fix was quite simple: 50 | 51 | - [Fix build on latest nightly](https://github.com/rust-osdev/x86_64/pull/230) (published as `v0.13.2`) 52 | 53 | Thanks to [@KernelFreeze](https://github.com/KernelFreeze) for this contribution! 54 | 55 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 56 | 57 | The `bootloader` 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: 58 | 59 | - [Fix build on latest nightly by updating x86_64 to v0.13.2](https://github.com/rust-osdev/bootloader/pull/135) (published as `v0.9.12`) 60 | - [Fix "panic message is not a string literal"](https://github.com/rust-osdev/bootloader/pull/138) (published as `v0.9.14`) 61 | 62 | Thanks to [@dspencer12](https://github.com/dspencer12) for their contribution! 63 | 64 | There was also some more progress on the `uefi` branch, which contains the upcoming new bootloader version with UEFI support: 65 | 66 | - [Improve reporting of config parse errors](https://github.com/rust-osdev/bootloader/commit/d55f1c87c34e8bba61adc6abffa78ba431aac69f) 67 | - [Add a test for the `map-physical-memory` config key](https://github.com/rust-osdev/bootloader/commit/6a0fd74ecb052ef3f1fa7ce3e556c895c66dfc4e) 68 | - Add more checks for the given `--kernel-manifest` path: it should [point to a file named `Cargo.toml`](https://github.com/rust-osdev/bootloader/commit/38fd48622c3a6f22d64a65528a56d2471168cb78), [exist](https://github.com/rust-osdev/bootloader/commit/9a8ace78650d75189d567618a90a4f039525f369), and the referenced `Cargo.toml` should [depend on the bootloader crate](https://github.com/rust-osdev/bootloader/commit/873351c575bdefd1c6c78b27de2bc0494698c0d5). 69 | 70 | The UEFI rewrite is almost done, but we still need to update the docs, improve the configurability of the framebuffer, and add more testing. 71 | 72 | ### [`uart_16550`](https://github.com/rust-osdev/uart_16550) 73 | 74 | The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. Since the crate also depends on `x86_64`, it needed a dependency update to fix the mentioned build error on the latest nightly: 75 | 76 | - [Fix build on nightly by updating to x86_64 v0.13.2](https://github.com/rust-osdev/uart_16550/pull/12) (published as `v0.2.12`) 77 | 78 | ### [`vga`](https://github.com/rust-osdev/vga) 79 | 80 | The work-in-progress `vga` 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 `x86_64` also affected this crate, so it needed a fix too: 81 | 82 | - [fix: should now compile](https://github.com/rust-osdev/vga/pull/20) (published as `v0.2.6`) 83 | 84 | Thanks to [@Pollux3737](https://github.com/Pollux3737) for this contribution! 85 | 86 | ## Personal Projects 87 | 88 | In this section, we describe updates to personal 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. 89 | 90 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 91 | 92 | (Section written by [@phil-opp](https://github.com/phil-opp)) 93 | 94 | The [_Writing an OS in Rust_](https://os.phil-opp.com/) blog received the following updates this month: 95 | 96 | - [Translate post-08 to Persian](https://github.com/phil-opp/blog_os/pull/913) 97 | - [Add ja translation for double faults](https://github.com/phil-opp/blog_os/pull/917) 98 | - [Update post to use x86_64 v0.13.2](https://github.com/phil-opp/blog_os/pull/920) 99 | - [Remove note on builtin memory optimizations](https://github.com/phil-opp/blog_os/pull/932) 100 | - [Remove it from Japanese translation as well](https://github.com/phil-opp/blog_os/pull/935) 101 | - [Minor fix in post 6](https://github.com/phil-opp/blog_os/pull/928) 102 | - [Fix typo](https://github.com/phil-opp/blog_os/pull/927) 103 | 104 | Thanks to [@MHBahrampour](https://github.com/MHBahrampour), [@garasubo](https://github.com/garasubo), [@dspencer12](https://github.com/dspencer12), [@toku-sa-n](https://github.com/toku-sa-n), and [@16yuki0702](https://github.com/16yuki0702) for their contributions! 105 | 106 | I also made some progress on the upcoming third edition. Some potentially interesting commits are: 107 | 108 | - [Finish first draft of 'Minimal Kernel' post](https://github.com/phil-opp/blog_os/commit/acb478c0b51b0cdf2124772aca00502f15d6cbb6) 109 | - [Simplify boot crate](https://github.com/phil-opp/blog_os/commit/aaae70974f180321ab8bc25eca2052f98695b39a) 110 | - [Add boilerplate for new 'UEFI Booting' post](https://github.com/phil-opp/blog_os/commit/c2fe9960a743bcb32d5a41e5a02e0f84266d950a) 111 | - [Explain how to create minimal UEFI app](https://github.com/phil-opp/blog_os/commit/033be9ac25a146eb4819d9c6799bd6362d97e036) 112 | - [Explain how to create FAT filesystem and GPT disk image](https://github.com/phil-opp/blog_os/commit/83be6c7868f269084ebe4758ad82db9d7f187061) 113 | 114 | ### [`cdrzewiecki/celos`](https://gitlab.com/cdrzewiecki/celos) 115 | 116 | (Section written by [@drzewiec](https://github.com/drzewiec)) 117 | 118 | I have been working on an OS following along with [@phil-opp](https://github.com/phil-opp)'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. 119 | 120 | 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 `font8x8` font into 8x12), but this is a great first step that I can build on. Next planned steps are: 121 | 122 | * Move the kernel in virtual memory so that it occupies the higher half of the 48-bit address space 123 | * 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) 124 | * Set up memory allocation for the kernel, to get heap allocation 125 | * Once heap allocation is in place, utilize some existing crate to handle TrueType fonts so that text will look a bit nicer on screen 126 | 127 | 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 [@phil-opp](https://github.com/phil-opp) for being so helpful in the osdev journey! 128 | 129 | ## Join Us? 130 | 131 | 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). 132 | -------------------------------------------------------------------------------- /content/this-month/2021-06/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (June 2021)" 3 | date = 2021-07-08 4 | 5 | [extra] 6 | month = "June 2021" 7 | authors = [ 8 | "phil-opp", 9 | "IsaacWoods", 10 | # add yourself here 11 | ] 12 | +++ 13 | 14 | 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. 15 | 16 | 17 | 18 | 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 _comment form_ at the bottom of this page. 19 | 20 | 27 | 28 | ## Project Updates 29 | 30 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 31 | 32 | [`rust-osdev`]: https://github.com/rust-osdev/about 33 | 34 | ### [`acpi`](https://github.com/rust-osdev/acpi) 35 | 36 | 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. 37 | 38 | This month, both the `rsdp` and `acpi` crates saw breaking changes. These changes should require minimal work to migrate to; 39 | please file an issue if you encounter any difficulties. (published as `rsdp v2.0.0` and `acpi v3.0.0`) 40 | 41 | - [Basic support for the MADT's new Multiprocessor Wakeup Structure was added](https://github.com/rust-osdev/acpi/pull/99) 42 | - [`PhysicalMapping` now implements `Send`](https://github.com/rust-osdev/acpi/pull/101) 43 | - [`PhysicalMapping`'s fields were made private, preventing construction of unsound mappings in safe code](https://github.com/rust-osdev/acpi/pull/102). 44 | The `unmap_physical_region` method of `AcpiHandler` also lost its `self` type - handlers that used `self` should 45 | instead access themselves through the `PhysicalMapping::handler` method. This prevents a mapping from being 46 | unmapped using a different handler to the one that mapped it. 47 | - [Accesses to potentially unaligned packed field were fixed](https://github.com/rust-osdev/acpi/commit/d58e64b39e9f22367bc76b64a68826a519615226). 48 | `repr(packed)` structures are very common in OS Dev, and make sure the layout of Rust's structures matches the 49 | hardware's. Unfortunately, they can be slightly tricky to work with - creating an unaligned reference is 50 | undefined behaviour, and references can transiently be created by, for example, calling a method on an unaligned 51 | field of a packed structure (e.g. `entry.flags.get_bit(4)`). You can read more about this issue [here](https://github.com/rust-lang/rust/issues/82523). 52 | - [`acpi::platform` no longer re-exports the contents of its `interrupt` submodule](https://github.com/rust-osdev/acpi/commit/fdd88add32497411d439c2d18fe28258a3fe6525) 53 | 54 | Thanks to [@wusyong](https://github.com/wusyong) and [@Freax13](https://github.com/wusyong) for their contributions! 55 | 56 | 57 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 58 | 59 | The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. In June, we merged the following changes: 60 | 61 | - [Make the `qemu-exit` dependency optional](https://github.com/rust-osdev/uefi-rs/pull/229) 62 | - [Fix type of the media field in the `BlockIO` protocol](https://github.com/rust-osdev/uefi-rs/pull/234) 63 | - [Use `newtype_enum` for `DevicePath` enums](https://github.com/rust-osdev/uefi-rs/pull/230) 64 | - [Make `DevicePath` and `AcpiDevicePath` unaligned](https://github.com/rust-osdev/uefi-rs/pull/231) 65 | - [Derive `Debug` for `CharConversionError`](https://github.com/rust-osdev/uefi-rs/pull/233) 66 | - [Rename boot services' `memset` to `set_mem`](https://github.com/rust-osdev/uefi-rs/pull/235) 67 | - [Implement image loading/starting](https://github.com/rust-osdev/uefi-rs/pull/237) 68 | - [Add `num_blocks` method to `GptPartitionEntry`](https://github.com/rust-osdev/uefi-rs/pull/238) 69 | - [`ShimLock` protocol uses `sysv64` function ABI](https://github.com/rust-osdev/uefi-rs/pull/227) 70 | - [Make using the `stdio` handles require a mutable ref](https://github.com/rust-osdev/uefi-rs/pull/240) 71 | - [Fix AArch64 build](https://github.com/rust-osdev/uefi-rs/pull/243) 72 | 73 | Thanks to [@nicholasbishop](https://github.com/nicholasbishop), [@iankronquist](https://github.com/iankronquist) and [@josephlr](https://github.com/josephlr) for their contributions! 74 | 75 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 76 | 77 | 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. 78 | 79 | In June, we merged the following changes: 80 | 81 | - [Add common abstractions for x86 Segments](https://github.com/rust-osdev/x86_64/pull/258) 82 | - [Specify sysv64 for the calling convention of the external assembly functions](https://github.com/rust-osdev/x86_64/pull/267) 83 | - [Make IDT module available on stable Rust](https://github.com/rust-osdev/x86_64/pull/271) 84 | - [Fix off-by-one error in GDT `from_raw_slice()`](https://github.com/rust-osdev/x86_64/pull/269) 85 | 86 | We did not issue a new crates.io release with these changes yet, but we plan to do so soon. 87 | 88 | Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! 89 | 90 | ## Call for Participation 91 | 92 | Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding 93 | issues in one of our projects and get started! 94 | 95 | 102 | 103 | **[`phil-opp/blog_os`](https://github.com/phil-opp/blog_os):** 104 | 105 | - [New Russian translation needs a reviewer](https://github.com/phil-opp/blog_os/pull/1029): We're looking for someone that is speaking Russian to review the new Russian translation of [@MrZloHex](https://github.com/MrZloHex). 106 | 107 | If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people 108 | getting started in this space, please [create a PR](https://github.com/rust-osdev/homepage/pulls) against the 109 | `next` branch with the tasks you want to include in the next issue. 110 | 111 | ## Personal Projects 112 | 113 | In this section, we describe updates to personal 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. 114 | 115 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 116 | 117 | (Section written by [@phil-opp](https://github.com/phil-opp)) 118 | 119 | The [_Writing an OS in Rust_](https://os.phil-opp.com/) blog received the following changes this month: 120 | 121 | - [Switch comments from utterances to giscus](https://github.com/phil-opp/blog_os/pull/996) 122 | - [giscus: Use specific search term instead of `og:title`](https://github.com/phil-opp/blog_os/pull/1007) 123 | - [giscus: Make it possible to set discussion thread manually per post](https://github.com/phil-opp/blog_os/pull/1010) 124 | - [Translate `post-12` to Japanese](https://github.com/phil-opp/blog_os/pull/977) 125 | - Lots of smaller improvements and typo fixes: [#1021](https://github.com/phil-opp/blog_os/pull/1021), [#1023](https://github.com/phil-opp/blog_os/pull/1023), [#1026](https://github.com/phil-opp/blog_os/pull/1026), [#1028](https://github.com/phil-opp/blog_os/pull/1028), [#1032](https://github.com/phil-opp/blog_os/pull/1032) 126 | 127 | Thanks to: 128 | 129 | - [@kahirokunn](https://github.com/kahirokunn) for the new Japanese translation, 130 | - [@woodyZootopia](https://github.com/woodyZootopia), [@JohnTitor](https://github.com/JohnTitor), and [@sozysozbot](https://github.com/sozysozbot) for reviewing this translation, and 131 | - [@Foo-x](https://github.com/Foo-x), [@tsao-chi](https://github.com/tsao-chi), and [@conorbros](https://github.com/conorbros) for fixing typos. 132 | 133 | 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! 134 | 135 | ## Join Us? 136 | 137 | 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). 138 | -------------------------------------------------------------------------------- /content/this-month/2021-07/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (July 2021)" 3 | date = 2021-08-07 4 | 5 | [extra] 6 | month = "July 2021" 7 | authors = [ 8 | "phil-opp", 9 | "IsaacWoods", 10 | "GabrielMajeri", 11 | # add yourself here 12 | ] 13 | +++ 14 | 15 | 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. 16 | 17 | 18 | 19 | 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 _comment form_ at the bottom of this page. 20 | 21 | 28 | 29 | ## Project Updates 30 | 31 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 32 | 33 | [`rust-osdev`]: https://github.com/rust-osdev/about 34 | 35 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 36 | 37 | The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. In July, we merged the following changes: 38 | 39 | - [Add support for getting/setting variables](https://github.com/rust-osdev/uefi-rs/pull/245) 40 | - [Better logger that includes filename and line](https://github.com/rust-osdev/uefi-rs/pull/246) 41 | - [device path: add constants for all subtypes](https://github.com/rust-osdev/uefi-rs/pull/250) 42 | - [device path: change the length type to u16](https://github.com/rust-osdev/uefi-rs/pull/251) 43 | - [Implement `BootServices::protocols_per_handle`](https://github.com/rust-osdev/uefi-rs/pull/253) 44 | - [Add method to get variable names](https://github.com/rust-osdev/uefi-rs/pull/254) 45 | - [Better `fmt::Debug` for `Time` struct + `fmt::Display`](https://github.com/rust-osdev/uefi-rs/pull/256) 46 | - [Fix `BltRegion::Full` bounds check](https://github.com/rust-osdev/uefi-rs/pull/257) 47 | - [Fix procedural macros](https://github.com/rust-osdev/uefi-rs/pull/260) 48 | - [device path: add header struct](https://github.com/rust-osdev/uefi-rs/pull/263) 49 | - [device path: add iter method and test](https://github.com/rust-osdev/uefi-rs/pull/264) 50 | 51 | Thanks to [@nicholasbishop](https://github.com/nicholasbishop), [@MaulingMoneky](https://github.com/MaulingMonkey), [@phip1611](https://github.com/phip1611) and [@necauqua](https://github.com/necauqua) for their contributions! 52 | 53 | ### [`acpi`](https://github.com/rust-osdev/acpi) 54 | 55 | 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. 56 | This month: 57 | 58 | - [Definitions were added for the FADT's fixed and architecture flags](https://github.com/rust-osdev/acpi/pull/103) 59 | - [Table signatures were added for more static tables](https://github.com/rust-osdev/acpi/pull/103) 60 | - [AML: support was added for the `DefPowerResource` opcode](https://github.com/rust-osdev/acpi/commit/7f6bb2ee53c9abb6c552434dbdb4e13cf38b6b26) 61 | - [AML: support was added for the `DefThermalZone` opcode](https://github.com/rust-osdev/acpi/commit/a55d82bad3e5b7ffd42d19487a57ca65359e3bad) 62 | - [AML: support was added for the `DefExternal` opcode](https://github.com/rust-osdev/acpi/commit/188d62fdab853c16e9c3e66bb183acc3e1c9f134) 63 | - [AML: support was added for the `DefConcat` opcode](https://github.com/rust-osdev/acpi/commit/6f92f675a4b0e21a5bc63edd99de1010efdb61fa) 64 | - [AML: support was added for the `DefConcatRes` opcode](https://github.com/rust-osdev/acpi/commit/a883868dd57473a61a095c56d3e7490dfe012700) 65 | - [AML: support was added for the `DefMid` opcode](https://github.com/rust-osdev/acpi/commit/a37008df127c6f2160c1a2ac3ba5f536f8616732) 66 | 67 | These changes were published as `acpi v3.1.0` and `aml v0.14.0`. Thanks to [@ethindp](https://github.com/ethindp) 68 | and [@toku-sa-n](https://github.com/toku-sa-n) for their contributions. 69 | 70 | ### [`multiboot2`](https://github.com/rust-osdev/multiboot2) 71 | 72 | The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. 73 | 74 | In July, our `multiboot2` maintenance team gained [@phip1611](https://github.com/phip1611) as a new member. Welcome! 75 | 76 | The following changes were merged this month: 77 | 78 | - [much improved debug output of BootInformation + enum TagType](https://github.com/rust-osdev/multiboot2/pull/76) (published as `v0.11.0`) 79 | - [Set up CI on Github Actions](https://github.com/rust-osdev/multiboot2/commit/1d7c0e21fe532550f5ee9757252881e18c88a063) 80 | - [Add multiboot2 magic number](https://github.com/rust-osdev/multiboot2/pull/77) 81 | - [Fixing future compiler error "unaligned_references" (82523)](https://github.com/rust-osdev/multiboot2/pull/82) 82 | - [Rust edition 2018 + formatting + clippy](https://github.com/rust-osdev/multiboot2/pull/84) 83 | - [**Breaking:** `load` returns a result now (no more assertions that could panic)](https://github.com/rust-osdev/multiboot2/pull/80) 84 | - [Renamed multiboot2 bootloader magic constant](https://github.com/rust-osdev/multiboot2/pull/85) 85 | - [Cargo toml prepare release v0.12 + changelog](https://github.com/rust-osdev/multiboot2/pull/87) (published as `v0.12.0`) 86 | - [Rename old Github urls in README](https://github.com/rust-osdev/multiboot2/pull/88) 87 | 88 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 89 | 90 | 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. 91 | 92 | In July, we merged the following improvements: 93 | 94 | - [feat(idt): make it available in the stable Rust](https://github.com/rust-osdev/x86_64/pull/271) 95 | - [gdt: Fix off-by-one error in from_raw_slice()](https://github.com/rust-osdev/x86_64/pull/269) 96 | - [Make align_up and align_down const](https://github.com/rust-osdev/x86_64/pull/270) 97 | - [Add a SelectorErrorCode to segment_not_present in IDT](https://github.com/rust-osdev/x86_64/pull/274) 98 | - [Add flags for CR0, CR4 and XCR0, as well as extra checks for modification of XCR0](https://github.com/rust-osdev/x86_64/pull/273) 99 | - [fix(Changelog.md): typo #278](https://github.com/rust-osdev/x86_64/pull/278) 100 | - [feat(instructions): define `tables::sgdt`](https://github.com/rust-osdev/x86_64/pull/279) 101 | - [Create a CI script for automated releases](https://github.com/rust-osdev/x86_64/pull/281) 102 | - [CI: Use more efficient crates.io API endpoint](https://github.com/rust-osdev/x86_64/pull/282) 103 | - [Release version to 0.14.4](https://github.com/rust-osdev/x86_64/pull/283) 104 | - [Rename XCr0 and CR4 flags](https://github.com/rust-osdev/x86_64/pull/275) 105 | 106 | Thanks to [@budde25](https://github.com/budde25) and [@toku-sa-n](https://github.com/toku-sa-n) for their contributions. 107 | 108 | ## Call for Participation 109 | 110 | Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding 111 | issues in one of our projects and get started! 112 | 113 | 117 | 118 | 119 | 120 | _No tasks were proposed for this section._ 121 | 122 | 123 | 124 | If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people 125 | getting started in this space, please [create a PR](https://github.com/rust-osdev/homepage/pulls) against the 126 | `next` branch with the tasks you want to include in the next issue. 127 | 128 | 129 | ## Personal Projects 130 | 131 | In this section, we describe updates to personal 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. 132 | 133 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 134 | 135 | (Section written by [@phil-opp](https://github.com/phil-opp)) 136 | 137 | This month, the [_Writing an OS in Rust_](https://os.phil-opp.com) blog received the following updates: 138 | 139 | - [Translate first two posts into Russian](https://github.com/phil-opp/blog_os/pull/1029) 140 | - Thanks to [@MrZloHex](https://github.com/MrZloHex) for the translation and [@SnejUgal](https://github.com/SnejUgal) and [@vdjagilev](https://github.com/vdjagilev) for reviewing! 141 | - [docs: update version of crates](https://github.com/phil-opp/blog_os/pull/1031) 142 | - [Replace MS doc link in german](https://github.com/phil-opp/blog_os/pull/1034) 143 | - Typo fixes in the [_Paging Implementation_](https://github.com/phil-opp/blog_os/pull/1032), [_Allocator Designs_](https://github.com/phil-opp/blog_os/pull/1040), and [_Async Await_](https://github.com/phil-opp/blog_os/pull/1036) posts. 144 | 145 | Thanks to [@Foo-x](https://github.com/Foo-x), [@adi-g15](https://github.com/adi-g15), [@Kalbiq](https://github.com/Kalbiq), and [@MrZloHex](https://github.com/MrZloHex) for their contributions. 146 | 147 | ## Join Us? 148 | 149 | 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). 150 | -------------------------------------------------------------------------------- /content/this-month/2021-09/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (September 2021)" 3 | date = 2021-10-07 4 | 5 | [extra] 6 | month = "September 2021" 7 | authors = [ 8 | "phil-opp", 9 | "phip1611", 10 | # add yourself here 11 | ] 12 | +++ 13 | 14 | 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. 15 | 16 | 17 | 18 | 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 _comment form_ at the bottom of this page. 19 | 20 | 27 | 28 | ## Project Updates 29 | 30 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 31 | 32 | [`rust-osdev`]: https://github.com/rust-osdev/about 33 | 34 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 35 | 36 | 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. 37 | 38 | In September, we merged the following changes: 39 | 40 | - [Add `clean_up` and `clean_up_with_filter`](https://github.com/rust-osdev/x86_64/pull/264) for deallocating unused page tables 41 | - [Add exception vector type](https://github.com/rust-osdev/x86_64/pull/303) 42 | - [Bump `bit_field` to 0.10.1](https://github.com/rust-osdev/x86_64/pull/306) 43 | - [Release version 0.14.5](https://github.com/rust-osdev/x86_64/pull/304) 44 | - [Move segment types into a new registers::segmentation module](https://github.com/rust-osdev/x86_64/pull/309) 45 | - [Release version 0.14.6](https://github.com/rust-osdev/x86_64/pull/310) 46 | 47 | Thanks to [@Freax13](https://github.com/Freax13), [@npmccallum](https://github.com/npmccallum), and [@mkroening](https://github.com/mkroening) for their contributions! 48 | 49 | 50 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 51 | 52 | The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. 53 | 54 | This month, we merged the following changes: 55 | 56 | - [Improve macro errors](https://github.com/rust-osdev/uefi-rs/pull/277) 57 | - [Implement missing methods of `DebugSupport`](https://github.com/rust-osdev/uefi-rs/pull/290) 58 | - [macros: add compilation tests](https://github.com/rust-osdev/uefi-rs/pull/286) 59 | - [Remove attribute to enable `const_panic`](https://github.com/rust-osdev/uefi-rs/pull/296) 60 | - [Add a test command to build.py and also use it in the CI](https://github.com/rust-osdev/uefi-rs/pull/283) 61 | 62 | Thanks to [@necauqua](https://github.com/necauqua) and [@timrobertsdev](https://github.com/timrobertsdev) for their contributions! 63 | 64 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 65 | 66 | The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. 67 | 68 | We finally merged a long-desired feature this month: 69 | 70 | - [Framebuffer configuration](https://github.com/rust-osdev/bootloader/pull/179) (published as `v0.10.9`) 71 | 72 | Thanks to [@anellie](https://github.com/anellie) for this contribution! 73 | 74 | ### [`multboot2`](https://github.com/rust-osdev/multiboot2) 75 | 76 | The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. 77 | 78 | It is now part of a workspace and lives next to the new crate `multiboot2-header`. 79 | 80 | The following changes were merged this month: 81 | 82 | - [Code style improvements + optional CI job (clippy, rustfmt, rustdoc)](https://github.com/rust-osdev/multiboot2/pull/92) 83 | - [std in tests; hash for TagType](https://github.com/rust-osdev/multiboot2/pull/94) 84 | - [editorconfig file](https://github.com/rust-osdev/multiboot2/pull/93) 85 | - [prepared cargo workspace, as discussed in PR #79](https://github.com/rust-osdev/multiboot2/pull/86) 86 | 87 | The changes were published as `v0.12.2`. 88 | 89 | 90 | ### [`multboot2-header`](https://github.com/rust-osdev/multiboot2) (**new**) 91 | 92 | The `multiboot2-header` crate provides abstraction types for the Multiboot2 header 93 | and a builder struct to construct these headers. The corresponding repository was 94 | prepared ([#86](https://github.com/rust-osdev/multiboot2/pull/86)) and the initial release 95 | is expected in early October. See [#95](https://github.com/rust-osdev/multiboot2/pull/95) for more details. 96 | 97 | 98 | ## Call for Participation 99 | 100 | Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding 101 | issues in one of our projects and get started! 102 | 103 | 107 | 108 | - [(`phil-opp/blog_os`) Looking for a reviewer for a French translation](https://github.com/phil-opp/blog_os/pull/1053) 109 | 110 | 117 | 118 | If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people 119 | getting started in this space, please [create a PR](https://github.com/rust-osdev/homepage/pulls) against the 120 | `next` branch with the tasks you want to include in the next issue. 121 | 122 | 123 | ## Personal Projects 124 | 125 | In this section, we describe updates to personal 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. 126 | 127 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 128 | 129 | (Section written by [@phil-opp](https://github.com/phil-opp)) 130 | 131 | We merged two small fixes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: 132 | 133 | - [Fix typos in code examples in Async/Await post](https://github.com/phil-opp/blog_os/pull/1051) 134 | - [Fix link syntax in Russian translation](https://github.com/phil-opp/blog_os/pull/1046) 135 | 136 | Thanks to [@jongillham](https://github.com/jongillham) and [@non-descriptive](https://github.com/non-descriptive) for these contributions! 137 | 138 | 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. 139 | 140 | ## Join Us? 141 | 142 | 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). 143 | -------------------------------------------------------------------------------- /content/this-month/2021-10/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (October 2021)" 3 | date = 2021-11-08 4 | 5 | [extra] 6 | month = "October 2021" 7 | authors = [ 8 | "phil-opp", 9 | "phip1611", 10 | "IsaacWoods", 11 | # add yourself here 12 | ] 13 | +++ 14 | 15 | 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. 16 | 17 | 18 | 19 | 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 _comment form_ at the bottom of this page. 20 | 21 | 28 | 29 | ## Project Updates 30 | 31 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 32 | 33 | [`rust-osdev`]: https://github.com/rust-osdev/about 34 | 35 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 36 | 37 | The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. 38 | 39 | We merged the following PRs this month: 40 | 41 | - [Implement missing Event-related functions](https://github.com/rust-osdev/uefi-rs/pull/293) 42 | - [Remove attribute to enable `const_panic`](https://github.com/rust-osdev/uefi-rs/pull/296) 43 | - [Use build-std-features instead of rlibc](https://github.com/rust-osdev/uefi-rs/pull/298) 44 | - [Update `set_virtual_address_map()` to allow remapping of `SystemTable`](https://github.com/rust-osdev/uefi-rs/pull/301) 45 | - [Fix new clippy errors](https://github.com/rust-osdev/uefi-rs/pull/304) 46 | 47 | Thanks to [@timrobertsdev](https://github.com/timrobertsdev), [@YtvwlD](https://github.com/YtvwlD), and [@foxcob](https://github.com/foxcob) for their contributions! 48 | 49 | ### [`acpi`](https://github.com/rust-osdev/acpi) 50 | 51 | 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. 52 | 53 | This month, [support for the Boot Graphics Resource Table (BGRT)](https://github.com/rust-osdev/acpi/pull/113) table was added to `acpi`. This static table is 54 | passed from firmware to the OS to communicate information about the state of the screen when control is passed 55 | over, as lots of firmwares like to print display a logo when booting. (published as `acpi v4.1.0`) 56 | 57 | Thanks to [@ethindp](https://github.com/ethindp) for this contribution! 58 | 59 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 60 | 61 | 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. 62 | 63 | In October, we merged the following changes: 64 | 65 | - [Enable manipulation of `InterruptStackFrame`](https://github.com/rust-osdev/x86_64/pull/312) 66 | - [Fix docs for `page_table_index`](https://github.com/rust-osdev/x86_64/pull/318) 67 | 68 | Thanks to [@haraldh](https://github.com/haraldh) and [@Freax13](https://github.com/Freax13) for their contributions! 69 | 70 | ### [`multiboot2-header`](https://github.com/rust-osdev/multiboot2) (**new**) 71 | 72 | The `multiboot2-header` crate provides abstraction types for Multiboot2 headers, 73 | parsing utilities, and a builder to construct such headers. The initial release took 74 | place in early October and now is ready to be used. Because lots of code was published 75 | without any in-depth reviews, further testing and code reviews will be highly appreciated. 76 | 77 | ## Call for Participation 78 | 79 | Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding 80 | issues in one of our projects and get started! 81 | 82 | 86 | 87 | 88 | 89 | _No tasks were proposed for this section._ 90 | 91 | 92 | 93 | 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 [create a PR](https://github.com/rust-osdev/homepage/pulls) against the `next` branch with the tasks you want to include in the next issue. 94 | 95 | ## Personal Projects 96 | 97 | In this section, we describe updates to personal 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. 98 | 99 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 100 | 101 | (Section written by [@phil-opp](https://github.com/phil-opp)) 102 | 103 | We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: 104 | 105 | - [Add French translation for the first post](https://github.com/phil-opp/blog_os/pull/1053) 106 | - Thanks to [@Alekzus](https://github.com/Alekzus) for this contribution, and [@dallenng](https://github.com/dallenng) and [@CBenoit](https://github.com/CBenoit) for reviewing! 107 | - Published at . 108 | - [Improve our integration of the giscus comment system](https://github.com/phil-opp/blog_os/pull/1054) 109 | - [Use Iosevka font for code blocks and inline code](https://github.com/phil-opp/blog_os/pull/1056) 110 | - [Initial Dark Mode Support](https://github.com/phil-opp/blog_os/pull/1057) 🌑 111 | - [Implement a switch for switching between light and dark mode](https://github.com/phil-opp/blog_os/pull/1058) 112 | - [Remember chosen theme in `localStorage`, add a switch for going back to system theme, improve layout](https://github.com/phil-opp/blog_os/pull/1059) 113 | - [Use `crate-ci/typos` action to check for typos](https://github.com/phil-opp/blog_os/pull/1060) 114 | 115 | ## Join Us? 116 | 117 | 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). 118 | -------------------------------------------------------------------------------- /content/this-month/2021-11/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (November 2021)" 3 | date = 2021-12-06 4 | 5 | [extra] 6 | month = "November 2021" 7 | authors = [ 8 | "phil-opp", 9 | "berkus" 10 | # add yourself here 11 | ] 12 | +++ 13 | 14 | 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. 15 | 16 | 17 | 18 | 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 _comment form_ at the bottom of this page. 19 | 20 | 27 | 28 | ## Project Updates 29 | 30 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 31 | 32 | [`rust-osdev`]: https://github.com/rust-osdev/about 33 | 34 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 35 | 36 | The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. 37 | 38 | We merged the following PRs this month: 39 | 40 | - [loaded_image: document size argument unit](https://github.com/rust-osdev/uefi-rs/pull/308) 41 | - [Revert "Temporarily disable a false-positive clippy lint"](https://github.com/rust-osdev/uefi-rs/pull/312) 42 | - [Fix `locate_device_path` impl argument pointer](https://github.com/rust-osdev/uefi-rs/pull/310) 43 | - [Change `Handle` representation to be non-nullable so that `Option` is FFI-safe](https://github.com/rust-osdev/uefi-rs/pull/309) 44 | - [Improve `Handle` buffer handling code](https://github.com/rust-osdev/uefi-rs/pull/314) 45 | - [Add `CStr16::from_str_with_buf`](https://github.com/rust-osdev/uefi-rs/pull/291) 46 | - [Update and reorganize documentation](https://github.com/rust-osdev/uefi-rs/pull/315) 47 | - [Add flag to `build.py` for disabling KVM](https://github.com/rust-osdev/uefi-rs/pull/316) 48 | 49 | Thanks to [@necauqua](https://github.com/necauqua) and [@baloo](https://github.com/baloo) for their contributions! 50 | 51 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 52 | 53 | 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. 54 | 55 | In November, [@Freax13](https://github.com/Freax13) joined our `x86_64` maintenance team after doing [a lot of great work](https://github.com/rust-osdev/x86_64/pulls?q=is%3Apr+is%3Aclosed+author%3AFreax13) on the crate. Welcome! 56 | 57 | We merged the following non-breaking changes this month: 58 | 59 | - [Add `set_general_handler` macro](https://github.com/rust-osdev/x86_64/pull/285) 60 | - [Add the VMM Communication Exception (`#VC`) to the `InterruptDescriptorTable`](https://github.com/rust-osdev/x86_64/pull/313) 61 | - [Derive common traits for number, range and enum types](https://github.com/rust-osdev/x86_64/pull/315) 62 | - [Remove redundant alignment check](https://github.com/rust-osdev/x86_64/pull/314) 63 | - [fix(idt): fix panic messages for index and `#VC`](https://github.com/rust-osdev/x86_64/pull/321) 64 | 65 | We also merged a number of breaking changes that will go into the [upcoming 0.15 release](https://github.com/rust-osdev/x86_64/issues/262): 66 | 67 | - [Implement `Index` for IDT instead of `Index`](https://github.com/rust-osdev/x86_64/pull/319) 68 | - [Fix memory safety of `load_tss` and `GlobalDescriptorTable`](https://github.com/rust-osdev/x86_64/pull/323) 69 | - [Change type of `InterruptStackFrameValue::cpu_flags` to `RFlags`](https://github.com/rust-osdev/x86_64/pull/324) 70 | - [Add `InvalidStarSegmentSelectors` error type](https://github.com/rust-osdev/x86_64/pull/317) 71 | - [Add `PcidTooBig` error](https://github.com/rust-osdev/x86_64/pull/316) 72 | - [Activate `feature(asm_const)`](https://github.com/rust-osdev/x86_64/pull/320) 73 | 74 | Thanks to [@Freax13](https://github.com/Freax13), [@haraldh](https://github.com/haraldh), and [@mpajkowski](https://github.com/mpajkowski) for their contributions! 75 | 76 | ## Call for Participation 77 | 78 | Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding 79 | issues in one of our projects and get started! 80 | 81 | 85 | 86 | 87 | 88 | _No tasks were proposed for this section._ 89 | 90 | 91 | 92 | 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 [create a PR](https://github.com/rust-osdev/homepage/pulls) against the `next` branch with the tasks you want to include in the next issue. 93 | 94 | ## Personal Projects 95 | 96 | In this section, we describe updates to personal 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. 97 | 98 | ### [`metta-systems/vesper`](https://github.com/metta-systems/vesper) 99 | 100 | (Section written by [@berkus](https://github.com/berkus)) 101 | 102 | 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. 103 | 104 | 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. 105 | 106 | Since [rebooting to Rust](https://metta.systems/blog/reboot-to-rust/) 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. [Read the full article here](https://metta.systems/blog/osdev-tooling/). 107 | 108 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 109 | 110 | (Section written by [@phil-opp](https://github.com/phil-opp)) 111 | 112 | There were no visible changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) 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 `bootloader` crate. Instead of passing it via [a `package.metadata.bootloader` section](https://docs.rs/bootloader/0.10.9/bootloader/struct.Config.html) in the kernel's `Cargo.toml`, users will pass a configuration struct to the [`entry_point`](https://docs.rs/bootloader/0.10.9/bootloader/macro.entry_point.html) 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. 113 | 114 | I plan to simplify the build system further, but I'm currently waiting on some upcoming `cargo` features for that. In particular, I think that [_artifact dependencies_](https://github.com/rust-lang/cargo/pull/9992) and [_per-packet configuration_](https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336) options will be very useful for the project, especially the config options I mentioned in my [status update comment](https://github.com/phil-opp/blog_os/issues/1063#issuecomment-968341112) on GitHub. 115 | 116 | ## Join Us? 117 | 118 | 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). 119 | -------------------------------------------------------------------------------- /content/this-month/2022-01/framebuffer-font-noto-sans-mono.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/this-month/2022-01/framebuffer-font-noto-sans-mono.png -------------------------------------------------------------------------------- /content/this-month/2022-01/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev (January 2022)" 3 | date = 2022-02-03 4 | 5 | [extra] 6 | month = "January 2022" 7 | authors = [ 8 | "phil-opp", 9 | "ColinFinck", 10 | "phip1611", 11 | # add yourself here 12 | ] 13 | +++ 14 | 15 | 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. 16 | 17 | 18 | 19 | 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 _comment form_ at the bottom of this page. 20 | 21 | 28 | 29 | ## Project Updates 30 | 31 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 32 | 33 | [`rust-osdev`]: https://github.com/rust-osdev/about 34 | 35 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 36 | 37 | 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. 38 | 39 | In January, we merged the following pull requests: 40 | 41 | - [Add `Cr2::read_raw`](https://github.com/rust-osdev/x86_64/pull/334) 42 | - [Add support for `MXCSR` register](https://github.com/rust-osdev/x86_64/pull/336) 43 | - [Bump version to `0.14.8`](https://github.com/rust-osdev/x86_64/pull/339) 44 | 45 | Thanks to [@jarkkojs](https://github.com/jarkkojs) for their contribution! 46 | 47 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 48 | 49 | The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. 50 | 51 | This month, we merged the following changes: 52 | 53 | - [Use `set_reg` method of `CS`, `DS`, `ES` and `SS` segment structs](https://github.com/rust-osdev/bootloader/pull/211) 54 | - [Remove feature flag for `lang_items`, `asm` and `global_asm`](https://github.com/rust-osdev/bootloader/pull/210) (published as `v0.10.11`) 55 | - [Add support for position independent executables](https://github.com/rust-osdev/bootloader/pull/206) 56 | - [Logger: nicer font rendering into framebuffer](https://github.com/rust-osdev/bootloader/pull/213) 57 | - [Rework `UsedLevel4Entries`](https://github.com/rust-osdev/bootloader/pull/219) 58 | - [Add small doc-comment to `entry_point!` macro](https://github.com/rust-osdev/bootloader/pull/220) 59 | 60 | Thanks to [@abachmann](https://github.com/abachmann), [@Freax13](https://github.com/Freax13), [@phip1611](https://github.com/phip1611), and [@georglauterbach](https://github.com/georglauterbach) for their contributions! 61 | 62 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 63 | 64 | The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. 65 | 66 | We merged the following changes in January: 67 | 68 | - [Release version 0.14.0](https://github.com/rust-osdev/uefi-rs/pull/341) 69 | - [Release `uefi-services` version 0.11.0](https://github.com/rust-osdev/uefi-rs/pull/342) 70 | - [System Table and Handle: From-implementation to create objects from raw pointers](https://github.com/rust-osdev/uefi-rs/pull/338) 71 | - [Replace build.py with the xtask pattern](https://github.com/rust-osdev/uefi-rs/pull/335) 72 | - [Fix logs cut off after screenshot test](https://github.com/rust-osdev/uefi-rs/pull/336) 73 | - [Remove `vec_spare_capacity` nightly feature](https://github.com/rust-osdev/uefi-rs/pull/347) 74 | - [uefi-macros: fix new clippy lint](https://github.com/rust-osdev/uefi-rs/pull/350) 75 | 76 | Thanks to [@phip1611](https://github.com/phip1611) for their contribution! 77 | 78 | ### [`multiboot2`](https://github.com/rust-osdev/multiboot2) 79 | 80 | The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. 81 | The latest release of the `multiboot2`-crate is now `v.0.13.1` (was `v0.12.2`). It contains minor improvements, 82 | such as new getters that were originally missing. 83 | 84 | The combined diff of all changes can be found [here](https://github.com/rust-osdev/multiboot2/compare/multiboot2-header-v0.1.0...multiboot2-v0.13.1). 85 | 86 | ## Call for Participation 87 | 88 | Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding 89 | issues in one of our projects and get started! 90 | 91 | 95 | 96 | 97 | 98 | _No tasks were proposed for this section._ 99 | 100 | 101 | 102 | 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 [create a PR](https://github.com/rust-osdev/homepage/pulls) against the `next` branch with the tasks you want to include in the next issue. 103 | 104 | ## Other Projects 105 | 106 | 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. 107 | 108 | ### [`ntfs`](https://github.com/ColinFinck/ntfs) 109 | 110 | (Section written by [@ColinFinck](https://github.com/ColinFinck)) 111 | 112 | Colin Finck released an initial version of his [ntfs](https://github.com/ColinFinck/ntfs) crate this month, a Rust library to access Microsoft's proprietary NTFS filesystem. 113 | 114 | For those of you who are not running Windows: 115 | NTFS is the primary filesystem in Windows, from Windows NT's release in 1993 up to the current Windows 11. 116 | 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). 117 | 118 | The ntfs crate supports Rust's no_std environment and is therefore not tied to a specific platform API. 119 | It aims to be embeddable in firmware-level code and kernels just as well as in user-mode applications. 120 | 121 | Colin Finck will [talk about NTFS](https://fosdem.org/2022/schedule/event/misc_ntfs_rust/) and his adventures in writing a filesystem crate in Rust on the upcoming FOSDEM conference. 122 | The talk is on Saturday, 5 February at 17:00 (CET, UTC+1). 123 | The conference is virtual and admission is free. 124 | 125 | 126 | ### [`phip1611/noto-sans-mono-bitmap-rs`](https://github.com/phip1611/noto-sans-mono-bitmap-rs) 127 | 128 | (Section written by [@phip1611](https://github.com/phip1611)) 129 | 130 | Philipp Schuster released an initial version of his [noto-sans-mono-bitmap](https://github.com/phip1611/noto-sans-mono-bitmap-rs) 131 | crate this month. It provides a pre-rasterized bitmap font from *Noto Sans Mono*, an open font from Google. 132 | The crate is a replacement for legacy bitmap fonts, such as the [font8x8 crate](https://crates.io/crates/font8x8). 133 | It is suitable for printing high quality/nice looking text to a framebuffer in bootloaders, kernels and similar 134 | environments where you don't want or can't use the FPU. 135 | 136 | To avoid CPU intensive soft float workloads, the crate contains pre-rendered symbols from the [Noto Sans Mono font](https://fonts.google.com/noto/specimen/Noto+Sans+Mono) 137 | in different sizes and font weights (light, regular, bold) as Rust constants paired with a convenient getter function. 138 | 139 | ![Symbols from the crate 'noto-sans-mono-bitmap' in an UEFI framebuffer.](framebuffer-font-noto-sans-mono.png "Symbols from the crate 'noto-sans-mono-bitmap' in an UEFI framebuffer.") 140 | 141 | The screenshot above shows text that is rendered into an UEFI framebuffer using the bitmap font 142 | from `noto-sans-mono-bitmap`. 143 | 144 | An example of usage can be found in [PR#213](https://github.com/rust-osdev/bootloader/pull/213) of the 145 | `rust-osdev/bootloader` crate, where this crate was merged and replaced `font8x8`. 146 | 147 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 148 | 149 | (Section written by [@phil-opp](https://github.com/phil-opp)) 150 | 151 | This month, we merged three small improvements for the _Writing an OS in Rust_ blog: 152 | 153 | - [Add Chinese translation for index page](https://github.com/phil-opp/blog_os/pull/1067) 154 | - [Upgrade to zola 0.15.3](https://github.com/phil-opp/blog_os/pull/1061) 155 | - [Remove dark mode warning again](https://github.com/phil-opp/blog_os/commit/b24122a6044879d2305e65d30960dc03cd50ff17) 156 | 157 | Thanks to [@TisnKu](https://github.com/TisnKu) for their contribution! 158 | 159 | I have also brought the [`edition-3`](https://github.com/phil-opp/blog_os/commits/edition-3) 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 `main` branch (without publishing them yet). This way, we can avoid that the branches diverge too much. 160 | 161 | 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 `build-std` feature, and fixes for the experimental `package.forced-target` manifest key. I also intend to have the new version of the `bootloader` crate ready soon, which should make the build and test process simpler and more robust. 162 | 163 | ## Join Us? 164 | 165 | 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). 166 | -------------------------------------------------------------------------------- /content/this-month/2022-05/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev: May 2022" 3 | date = 2022-06-08 4 | 5 | [extra] 6 | month = "May 2022" 7 | authors = [ 8 | "phil-opp", 9 | # add yourself here 10 | ] 11 | +++ 12 | 13 | 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. 14 | 15 | 16 | 17 | 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 _comment form_ at the bottom of this page. 18 | 19 | 26 | 27 | ## Project Updates 28 | 29 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 30 | 31 | [`rust-osdev`]: https://github.com/rust-osdev/about 32 | 33 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 34 | 35 | Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri) and [@nicholasbishop](https://github.com/nicholasbishop) 36 | 37 | The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. 38 | 39 | We merged the following changes in May: 40 | 41 | #### Improvements 42 | 43 | - [Change logger max level to be set by feature](https://github.com/rust-osdev/uefi-rs/pull/429) 44 | - [Release new versions of the crates](https://github.com/rust-osdev/uefi-rs/pull/432) (published `uefi v0.16.0`, `uefi-macros v0.7.0`, and `uefi-services v0.13.0`) 45 | - [Implement `Deref` and `DerefMut` for `ScopedProtocol`](https://github.com/rust-osdev/uefi-rs/pull/434) 46 | - [Implement `core::fmt::Write` for `Serial`](https://github.com/rust-osdev/uefi-rs/pull/437) 47 | - [Add documentation links](https://github.com/rust-osdev/uefi-rs/pull/426) 48 | 49 | #### Fixes 50 | 51 | - [Fix an accidental `*const` conversion](https://github.com/rust-osdev/uefi-rs/pull/423) 52 | - [Fix compilation of the xtask package under Windows and add to CI](https://github.com/rust-osdev/uefi-rs/pull/438) 53 | - [Switch back to automatic `Debug` derive for `Header` struct](https://github.com/rust-osdev/uefi-rs/pull/435) 54 | - [Check table version before calling UEFI 2.0+ functions](https://github.com/rust-osdev/uefi-rs/pull/436) 55 | 56 | Thanks to [@JonahPlusPlus](https://github.com/JonahPlusPlus), [@raccog](https://github.com/raccog), and [@verticalegg](https://github.com/verticalegg) for their contributions! 57 | 58 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 59 | 60 | Maintained by [@phil-opp](https://github.com/phil-opp), [@rybot666](https://github.com/rybot666), and [@64](https://github.com/64) 61 | 62 | The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following new feature: 63 | 64 | - [Add UEFI PXE support](https://github.com/rust-osdev/bootloader/pull/237) to load a kernel from a TFTP server 65 | 66 | This feature will be part of the upcoming `v0.11` release. Thanks to [@Freax13](https://github.com/Freax13) for this contribution! 67 | 68 | ### [`pci_types`](https://github.com/rust-osdev/pci_types) 69 | 70 | The `pci_types` 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 71 | between projects, and would benefit from community contributions. 72 | 73 | We merged the following change in May: 74 | 75 | - [PCI capabilities and status register support](https://github.com/rust-osdev/pci_types/pull/3) 76 | 77 | Thanks to [@alesharik](https://github.com/alesharik) for this contribution! 78 | 79 | ### [`xhci`](https://github.com/rust-osdev/xhci) 80 | 81 | Maintained by [@toku-sa-n](https://github.com/toku-sa-n) 82 | 83 | The `xhci` crate provides types of xHCI structures, such as Registers and TRBs. 84 | 85 | We merged the following fix this month: 86 | 87 | - [fix(StructuralParameters2): Bit range in `max_scratchpad_buffers_hi`](https://github.com/rust-osdev/xhci/pull/134) ([published](https://github.com/rust-osdev/xhci/pull/135) as `v0.8.4`) 88 | 89 | Thanks to [@Yuna-Tomi](https://github.com/Yuna-Tomi) for this contribution! 90 | 91 | ## Call for Participation 92 | 93 | Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding 94 | issues in one of our projects and get started! 95 | 96 | 100 | 101 | 102 | 103 | _No tasks were proposed for this section this month._ 104 | 105 | 106 | 107 | 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 [create a PR](https://github.com/rust-osdev/homepage/pulls) against the `next` branch with the tasks you want to include in the next issue. 108 | 109 | ## Other Projects 110 | 111 | 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. 112 | 113 | 114 | 115 | _No projects were proposed for this section this month._ 116 | 117 | 118 | 119 | ## Join Us? 120 | 121 | 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). 122 | -------------------------------------------------------------------------------- /content/this-month/2022-07/windbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/this-month/2022-07/windbg.png -------------------------------------------------------------------------------- /content/this-month/2022-10/nt-list-video.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/this-month/2022-10/nt-list-video.jpg -------------------------------------------------------------------------------- /content/this-month/2022-12/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/this-month/2022-12/aero.png -------------------------------------------------------------------------------- /content/this-month/2023-02/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev: February 2023" 3 | date = 2023-03-08 4 | 5 | [extra] 6 | month = "February 2023" 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 | 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 _comment form_ at the bottom of this page. 15 | 16 | 23 | 24 | ## Infrastructure and Tooling 25 | 26 | In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. 27 | 28 | 36 | 37 | ### [`rust-lang/rust`](https://github.com/rust-lang/rust) 38 | 39 | - [Add `kernel-address` sanitizer support for freestanding targets](https://github.com/rust-lang/rust/pull/99679) 40 | - [Stabilize `#![feature(target_feature_11)]`](https://github.com/rust-lang/rust/pull/99767). Allows enabling target features such as `avx2` for specific functions. 41 | - [Add support for QNX Neutrino to standard library](https://github.com/rust-lang/rust/pull/106673) 42 | 43 | ### [Cargo: Add '-C' flag for changing current dir before build](https://github.com/rust-lang/cargo/pull/10952) 44 | 45 | This new flag makes `cargo` switch to the specified directory before building. 46 | This means that the `.cargo/config.toml` file is also read from that directory, which can be very useful when configuring features such as [`build-std`](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std). 47 | 48 | 49 | ## Announcements, News, and Blog Posts 50 | 51 | Here we collect news, blog posts, etc. related to OS development in Rust. 52 | 53 | 59 | 60 | - [Rust now available for Real-Time Operating System and Hypervisor PikeOS](https://www.sysgo.com/press-releases/rust-now-available-for-real-time-operating-system-and-hypervisor-pikeos) 61 | - [Writing an OS in Rust to run on RISC-V](https://gist.github.com/cb372/5f6bf16ca0682541260ae52fc11ea3bb) 62 | 63 | ## `rust-osdev` Projects 64 | 65 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 66 | 67 | [`rust-osdev`]: https://github.com/rust-osdev/about 68 | 69 | 80 | 81 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 82 | 83 | - [uefi-macros: Fix error tests](https://github.com/rust-osdev/uefi-rs/pull/648) 84 | - [Release `uefi-0.19.1`](https://github.com/rust-osdev/uefi-rs/pull/652) 85 | - [Various fixes for tests under Windows](https://github.com/rust-osdev/uefi-rs/pull/651) 86 | - [uefi: Remove mentions of ruyntime usage from GOP docs](https://github.com/rust-osdev/uefi-rs/pull/613) 87 | - [uefi: Rework `exit_boot_services` API](https://github.com/rust-osdev/uefi-rs/pull/653) 88 | - [Add component name protocols](https://github.com/rust-osdev/uefi-rs/pull/656) 89 | - [uefi: Export `cstr8`, `cstr16`, and entry macros from the root](https://github.com/rust-osdev/uefi-rs/pull/657) 90 | - [Implement `Deref` for `HandleBuffer` and `ProtocolsPerHandle`](https://github.com/rust-osdev/uefi-rs/pull/659) 91 | - [uefi: Improve `Input::read_key` docstring](https://github.com/rust-osdev/uefi-rs/pull/664) 92 | - [Make more tests fail if protocol is missing](https://github.com/rust-osdev/uefi-rs/pull/665) 93 | - [xtask: Fully drop support for build-std](https://github.com/rust-osdev/uefi-rs/pull/585) 94 | - [ci: Simplify the VM jobs](https://github.com/rust-osdev/uefi-rs/pull/668) 95 | - [uefi-macros: Improve entry macro errors](https://github.com/rust-osdev/uefi-rs/pull/670) 96 | - [test-runner: Make `unstable` an optional feature](https://github.com/rust-osdev/uefi-rs/pull/667) 97 | - [xtask: Switch fatfs to latest crates.io release](https://github.com/rust-osdev/uefi-rs/pull/672) 98 | 99 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 100 | 101 | - [Create kernel stack with correct size and set up a guard page](https://github.com/rust-osdev/bootloader/pull/335) 102 | 103 | ### [`acpi`](https://github.com/rust-osdev/acpi) 104 | 105 | - [Update aml_tester to clap 4](https://github.com/rust-osdev/acpi/pull/149) 106 | - [Add stub implementations for Handler, read_u16 etc.](https://github.com/rust-osdev/acpi/pull/152) 107 | - [Add def_alias, alias shares handle with target](https://github.com/rust-osdev/acpi/pull/153) 108 | - [Update syntax of literal zero](https://github.com/rust-osdev/acpi/pull/148) 109 | 110 | Thanks to [@rw-vanc](https://github.com/rw-vanc) for their contributions! 111 | 112 | ### [`spinning_top`](https://github.com/rust-osdev/spinning_top) 113 | 114 | - [Upgrade lock_api to 0.4.7](https://github.com/rust-osdev/spinning_top/pull/13) (published as `v0.2.5`) 115 | 116 | Thanks to [@jannic](https://github.com/jannic) for this contribution! 117 | 118 | ### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) 119 | 120 | - [Remove features `const_mut_refs` and `use_spin_nightly`](https://github.com/rust-osdev/linked-list-allocator/pull/77) 121 | 122 | Thanks to [@jannic](https://github.com/jannic) for this contribution! 123 | 124 | 125 | ## Other Projects 126 | 127 | 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. 128 | 129 | 137 | 138 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 139 | (Section written by [@phil-opp](https://github.com/phil-opp)) 140 | 141 | We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: 142 | 143 | - [[Translation][Chinese] post-09 (edition-2)](https://github.com/phil-opp/blog_os/pull/1189) 144 | - Thanks to [@weijiew](https://github.com/weijiew) for creating this translation and thanks to [@liuyuran](https://github.com/liuyuran) for reviewing it! 145 | - [Fix typo in edition-3/post-02](https://github.com/phil-opp/blog_os/pull/1193) (thanks to [@emanuele-em](https://github.com/emanuele-em)) 146 | 147 | ## Join Us? 148 | 149 | 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). 150 | -------------------------------------------------------------------------------- /content/this-month/2023-03/screenshot-paging-calculator-x86-pae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rust-osdev/homepage/f0225a6925c95df0676e984ee487ecbba6add9e2/content/this-month/2023-03/screenshot-paging-calculator-x86-pae.png -------------------------------------------------------------------------------- /content/this-month/2023-04/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev: April 2023" 3 | date = 2023-05-05 4 | 5 | [extra] 6 | month = "April 2023" 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 | 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 _comment form_ at the bottom of this page. 15 | 16 | 23 | 24 | ## Infrastructure and Tooling 25 | 26 | In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. 27 | 28 | 36 | 37 | _No updates were proposed for this section this month._ 38 | 39 | ## Announcements, News, and Blog Posts 40 | 41 | Here we collect news, blog posts, etc. related to OS development in Rust. 42 | 43 | 49 | 50 | - [Rust Kernel Programming](https://web.archive.org/web/20241127063903/https://coderjoshdk.github.io/posts/Rust-Kernel-Programming.html) 51 | - [Linux Kernel Rust Modules](https://tomcat0x42.me/linux/rust/2023/04/07/linux-kernel-rust-modules.html) 52 | - [Aero OS: A new modern operating system made in Rust, now able to run the Links browser, Alacritty and much more!](https://www.reddit.com/r/rust/comments/12p2rf7/aero_os_a_new_modern_operating_system_made_in/) 53 | - [Felix, an x86 hobby OS written in Rust](https://www.reddit.com/r/rust/comments/12gxh8b/felix_an_x86_hobby_os_written_in_rust/) 54 | 55 | 56 | ## `rust-osdev` Projects 57 | 58 | In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. 59 | 60 | [`rust-osdev`]: https://github.com/rust-osdev/about 61 | 62 | 73 | 74 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 75 | Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) 76 | 77 | #### Features 78 | 79 | - [Introducing a high-level FS abstraction](https://github.com/rust-osdev/uefi-rs/pull/472) 80 | - [uefi: debug: add DebugPort protocol](https://github.com/rust-osdev/uefi-rs/pull/755) 81 | - [uefi: Panic if an error is created from Status::SUCCESS](https://github.com/rust-osdev/uefi-rs/pull/749) 82 | - [uefi-macros: Drop !Send and !Sync from unsafe_protocol macro](https://github.com/rust-osdev/uefi-rs/pull/758) 83 | - [cstr[ing]16: convenience functions](https://github.com/rust-osdev/uefi-rs/pull/751) 84 | - [uefi: Clean up some Status -> Result conversions](https://github.com/rust-osdev/uefi-rs/pull/767) 85 | - [Use the uguid crate to replace the `Guid` struct and `guid!` macro](https://github.com/rust-osdev/uefi-rs/pull/777) 86 | - [gop: Derive PartialEq on ModeInfo](https://github.com/rust-osdev/uefi-rs/pull/773) 87 | - [Add RngProtocol to `uefi-raw` and use it from `uefi`](https://github.com/rust-osdev/uefi-rs/pull/778) 88 | - [uefi: Add get_variable_boxed](https://github.com/rust-osdev/uefi-rs/pull/779) 89 | 90 | #### Docs 91 | 92 | - [uefi: Update Status documentation](https://github.com/rust-osdev/uefi-rs/pull/748) 93 | - [doc: build with --no-deps](https://github.com/rust-osdev/uefi-rs/pull/746) 94 | - [uefi: Minor cleanups in the fs module doc](https://github.com/rust-osdev/uefi-rs/pull/753) 95 | 96 | #### Other 97 | 98 | - [ci: shorter job names](https://github.com/rust-osdev/uefi-rs/pull/750) 99 | - [uefi: consistent use of crate:: over uefi::](https://github.com/rust-osdev/uefi-rs/pull/752) 100 | - [Allow passing a constant's path into unsafe_protocol](https://github.com/rust-osdev/uefi-rs/pull/760) 101 | - [uefi-raw: Add mostly-empty package](https://github.com/rust-osdev/uefi-rs/pull/761) 102 | - [ci: Fix book token permission](https://github.com/rust-osdev/uefi-rs/pull/763) 103 | - [Move newtype_enum macro to uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/764) 104 | - [uefi-macros: Fix compiler test for Rust 1.69](https://github.com/rust-osdev/uefi-rs/pull/765) 105 | - [Move `Status` to `uefi-raw`, along with related API changes](https://github.com/rust-osdev/uefi-rs/pull/768) 106 | 107 | Thanks to [@JohnAZoidberg](https://github.com/JohnAZoidberg) and [@felipebalbi](https://github.com/felipebalbi) for their contributions! 108 | 109 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 110 | Maintained by [@phil-opp](https://github.com/phil-opp) 111 | 112 | - [Fixed bug stemming from treating an exclusive range as an inclusive ranges](https://github.com/rust-osdev/bootloader/pull/362) 113 | - [Update `uefi` dependency to `v0.20`](https://github.com/rust-osdev/bootloader/pull/360) 114 | - [Implemented sorting of uefi memory maps #315](https://github.com/rust-osdev/bootloader/pull/365) 115 | 116 | Thanks to [@kennystrawnmusic](https://github.com/kennystrawnmusic) and [@JarlEvanson](https://github.com/JarlEvanson) for their contributions! 117 | 118 | 119 | ### [`pic8259`](https://github.com/rust-osdev/pic8259) 120 | Maintained by [@phil-opp](https://github.com/phil-opp) 121 | 122 | - [Added `new_contiguous` implementation for `ChainedPics`](https://github.com/rust-osdev/pic8259/pull/4) 123 | 124 | Thanks to [@rasheedmhd](https://github.com/rasheedmhd) for their contributions! 125 | 126 | 127 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 128 | 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) 129 | 130 | - [Don't use third-party Python libraries in release workflow](https://github.com/rust-osdev/x86_64/pull/421) 131 | 132 | 133 | ### [`acpi`](https://github.com/rust-osdev/acpi) 134 | Maintained by [@IsaacWoods](https://github.com/IsaacWoods) 135 | 136 | - [aml_tester: Add positional file arguments, in-order parsing and shared namespace](https://github.com/rust-osdev/acpi/pull/151) 137 | - [AML: Add minimal CondRefOf support](https://github.com/rust-osdev/acpi/pull/170) 138 | - [acpi: Allow Madt and Mcfg fields to be accessed without allocator_api](https://github.com/rust-osdev/acpi/pull/161) 139 | 140 | Thanks to [@A0lson](https://github.com/A0lson), and [@rw-vanc](https://github.com/rw-vanc) for their contributions! 141 | 142 | 143 | ### [`ucs2-rs`](https://github.com/rust-osdev/ucs2-rs) 144 | Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) 145 | 146 | - [ci: Bring in various improvements from uefi-rs](https://github.com/rust-osdev/ucs2-rs/pull/14) 147 | - [Switch to 2021 edition](https://github.com/rust-osdev/ucs2-rs/pull/15) 148 | 149 | 150 | 151 | ## Other Projects 152 | 153 | 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. 154 | 155 | 163 | 164 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 165 | (Section written by [@phil-opp](https://github.com/phil-opp)) 166 | 167 | We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: 168 | 169 | - [Update `zola` to `v0.17.2`](https://github.com/phil-opp/blog_os/pull/1209) 170 | - [Fix link syntax](https://github.com/phil-opp/blog_os/pull/1210) 171 | - [fix(translation zh-TW): typo](https://github.com/phil-opp/blog_os/pull/1211) (thanks to [@GNITOAHC](https://github.com/GNITOAHC)!) 172 | - [The `#[alloc_error_handler]` attribute was removed](https://github.com/phil-opp/blog_os/pull/1216) 173 | - [Update 'Heap Allocation' post to remove `alloc_error_handler`](https://github.com/phil-opp/blog_os/pull/1217) 174 | 175 | 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 `v0.11` of the `bootloader` crate. You can already read it [on GitHub](https://github.com/phil-opp/blog_os/blob/edition-3/blog/content/edition-3/posts/02-booting/index.md) if you like. 176 | 177 | ## Join Us? 178 | 179 | 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). 180 | -------------------------------------------------------------------------------- /content/this-month/2023-11/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev: November 2023" 3 | date = 2023-12-07 4 | 5 | [extra] 6 | month = "November 2023" 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 | 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 _comment form_ at the bottom of this page. 15 | 16 | 23 | 24 | ## Announcements, News, and Blog Posts 25 | 26 | Here we collect news, blog posts, etc. related to OS development in Rust. 27 | 28 | - [Officially Qualified - Ferrocene](https://ferrous-systems.com/blog/officially-qualified-ferrocene/) 29 | - [Edge IoT with Rust on ESP: NTP](https://apollolabsblog.hashnode.dev/edge-iot-with-rust-on-esp-ntp) 30 | 31 | 37 | 38 | 39 | ## Infrastructure and Tooling 40 | 41 | In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. 42 | 43 | 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: 44 | 45 | - [Stabilize C string literals](https://github.com/rust-lang/rust/pull/117472) 46 | - [Stabilize `ptr::addr_eq`](https://github.com/rust-lang/rust/pull/117968) 47 | - [Feature gate enums in `offset_of`](https://github.com/rust-lang/rust/pull/117537) 48 | 49 | 55 | 56 | ## `rust-osdev` Projects 57 | 58 | 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. 59 | 60 | 71 | 72 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 73 | 74 | Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) 75 | 76 | 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: 77 | 78 | - [Configure Renovate](https://github.com/rust-osdev/uefi-rs/pull/986) 79 | - [uefi-raw: Add AbsolutePointerProtocol](https://github.com/rust-osdev/uefi-rs/pull/990) 80 | - [Add SimpleFileSystemProtocol & file types to `uefi-raw`, use those types from `uefi`](https://github.com/rust-osdev/uefi-rs/pull/991) 81 | - [uefi-raw: Add API guidelines](https://github.com/rust-osdev/uefi-rs/pull/992) 82 | - [uefi-macros: Change uefi dev-dependency from version to path](https://github.com/rust-osdev/uefi-rs/pull/998) 83 | - [Add per-package changelogs](https://github.com/rust-osdev/uefi-rs/pull/997) 84 | - [test-runner: Improve uninstall_protocol_interface example](https://github.com/rust-osdev/uefi-rs/pull/931) 85 | - [Release via Github Actions workflow](https://github.com/rust-osdev/uefi-rs/pull/999) 86 | - [release: uefi-raw-0.5.0, uefi-macros-0.13.0, uefi-0.26.0, uefi-services-0.23.0](https://github.com/rust-osdev/uefi-rs/pull/1001) 87 | - [uefi-raw: Fill in [un]install_multiple_protocol_interfaces pointers](https://github.com/rust-osdev/uefi-rs/pull/1000) 88 | - [book: Use `cargo add` command](https://github.com/rust-osdev/uefi-rs/pull/1002) 89 | - [doc: update PUBLISHING.md](https://github.com/rust-osdev/uefi-rs/pull/959) 90 | - [uefi(data-types): allow `is_ascii` function on `Char16` and `CStr16`](https://github.com/rust-osdev/uefi-rs/pull/1008) 91 | 92 | 103 | 104 | Thanks to [@RaitoBezarius](https://github.com/RaitoBezarius) for their contributions! 105 | 106 | 107 | ### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) 108 | 109 | Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns) 110 | 111 | 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: 112 | 113 | - [fuzz: remove potential undefined behavior in chaos harness](https://github.com/rust-osdev/linked-list-allocator/pull/80) 114 | 115 | Thanks to [@00xc](https://github.com/00xc) for their contribution! 116 | 117 | 118 | ### [`pic8259`](https://github.com/rust-osdev/pic8259) 119 | Maintained by [@phil-opp](https://github.com/phil-opp) 120 | 121 | The `pic_8259` crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs). 122 | 123 | We merged the following PR this month: 124 | 125 | - [docs: Remove the redundant word and space](https://github.com/rust-osdev/pic8259/pull/5) 126 | 127 | Thanks to [@zoo868e](https://github.com/zoo868e) for their contribution! 128 | 129 | ## Other Projects 130 | 131 | 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. 132 | 133 | No projects updates were submitted this month. 134 | 135 | 143 | 144 | 145 | 146 | ## Join Us? 147 | 148 | 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). 149 | -------------------------------------------------------------------------------- /content/this-month/2024-02/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev: February 2024" 3 | date = 2024-03-07 4 | 5 | [extra] 6 | month = "February 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 | 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 _comment form_ at the bottom of this page. 15 | 16 | 23 | 24 | ## Announcements, News, and Blog Posts 25 | 26 | Here we collect news, blog posts, etc. related to OS development in Rust. 27 | 28 | 34 | 35 | - [Redox OS - Porting Strategy](https://www.redox-os.org/news/porting-strategy/) 36 | - [This Month in Redox](https://redox-os.org/news/this-month-240229/) 37 | - [Tock Compiles on Stable Rust!](https://tockos.org/blog/2024/talking-tock-55/) 38 | - [Making an RISC-V OS (Part 2): Kernel in virtual addresses](https://web.archive.org/web/20240714023153/https://traxys.me/riscv_os_2.html) 39 | - The Embedded Rustacean [Issue 13](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-13) and [Issue 14](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-14) 40 | - [Linux Kernel: Rewrite the VP9 codec library in Rust](https://lore.kernel.org/lkml/20240227215146.46487-1-daniel.almeida@collabora.com/) 41 | - [Anouncing stabby 3.0.0](https://www.reddit.com/r/rust/comments/1amjknw/anouncing_stabby_300_and_rustconf_video_available/) 42 | 43 | ## Infrastructure and Tooling 44 | 45 | In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. 46 | 47 | 53 | 54 | - [only set noalias on Box with the global allocator](https://github.com/rust-lang/rust/pull/122018) 55 | - [Add stubs in IR and ABI for `f16` and `f128`](https://github.com/rust-lang/rust/pull/121728) 56 | - [`f16` and `f128` step 2: intrinsics](https://github.com/rust-lang/rust/pull/121841) 57 | - [Add armv8r-none-eabihf target for the Cortex-R52](https://github.com/rust-lang/rust/pull/110482) 58 | - [Add a new `wasm32-wasip1` target to rustc](https://github.com/rust-lang/rust/pull/120468) 59 | - [Add a new `wasm32-wasi-preview2` target](https://github.com/rust-lang/rust/pull/119616) 60 | - [rename `ptr::invalid` -> `ptr::without_provenance`](https://github.com/rust-lang/rust/pull/117658) 61 | 62 | ## `rust-osdev` Projects 63 | 64 | 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. 65 | 66 | 77 | 78 | 79 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 80 | 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) 81 | 82 | 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. 83 | 84 | We merged the following PRs this month: 85 | 86 | - [Fix data layout in custom target used for testing](https://github.com/rust-osdev/x86_64/pull/454) 87 | - [optimize `from_page_table_indices`](https://github.com/rust-osdev/x86_64/pull/456) 88 | - [mark as 0.15 as beta release](https://github.com/rust-osdev/x86_64/pull/455) 89 | - [Release v0.14.12](https://github.com/rust-osdev/x86_64/pull/457) 90 | - [Fix release script](https://github.com/rust-osdev/x86_64/pull/459) 91 | - [Merge next into master: releasing `v0.15.0-beta`](https://github.com/rust-osdev/x86_64/pull/458) 92 | - [Update data layout of test target for LLVM 18](https://github.com/rust-osdev/x86_64/pull/460) 93 | - [optimize `Step` impl for `VirtAddr`](https://github.com/rust-osdev/x86_64/pull/462) 94 | - [Miscellaneous improvements](https://github.com/rust-osdev/x86_64/pull/464) 95 | - [Release v0.15.0](https://github.com/rust-osdev/x86_64/pull/463) 96 | 97 | 98 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 99 | Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) 100 | 101 | 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: 102 | 103 | 104 | 120 | 121 | - [Add a method to create a MemoryMap from a raw buffer](https://github.com/rust-osdev/uefi-rs/pull/1074) 122 | 123 | Thanks to [@bjorn3](https://github.com/bjorn3) for their contribution! 124 | 125 | 126 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 127 | Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) 128 | 129 | The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: 130 | 131 | - [Set `NO_EXECUTE` flag for all writable memory regions](https://github.com/rust-osdev/bootloader/pull/409) 132 | - [[v0.9] Fix data layout for custom targets for LLVM 18](https://github.com/rust-osdev/bootloader/pull/421) 133 | - [[v0.9] Fix map errors during kernel loading](https://github.com/rust-osdev/bootloader/pull/422) 134 | - [[v0.9] Fix: unify flags if multiple segments are mapped to same frame with different flags](https://github.com/rust-osdev/bootloader/pull/423) 135 | - [Fix invalid mapping to zero page caused by off-by-one bug](https://github.com/rust-osdev/bootloader/pull/424) 136 | - [adapt data layout to match LLVM's](https://github.com/rust-osdev/bootloader/pull/420) 137 | - [Release `v0.11.7`](https://github.com/rust-osdev/bootloader/pull/426) 138 | - [Remove unused paging imports](https://github.com/rust-osdev/bootloader/pull/430) 139 | 140 | Thanks to [@vinc](https://github.com/vinc) and [@tsatke](https://github.com/tsatke) for their contributions! 141 | 142 | ## Other Projects 143 | 144 | 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. 145 | 146 | 154 | 155 | No projects updates were submitted this month. 156 | 157 | ## Join Us? 158 | 159 | 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). 160 | -------------------------------------------------------------------------------- /content/this-month/2024-12/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev: December 2024" 3 | date = 2025-01-11 4 | 5 | [extra] 6 | month = "December 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 | 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 _comment form_ at the bottom of this page. 15 | 16 | 23 | 24 | ## Announcements, News, and Blog Posts 25 | 26 | Here we collect news, blog posts, etc. related to OS development in Rust. 27 | 28 | 34 | 35 | - [This Month in Redox OS - December 2024](https://www.redox-os.org/news/this-month-241231/) 36 | - Video: [Intro to Embassy : embedded development with async Rust](https://www.youtube.com/watch?v=pDd5mXBF4tY) 37 | - [2025: The Year of COSMIC — Alpha 5 Released!](https://blog.system76.com/post/cosmic-alpha-5-released) 38 | - Funding Opportunities - with [Redox OS](https://redox-os.org/) or on your own 39 | - The NGI Zero Commons Fund and NGI Zero Fediversity Fund each have a call for proposals with a Feb. 1 deadline. 40 | 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, 41 | with an amount up to 50,000 EUR. 42 | There must be a "European component", so a EU-based developer would be an ideal fit, 43 | or perhaps a project where the maintainer is EU-based. Here are the links: 44 | - [NGI Zero Commons Fund](https://nlnet.nl/commonsfund/) 45 | - [NGI Zero Fediversity Fund](https://nlnet.nl/fediversity/) 46 | - Redox is looking for a part-time or short-term developer to help with implementing device drivers, ACPI support, and similar, 47 | who would like to join our proposal. 48 | You must be knowledgeable in Rust and drivers, and have good reputation in the open source community. 49 | We have an existing relationship with NLnet, so we can craft the proposal, based on your skillset and our priorities. 50 | Please join us on Matrix and let us know you are interested. 51 | - https://matrix.to/#/#redox-join:matrix.org 52 | 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 | 64 | 65 | - [Improve default target options for `x86_64-unknown-linux-none`](https://github.com/rust-lang/rust/pull/134765) 66 | - [De-duplicate and improve definition of core::ffi::c_char](https://github.com/rust-lang/rust/pull/132975) 67 | 68 | ## `rust-osdev` Projects 69 | 70 | 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. 71 | 72 | 83 | 84 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 85 | Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) 86 | 87 | `uefi` makes it easy to develop Rust software that leverages safe, convenient, 88 | and performant abstractions for UEFI functionality. 89 | 90 | We merged the following PRs this month: 91 | 92 | - [Fix clippy::needless_lifetimes in Rust 1.83 and ShimLock ABI on ia32](https://github.com/rust-osdev/uefi-rs/pull/1485) 93 | - [Fix clippy::use_self](https://github.com/rust-osdev/uefi-rs/pull/1486) 94 | - [uefi-raw: Add DriverBindingProtocol](https://github.com/rust-osdev/uefi-rs/pull/1487) 95 | - [Increase MSRV to 1.81](https://github.com/rust-osdev/uefi-rs/pull/1484) 96 | - [Update ptr_meta to 0.3.0](https://github.com/rust-osdev/uefi-rs/pull/1496) 97 | - [Remove unstable gate for `core::error::Error` impls](https://github.com/rust-osdev/uefi-rs/pull/1497) 98 | - [Use size_of/size_of_val/align_of/align_of_val from the prelude](https://github.com/rust-osdev/uefi-rs/pull/1498) 99 | - [book: Set driver link-arg in `build.rs`](https://github.com/rust-osdev/uefi-rs/pull/1502) 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | Thanks to [@crawfxrd](https://github.com/crawfxrd) and [@JarlEvanson](https://github.com/JarlEvanson) for their contributions! 110 | 111 | 112 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 113 | 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) 114 | 115 | 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. 116 | 117 | We merged the following PRs this month: 118 | 119 | - [fix(idt): panic in `impl fmt::Debug for EntryOptions`](https://github.com/rust-osdev/x86_64/pull/522) 120 | - [Add `MapperFlush` method to get page](https://github.com/rust-osdev/x86_64/pull/525) 121 | - [feat: add `update()` to `Cr3`, `Dr7`, `SFMask`, `UCet`, `SCet`, `mxcsr`, `rflags`, and `XCr0`](https://github.com/rust-osdev/x86_64/pull/527) 122 | - [fix(model_specific): make `{Fs,Gs,KernelGs}Base::write()` unsafe](https://github.com/rust-osdev/x86_64/pull/528) 123 | - [Merge master into next](https://github.com/rust-osdev/x86_64/pull/521) 124 | 125 | Thanks to [@mkroening](https://github.com/mkroening) and [@adavis628](https://github.com/adavis628) for their contributions! 126 | 127 | 128 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 129 | Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) 130 | 131 | The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: 132 | 133 | - [Remove "UEFI boot" log message](https://github.com/rust-osdev/bootloader/pull/476) 134 | 135 | Thanks to [@ChocolateLoverRaj](https://github.com/ChocolateLoverRaj) for their contributions! 136 | 137 | 138 | 139 | ## Other Projects 140 | 141 | 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. 142 | 143 | 151 | 152 | ### [`roeeshoshani/genesis`](https://github.com/roeeshoshani/genesis) 153 | (Section written by [@roeeshoshani](https://github.com/roeeshoshani)) 154 | 155 | `genesis` is a bare metal firmware implementation for mips. it implements everything from the bottom up, from 156 | initializing the cpu caches, to configuring pci devices and the interrupt controller. 157 | 158 | i noticed that every kernel implementation is always for x86, so i decided to implement it for something a 159 | little more esoteric - mips. 160 | 161 | the project is currently in very early stages but the basics are there. 162 | 163 | it is my hobby project for me to learn about embedded programming. 164 | 165 | feel free to follow along the development of it :). 166 | 167 | ## Join Us? 168 | 169 | 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). 170 | -------------------------------------------------------------------------------- /content/this-month/2025-03/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev: March 2025" 3 | date = 2025-04-06 4 | 5 | [extra] 6 | month = "March 2025" 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 | 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 _comment form_ at the bottom of this page. 15 | 16 | 23 | 24 | ## Announcements, News, and Blog Posts 25 | 26 | Here we collect news, blog posts, etc. related to OS development in Rust. 27 | 28 | 34 | 35 | - [Rust, compiled to Holy C, running on TempleOS](https://www.reddit.com/r/rust/comments/1jp9227/media_rust_compiled_to_holly_c_running_on_templeos/) 36 | - [My non-unix like rust OS SafaOS, now has a rust libstd port](https://www.reddit.com/r/rust/comments/1jkkufh/media_my_nonunix_like_rust_os_safaos_now_has_a/) 37 | - [Introducing Ariel OS - an embedded library OS for small MCUs](https://www.reddit.com/r/rust/comments/1jo070l/introducing_ariel_os_an_embedded_library_os_for/) 38 | - [Stalloc: fast memory allocation on the stack](https://www.reddit.com/r/rust/comments/1jqjs6n/stalloc_fast_memory_allocation_on_the_stack/) 39 | 40 | ## Infrastructure and Tooling 41 | 42 | In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. 43 | 44 | 50 | 51 | - [Allow `*const W -> *const dyn A` ptr cast](https://github.com/rust-lang/rust/pull/136127) 52 | - [Stabilize `asm_goto` feature gate](https://github.com/rust-lang/rust/pull/133870) 53 | 54 | ## `rust-osdev` Projects 55 | 56 | 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. 57 | 58 | 69 | 70 | 71 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 72 | Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) 73 | 74 | `uefi` makes it easy to develop Rust software that leverages safe, convenient, 75 | and performant abstractions for UEFI functionality. 76 | 77 | We merged the following PRs this month: 78 | 79 | - [uefi: Implement SignalEvent() boot services function](https://github.com/rust-osdev/uefi-rs/pull/1556) 80 | - [uefi: Improve handling of null-address allocations in allocate_pages](https://github.com/rust-osdev/uefi-rs/pull/1558) 81 | - [uefi: Mark all function pointers in pxe::BaseCode unsafe](https://github.com/rust-osdev/uefi-rs/pull/1552) 82 | - [uefi: Exclude null byte from CStr8 Display impl](https://github.com/rust-osdev/uefi-rs/pull/1553) 83 | - [nix: switch to Nix Flake](https://github.com/rust-osdev/uefi-rs/pull/1560) 84 | - [Fix unwanted rebuilds in xtask commands](https://github.com/rust-osdev/uefi-rs/pull/1559) 85 | - [Create FUNDING.yml](https://github.com/rust-osdev/uefi-rs/pull/1563) 86 | - [Implement conversions for IpAddress and MacAddress](https://github.com/rust-osdev/uefi-rs/pull/1564) 87 | - [uefi: Clean up error docs in media protocols](https://github.com/rust-osdev/uefi-rs/pull/1568) 88 | - [uefi: Reformat `use` items in pxe module](https://github.com/rust-osdev/uefi-rs/pull/1567) 89 | - [uefi: Consistently use `&mut self` for pxe::BaseCode methods](https://github.com/rust-osdev/uefi-rs/pull/1566) 90 | - [ci: fix typos](https://github.com/rust-osdev/uefi-rs/pull/1571) 91 | - [Update Protocol/unsafe_protocol docs](https://github.com/rust-osdev/uefi-rs/pull/1574) 92 | - [uefi: Use uefi_raw's `PxeBaseCodeProtocol` to implement the internals of `pxe::BaseCode`](https://github.com/rust-osdev/uefi-rs/pull/1576) 93 | - [uefi-raw: Add DiskInfo protocol binding](https://github.com/rust-osdev/uefi-rs/pull/1580) 94 | - [uefi-raw: Add EXT_SCSI_PASS_THRU protocol binding](https://github.com/rust-osdev/uefi-rs/pull/1581) 95 | - [uefi runtime: Increase default size of name buffer](https://github.com/rust-osdev/uefi-rs/pull/1579) 96 | - [uefi-raw: Add conversions to/from core::net IP address types](https://github.com/rust-osdev/uefi-rs/pull/1582) 97 | - [uefi: Enable unsafe_op_in_unsafe_fn lint](https://github.com/rust-osdev/uefi-rs/pull/1585) 98 | - [uefi: Make pxe::Mode an opaque struct](https://github.com/rust-osdev/uefi-rs/pull/1583) 99 | - [uefi: Implement safe wrapper for EFI_DISK_INFO_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1590) 100 | - [uefi-raw: Add EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1591) 101 | - [uefi-raw: Add documentation to ScsiIoScsiRequestPacket](https://github.com/rust-osdev/uefi-rs/pull/1593) 102 | - [uefi-raw: Add EFI_ATA_PASS_THRU_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1592) 103 | 104 | 105 | 106 | 107 | 108 | 114 | 115 | Thanks to [@seijikun](https://github.com/seijikun), [@ifd3f](https://github.com/ifd3f), [@ptf2](https://github.com/ptf2), and [@quic-bjorande](https://github.com/quic-bjorande) for their contributions! 116 | 117 | 118 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 119 | Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) 120 | 121 | The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: 122 | 123 | - [remove #[no_mangle] from panic handler](https://github.com/rust-osdev/bootloader/pull/500) 124 | 125 | 126 | ## Other Projects 127 | 128 | 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. 129 | 130 | 138 | 139 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 140 | (Section written by [@phil-opp](https://github.com/phil-opp)) 141 | 142 | We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: 143 | 144 | - [Update blog to Rust 2024 edition](https://github.com/phil-opp/blog_os/pull/1405) 145 | - [Latam Spanish translation](https://github.com/phil-opp/blog_os/pull/1368) 146 | - [Fix translation in `zh-CN` testing post](https://github.com/phil-opp/blog_os/pull/1407) 147 | 148 | Thanks to [@dobleuber](https://github.com/dobleuber) and [@JINHUILYU](https://github.com/JINHUILYU) for their contributions! 149 | 150 | ## Join Us? 151 | 152 | 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). 153 | -------------------------------------------------------------------------------- /content/this-month/2025-04/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev: April 2025" 3 | date = 2025-05-10 4 | 5 | [extra] 6 | month = "April 2025" 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 | 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 _comment form_ at the bottom of this page. 15 | 16 | 23 | 24 | ## Announcements, News, and Blog Posts 25 | 26 | Here we collect news, blog posts, etc. related to OS development in Rust. 27 | 28 | 34 | 35 | - Podcast: [Microsoft rewriting Hyper-V components in Rust; calls 2025 "the year of Rust at Microsoft"](https://corrode.dev/podcast/s04e01-microsoft/) 36 | - [Memory-safe sudo to become the default in Ubuntu](https://trifectatech.org/blog/memory-safe-sudo-to-become-the-default-in-ubuntu/) 37 | - [Migration to rust-coreutils in Ubuntu 25.10](https://discourse.ubuntu.com/t/migration-to-rust-coreutils-in-25-10/59708) 38 | - [noshell, a no_std argument parser and a shell for constrained systems](https://github.com/inthehack/noshell) 39 | - [Ariel OS - library OS for microcontrollers - now building on stable Rust](https://www.reddit.com/r/rust/comments/1kh0dg1/ariel_os_v020_now_building_on_stable_rust/) 40 | 41 | ## Infrastructure and Tooling 42 | 43 | In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. 44 | 45 | 51 | 52 | - [Stabilize `naked_functions`](https://github.com/rust-lang/rust/pull/134213/) 53 | 54 | ## `rust-osdev` Projects 55 | 56 | 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. 57 | 58 | 69 | 70 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 71 | Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) 72 | 73 | `uefi` makes it easy to develop Rust software that leverages safe, convenient, 74 | and performant abstractions for UEFI functionality. 75 | 76 | We merged the following PRs this month: 77 | 78 | - [uefi-raw: Add binding for EFI_DEVICE_PATH_UTILITIES_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1598) 79 | - [clippy: fix](https://github.com/rust-osdev/uefi-rs/pull/1602) 80 | - [helpers: Add AlignedBuffer](https://github.com/rust-osdev/uefi-rs/pull/1600) 81 | - [xtask: fix nixfmt + update Nix flake + fix CI](https://github.com/rust-osdev/uefi-rs/pull/1607) 82 | - [uefi/doc: improve documentation of exit_boot_services + change signature](https://github.com/rust-osdev/uefi-rs/pull/1605) 83 | - [uefi: Some convenient DevicePathUtilities helper methods](https://github.com/rust-osdev/uefi-rs/pull/1599) 84 | - [uefi: Add safe protocol wrapper for EFI_EXT_SCSI_PASS_THRU_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1589) 85 | - [uefi-raw: Fix ATA_PASS_THRU_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1619) 86 | - [snp network test fixes](https://github.com/rust-osdev/uefi-rs/pull/1618) 87 | - [uefi-raw: Add EFI_USB_IO_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1623) 88 | - [uefi: Add safe protocol wrapper for EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1594) 89 | - [uefi: Move PoolString to enable additional use](https://github.com/rust-osdev/uefi-rs/pull/1624) 90 | - [uefi-raw: Fix EFI_USB_IO_PROTOCOL implementation](https://github.com/rust-osdev/uefi-rs/pull/1626) 91 | - [uefi-raw: Add EFI_USB2_HC_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1629) 92 | - [uefi: Add safe protocol wrapper for EFI_ATA_PASS_THRU_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1595) 93 | - [uefi-raw: Move EFI_SIMPLE_NETWORK_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1634) 94 | - [Enable access to hidden RAII guard components](https://github.com/rust-osdev/uefi-rs/pull/1635) 95 | - [UEFI Allocator: add PAGE_SIZE shortcut ](https://github.com/rust-osdev/uefi-rs/pull/1611) 96 | - [xtask: Update OVMF release to EDK2_STABLE202502_R2](https://github.com/rust-osdev/uefi-rs/pull/1637) 97 | - [add ip4config2 + http protocols support](https://github.com/rust-osdev/uefi-rs/pull/1614) 98 | - [uefi-raw: Redefine UsbPortStatus and UsbTransferStatus](https://github.com/rust-osdev/uefi-rs/pull/1638) 99 | - [uefi: remove duplication in DevicePathHeader; use uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/1613) 100 | - [uefi: Implement CalculateCrc32() boot services function](https://github.com/rust-osdev/uefi-rs/pull/1649) 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | Thanks to [@seijikun](https://github.com/seijikun), [@andersson](https://github.com/andersson), [@kraxel](https://github.com/kraxel), and [@JarlEvanson](https://github.com/JarlEvanson) for their contributions! 110 | 111 | 112 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 113 | 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) 114 | 115 | 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. 116 | 117 | We merged the following PRs this month: 118 | 119 | - [fix kani build job](https://github.com/rust-osdev/x86_64/pull/544) 120 | - [improve `VirtAddr` `Add` & `Sub` impls](https://github.com/rust-osdev/x86_64/pull/543) 121 | - [Revert #529 on master](https://github.com/rust-osdev/x86_64/pull/545) 122 | - [merge master into next](https://github.com/rust-osdev/x86_64/pull/546) 123 | 124 | 125 | ### [`bootloader`](https://github.com/rust-osdev/bootloader) 126 | Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) 127 | 128 | The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: 129 | 130 | - [implement Send+Sync for MemoryRegions](https://github.com/rust-osdev/bootloader/pull/502) 131 | 132 | 133 | 134 | ## Other Projects 135 | 136 | 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. 137 | 138 | 146 | 147 | ### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) 148 | (Section written by [@phil-opp](https://github.com/phil-opp)) 149 | 150 | We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: 151 | 152 | - [Added [[bin]] section to Cargo.toml](https://github.com/phil-opp/blog_os/pull/1412) 153 | - [loading UEFI using ovmf_prebuilt=0.2.3 with ovmf_code and ovmf_vars](https://github.com/phil-opp/blog_os/pull/1410) 154 | 155 | Thanks to [@tigeryant](https://github.com/tigeryant) and [@v4zha](https://github.com/v4zha) for their contributions! 156 | 157 | 158 | ## Join Us? 159 | 160 | 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). 161 | -------------------------------------------------------------------------------- /content/this-month/2025-05/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev: May 2025" 3 | date = 2025-06-05 4 | 5 | [extra] 6 | month = "May 2025" 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 | 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 _comment form_ at the bottom of this page. 15 | 16 | 23 | 24 | ## Announcements, News, and Blog Posts 25 | 26 | Here we collect news, blog posts, etc. related to OS development in Rust. 27 | 28 | 34 | 35 | - [Miralis, a RISC-V virtual firmware monitor](https://github.com/CharlyCst/miralis) 36 | - [This Month in Redox](https://redox-os.org/news/this-month-250531/) 37 | - Redox is looking for a developer in the EU - see the job description in our monthly report! 38 | - [The Linux 6.15 kernel arrives - and it's big a victory for Rust fans](https://www.zdnet.com/article/the-linux-6-15-kernel-arrives-and-its-big-a-victory-for-rust-fans/) 39 | - [Rust Coreutils 0.1 Released With Big Performance Gains - Can Match Or Exceed GNU Speed](https://www.phoronix.com/news/Rust-Coreutils-0.1-Released) 40 | - [Edit is now open source](https://devblogs.microsoft.com/commandline/edit-is-now-open-source/) 41 | - [ChromeOS Virtual Machine Monitor is written in Rust with over 300k LoC](https://www.reddit.com/r/rust/comments/1l1ue85/chromeos_virtual_machine_monitor_is_written_in/) 42 | - [First look at Blinksy](https://blog.mikey.nz/first-look-at-blinksy/) - A Rust no-std no-alloc LED control library for spatial layouts 43 | - [biski64: A Fast, no_std PRNG in Rust (~0.37ns per u64)](https://www.reddit.com/r/rust/comments/1kwe65p/biski64_a_fast_no_std_prng_in_rust_037ns_per_u64/) 44 | - [RusTOS - Small RTOS in Rust](https://www.reddit.com/r/rust/comments/1kgx126/rustos_small_rtos_in_rust/) 45 | - [A second iteration of my DOS-like hobby OS in Rust](https://www.reddit.com/r/rust/comments/1kzjzj4/a_second_iteration_of_my_doslike_hobby_os_in_rust/) 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 | 57 | 58 | - [aarch64-softfloat: forbid enabling the neon target feature](https://github.com/rust-lang/rust/pull/135160) 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 | 75 | 76 | 77 | ### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) 78 | Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) 79 | 80 | `uefi` makes it easy to develop Rust software that leverages safe, convenient, 81 | and performant abstractions for UEFI functionality. 82 | 83 | We merged the following PRs this month: 84 | 85 | - [release: uefi-raw-0.11.0, uefi-macros-0.18.1, uefi-0.35.0](https://github.com/rust-osdev/uefi-rs/pull/1652) 86 | - [xtask: Add --ovmf-shell arg](https://github.com/rust-osdev/uefi-rs/pull/1656) 87 | - [xtask: simplify env variables](https://github.com/rust-osdev/uefi-rs/pull/1657) 88 | - [uefi: use Duration for boot::stall](https://github.com/rust-osdev/uefi-rs/pull/1659) 89 | - [xtask: Improve error message for enums in uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/1660) 90 | - [ConfigTableEntry move constants and add example](https://github.com/rust-osdev/uefi-rs/pull/1661) 91 | - [uefi: `system::with_*` now take mutably closure](https://github.com/rust-osdev/uefi-rs/pull/1663) 92 | - [uefi-test-runner: streamline memory related tests](https://github.com/rust-osdev/uefi-rs/pull/1666) 93 | - [rust: edition 2024](https://github.com/rust-osdev/uefi-rs/pull/1586) 94 | - [Unpin uguid](https://github.com/rust-osdev/uefi-rs/pull/1673) 95 | - [uefi: SNP transmit: document parameters](https://github.com/rust-osdev/uefi-rs/pull/1664) 96 | - [doc: improved documentation for boot allocation functions](https://github.com/rust-osdev/uefi-rs/pull/1665) 97 | - [uefi-raw: Add binding for EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1658) 98 | - [doc: streamline device path documentation between uefi-raw and uefi](https://github.com/rust-osdev/uefi-rs/pull/1641) 99 | - [clippy: fix upcoming nightly lints](https://github.com/rust-osdev/uefi-rs/pull/1675) 100 | - [cleanup IPConfig2/Http Protocol](https://github.com/rust-osdev/uefi-rs/pull/1640) 101 | - [uefi: deprecated since 0.36.0](https://github.com/rust-osdev/uefi-rs/pull/1677) 102 | - [doc: help with feature selection](https://github.com/rust-osdev/uefi-rs/pull/1676) 103 | - [uefi: Add safe EFI_USB_IO_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1625) 104 | - [uefi: Add (partial) safe protocol implementation for PCI_ROOT_BRIDGE_IO_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1674) 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | Thanks to [@seijikun](https://github.com/seijikun), [@fox0](https://github.com/fox0), and [@JarlEvanson](https://github.com/JarlEvanson) for their contributions! 116 | 117 | 118 | ### [`x86_64`](https://github.com/rust-osdev/x86_64) 119 | 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) 120 | 121 | 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. 122 | 123 | We merged the following PRs this month: 124 | 125 | - [feat(sev): add AMD SEV support](https://github.com/rust-osdev/x86_64/pull/542) 126 | - [implement functions for accessing CR8](https://github.com/rust-osdev/x86_64/pull/547) 127 | - [Add page attribute table support](https://github.com/rust-osdev/x86_64/pull/548) 128 | 129 | Thanks to [@zyuiop](https://github.com/zyuiop) for their contribution! 130 | 131 | 132 | 133 | ## Other Projects 134 | 135 | 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. 136 | 137 | 145 | 146 | 147 | No projects updates were submitted this month. 148 | 149 | ## Join Us? 150 | 151 | 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). 152 | -------------------------------------------------------------------------------- /content/this-month/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This Month in Rust OSDev" 3 | sort_by = "date" 4 | render = false 5 | +++ 6 | 7 | These posts give a regular overview of the most important changes to the RustOSDev tools and libraries. 8 | -------------------------------------------------------------------------------- /static/CNAME: -------------------------------------------------------------------------------- 1 | rust-osdev.com -------------------------------------------------------------------------------- /static/css/main.css: -------------------------------------------------------------------------------- 1 | a code, .gray a { 2 | color: inherit; 3 | } 4 | 5 | h3 a code { 6 | color: inherit; 7 | } 8 | 9 | .post-authors a { 10 | color: inherit; 11 | font-style: italic; 12 | } 13 | 14 | .gray { 15 | color: gray; 16 | } 17 | 18 | li ul { 19 | margin-bottom: 0rem; 20 | } 21 | 22 | h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { 23 | padding: 0; 24 | color: #a0565c; 25 | font-size: 95%; 26 | background-color: inherit; 27 | } 28 | 29 | .post-summary p:last-of-type{ 30 | display: inline; 31 | } 32 | 33 | .read-more { 34 | margin-left: 5px; 35 | } 36 | 37 | .showcase-post-intro { 38 | color: gray; 39 | font-style: italic; 40 | margin-left: 1rem; 41 | } 42 | 43 | .maintainers { 44 | border-top: 1px solid #ddd; 45 | display: block; 46 | margin-top: -.5rem; 47 | color: #9a9a9a; 48 | } 49 | 50 | .maintainers a { 51 | color: #9a9a9a; 52 | } 53 | 54 | details summary { 55 | cursor: pointer; 56 | } 57 | -------------------------------------------------------------------------------- /static/css/poole.css: -------------------------------------------------------------------------------- 1 | /* 2 | * ___ 3 | * /\_ \ 4 | * _____ ___ ___\//\ \ __ 5 | * /\ '__`\ / __`\ / __`\\ \ \ /'__`\ 6 | * \ \ \_\ \/\ \_\ \/\ \_\ \\_\ \_/\ __/ 7 | * \ \ ,__/\ \____/\ \____//\____\ \____\ 8 | * \ \ \/ \/___/ \/___/ \/____/\/____/ 9 | * \ \_\ 10 | * \/_/ 11 | * 12 | * Designed, built, and released under MIT license by @mdo. Learn more at 13 | * https://github.com/poole/poole. 14 | */ 15 | 16 | 17 | /* 18 | * Contents 19 | * 20 | * Body resets 21 | * Custom type 22 | * Messages 23 | * Container 24 | * Masthead 25 | * Posts and pages 26 | * Pagination 27 | * Reverse layout 28 | * Themes 29 | */ 30 | 31 | 32 | /* 33 | * Body resets 34 | * 35 | * Update the foundational and global aspects of the page. 36 | */ 37 | 38 | * { 39 | -webkit-box-sizing: border-box; 40 | -moz-box-sizing: border-box; 41 | box-sizing: border-box; 42 | } 43 | 44 | html, 45 | body { 46 | margin: 0; 47 | padding: 0; 48 | } 49 | 50 | html { 51 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 52 | font-size: 16px; 53 | line-height: 1.5; 54 | } 55 | 56 | @media (min-width: 38em) { 57 | html { 58 | font-size: 18px; 59 | } 60 | } 61 | 62 | body { 63 | color: #515151; 64 | background-color: #fff; 65 | -webkit-text-size-adjust: 100%; 66 | -ms-text-size-adjust: 100%; 67 | } 68 | 69 | /* No `:visited` state is required by default (browsers will use `a`) */ 70 | a { 71 | color: #268bd2; 72 | text-decoration: none; 73 | } 74 | 75 | a strong { 76 | color: inherit; 77 | } 78 | 79 | /* `:focus` is linked to `:hover` for basic accessibility */ 80 | a:hover, 81 | a:focus { 82 | text-decoration: underline; 83 | } 84 | 85 | /* Headings */ 86 | h1, 87 | h2, 88 | h3, 89 | h4, 90 | h5, 91 | h6 { 92 | margin-bottom: .5rem; 93 | font-weight: bold; 94 | line-height: 1.25; 95 | color: #313131; 96 | text-rendering: optimizeLegibility; 97 | } 98 | 99 | h1 { 100 | font-size: 2rem; 101 | } 102 | 103 | h2 { 104 | margin-top: 2.5rem; 105 | font-size: 1.75rem; 106 | } 107 | 108 | h3 { 109 | margin-top: 1.5rem; 110 | font-size: 1.25rem; 111 | } 112 | 113 | h4, 114 | h5, 115 | h6 { 116 | margin-top: 1rem; 117 | font-size: 1rem; 118 | } 119 | 120 | /* Body text */ 121 | p { 122 | margin-top: 0; 123 | margin-bottom: 1rem; 124 | } 125 | 126 | strong { 127 | color: #303030; 128 | } 129 | 130 | 131 | /* Lists */ 132 | ul, 133 | ol, 134 | dl { 135 | margin-top: 0; 136 | margin-bottom: 1rem; 137 | } 138 | 139 | dt { 140 | font-weight: bold; 141 | } 142 | 143 | dd { 144 | margin-bottom: .5rem; 145 | } 146 | 147 | /* Misc */ 148 | hr { 149 | position: relative; 150 | margin: 1.5rem 0; 151 | border: 0; 152 | border-top: 1px solid #eee; 153 | border-bottom: 1px solid #fff; 154 | } 155 | 156 | abbr { 157 | font-size: 85%; 158 | font-weight: bold; 159 | color: #555; 160 | text-transform: uppercase; 161 | } 162 | 163 | abbr[title] { 164 | cursor: help; 165 | border-bottom: 1px dotted #e5e5e5; 166 | } 167 | 168 | /* Code */ 169 | code, 170 | pre { 171 | font-family: Menlo, Monaco, "Courier New", monospace; 172 | } 173 | 174 | code { 175 | padding: .25em .5em; 176 | font-size: 85%; 177 | color: #bf616a; 178 | background-color: #f9f9f9; 179 | border-radius: 3px; 180 | } 181 | 182 | pre { 183 | display: block; 184 | margin-top: 0; 185 | margin-bottom: 1rem; 186 | padding: 1rem; 187 | font-size: .8rem; 188 | line-height: 1.4; 189 | white-space: pre; 190 | white-space: pre-wrap; 191 | word-break: break-all; 192 | word-wrap: break-word; 193 | background-color: #f9f9f9; 194 | } 195 | 196 | pre code { 197 | padding: 0; 198 | font-size: 100%; 199 | color: inherit; 200 | background-color: transparent; 201 | } 202 | 203 | /* Pygments via Jekyll */ 204 | .highlight { 205 | margin-bottom: 1rem; 206 | border-radius: 4px; 207 | } 208 | 209 | .highlight pre { 210 | margin-bottom: 0; 211 | } 212 | 213 | /* Gist via GitHub Pages */ 214 | .gist .gist-file { 215 | font-family: Menlo, Monaco, "Courier New", monospace !important; 216 | } 217 | 218 | .gist .markdown-body { 219 | padding: 15px; 220 | } 221 | 222 | .gist pre { 223 | padding: 0; 224 | background-color: transparent; 225 | } 226 | 227 | .gist .gist-file .gist-data { 228 | font-size: .8rem !important; 229 | line-height: 1.4; 230 | } 231 | 232 | .gist code { 233 | padding: 0; 234 | color: inherit; 235 | background-color: transparent; 236 | border-radius: 0; 237 | } 238 | 239 | /* Quotes */ 240 | blockquote { 241 | padding: .5rem 1rem; 242 | margin: .8rem 0; 243 | color: #7a7a7a; 244 | border-left: .25rem solid #e5e5e5; 245 | } 246 | 247 | blockquote p:last-child { 248 | margin-bottom: 0; 249 | } 250 | 251 | @media (min-width: 30em) { 252 | blockquote { 253 | padding-right: 5rem; 254 | padding-left: 1.25rem; 255 | } 256 | } 257 | 258 | img { 259 | display: block; 260 | max-width: 100%; 261 | margin: 0 0 1rem; 262 | border-radius: 5px; 263 | } 264 | 265 | /* Tables */ 266 | table { 267 | margin-bottom: 1rem; 268 | width: 100%; 269 | border: 1px solid #e5e5e5; 270 | border-collapse: collapse; 271 | } 272 | 273 | td, 274 | th { 275 | padding: .25rem .5rem; 276 | border: 1px solid #e5e5e5; 277 | } 278 | 279 | tbody tr:nth-child(odd) td, 280 | tbody tr:nth-child(odd) th { 281 | background-color: #f9f9f9; 282 | } 283 | 284 | 285 | /* 286 | * Custom type 287 | * 288 | * Extend paragraphs with `.lead` for larger introductory text. 289 | */ 290 | 291 | .lead { 292 | font-size: 1.25rem; 293 | font-weight: 300; 294 | } 295 | 296 | 297 | /* 298 | * Messages 299 | * 300 | * Show alert messages to users. You may add it to single elements like a `

`, 301 | * or to a parent if there are multiple elements to show. 302 | */ 303 | 304 | .message { 305 | margin-bottom: 1rem; 306 | padding: 1rem; 307 | color: #717171; 308 | background-color: #f9f9f9; 309 | } 310 | 311 | 312 | /* 313 | * Container 314 | * 315 | * Center the page content. 316 | */ 317 | 318 | .container { 319 | max-width: 45rem; 320 | padding-left: 1rem; 321 | padding-right: 1rem; 322 | margin-left: auto; 323 | margin-right: auto; 324 | } 325 | 326 | 327 | /* 328 | * Masthead 329 | * 330 | * Super small header above the content for site name and short description. 331 | */ 332 | 333 | .masthead { 334 | padding-top: 1rem; 335 | padding-bottom: 1rem; 336 | margin-bottom: 3rem; 337 | } 338 | 339 | .masthead-title { 340 | margin-top: 0; 341 | margin-bottom: 0; 342 | color: #505050; 343 | } 344 | 345 | .masthead-title a { 346 | color: #505050; 347 | } 348 | 349 | .masthead-title small { 350 | font-size: 75%; 351 | font-weight: 400; 352 | color: #c0c0c0; 353 | letter-spacing: 0; 354 | } 355 | 356 | 357 | /* 358 | * Posts and pages 359 | * 360 | * Each post is wrapped in `.post` and is used on default and post layouts. Each 361 | * page is wrapped in `.page` and is only used on the page layout. 362 | */ 363 | 364 | .page, 365 | .post { 366 | margin-bottom: 4em; 367 | } 368 | 369 | /* Blog post or page title */ 370 | .page-title, 371 | .post-title, 372 | .post-title a { 373 | color: #303030; 374 | } 375 | 376 | .page-title, 377 | .post-title { 378 | margin-top: 0; 379 | } 380 | 381 | .post-summary { 382 | margin-bottom: 2rem; 383 | } 384 | 385 | /* Meta data line below post title */ 386 | .post-date { 387 | display: block; 388 | margin-top: -.5rem; 389 | margin-bottom: 1rem; 390 | color: #9a9a9a; 391 | } 392 | 393 | .post-summary .badges { 394 | display: none; 395 | } 396 | 397 | .badges { 398 | margin-bottom: 0; 399 | } 400 | 401 | .badges img { 402 | display: inline-block; 403 | margin-bottom: 0; 404 | } 405 | 406 | /* Related posts */ 407 | .related { 408 | padding-top: 2rem; 409 | padding-bottom: 2rem; 410 | border-top: 1px solid #eee; 411 | } 412 | 413 | .related-posts { 414 | padding-left: 0; 415 | list-style: none; 416 | } 417 | 418 | .related-posts h3 { 419 | margin-top: 0; 420 | } 421 | 422 | .related-posts li small { 423 | font-size: 75%; 424 | color: #999; 425 | } 426 | 427 | .related-posts li a:hover { 428 | color: #268bd2; 429 | text-decoration: none; 430 | } 431 | 432 | .related-posts li a:hover small { 433 | color: inherit; 434 | } 435 | 436 | 437 | /* 438 | * Pagination 439 | * 440 | * Super lightweight (HTML-wise) blog pagination. `span`s are provide for when 441 | * there are no more previous or next posts to show. 442 | */ 443 | 444 | .pagination { 445 | overflow: hidden; 446 | /* clearfix */ 447 | margin-left: -1rem; 448 | margin-right: -1rem; 449 | font-family: "PT Sans", Helvetica, Arial, sans-serif; 450 | color: #ccc; 451 | text-align: center; 452 | } 453 | 454 | /* Pagination items can be `span`s or `a`s */ 455 | .pagination-item { 456 | display: block; 457 | padding: 1rem; 458 | border: 1px solid #eee; 459 | } 460 | 461 | .pagination-item:first-child { 462 | margin-bottom: -1px; 463 | } 464 | 465 | /* Only provide a hover state for linked pagination items */ 466 | a.pagination-item:hover { 467 | background-color: #f5f5f5; 468 | } 469 | 470 | @media (min-width: 30em) { 471 | .pagination { 472 | margin: 3rem 0; 473 | } 474 | 475 | .pagination-item { 476 | float: left; 477 | width: 50%; 478 | } 479 | 480 | .pagination-item:first-child { 481 | margin-bottom: 0; 482 | border-top-left-radius: 4px; 483 | border-bottom-left-radius: 4px; 484 | } 485 | 486 | .pagination-item:last-child { 487 | margin-left: -1px; 488 | border-top-right-radius: 4px; 489 | border-bottom-right-radius: 4px; 490 | } 491 | } 492 | -------------------------------------------------------------------------------- /static/uefi-book/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Redirecting to https://rust-osdev.github.io/uefi-rs/index.html 4 | 5 | 6 | -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {% if current_url %} 12 | 13 | {% endif %} 14 | 15 | 16 | 17 | 18 | 19 | {% block title %}{% endblock title %} 20 | 21 | 22 | 23 |

24 |
25 |
26 |

27 | {{ config.title | safe }} 28 | {{ config.description }} 29 |

30 |
31 |
32 | 33 |
34 |
{% block main %}{% endblock main %}
35 | 36 |
37 |
38 | Join us on Zulip.
39 | © -. All rights reserved. 40 | Contact 41 |
42 |
43 |
44 |
45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}{{ config.title }}{% endblock title %} 4 | 5 | {% block main %} 6 | 7 |

Rust OSDev

8 | 9 | {% set this_month = get_section(path = "this-month/_index.md") %} 10 |

{{ this_month.title }}

11 | {{ this_month.content | safe }} 12 | 17 | 18 | {% set showcase = get_section(path = "showcase/_index.md") %} 19 |

{{ showcase.title }}

20 | {{ showcase.content | safe }} 21 | 26 | 27 | {% endblock main %} 28 | 29 | {% block after_main %} 30 | 31 | {% endblock after_main %} 32 | -------------------------------------------------------------------------------- /templates/page.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}{{ page.title | striptags }} | {{ config.title }}{% endblock title %} 4 | 5 | {% block main %} 6 |

{{ page.title | safe}}

7 | 8 | 35 | 36 | {{ page.content | safe }} 37 | 38 |

Comments

39 | 40 | 47 | {% endblock main %} 48 | 49 | {% block after_main %} 50 |
51 | 59 | {% endblock after_main %} 60 | -------------------------------------------------------------------------------- /templates/plain.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}{{ page.title }} | {{ config.title }}{% endblock title %} 4 | 5 | {% block main %} 6 |

{{ page.title }}

7 | {{ page.content | safe }} 8 | {% endblock main %} 9 | -------------------------------------------------------------------------------- /templates/section.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}{{ config.title }}{% endblock title %} 4 | 5 | {% block main %} 6 | 7 |

{{ section.title }}

8 | 9 | {% block introduction %} 10 |

{{ section.content | safe }}

11 | {% endblock introduction %} 12 | 13 |
14 | {% for page in section.pages %} 15 |

{{ page.title | safe}}

16 |
17 | {{ page.summary | safe }} 18 | read more » 19 |
20 | {% endfor %} 21 |
22 | 23 | {% endblock main %} 24 | 25 | {% block after_main %} 26 | 27 | {% endblock after_main %} 28 | -------------------------------------------------------------------------------- /templates/showcase.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% import "snippets.html" as snippets %} 4 | 5 | {% block title %}{{ page.title | striptags }} | {{ config.title }}{% endblock title %} 6 | 7 | {% block main %} 8 |

{{ page.title | safe}}

9 | 10 | 23 | 24 | {{ page.content | replace(from="", to=snippets::showcase_intro()) | safe }} 25 | 26 |

Comments

27 | 28 | 35 | {% endblock main %} 36 | 37 | {% block after_main %} 38 |
39 | 47 | {% endblock after_main %} 48 | -------------------------------------------------------------------------------- /templates/snippets.html: -------------------------------------------------------------------------------- 1 | {% macro showcase_intro() %} 2 | 5 | {% endmacro showcase_intro %} --------------------------------------------------------------------------------