diff --git a/.github/workflows/build-site.yml b/.github/workflows/build-site.yml deleted file mode 100644 index 4781fa7d..00000000 --- a/.github/workflows/build-site.yml +++ /dev/null @@ -1,122 +0,0 @@ -name: Build Site - -on: - push: - branches: - - "*" - - "!staging.tmp" - tags: - - "*" - pull_request: - schedule: - - cron: "0 0 1/4 * *" # every 4 days - -jobs: - build_site: - name: "Zola Build" - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: "Download Zola" - 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 - - - name: "Build Site" - run: ./zola build - - - name: Upload Generated Site - uses: actions/upload-artifact@v4 - with: - name: generated_site - path: public - - zola_check: - name: "Zola Check" - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: "Download Zola" - 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 - - - name: "Run zola check" - run: ./zola check - - check_spelling: - name: "Check Spelling" - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - run: curl -L https://git.io/misspell | bash - name: "Install misspell" - - run: bin/misspell -error content - name: "Check for common typos using `misspell`" - # Executes "typos ." - - uses: crate-ci/typos@v1.16.12 - name: "Check for common typos using `typos`" - - deploy_site: - name: "Deploy Generated Site" - runs-on: ubuntu-latest - needs: [build_site, check_spelling] - if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'schedule') && github.repository == 'rust-osdev/homepage' - permissions: - contents: write - issues: write - - steps: - - name: "Download Generated Site" - uses: actions/download-artifact@v4.1.7 - with: - name: generated_site - path: generated_site - - - name: Check out gh-pages branch - uses: actions/checkout@v2 - with: - ref: "gh-pages" - path: "gh-pages" - - - name: "Set Up Git Identity" - run: | - git config --local user.name "GitHub Actions Deploy" - git config --local user.email "github-actions-deploy@rust-osdev.com" - working-directory: "gh-pages" - - - name: "Delete Old Content" - run: "rm -r ./*" - working-directory: "gh-pages" - - - name: "Add New Content" - run: cp -r generated_site/* gh-pages - - - name: "Commit New Content" - run: | - git add . - git commit --allow-empty -m "Deploy ${GITHUB_SHA} - - Deploy of commit https://github.com/rust-osdev/homepage/commit/${GITHUB_SHA}" - - if git show HEAD --summary | grep -P 'create mode \d+ this-month/\d{4}-\d{2}/index.html' - then - # This might do something weird if there are multiple such pages. Hopefully that should never happen. - new_page=$(git show HEAD --summary | grep -P 'create mode \d+ this-month/\d{4}-\d{2}/index.html' | cut -d' ' -f5) - echo "Detected a new monthly page:" $new_page - curl -s -X POST \ - https://api.github.com/repos/rust-osdev/homepage/issues/212/comments \ - -d "{\"body\":\"New issue published: [**$new_page**](https://rust-osdev.com/$new_page). Beep boop.\"}" \ - -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" - fi - working-directory: "gh-pages" - - - name: "Show Changes" - run: "git show" - working-directory: "gh-pages" - - - name: "Push Changes" - run: "git push" - working-directory: "gh-pages" diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 85a1daf9..00000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/public \ No newline at end of file diff --git a/.typos.toml b/.typos.toml deleted file mode 100644 index 885139b8..00000000 --- a/.typos.toml +++ /dev/null @@ -1,16 +0,0 @@ -# Configuration for https://github.com/crate-ci/typos - -[files] -extend-exclude = [ - # List of files (without leading ./) -] - -[default] -extend-ignore-identifiers-re = [ - "^BARs$", - "[@Programatic]", -] - -[default.extend-words] - -[default.extend-identifiers] diff --git a/404.html b/404.html new file mode 100644 index 00000000..f8414f0e --- /dev/null +++ b/404.html @@ -0,0 +1,3 @@ + +404 Not Found +

404 Not Found

diff --git a/static/CNAME b/CNAME similarity index 100% rename from static/CNAME rename to CNAME diff --git a/LICENSE-APACHE b/LICENSE-APACHE deleted file mode 100644 index 8dada3ed..00000000 --- a/LICENSE-APACHE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/LICENSE-MIT b/LICENSE-MIT deleted file mode 100644 index 2c54cc9b..00000000 --- a/LICENSE-MIT +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2020 The Rust OSDev Developers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index cc993055..00000000 --- a/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# homepage - -This repository contains the source code for our organization homepage at . - -# Development -In order to build the website, first you will need to install the [zola](https://github.com/getzola/zola/releases) static site generator. - -Then you can run: -``` -./zola serve -``` -and open localhost:1111 - -## License - -Licensed under either of - -- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or - http://www.apache.org/licenses/LICENSE-2.0) -- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) - -at your option. - -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. diff --git a/collect-changes/.gitignore b/collect-changes/.gitignore deleted file mode 100644 index eb5a316c..00000000 --- a/collect-changes/.gitignore +++ /dev/null @@ -1 +0,0 @@ -target diff --git a/collect-changes/Cargo.lock b/collect-changes/Cargo.lock deleted file mode 100644 index a5376152..00000000 --- a/collect-changes/Cargo.lock +++ /dev/null @@ -1,1701 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - -[[package]] -name = "async-trait" -version = "0.1.88" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets", -] - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "bitflags" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" - -[[package]] -name = "bumpalo" -version = "3.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" - -[[package]] -name = "cc" -version = "1.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" -dependencies = [ - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" - -[[package]] -name = "chrono" -version = "0.4.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "wasm-bindgen", - "windows-link", -] - -[[package]] -name = "collect-changes" -version = "0.1.0" -dependencies = [ - "chrono", - "eyre", - "octocrab", - "tokio", -] - -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "deranged" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "http" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "hyper" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "httparse", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http", - "hyper", - "hyper-util", - "log", - "rustls", - "rustls-native-certs", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", -] - -[[package]] -name = "hyper-timeout" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" -dependencies = [ - "hyper", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http", - "http-body", - "hyper", - "libc", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" - -[[package]] -name = "icu_properties" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "potential_utf", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" - -[[package]] -name = "icu_provider" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" -dependencies = [ - "displaydoc", - "icu_locale_core", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "js-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "jsonwebtoken" -version = "9.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" -dependencies = [ - "base64", - "js-sys", - "pem", - "ring", - "serde", - "serde_json", - "simple_asn1", -] - -[[package]] -name = "libc" -version = "0.2.174" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" - -[[package]] -name = "litemap" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" - -[[package]] -name = "lock_api" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "memchr" -version = "2.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - -[[package]] -name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.59.0", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - -[[package]] -name = "octocrab" -version = "0.44.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86996964f8b721067b6ed238aa0ccee56ecad6ee5e714468aa567992d05d2b91" -dependencies = [ - "arc-swap", - "async-trait", - "base64", - "bytes", - "cfg-if", - "chrono", - "either", - "futures", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-timeout", - "hyper-util", - "jsonwebtoken", - "once_cell", - "percent-encoding", - "pin-project", - "secrecy", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "snafu", - "tokio", - "tower", - "tower-http", - "tracing", - "url", - "web-time", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "parking_lot" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets", -] - -[[package]] -name = "pem" -version = "3.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" -dependencies = [ - "base64", - "serde", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "potential_utf" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" -dependencies = [ - "zerovec", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "proc-macro2" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" -dependencies = [ - "bitflags", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" - -[[package]] -name = "rustls" -version = "0.23.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pki-types" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" -dependencies = [ - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "schannel" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "secrecy" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" -dependencies = [ - "zeroize", -] - -[[package]] -name = "security-framework" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "serde" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.140" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" -dependencies = [ - "itoa", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" -dependencies = [ - "libc", -] - -[[package]] -name = "simple_asn1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror", - "time", -] - -[[package]] -name = "slab" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "snafu" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320b01e011bf8d5d7a4a4a4be966d9160968935849c83b918827f6a435e7f627" -dependencies = [ - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1961e2ef424c1424204d3a5d6975f934f56b6d50ff5732382d84ebf460e147f7" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "2.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thiserror" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "time" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" - -[[package]] -name = "time-macros" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tokio" -version = "1.45.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" -dependencies = [ - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "iri-string", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasm-bindgen" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-interface" -version = "0.59.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "writeable" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" - -[[package]] -name = "yoke" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" - -[[package]] -name = "zerotrie" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/collect-changes/Cargo.toml b/collect-changes/Cargo.toml deleted file mode 100644 index bead85f8..00000000 --- a/collect-changes/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "collect-changes" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -chrono = { version = "0.4.21", default-features = false } -eyre = "0.6.8" -octocrab = "0.44.1" -tokio = { version = "1.20.4", features = ["full"] } diff --git a/collect-changes/src/main.rs b/collect-changes/src/main.rs deleted file mode 100644 index 34018d04..00000000 --- a/collect-changes/src/main.rs +++ /dev/null @@ -1,109 +0,0 @@ -use chrono::{Datelike, Duration, Utc}; -use octocrab::params; -use std::collections::{BTreeMap, HashMap}; - -#[tokio::main] -async fn main() -> eyre::Result<()> { - let last_month = { - let twenty_days_ago = Utc::now().checked_sub_signed(Duration::days(20)).unwrap(); - let first_of_month = twenty_days_ago.with_day(1).unwrap().date(); - first_of_month.and_hms_opt(0, 0, 0).unwrap() - }; - let year = last_month.year(); - let month = last_month.month(); - println!("Creating changelog for {year}/{month}",); - - let gh = { - let mut builder = octocrab::OctocrabBuilder::new(); - builder = if let Ok(token) = std::env::var("GITHUB_TOKEN") { - println!("Using GITHUB_TOKEN"); - builder.personal_token(token) - } else { - builder - }; - builder.build()? - }; - let repo_page = gh - .orgs("rust-osdev") - .list_repos() - .repo_type(params::repos::Type::Sources) - .sort(params::repos::Sort::Pushed) - .direction(params::Direction::Descending) - .per_page(100) - .send() - .await?; - let all_repos = gh.all_pages(repo_page).await?; - - let mut changes: BTreeMap<_, Vec<_>> = BTreeMap::new(); - let mut repos = HashMap::new(); - for repo in all_repos { - let mut pulls = gh - .pulls("rust-osdev", &repo.name) - .list() - .state(params::State::Closed) - .sort(params::pulls::Sort::Updated) - .direction(params::Direction::Descending) - .per_page(100) - .send() - .await?; - let entry = changes.entry(repo.name.clone()).or_default(); - repos.insert(repo.name.clone(), repo); - loop { - let items = pulls.take_items(); - let merged = items - .iter() - .cloned() - .filter_map(|p| p.merged_at.map(|t| (p, t))) - .filter(|(_, t)| t.year() == year && t.month() == month); - entry.extend(merged); - if items - .last() - .and_then(|p| p.updated_at) - .map(|u| u < last_month) - .unwrap_or(true) - { - break; - } - match gh.get_page(&pulls.next).await? { - None => break, - Some(next_page) => pulls = next_page, - } - } - } - changes.retain(|_, pulls| !pulls.is_empty()); - - for (repo_name, mut pulls) in changes { - let repo = &repos[&repo_name]; - println!( - "\n\n### [`{}`]({})\n", - repo.name, - repo.html_url.as_ref().unwrap() - ); - - let mut thanks = BTreeMap::new(); - - pulls.sort_by_key(|(_, merged_at)| *merged_at); - for (pull, _) in pulls { - println!("- [{}]({})", pull.title.unwrap(), pull.html_url.unwrap()); - - let author = pull.user.unwrap(); - thanks.insert(author.id, author); - } - - if !thanks.is_empty() { - print!("\nThanks to "); - let last_idx = thanks.len() - 1; - for (i, author) in thanks.into_values().enumerate() { - match i { - 0 => {} - i if i == last_idx => print!(", and "), - _ => print!(", "), - } - print!("[@{}]({})", author.login, author.html_url); - } - println!(" for their contributions!"); - } - } - - Ok(()) -} diff --git a/config.toml b/config.toml deleted file mode 100644 index bb43f8e2..00000000 --- a/config.toml +++ /dev/null @@ -1,37 +0,0 @@ -# The URL the site will be built for -base_url = "https://rust-osdev.com" - -title = "Rust OSDev" -description = "Operating System Development in Rust" - -# Whether to automatically compile all Sass files in the sass directory -compile_sass = false - -# Whether to build a search index to be used later on by a JavaScript library -build_search_index = false - -# Generate RSS feed -generate_feed = true -feed_filename = "rss.xml" - -[markdown] -highlight_code = true - -[link_checker] -skip_prefixes = [ - "https://crates.io/crates", # see https://github.com/rust-lang/crates.io/issues/788 - "https://github.com", # because of rate limiting - "https://rusty-hermit.k8s.eonerc.rwth-aachen.de/", # RustyHermit show case - "https://www.linux-kvm.org", # see https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/ - "https://twitter.com/", # too many redirects - "https://nitter.net/", # 403 forbidden - "https://www.reddit.com/", # 403 forbidden - "https://blog.rust.careers", # Expired certificate - "https://gee.cs.oswego.edu", # times out - "https://web.archive.org", # times out - "https://apollolabsblog.hashnode.dev", # requires js - "https://doi.org", # 403 forbidden -] - -[extra] -# Put all your custom variables here diff --git a/templates/base.html b/contact/index.html similarity index 57% rename from templates/base.html rename to contact/index.html index 3f8b745c..90105054 100644 --- a/templates/base.html +++ b/contact/index.html @@ -1,22 +1,22 @@ - + - + - {% if current_url %} - - {% endif %} + + + - + - {% block title %}{% endblock title %} + Contact | Rust OSDev @@ -24,20 +24,26 @@

- {{ config.title | safe }} - {{ config.description }} + Rust OSDev + Operating System Development in Rust

-
{% block main %}{% endblock main %}
+
+

Contact

+

Philipp Oppermann

+

contact@phil-opp.com

+

Erna-Hötzel-Str. 3, 76344 Eggenstein, Germany

+ +
diff --git a/content/pages/_index.md b/content/pages/_index.md deleted file mode 100644 index 51045f13..00000000 --- a/content/pages/_index.md +++ /dev/null @@ -1,4 +0,0 @@ -+++ -title = "Pages" -render = false -+++ diff --git a/content/pages/contact.md b/content/pages/contact.md deleted file mode 100644 index 4c0b9222..00000000 --- a/content/pages/contact.md +++ /dev/null @@ -1,11 +0,0 @@ -+++ -title = "Contact" -path = "contact" -template = "plain.html" -+++ - -Philipp Oppermann - -contact@phil-opp.com - -Erna-Hötzel-Str. 3, 76344 Eggenstein, Germany diff --git a/content/showcase/_index.md b/content/showcase/_index.md deleted file mode 100644 index 5ec78b4c..00000000 --- a/content/showcase/_index.md +++ /dev/null @@ -1,7 +0,0 @@ -+++ -title = "Showcase" -sort_by = "date" -page_template = "showcase.html" -+++ - -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). diff --git a/content/showcase/cluu/index.md b/content/showcase/cluu/index.md deleted file mode 100644 index cd7ac6aa..00000000 --- a/content/showcase/cluu/index.md +++ /dev/null @@ -1,63 +0,0 @@ -+++ -title = "CLUU (Compact Lightweight Unix Utopia)" -date = 2023-06-14 - -[extra] -authors = ["valibali"] -+++ - -
- -[![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) - -
- -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. - - - - - - -## Motivation - -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. - -## Project Information - -CLUU draws inspiration from the following operating systems: - -- [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. -- [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. - -As well as heavily influenced by the following projects: - -- [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. -- [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 -- [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. - -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. - -## Current State and Goals - -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: - -- **UART16550 driver**: A driver for UART16550, allowing communication with the serial port for debugging and logging purposes. -- **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. -- **Framebuffer driver**: A driver for the framebuffer, providing a graphical output display. -- **Simple graphics and writing**: Basic graphical capabilities have been implemented, allowing for drawing and writing on the screen using a PSF font. -- **Basic Logging framework**: A basic logging framework has been developed to facilitate debugging and information output during the development process. - -![Screencheck](screen.png) ![serial_output](serial_out.png) - -As the project progresses, the focus will shift towards implementing additional features, such as: - -- **Kernel Implementation**: Further development of the microkernel's core functionality, including process management, interprocess communication, and resource management. -- **Device Drivers**: Continued development of drivers for essential hardware components, including keyboard, storage devices, and other peripherals. -- **Filesystem Support**: Introducing filesystem support to enable file I/O operations and provide a foundation for user-level processes and applications. - -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). - -## License - -CLUU is licensed under the MIT License. See [LICENSE](https://github.com/valibali/cluu/blob/master/LICENSE) for more information. diff --git a/content/showcase/hermit/index.md b/content/showcase/hermit/index.md deleted file mode 100644 index 1f77bf04..00000000 --- a/content/showcase/hermit/index.md +++ /dev/null @@ -1,112 +0,0 @@ -+++ -title = "The Hermit Operating System" -date = 2021-01-22 -aliases = ["showcase/rusty-hermit"] - -[extra] -authors = ["stlankes", "mkroening"] -+++ - -[Hermit](http://hermit-os.org) is a unikernel project, that is completely written in Rust. -[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). -They are typically used in virtualized environments, which build the backbone of typical cloud and edge infrastructures. - - - - - -## Virtualization Designs - -Common virtualized environments are based on classical **_virtual machines_**. -In this case, complete machines are emulated or virtualized, and common operating systems are running on both the host and guest sides: - -![Structure of a common virtualization environment](common_vm.png) - -This technique is established (VMware, Hyper-V, etc.) and widely used. -However, it introduces additional overhead, especially regarding memory consumption and performance. - -An alternative approach to common virtual machines is **_OS-level virtualization_**, where the kernel allows the existence of multiple isolated user-space instances. -These isolated instances are also known as “containers.” -Typical representatives are LXC and Docker, which promise less overhead in comparison to common virtual machines. -However, the isolation between the processes is weaker and may provide less security. - -## Unikernels - -Often, only one application (e.g., a web server) is running in the container or the virtual machine. -In this case, a _unikernel_ is an attractive solution. -The kernel is provided as a static library and linked to the application. -As the images directly contain the OS kernel, unikernels can be directly booted inside a virtual machine and do not require the typical software stack containing a Linux kernel and its user land within the VM. - -Unikernels do not provide system calls in the classical sense, as everything is running with the privilege level of a kernel, and what is typically done via system calls is provided via a common function call. -At first glance, this sounds more insecure than previous approaches. -However, these kernels are expected to run within a virtual machine, which isolates the application from the real system. -In addition, common compiler analysis is used to check the complete software stack, and unneeded components can even be removed, which can reduce the attack surface of the application. - -![Structure of a library operating system](libos.png) - -Well-known unikernels are kernels such as [MirageOS](https://mirage.io/) and [Unikraft](http://www.unikraft.org/). -MirageOS is written in OCaml, while Unikraft still uses C as the programming language of choice. -In contrast to these kernels, Hermit is completely written in Rust to benefit from Rust's performance and security behavior. - -## Hermit - -In principle, every existing Rust application can be built on top of Hermit. -However, unikernels are single-tasking operating systems. -Consequently, support for the system call `fork` and inter-process communication is missing. -In addition, a classical C library is missing, which is typically used as an interface to the operating system. -Every crate that bypasses the standard runtime and tries to communicate directly with the operating system does not work without modifications. -However, many applications do not depend on these features and work on Hermit. - -### Performance - -Unikernels can be highly optimized. -For instance, we optimized the network stack of Hermit. -Hermit uses [smoltcp](https://github.com/smoltcp-rs/smoltcp) as the network stack, which is completely written in Rust. -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. - -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: - -![Bandwidth of the Hermit's experimental network interface](bandwidth.png) - -Especially for small messages, Hermit is faster than Linux. - -### Research - -Hermit is also a research project to evaluate new operating system designs, that improve the scalability and security of operating systems in cloud environments. -For instance, Hermit provides classical techniques to improve security behavior, like stack guards and separating the application stack from the libOS stack. -However, a library operating system typically uses a common function call to enter the kernel. -A classical separation of user and kernel space by entering a higher privilege level is missing. - -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). -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. - -MPK requires modification of page tables at a small performance cost. -Four previously unused bits of each page table entry (the 62nd to the 59th on x86-64) are exploited by MPK. -Since MPK exploits four bits of the page table entry, it supports up to 15 protection keys. -MPK controls per-thread permission on groups of pages. -Each core has a PKRU register (32 bits) containing a permission value. -The value of the PKRU register defines the permission of the thread currently running on that core for each group of pages containing a protection key in their page table entries. -Unlike page-table-level permission, MPK provides thread-local memory permission. - -We provide user and kernel separation, so we simply see the entire application as an untrusted component, independently of application-specific characteristics such as the language it is written in or the level of skill of the application’s programmer. -In addition, we divide the kernel code into trusted and untrusted components. -Trusted kernel components represent pieces of code written in a memory-safe language, i.e., offering strong security guarantees. -Untrusted kernel components correspond to code written either in memory-unsafe languages or in unsafe Rust code blocks. - -By entering the library operating system through the application binary interface, the protection keys will be automatically changed, which allows access to the kernel stack and the kernel heap. -Unauthorized access from within the application will trigger a page fault, which will be handled by the library operating system. - -### Getting Started - -Take a look at [hermit-os/hermit-rs-template](https://github.com/hermit-os/hermit-rs-template) for a simple starter application. - -The Hermit platform is an [official Rust target](https://doc.rust-lang.org/nightly/rustc/platform-support/hermit.html). -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. -Alternatively, you can compile the whole Rust compiler for Hermit, of course. - -### Roadmap - -In the near future, we plan to stabilize the interface to the hardware. -For instance, the support of [virtiofs](https://virtio-fs.gitlab.io/) is at an early stage. -In addition, the integration into the Rust standard library isn't finalized yet, and the current version runs only on x86-64. -In the future, we want to also support AArch64 as a processor architecture. diff --git a/content/this-month/2020-04/index.md b/content/this-month/2020-04/index.md deleted file mode 100644 index 3b80fa63..00000000 --- a/content/this-month/2020-04/index.md +++ /dev/null @@ -1,161 +0,0 @@ -+++ -title = "This Month in Rust OSDev (April 2020)" -date = 2020-05-06 - -[extra] -month = "April 2020" -authors = [ - "phil-opp", - "IsaacWoods", -] -+++ - -Welcome to the first 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 community. - - - -These posts are the successor of the [_"Status Update"_ posts](https://os.phil-opp.com/status-update/) on the _"Writing an OS in Rust"_ blog. Instead of only focusing on the updates to the blog and the directly related crates, we try to give an overview of the full Rust OSDev ecosystem in this new series. This includes all the projects under the [`rust-osdev`] GitHub organization, relevant projects of other organizations, and also personal OS projects. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -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). - -## News and Blog Posts - -We try to collect posts that are relevant to Rust-based OS development each month. Please create pull requests for any posts that you want linked in the next issue. - -- [Rust/WinRT Public Preview](https://blogs.windows.com/windowsdeveloper/2020/04/30/rust-winrt-public-preview/) -- [Georgia Tech CS-3210: Write an OS for the Raspberry Pi in Rust](https://web.archive.org/web/20210303034834/https://tc.gts3.org/cs3210/2020/spring/lab.html) -- [Rust-Written Redox OS Booting The 128-Thread AMD Ryzen Threadripper 3990X](https://www.phoronix.com/scan.php?page=news_item&px=Redox-OS-On-Threadripper-3990X) - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -### `x86_64` - -The [`x86_64` crate](https://github.com/rust-osdev/x86_64) 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. - -This month, we released version `0.10.0` of `x86_64`, which includes some breaking changes: - -- _Breaking:_ [Make `map_to` and `update_flags` unsafe](https://github.com/rust-osdev/x86_64/pull/135) -- _Breaking:_ [Make FrameDeallocator::deallocate_frame unsafe](https://github.com/rust-osdev/x86_64/pull/146) -- _Breaking:_ [Don't pass small trivially copyable types by reference](https://github.com/rust-osdev/x86_64/pull/147) -- [Use `#[inline]` everywhere](https://github.com/rust-osdev/x86_64/pull/145) -- [Add `{PhysFrame,Page}::from_start_address_unchecked`](https://github.com/rust-osdev/x86_64/pull/142) - -After `v0.10.0`, the following changes were merged: - -- [Add `InterruptDescriptorTable::load_unsafe`](https://github.com/rust-osdev/x86_64/pull/137) (published as `v0.10.1`) -- [Use `llvm_asm!` instead of deprecated `asm!` macro](https://github.com/rust-osdev/x86_64/pull/151) - - This might break older nightlies. Given that version `0.10.x` is so recent, we still decided to release only a patch version. Note that this isn't a breaking change in the `semver` sense since we only guarantee compatibility with recent nightlies. -- [Return the correct RPL from `GDT::add_entry()`](https://github.com/rust-osdev/x86_64/pull/153) (published as `v0.10.2`) - -Thanks to [@m-ou-se](https://github.com/m-ou-se), [@tomaka](https://github.com/tomaka), [@haraldh](https://github.com/haraldh), and [@imtsuki](https://github.com/imtsuki) for their contributions! - -### `acpi` and `aml` - -The [`acpi` repository](https://github.com/rust-osdev/acpi) contains crates for parsing the [ACPI](https://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface) tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. The crate for parsing the static tables ([`acpi`](https://crates.io/crates/acpi)) was stabilised this month – while it needs more work to support the entire spec, it is now in the state where it can be integrated into a Rust kernel to provide useful information, and its overall architecture is unlikely to change in the near future. - -The full set of changes is: - -- [Remove two nightly features in the ACPI crate](https://github.com/rust-osdev/acpi/pull/69) -- [Make local NMI line table optional](https://github.com/rust-osdev/acpi/pull/68) (published as v0.8.0) -- [Prepare for stabilisation of the `acpi` crate](https://github.com/rust-osdev/acpi/pull/70) (🎉 published as v1.0.0 🎉) - -Thanks to [@tomaka](https://github.com/tomaka) for their contribution and congratulations to the creator and maintainer [@IsaacWoods](https://github.com/IsaacWoods) on the `1.0` release! - -### `bootloader` - -The [`bootloader` crate](https://github.com/rust-osdev/bootloader) implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. It received the following updates this month: - -- [SSE feature: remove inline assembly + don't set reserved bits](https://github.com/rust-osdev/bootloader/pull/105) (published as `v0.9.1`) -- [Use `llvm_asm!` instead of deprecated `asm!`](https://github.com/rust-osdev/bootloader/pull/108) (published as `v0.9.2`) - -Thanks to [@Freax13](https://github.com/Freax13) and [@realKennyStrawn93](https://github.com/realKennyStrawn93) for these changes! - -Right now, [@rybot666](https://github.com/rybot666) and [@phil-opp](https://github.com/phil-opp) are working on a rewrite of the bootloader. The goal is to port the 16-bit and 32-bit stages from assembly to Rust, which should make the crate safer, more composable, and easier to understand for outsiders. Our progress is tracked in the [`Rewrite` milestone](https://github.com/rust-osdev/bootloader/milestone/1). - -### `bootimage` - -The [`bootimage` tool](https://github.com/rust-osdev/bootimage) allows the creation of bootable disk images for `bootloader`-based kernels. It also provides a runner executable for `cargo` to make `cargo xrun` and `cargo xtest` work using QEMU. In April, the crate received the following updates: - -- [Set empty RUSTFLAGS to ensure that no .cargo/config applies](https://github.com/rust-osdev/bootimage/pull/51) (published as v0.7.9) -- [Add support for doctests](https://github.com/rust-osdev/bootimage/pull/52) (published as v0.7.10) - -Thanks to [@Freax13](https://github.com/Freax13) for their contribution! - -### `uart_16550` - -The [`uart_16550` crate](https://github.com/rust-osdev/uart_16550) provides basic support for serial port I/O for 16550-compatible UARTs. This month, the crate received support for serial input: - -- [Support receiving bytes from serial ports](https://github.com/rust-osdev/uart_16550/pull/8) - -Thanks to [@imtsuki](https://github.com/imtsuki) for their contribution! - -### `cargo-xbuild` - -The [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we added a new environment variable to help debugging build errors: - -- [Add an environment variable to keep the temp dir](https://github.com/rust-osdev/cargo-xbuild/pull/67) (published as v0.5.29) - -### `uefi` - -The [`uefi` crate](https://github.com/rust-osdev/uefi-rs) 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 crate received a new cargo feature to ignore logger errors: - -- [Add cargo feature for ignoring logger errors](https://github.com/rust-osdev/uefi-rs/pull/132) - -## New Projects - -There are a number of new projects in the `rust-osdev` organization: - -- [**`homepage`:**](https://github.com/rust-osdev/homepage) As you might have noticed by now, we have a new organization-level homepage at . The `homepage` repository contains the source code for this website. Right now, it is still a work-in-progress and only contains the very minimum to host this post, but we plan to add more content soon. - - Note that we will create a branch for the upcoming May issue of _"This Month in Rust OSDev"_. Please open pull requests for any content that you would like to see next month. -- [**`vga`:**](https://github.com/rust-osdev/vga) The goal of the `vga` crate is to allow configuration of the VGA hardware. It already makes it possible to switch from a text-based buffer to a pixel-based framebuffer, which enables drawing of lines, geometric shapes, and even images. The library is created by [@RKennedy9064](https://github.com/RKennedy9064). -- [**`ps2-mouse`:**](https://github.com/rust-osdev/ps2-mouse) The library provides a basic interface for interacting with a PS/2 mouse. It is also created by [@RKennedy9064](https://github.com/RKennedy9064). - -## Personal Projects - -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. - -### `IsaacWoods/pebble` - -(Section written by [@IsaacWoods](ttps://github.com/IsaacWoods)) - -[Pebble](https://github.com/IsaacWoods/pebble) has been undergoing a bit of a reorganisation, in the interests of supporting a second architecture (ARM64). A hardware abstraction layer (HAL) has been introduced that abstracts away the platform-specifics of managing page tables, creating processes etc. so that the main `kernel` crate is now completely platform-independent. - -I also wrote a [little TFTP server](https://github.com/IsaacWoods/pebble/blob/master/tools/tftp_serve/src/main.rs) for netbooting a Raspberry Pi 4 from a development machine. This makes iterating the kernel a lot easier because there's no need to write it to an SD card after every compile. In the next few weeks, I hope to clean this code up and publish it for use as both a library and CLI application, and maybe write a blog-post on the intricacies of netbooting the Pi. - -### `rust-embedded/rust-raspberrypi-OS-tutorials` - -(Section written by [@andre-richter](https://github.com/andre-richter)) - -The [_Operating System development tutorials in Rust on the Raspberry Pi_](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) project received the following updates recently: - -- [Add `tutorial 14`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/14_exceptions_part2_peripheral_IRQs): Exceptions Part 2: Peripheral IRQs. - - We write `device drivers` for the two interrupt controllers on the _Raspberry Pi 3_ (Broadcom - custom controller) and _Pi 4_ (ARM Generic Interrupt Controller v2, `GICv2`). - - Modularity is ensured by interfacing everything through a trait named `IRQManager`. - - Handling for our first peripheral IRQ is implemented: The `UART`'s receive IRQ - one IRQ per - received character. -- [Set chainloader relocation address to `32 MiB`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/commit/3a794448adc26bcd318df47ae1a81ab56203364a). - - Enables booting on Pi3 A+ devices. -- [Run the chainloader natively on non-Linux Unix systems](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/commit/089565762a60462c527a907fba2caeee583fa58d). - - Adds experimental support for `macOS` and other Unix systems which have `Ruby` available. - -### `phil-opp/blog_os` - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -Apart from a few [minor fixes](https://github.com/phil-opp/blog_os/pulls?q=is%3Apr+is%3Aclosed+merged%3A2020-04-02..2020-05-01) (thanks for all the contributions!), April was a quiet month for the [_"Writing an OS in Rust"_](https://os.phil-opp.com/) project. I focused my work this month on the `x86_64` library, the rewrite of the bootloader, and my job search instead. In this regard, I'm excited to announce that I have decided to do Rust-related freelance work for now, which will allow me to continue dedicating some of my time to open-source work. - - - -## Join Us? - -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). diff --git a/content/this-month/2020-05/index.md b/content/this-month/2020-05/index.md deleted file mode 100644 index de21095d..00000000 --- a/content/this-month/2020-05/index.md +++ /dev/null @@ -1,182 +0,0 @@ -+++ -title = "This Month in Rust OSDev (May 2020)" -date = 2020-06-07 - -[extra] -month = "May 2020" -authors = [ - "phil-opp", - "IsaacWoods", - "GabrielMajeri", - "stlankes", - "andre-richter", -] -+++ - -Welcome to the second 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. - - - -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). - - - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In May, the crate received a bugfix for inclusive page/frame ranges. We also landed a long-awaited change to the `Mapper::map_to` function to set certain page table flags also in higher level page tables: - -- [Fix: Inclusive ranges is_empty() comparison](https://github.com/rust-osdev/x86_64/pull/156) (published as `v0.10.3`) -- [Handle parent table flags in Mapper methods](https://github.com/rust-osdev/x86_64/pull/114) (published as `v0.11.0`) - -Thanks to [@haraldh](https://github.com/haraldh) and [@mrll](https://github.com/mrll) for their contributions! - -### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) - -The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. - -This month, `rustc`/`cargo` [changed their codegen behavior for builds with link-time optimization (LTO)](https://github.com/rust-lang/cargo/pull/8192), which lead to [breakage for LTO builds with `cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild/issues/69). Fixing this issue was not easy and required [multiple](https://github.com/rust-osdev/cargo-xbuild/pull/70) [tries](https://github.com/rust-osdev/cargo-xbuild/pull/71) until we found a proper [solution](https://github.com/rust-osdev/cargo-xbuild/pull/73). - -Unfortunately, the solution still led to [link issues](https://github.com/rust-osdev/cargo-xbuild/issues/72) for some people, which was caused by a [bug in `cargo`/`rustc`](https://github.com/rust-lang/cargo/issues/8239). Thanks to [@alexcrichton](https://github.com/alexcrichton), this was quickly [fixed in `rustc`](https://github.com/rust-lang/rust/pull/72325), so that now everything should work again. - -Apart from these bugfixes, there were also two other changes this month: - -- [Respect Cargo.lock file for sysroot build](https://github.com/rust-osdev/cargo-xbuild/pull/75) (published as `v0.32`) -- [Don't print warning about missing root package in quiet mode](https://github.com/rust-osdev/cargo-xbuild/pull/79) (published as `v0.5.33`) - -Thanks to [@Nils-TUD](https://github.com/Nils-TUD) for their contribution and to all the people that helped investigating the build errors! - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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. - -Not a lot happened this month, but preparations -were made to change how the AML namespace is stored on the heap, in order to avoid a lot of small heap allocations -for AML paths, and reduce the number of heap allocations overall. However, some more profiling infrastructure will -need to be built before starting this. - -In preparation, a [change to how `DefName`s are stored in the namespace](https://github.com/rust-osdev/acpi/commit/3b08721981d85e7bd82124db8c72e0c31d243771) was made, which avoids an extra heap -allocation per `DefName`, and also allows us to simplify some code around the `aml` crate. - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The [`bootloader` crate](https://github.com/rust-osdev/bootloader) implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. It received the following updates this month: - -- [Update x86_64 dependency to version 0.11.0](https://github.com/rust-osdev/bootloader/pull/117) (published as `v0.9.3`) -- [Remove unused feature gates](https://github.com/rust-osdev/bootloader/pull/118) -- [Add recursive_idx for boot info](https://github.com/rust-osdev/bootloader/pull/116) (published as `v0.9.4`) - -Thanks to [@mark-i-m](https://github.com/mark-i-m) and [@Aaron1011](https://github.com/Aaron1011) for their contributions! - -### [`bootimage`](https://github.com/rust-osdev/bootimage) - -The `bootimage` tool allows the creation of bootable disk images for `bootloader`-based kernels. It also provides a runner executable for `cargo` to make `cargo xrun` and `cargo xtest` work using QEMU. In May, the crate was almost completely rewritten with a smaller API to make it more maintainable: - -- [Rewrite: Remove support for `bootimage {run, test}`](https://github.com/rust-osdev/bootimage/pull/55) (published as `v0.8.0`) - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. This month, the crate received the following updates: - -- [Use `spin_loop_hint` while waiting for data](https://github.com/rust-osdev/uart_16550/pull/9) (published as `v0.2.6`) -- [Update x86_64 dependency to v0.11.0](https://github.com/rust-osdev/uart_16550/commit/7faedcab2d266e758913d394c499db8dc2d40aed) (published as `v0.2.7`) - -Thanks to [@dbeckwith](https://github.com/dbeckwith) for their contribution! - -### [`uefi`](https://github.com/rust-osdev/uefi-rs) - -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 crate's dependencies were updated, and a bug was fixed in the graphics protocol: - -- [Bump x86_64 dependency version to fix build on latest nightlies](https://github.com/rust-osdev/uefi-rs/pull/134) -- [Fix `BltPixel::from` conversion](https://github.com/rust-osdev/uefi-rs/pull/135) - -Thanks to [@imtsuki](https://github.com/imtsuki) and [@BinaryTENSHi](https://github.com/BinaryTENSHi) for their contributions! - - - -## Personal Projects - -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. - -### [`IsaacWoods/pebble`](https://github.com/IsaacWoods/pebble) - -(Section written by [@IsaacWoods](https://github.com/IsaacWoods)) - -This month, I've been tracking down a bug in the kernel that causes usermode stacks to become corrupted on the -return of some system calls. While I've not found the root cause, I've taken this opportunity to add some more -debugging capabilities, which have found a number of other kernel bugs. - -I also started working on the Rust implementation of [Ptah](https://github.com/IsaacWoods/pebble/tree/master/lib/ptah/src), -the wire format for Pebble's message passing interface. It allows libraries to easily use [Serde](https://serde.rs/) to -serialize and deserialize Rust types to and from the wire format. In the future, a compiler will be able to -generate bindings for `Ptah` for a number of different supported languages, which will allow tasks written in -different languages to communicate over Pebble `Channel`s using idiomatic types. - -### [`RustyHermit`](https://github.com/hermitcore/rusty-hermit) - -(Section written by [@stlankes](https://github.com/stlankes)) - -RustyHermit is a [unikernel](http://unikernel.org) targeting a scalable and predictable runtime. Unikernel means, you bundle your application directly with the kernel library, so that it can run without any installed operating system. -This reduces image size and overhead, therefore, interesting applications include virtual machines and high-performance computing. - -This month the integration of [smoltcp](https://github.com/smoltcp-rs/smoltcp) has been improved and first support for virtio has been integrated. The integration in Rust's standard runtime is already in progress and clients can be developed with `TcpStream`. Server side applications will follow soon. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -This month, support for the legacy `asm!` macro was removed from `rustc`. This lead to build errors for the _Writing an OS in Rust_ project because some dependencies were still using the macro. To fix this, I landed a number of dependency updates: - -- [Update bootloader to v0.9.3](https://github.com/phil-opp/blog_os/pull/808) -- [Update x86_64 dependency to version 0.11.0](https://github.com/phil-opp/blog_os/pull/809) -- [Update Hardware Interrupts post to use pic8259_simple v0.2.0](https://github.com/phil-opp/blog_os/pull/810) - -I also decided to change the design of the executor in the Async/Await post to simplify it: - -- [Simplify executor by merging task_queue and wake_queue](https://github.com/phil-opp/blog_os/pull/804) -- [Update Async/Await post for simplified executor design](https://github.com/phil-opp/blog_os/pull/805) - -While I already started a draft on the next blog post about processes, I currently plan to look into adding UEFI support to the `bootloader` crate first. The reason is that UEFI support will require some fundamental changes to the blog because the VGA text buffer and the legacy PIC are not supported on UEFI. This is also relevant to the upcoming post about processes, since different designs would be possible if we used the APIC instead of the legacy PIC. It therefore makes most sense to me to sort this out first. - -### [`rust-embedded/rust-raspberrypi-OS-tutorials`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) - -(Section written by [@andre-richter](https://github.com/andre-richter)) - -May was a quiet month for the project, since I am currently taking a little hiatus. I am planning to restart working on new content two or three months down the road. - -Therefore, only some maintenance updates went in, e.g. bumping all dependency crates to versions that support the new `llvm_asm!` macros. Also, the :cn: chinese translations received updates/additions ([main `Readme`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/blob/master/README.CN.md); [`00_before_we_start`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/blob/master/00_before_we_start/README.CN.md)). - - - -## Join Us? - -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). diff --git a/content/this-month/2020-06/index.md b/content/this-month/2020-06/index.md deleted file mode 100644 index f1cce984..00000000 --- a/content/this-month/2020-06/index.md +++ /dev/null @@ -1,98 +0,0 @@ -+++ -title = "This Month in Rust OSDev (June 2020)" -date = 2020-07-12 - -[extra] -month = "June 2020" -authors = [ - "phil-opp", - # add yourself here -] -+++ - -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. - - - -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). - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In June, the crate received some smaller improvements: - -- [Remove needless `try_into` calls](https://github.com/rust-osdev/x86_64/pull/159) to fix clippy warnings -- [Correct Cr2::read documentation](https://github.com/rust-osdev/x86_64/pull/161) -- [Export `PhysAddrNotValid` and `VirtAddrNotValid`](https://github.com/rust-osdev/x86_64/pull/163) (published as `v0.11.1`) - -Thanks to [@samueltardieu](https://github.com/samueltardieu) and [@leecannon](https://github.com/leecannon) for their contributions! - -### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) - -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: - -- [Propagate `cargo-features` from project's Cargo.toml](https://github.com/rust-osdev/cargo-xbuild/pull/82) (published as `v0.5.34`) -- [Replace tempdir with tempfile](https://github.com/rust-osdev/cargo-xbuild/pull/84) (published as `v0.5.35`) - -Thanks to [@eggyal](https://github.com/eggyal) and [@Eijebong](https://github.com/Eijebong) for these contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -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: - -- [Rename `_improper_ctypes_check` functions](https://github.com/rust-osdev/bootloader/pull/122) (published as `v0.9.5`) - -Thanks to [@Freax13](https://github.com/Freax13) for this contribution! - -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). - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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: - -- [Use RSDP's length field in revisions 1+](https://github.com/rust-osdev/acpi/commit/43df4bc79611d311c4a50978ebc4babe78b46074) -- [Use fold to sum RSDP bytes](https://github.com/rust-osdev/acpi/commit/a37cf48429334dc3dfd98e065656c374cc907a4a) - -### [`uefi`](https://github.com/rust-osdev/uefi-rs) - -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: - -- [Tutorial on how to add protocols](https://github.com/rust-osdev/uefi-rs/commit/56375412e62d41122aba5b2c86c365373ca31ecd) - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -In June, I pushed two small improvements to the `blog_os` repository and the _Writing an OS in Rust_ blog: - -- [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: - - [Update Testing post to use Testable trait for automatic printing](https://github.com/phil-opp/blog_os/pull/817) - - Update remaining posts: [Remove superfluous printing from tests](https://github.com/phil-opp/blog_os/pull/819) -- [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: - - [Update Double Faults post to prevent tail recursion in test](https://github.com/phil-opp/blog_os/pull/820) - -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! - -## Join Us? - -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). diff --git a/content/this-month/2020-07/index.md b/content/this-month/2020-07/index.md deleted file mode 100644 index 881c7c2a..00000000 --- a/content/this-month/2020-07/index.md +++ /dev/null @@ -1,148 +0,0 @@ -+++ -title = "This Month in Rust OSDev (July 2020)" -date = 2020-08-02 - -[extra] -month = "July 2020" -authors = [ - "phil-opp", - "IsaacWoods", - "GabrielMajeri", - # add yourself here -] -+++ - -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. - - - -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). - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`bootimage`](https://github.com/rust-osdev/bootimage) - -The `bootimage` tool allows the creation of bootable disk images for `bootloader`-based kernels. It also provides a runner executable for `cargo` to make `cargo run` and `cargo test` work using QEMU. In July, the crate was updated to work with cargo's own `build-std` feature instead of relying on the `cargo-xbuild` crate: - -- [Add support for building bootloaders using `-Zbuild-std`](https://github.com/rust-osdev/bootimage/pull/62) (published as `v0.8.1`) -- [Make `cargo bootimage` use `cargo build` instead of `cargo xbuild`](https://github.com/rust-osdev/bootimage/pull/63) (published as `v0.9.0`) - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The [`bootloader` crate](https://github.com/rust-osdev/bootloader) implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. In July, we switched the crate from `cargo-xbuild` to the `build-std` feature of cargo and fixed a bug that prevented booting in VirtualBox: - -- [Change 1st stage int 13h addressing](https://github.com/rust-osdev/bootloader/pull/123) (published as `v0.9.6`) -- [Make bootloader buildable with `-Zbuild-std`](https://github.com/rust-osdev/bootloader/pull/125) (published as `v0.9.7`) -- [Enable rlibc dependency only with `binary` feature](https://github.com/rust-osdev/bootloader/pull/126) (published as `v0.9.8`) - -Thanks to [@rsribeiro](https://github.com/rsribeiro) for their contribution! - -We also made some progress on adding UEFI support to the bootloader. Our prototype is now able to set up a pixel-based framebuffer, map a given kernel ELF file into virtual memory, and then pass control to its entry point. The next steps are the construction of the boot information structure, including a memory map. You can find a link to the code and the build instructions in [this comment](https://github.com/phil-opp/blog_os/issues/349#issuecomment-663562464). - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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 saw some substantial improvements to our AML handling: - -- Objects defined by AML tables exist within a namespace, with objects referred to by paths such as `\_SB.PCI0.ISA.COM1`. Until now, we represented this namespace using a `BTreeMap` between the path (allocated on the heap) and a handle to the -object, meaning that there was both a heap-allocated container, and a heap allocation for every single path within the namespace. [In this PR](https://github.com/rust-osdev/acpi/pull/72), we moved the library to use a new representation that has -a `BTreeMap` for each *level* of the namespace. Because each level of the path can only be 4 characters long (`_SB`, `PCI0`, `ISA`, and `COM1` are the *name segments* in the example above), storing the path of each level no longer requires a heap -allocation per object, which reduces the heap-burden of the library significantly. -- Some more opcodes were implemented: `Target`, `DefShiftLeft`, `DefShiftRight`, `DefLOr`, and `DefAnd`. These all appear in QEMU's tables. -- [A fairly large PR](https://github.com/rust-osdev/acpi/pull/73) was merged that provides the ability to traverse the namespace and initialize devices - this is a mechanism that ACPI provides that allows an OS to initialize hardware that it does -not have drivers for, and is a compulsory step in getting modern chipsets to function properly. This required us to build up a lot of functionality, including namespace traversal, reading and writing from *operation regions*, recursively invoking -control methods, and asking the OS to perform hardware configuration for us (such as reading and writing to IO ports and PCI configuration space). There is still a lot of work in getting all of this working robustly, but this is a great start. - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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. - -The major changes which happened in this month are: -- We've tested out support for AArch64. No updates to the code are needed, just [add a custom target file](https://github.com/rust-osdev/uefi-rs/blob/e2748687bdafcc21f35e6d4db27b4b1b31bdcf6e/uefi-test-runner/aarch64-unknown-uefi.json) for 64-bit ARM UEFI and then compile your project with it. -- The `LoadedImage` protocol now [exposes the handle](https://docs.rs/uefi/0.4.7/uefi/proto/loaded_image/struct.LoadedImage.html#method.device) for the device where the binary is stored. -- Our CI is now green again! There is [only one test](https://github.com/rust-osdev/uefi-rs/issues/103#issuecomment-604728460) which breaks QEMU, and it's going to stay disabled until it gets fixed. -- Building the repository no longer requires [cargo-xbuild](https://github.com/rust-osdev/cargo-xbuild), we've switched to nightly Cargo's [build-std](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std) feature. -- Updated documentation in various places. - -### [`spinning_top`](https://github.com/rust-osdev/spinning_top) - -The `spinning_top` crate provides a simple spinlock implementation based on the abstractions of the [`lock_api`](https://docs.rs/lock_api/0.4.1/lock_api/) crate. We created the crate to provide an alternative to the no-longer maintained [`spin`](https://github.com/mvdnes/spin-rs) crate. In July, the crate received the following updates: - -- [Implement `try_lock_weak` for use in `lock` loop](https://github.com/rust-osdev/spinning_top/pull/4) (published as `v0.1.1`) -- [Upgrade `lock_api` to 0.4.0](https://github.com/rust-osdev/spinning_top/pull/3) (published as `v0.2.0`) -- [Implement `const_spinlock` convenience function](https://github.com/rust-osdev/spinning_top/pull/5) (published as `v0.2.1`) - -Thanks to [@akiekintveld](https://github.com/akiekintveld) for their contributions! - -### [`volatile`](https://github.com/rust-osdev/volatile) - -The `volatile` crate provides safe wrapper types for implementing volatile read and write operations. The crate received the following changes this month: - -- [Derive Default for Volatile, WriteOnly and ReadOnly](https://github.com/rust-osdev/volatile/pull/10) (published as `v0.2.7`) -- [Remove `Debug` and `Clone` derives for `WriteOnly`](https://github.com/rust-osdev/volatile/pull/12) (published as `v0.3.0`) - -Thanks to [@Freax13](https://github.com/Freax13) for their contributions! - -We are also considering a complete rewrite of the crate to wrap references instead of values directly. The main advantage of this is that it makes working with slices possible. See the [pull request](https://github.com/rust-osdev/volatile/pull/13) for details. - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2-elf64) - -The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. In July, we merged a change that makes the checksum field of the RSDP tag more useful: - -- [Add a `validate_checksum` method to rsdp](https://github.com/rust-osdev/multiboot2-elf64/pull/64) (published as `v0.9.0`) - -Thanks to [@dlrobertson](https://github.com/dlrobertson) for this contribution! - -### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) - -The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. While there were no updates to the crate itself in July, we added a guide on how to switch from `cargo-xbuild` to cargo's own `build-std` feature to the Readme. You can read it [here](https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo). - -## Personal Projects - -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. - -### [`IsaacWoods/pebble`](https://github.com/IsaacWoods/pebble) - -(Section written by [@IsaacWoods](https://github.com/IsaacWoods)) - -Between my work on `acpi` and university commitments, I have not had much time to work on Pebble this month, but -some small clean-ups were made: -- The migration from Travis CI to Github Actions was completed, allowing Pebble to be emulated on CI. -- Pebble uses a HAL (hardware abstraction layer) to separate hardware access from kernel logic. Various parts of the `x86_64` implementation of the HAL were made common to support code-reuse across architectures. -- Some [tests](https://github.com/IsaacWoods/pebble/blob/master/kernel/src/memory/buddy_allocator.rs#L202) were added to the buddy allocator (Pebble's physical memory manager). This was to rule out physical memory -allocation as the cause of a bug where user stacks are occasionally corrupted at the userspace-kernel boundary, which unfortunately has still not been fixed. -- Our [algorithm](https://github.com/IsaacWoods/pebble/blob/master/kernel/hal_x86_64/src/paging.rs#L376-L481) for efficiently mapping arbitrary areas was rewritten and extended to support 1GiB pages. -- Work has started on a *topology layer* - data structures that represent features of the platform such as processors, caches, [NUMA](https://en.wikipedia.org/wiki/Non-uniform_memory_access) nodes, and -microarchitectural information. This will help in allowing Pebble to make more intelligent decisions about scheduling and resource usage in the future. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -The main change this month was the migration from `cargo-xbuild` to the `build-std` feature of cargo. This means that we can now use the normal `cargo build`/`cargo run`/`cargo test` commands for our kernel 🎉. - -The full list of notable changes is: - -- [Migrate code from cargo-xbuild to `-Zbuild-std`](https://github.com/phil-opp/blog_os/pull/835) - - [Update blog to use `build-std` feature instead of cargo-xbuild](https://github.com/phil-opp/blog_os/pull/836) -- [Link 'This Month in Rust OSDev' posts in status updates section](https://github.com/phil-opp/blog_os/pull/838) - -There were also [some 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 updated links. Thanks a lot to all contributors! - -For the next weeks/months, my plan is to finish the UEFI bootloader implementation and then adjust the blog to work with both the BIOS and UEFI bootloaders. Among other things, this will require that we switch from the VGA text buffer to a pixel-based framebuffer because the VGA text mode is not available with UEFI. While this makes things more complicated (we need to do some simple font rendering and add slice support to `volatile` crate), it will allow us to create our own graphical user interface, render a mouse pointer, or display images. - -## Join Us? - -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). diff --git a/content/this-month/2020-08/index.md b/content/this-month/2020-08/index.md deleted file mode 100644 index 90e10df8..00000000 --- a/content/this-month/2020-08/index.md +++ /dev/null @@ -1,169 +0,0 @@ -+++ -title = "This Month in Rust OSDev (August 2020)" -date = 2020-09-09 - -[extra] -month = "August 2020" -authors = [ - "phil-opp", - "JohnTitor", - # add yourself here -] -+++ - -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. - - - -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). - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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. In August, the crate received a large number of improvements: - -- [Add method to return (image_base, image_size) to LoadedImage](https://github.com/rust-osdev/uefi-rs/pull/149) -- [Rename `image_info` to `info`](https://github.com/rust-osdev/uefi-rs/pull/153) -- [Hide the `MemoryMapIter` type from the API](https://github.com/rust-osdev/uefi-rs/pull/154) -- [Upstream two changes from Pebble's fork](https://github.com/rust-osdev/uefi-rs/pull/156) -- [Update to new `alloc` API](https://github.com/rust-osdev/uefi-rs/pull/157) -- [Publish new versions of the crates](https://github.com/rust-osdev/uefi-rs/pull/158) -- [Make memory map iterator clonable](https://github.com/rust-osdev/uefi-rs/pull/161) -- [Fix the `text::Output::current_mode` method](https://github.com/rust-osdev/uefi-rs/pull/163) -- [Use exact size iterators where possible](https://github.com/rust-osdev/uefi-rs/pull/164) -- [Use `ExactSizeIterator` in `exit_boot_services`](https://github.com/rust-osdev/uefi-rs/pull/165) - -Thanks to [@tomoyat1](https://github.com/tomoyat1) for their contribution! - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2-elf64) - -The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. The most important change this month was the update to the latest release of the multiboot2 specification: - -- [Add support for multiboot2](https://github.com/rust-osdev/multiboot2-elf64/pull/66) -- [Improve usage of repr(packed)](https://github.com/rust-osdev/multiboot2-elf64/pull/68) - -Thanks to [@Caduser2020](https://github.com/Caduser2020) for these contributions and welcome to the `multiboot2` team! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The [`bootloader` crate](https://github.com/rust-osdev/bootloader) implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. We did not publish any changes to the bootloader crate this month, but we made good progress on the UEFI implementation. See [these issue comments](https://github.com/phil-opp/blog_os/issues/349#issuecomment-677645694) for a detailed status report. - -The rewrite of the real mode and protected mode stages of the BIOS bootloader is also [making progress](https://gitter.im/rust-osdev/bootloader?at=5f4594ed9566774dfe3167bc). The goal is to replace as much of the existing assembly code with Rust as possible, in order to make the code more robust and easier to understand. - -### [`ansi_rgb`](https://github.com/rust-osdev/ansi_rgb) - -The `ansi_rgb` crate implements `no_std`-compatible support for colored terminal text using ANSI escape sequences. The crate is still in an early state, but it received lots of new features this month: - -- [More colors and some minor changes](https://github.com/rust-osdev/ansi_rgb/pull/11) -- [Demo using RGB and 3- and 4-bit colors](https://github.com/rust-osdev/ansi_rgb/commit/19891574e3a4df81716973cf4c88ad965596c043) -- [Merge `Foreground` and `Background` traits](https://github.com/rust-osdev/ansi_rgb/commit/ebcb75b4f273fdeaef6fde051ca5dccb83560c13) -- [Add 8-bit colors](https://github.com/rust-osdev/ansi_rgb/commit/d6ed54ae50ab3653f9c94275efc369472c5278a9) -- [Combine `WithForeground` and `WithBackground` into `Colored`](https://github.com/rust-osdev/ansi_rgb/commit/0d77122be5a449a9c03f04421d43df90a7fd708e) -- [Document extension to other color types](https://github.com/rust-osdev/ansi_rgb/commit/9e10f6bac075b980cef66f4ddc9efab25c0a5504) -- [Add Color8 constructors for RGB and gray](https://github.com/rust-osdev/ansi_rgb/pull/12) -- [Fix bounds check for Color8::new_rgb](https://github.com/rust-osdev/ansi_rgb/pull/13) -- [Go back to `WithForeground` and `WithBackground` structs](https://github.com/rust-osdev/ansi_rgb/commit/3eb8c16681878ae97f8249524609f0611d9eddf6) -- [Fix (and document/test) nesting](https://github.com/rust-osdev/ansi_rgb/commit/9dd8d1828b1d0b3b707cb1f22c28074a6ce82ca5) - -Thanks to [@hanmertens](https://github.com/hanmertens) for their contributions! - -### [`bootimage`](https://github.com/rust-osdev/bootimage) - -The `bootimage` tool allows the creation of bootable disk images for `bootloader`-based kernels. It also provides a runner executable for `cargo` to make `cargo run` and `cargo test` work using QEMU. In August, we changed the test behavior to fix a bug where a triple fault is interpreted as a test success. We also fixed a small bug related to the `--version` argument. The relevant pull requests are: - -- [Consider all other exit codes besides 'test-success-exit-code' as failures](https://github.com/rust-osdev/bootimage/pull/65) (published as `v0.10.0`) - - Also runs tests with -no-reboot by default, configurable through a new test-no-reboot config key - - This is technically **breaking change**, but it should not affect most people. -- [Parse `--version` argument without subcommand (`bootimage --version`)](https://github.com/rust-osdev/bootimage/pull/67) (published as `v0.10.1`) - -Thanks to [@Freax13](https://github.com/Freax13) for their contribution! - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -This month, we added some functions for reading and writing the `FS` and `GS` segment base registers: - -- [Add rdfsbase, rdgsbase, wrfsbase, wrgsbase](https://github.com/rust-osdev/x86_64/pull/172) (published as `v0.11.2`) - -Thanks to [@haraldh](https://github.com/haraldh) for this contribution! - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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, support for more opcodes was added to the AML parser: - -- [Factor out value comparison code from DefLEqual](https://github.com/rust-osdev/acpi/commit/438bd9e4cc98bdac29a9eeccf0877592dd70c540) -- [Make all type-2 opcode parsers concrete to avoid type limit](https://github.com/rust-osdev/acpi/commit/28e46b3cd2f68b033ae9559d84e0d8784a527422) -- [Implement some `DefL*` opcodes](https://github.com/rust-osdev/acpi/compare/438bd9e4cc98bdac29a9eeccf0877592dd70c540...8dd5b21cf225e267d9786036ed134a45fc34b5f1) -- [Only read from field if update rule is Preserve](https://github.com/rust-osdev/acpi/commit/e54158ee0128c47acb5e34509e390010ee1feb74) - -### [`spinning_top`](https://github.com/rust-osdev/spinning_top) - -The `spinning_top` crate provides a simple spinlock implementation based on the abstractions of the [`lock_api`](https://docs.rs/lock_api/0.4.1/lock_api/) crate. This month, we added an optional feature to make the crate compatible with the `owning_ref` crate: - -- [Add owning_ref support](https://github.com/rust-osdev/spinning_top/pull/7) (published as `v0.2.2`) - -Thanks to [@not-a-seagull](https://github.com/not-a-seagull) for this contribution! - -### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) - -The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. At the beginning of this month, we had to update the crate for the new rustc directory layout. The crate also received a small cleanup: - -- [Update cargo-xbuild to new rust directory layout](https://github.com/rust-osdev/cargo-xbuild/pull/87) (published as `v0.6.0`) -- [Cleanup: Use eprintln! instead of writeln! with stderr](https://github.com/rust-osdev/cargo-xbuild/pull/86) - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! - -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). - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -I'm still mostly working on the new bootloader with UEFI support, so there were no major changes to the _Writing an OS in Rust_ series this month. However, I'm making good progress on the bootloader [as noted above](#bootloader) and I hope to finish the rewrite soon. - -If all goes well, the new version will no longer require the `bootimage` tool and instead let the users create a simple build script for the bootloader themselves. It will also set up a pixel based framebuffer, which means that we will be able to do display proper graphics instead of just VGA-based text. Unfortunately, I'm currently a bit blocked by limitations of cargo configuration files (our default target should not apply to our build script), but I hope that we can [find a solution for this](https://github.com/rust-lang/cargo/issues/8687) soon. - -While I focused most of my time on the bootloader and the cargo config files, I also merged a few few minor improvements for my blog: - -- [Change `rustup override add` to `rustup override set`](https://github.com/phil-opp/blog_os/pull/843) -- [Add (initial) Japanese translation](https://github.com/phil-opp/blog_os/pull/845) (see below) -- [Increase double fault stack size in Double Faults post](https://github.com/phil-opp/blog_os/commit/0425bd3c819bd26910c4e82a7a24c2a5126d4116) - - The previous stack size was too small in debug mode since our double fault handler uses the rather stack-intensive `core::fmt` functions. - - Since the dobule fault stack has no guard page, this stack overflow [resulted in undefined behavior](https://github.com/phil-opp/blog_os/issues/449#issuecomment-667638975). For example, it caused the system to hang or lead to a triple fault. - - The stack size increase only works around this problem, but is not a clear fix. I plan to introduce a proper stack allocation function in the upcoming post about threading, which will create stacks with a proper guard page so that stack overflows deterministically lead to a page fault. -- [Use workflow dispatch event to trigger scheduled builds of code branches](https://github.com/phil-opp/blog_os/pull/846) - - Enables nightly builds of all `post-XX` branches, so that we can be sure that our code always builds with the latest Rust nightly versions. -- [Update Zola to 0.11.0](https://github.com/phil-opp/blog_os/pull/850) - -Thanks to [@RWOverdijk](https://github.com/RWOverdijk) and [@JohnTitor](https://github.com/JohnTitor) for their contributions! - -#### Japanese translations - -(Section written by [@JohnTitor](https://github.com/JohnTitor)) - -This month, we also [added a Japanese translation](https://github.com/phil-opp/blog_os/pull/845) newly. You can find the languages list in the sidebar and Japanese if you enable that language in your browser. -Only one post is currently translated, but we'd like to translate more posts in the future. -Want to participate in the translation or find a typo? Feel free to open a PR/issue on [the repository](https://github.com/phil-opp/blog_os) -(please use English in the description if possible)! - -## Join Us? - -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). diff --git a/content/this-month/2020-09/index.md b/content/this-month/2020-09/index.md deleted file mode 100644 index 78bdfe1f..00000000 --- a/content/this-month/2020-09/index.md +++ /dev/null @@ -1,190 +0,0 @@ -+++ -title = "This Month in Rust OSDev (September 2020)" -date = 2020-10-04 - -[extra] -month = "September 2020" -authors = [ - "phil-opp", - "IsaacWoods", - # add yourself here -] -+++ - -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. - - - -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). - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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. Lots of work happened this month: - -* [Support](https://github.com/rust-osdev/acpi/pull/76) for the `Fixed Memory`, `Word Address Space`, `DWord Address Space`, `QWord Address Space`, `IRQ Format`, - `DMA Format`, and `I/O Port Descriptor` resource descriptors were added. These appear in `_CRS` objects - objects - that describe the resources allocated to a particular hardware device. This should be enough support to parse the - `_CRS` objects of all devices supported by QEMU. Thanks to [`@michaelmelanson`](https://github.com/michaelmelanson) for his contribution! -* [Version `2.0.0` of the `acpi` crate was published](https://github.com/rust-osdev/acpi/pull/75), after [consultation with contributors to the Redox project](https://github.com/rust-osdev/acpi/issues/74). - This splits the library into two parts - discovering ACPI tables using various methods, and separately, parsing them to discover information about the system. - This provides much more flexibility in how tables are parsed, allows support for OS-specific tables, and is - important to the Redox project as it allows parsing of the ACPI tables in userspace. We also used this - opportunity for breaking changes to clean up a few parts of the library, especially in making our method of - mapping physical memory ranges safer. -* A new crate, [`rsdp`](https://crates.io/crates/rsdp), was split out from `acpi`. This new crate provides methods - for searching for the first ACPI table (the Root System Description Pointer (RSDP)) on BIOS systems without - `alloc` support. This makes it suitable for use from bootloaders and similar applications where heap allocation - is not supported. All types are reexported by the `acpi` crate, so users can access the same functionality from - the main library. - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -The crate received the following updates in September: - -- [Add a function for the `nop` instruction](https://github.com/rust-osdev/x86_64/pull/174) (published as `v0.11.4`) -- [Don't rely on promotion of `PageTableEntry::new` inside a `const fn`](https://github.com/rust-osdev/x86_64/pull/175) (published as `v0.11.5`) - - Thanks a lot to [@ecstatic-morse](https://github.com/ecstatic-morse) and the Rust compiler team for preventing an upcoming breakage in our crate! -- [Add `VirtAddr::is_null`](https://github.com/rust-osdev/x86_64/pull/180) (published as `v0.11.8`) -- [Decouple instructions into a separate feature flag](https://github.com/rust-osdev/x86_64/pull/179) (published as `v0.12.0`) - - See the [corresponding changelog entry](https://github.com/rust-osdev/x86_64/blob/master/Changelog.md#0120--2020-09-23) for a summary of the breaking changes introduced by this pull request. -- [Fix build error on latest nightly](https://github.com/rust-osdev/x86_64/pull/182) caused by new `const_mut_refs` feature gate (published as `v0.12.1`) -- [Add remaining GDT flags](https://github.com/rust-osdev/x86_64/pull/181), which also makes our GDT descriptors compatible with the `syscall`/`sysenter` instructions -- [Fix another build error on latest nightly](https://github.com/rust-osdev/x86_64/pull/186), this time caused by the new `const_fn_fn_ptr_basics` feature gate (published together with [#181](https://github.com/rust-osdev/x86_64/pull/181) as `v0.12.2`) - -Thanks to [@ecstatic-morse](https://github.com/ecstatic-morse), [@toku-sa-n](https://github.com/toku-sa-n), [@h33p](https://github.com/h33p), and [@josephlr](https://github.com/josephlr) for their contributions! - -We would also like to welcome [@josephlr](https://github.com/josephlr) to our `x86_64` review and maintenance team! - -### [`volatile`](https://github.com/rust-osdev/volatile) - -The `volatile` crate provides safe wrapper types for implementing volatile read and write operations. This month, we published version `0.4.0`, which [completely rewrites the crate based on reference values](https://github.com/rust-osdev/volatile/pull/13). Instead of wrapping the target value directly as e.g. `Volatile`, the new implementation works by wrapping reference types such as `Volatile<&mut u32>`. See [our completely revamped documentation](https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html) for more details. - -The main advantage of the new reference-based implementation is that it is now possible to work with volatile arrays and slices, at least on nightly Rust. Through the [`index`](https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html#method.index) and [`index_mut`](https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html#method.index_mut) methods it is possible to create sub-slices, which can then be read and written efficiently through the [`copy_into_slice`](https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html#method.copy_into_slice) and [`copy_from_slice`](https://docs.rs/volatile/0.4.6/volatile/struct.Volatile.html#method.copy_from_slice) methods. All these operations perform volatile memory accesses, so that the compiler won't optimize them away. - -### [`pci_types`](https://github.com/rust-osdev/pci_types) - -`pci_types` is a new library in the Rust OSDev organisation that provides types for accessing and configuring PCI -devices from Rust operating systems. Lots of this code (e.g. identifying devices by class codes) can be shared -between projects, and would benefit from community contributions. This month, work started on some types for -representing PCIe addresses, the layout of the configuration space for *endpoints*, device types, and a trait that -allows the library to access the PCIe configuration space in whichever way the platform exposes it. - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their [contribution](https://github.com/rust-osdev/pci_types/pull/1)! - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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. In September, the crate was [updated to Rust's new inline assembly](https://github.com/rust-osdev/uefi-rs/pull/167) implementation. We also published version `0.6.0` of the crate, including all the improvements added in the past two months. - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -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. - -We also made some more progress on the rewrite with UEFI support. It now [passes additional framebuffer information](https://github.com/rust-osdev/bootloader/commit/3237429457d3df58080fa284d9c2b7138e3fff3a) and the [address of the RSDP structure of ACPI](https://github.com/rust-osdev/bootloader/commit/694d3139fe24bce0184da3bb9096e6540ee1fa3d) in the boot info. (We later updated the RSDP code to [use the new `rsdp` crate](https://github.com/rust-osdev/bootloader/commit/cb8345bd3c45fc3c56a631a3b416137c45f828f9)). The bootloader also gained support for [setting up a recursive page table mapping](https://github.com/rust-osdev/bootloader/commit/34a5da852ba8f6b0abfafb5c5a68adc4cae638fa), which makes it almost feature-equivalent with the current implementation. There are still a few things missing, but it should be ready to be published soon. - -### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) - -The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we merged some maintenance updates to increase platform compatibility: - -- [Remove fs2 dependency for broader platform support](https://github.com/rust-osdev/cargo-xbuild/pull/91) (published as `v0.6.1`) -- [Fix winapi issues from flock() rework](https://github.com/rust-osdev/cargo-xbuild/pull/94) (published as `v0.6.2`) - -Thanks to [@pfmooney](https://github.com/pfmooney) for these contributions! - -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). - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. Like the `x86_64` and `bootloader` crates, this crate received some dependency updates this month to fix nightly breakage. In the process, we released versions `0.2.8` to `0.2.10`. Since none of these versions are semver-breaking, a normal `cargo update` should suffice to update to the latest version. - -## Personal Projects - -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. - -### [`IsaacWoods/pebble`](https://github.com/IsaacWoods/pebble) - -(Section written by [@IsaacWoods](https://github.com/IsaacWoods)) - -A fairly large amount of progress has been made on Pebble over the last two months, and a prototype of Pebble's -defining feature (easy message passing between tasks) is now working! - -* The first, basic, version of Pebble's wire format, [ptah](https://github.com/IsaacWoods/pebble/tree/master/lib/ptah) has been completed. - This first version is implemented as a Serde format, but libraries could be written for any language that can - manipulate a byte stream. -* Two system calls, `send_message` and `get_message`, were added that allows a message (a series of bytes, and - optionally a number of *handles* (effectively, permission to access a certain *kernel object*)) to be sent - down a *channel*, between two tasks. -* Infrastructure for another of Pebble's key features, *services*, was added. This allows userspace tasks to - advertise their ability to provide some kind of 'service' to other tasks. A task called [`echo`](https://github.com/IsaacWoods/pebble/blob/master/user/echo/src/main.rs) - was built to test this - it provides a service that simply echos any messages sent down it back to the sending - task. -* Work started on the Platform Bus, a concept inspired by another hobby OS [managarm's `mbus`](https://github.com/managarm/managarm/blob/master/docs/src/design/mbus/index.md). - All hardware devices on the platform will be added to the Platform Bus by *Bus Drivers*, and described using *properties* (as an - example, a PCI device will have properties such as `pci.vendor_id`, and `pci.class`). *Device drivers* will be - able to apply to manage devices by sending a *Filter* to the Platform Bus, which specifies which devices they are - able to handle, based on a device's properties. In the future, Platform Bus will be responsible for handling all - PCI, USB, and hardwired devices on all platforms. -* The first *Bus Driver* was added to manage PCI devices. It uses a new system call, `pci_get_info`, to get the raw - information about PCI from the kernel, and then creates a Platform Bus device for each function, with the correct - properties. It uses the new `pci_types` library in the Rust OSDev organisation to identify each device (in the - future, this will be extended to know about specific vendor+device ID combinations, to identify specific devices - such as a particular graphics card). - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -This month, the "Writing an OS in Rust" blog received a few minor updates: - -- [Update Zola to 0.11.0](https://github.com/phil-opp/blog_os/pull/850) -- [Update `x86_64` to v0.12.1](https://github.com/phil-opp/blog_os/pull/858) -- [Use new `const_mut_refs` feature gate](https://github.com/phil-opp/blog_os/pull/860) -- [Update to zola v0.12.1](https://github.com/phil-opp/blog_os/pull/861) - -Apart from that, I did a lot of preparation for the upcoming switch to the UEFI bootloader. My prototype implementation of the `blog_os` system on top of the new UEFI bootloader has now reached feature parity with the existing implementation: - -![QEMU output of new bootloader implementation, including local APIC and I/O APIC debug output, the timer interrupt dots, and the keyboard input "Hello!!!"](blog_os-rewrite.png) - -The output looks different now because we are using a pixel based framebuffer instead of the VGA text mode. This is required because the VGA text mode is no longer supported with UEFI. For the framebuffer implementation I'm using the [new version of the `volatile` crate](#volatile) and the [`font8x8`](https://docs.rs/font8x8/0.2.5/font8x8/) crate for font rendering. - -You can also see some log output related to the APIC interrupt controller (not to be confused with the ACPI standard). I'm using the APIC instead of the legacy PIC because the latter is not supported anymore on most UEFI systems. For that, I started working on a new `apic` crate, which will include abstractions for the registers of the local APIC and the IOAPIC. - -For the coming month(s), I'm planning to revamp the "Writing an OS in Rust" blog based on this prototype implementation. This will require complete rewrites of the [_VGA Text Mode_](https://os.phil-opp.com/vga-text-mode/) and [_Hardware Interrupts_](https://os.phil-opp.com/hardware-interrupts/) posts, an update of the bootloader build process in [_A Minimal Rust Kernel_](https://os.phil-opp.com/minimal-rust-kernel/), and replacing the QEMU screenshots across all posts. So I expect that it will take some time until the new version is ready. - -### [`andre-richter/qemu-exit`](https://github.com/andre-richter/qemu-exit) - -(Section written by [@andre-richter](https://github.com/andre-richter)) - -Version `1.0.x` of the crate has been released! - -`qemu-exit` is a crate that allows you quit a running QEMU session with a user-defined exit code. This is useful for `unit` or `integration tests` of bare-metal software (e.g. OS kernels) that are tested in QEMU. - -The crate supports the following architectures: -- `AArch64` -- `RISC-V 64` -- `x86_64` - -If you want to see the crate in action, you can have a look at how it is used in the [rust-raspberrypi-OS-tutorials project](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/13_integrated_testing#quitting-qemu-with-user-defined-exit-codes). - -Shoutout to [@phil-opp](https://github.com/phil-opp) for inspiring this crate with his original blog post and to [@Skallwar](https://github.com/Skallwar) for his many contributions. - -## Join Us? - -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). diff --git a/content/this-month/2020-10/index.md b/content/this-month/2020-10/index.md deleted file mode 100644 index dc169fde..00000000 --- a/content/this-month/2020-10/index.md +++ /dev/null @@ -1,132 +0,0 @@ -+++ -title = "This Month in Rust OSDev (October 2020)" -date = 2020-11-07 - -[extra] -month = "October 2020" -authors = [ - "phil-opp", - # add yourself here -] -+++ - -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. - - - -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). - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In October, we merged following changes: - -- [Provide functions for accessing the underlying L4 table for mapper types](https://github.com/rust-osdev/x86_64/pull/184) -- [Make `GlobalDescriptorTable::add_entry` a const fn](https://github.com/rust-osdev/x86_64/pull/191) -- [Update docs to suggest `TryFrom` trait](https://github.com/rust-osdev/x86_64/pull/198) - -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. - -### [`volatile`](https://github.com/rust-osdev/volatile) - -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. - -In October, we published a new version to fix the crate's `unstable` feature on newer Rust nightlies: - -- [Change `slice::check_range` to `RangeBounds::assert_len`](https://github.com/rust-osdev/volatile/pull/16) (published as `v0.4.2`) - -Thanks to [@vetio](https://github.com/vetio) for this contribution! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -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. - -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. - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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: - -- [Made `panic_handler` optional](https://github.com/rust-osdev/uefi-rs/pull/179) -- [Fix Clippy lints](https://github.com/rust-osdev/uefi-rs/pull/180) - -Thanks to [@Swampman08](https://github.com/Swampman08) for their contribution! - - -### [`pci_types`](https://github.com/rust-osdev/pci_types) - -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 -between projects, and would benefit from community contributions. - -This month, we published version `0.2.0` with the following changes: - -- [Untie accessor from the actual PciHeader type](https://github.com/rust-osdev/pci_types/commit/e1201d7d8986ff1133e2880b0ba62a3b2d7d891b) -- [Split out endpoint header to separate struct](https://github.com/rust-osdev/pci_types/commit/d9cd5809148084d31fe5cc6ddbb5c8129bf23dae) -- [Provide method for accessing BARs on endpoint headers](https://github.com/rust-osdev/pci_types/commit/aeb1b249cf6e4563b815011f7ed759198b283405) - - -### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) - -The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we merged the following changes: - -- [Document `build-std-features` flag for Cargo's `build-std` feature](https://github.com/rust-osdev/cargo-xbuild/pull/95) -- [Upgrade the crate to edition 2018](https://github.com/rust-osdev/cargo-xbuild/pull/97) (published as `v0.6.3`) - -Thanks to [@luqmana](https://github.com/luqmana) and [@koushiro](https://github.com/koushiro) for these contributions! - -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). - -## Personal Projects - -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. - -### [`rust-embedded/rust-raspberrypi-OS-tutorials`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) - -(Section written by [@andre-richter](https://github.com/andre-richter)) - -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). - -It introduces a first set of changes which are eventually needed for separating `kernel` and `user` address spaces: -- The memory mapping strategy gets more sophisticated and no longer `identity maps` the _whole_ of the board's address space. -- Instead, only ranges that are actually needed are mapped: - - The `kernel binary` stays `identity mapped` for now. - - 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()`. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -This month, the _Writing an OS in Rust_ series received the following updates: - -- [Remove rlibc and use compiler-builtins-mem feature](https://github.com/phil-opp/blog_os/pull/865) - - [Update `post-04` to use compiler_builtins `mem` feature instead of `rlibc`](https://github.com/phil-opp/blog_os/pull/868) - - [Update blog to use `mem` feature of `compiler_builtins`](https://github.com/phil-opp/blog_os/pull/866) -- [Translate post 02 to Japanese](https://github.com/phil-opp/blog_os/pull/871) - - The translated post is now [published](https://os.phil-opp.com/ja/minimal-rust-kernel/). -- [Add Right-to-Left support for template](https://github.com/phil-opp/blog_os/pull/875) in preparation for a Persian translation - -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! - -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! - -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! - -## Join Us? - -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). diff --git a/content/this-month/2020-11/index.md b/content/this-month/2020-11/index.md deleted file mode 100644 index 72a2c8e0..00000000 --- a/content/this-month/2020-11/index.md +++ /dev/null @@ -1,124 +0,0 @@ -+++ -title = "This Month in Rust OSDev (November 2020)" -date = 2020-12-10 - -[extra] -month = "November 2020" -authors = [ - "phil-opp", - "IsaacWoods", - # add yourself here -] -+++ - -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. - - - -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). - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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. In November, we started fuzzing the AML parser to -help find inputs that crash it and we [found](https://github.com/rust-osdev/acpi/commit/56472490c9564b6740eb5e416624d73be8841faa) -[a](https://github.com/rust-osdev/acpi/commit/5ab486d1a8a8a8160025b88e369e22dc8d993273) [few](https://github.com/rust-osdev/acpi/commit/747bcfd28d44bbdfd39ad4805bba574ac320daf8). -We even found [a case](https://github.com/rust-osdev/acpi/commit/52b05fd91ebb40e9c5511d568b19cb5f10b33d83) where -we'd misinterpreted the spec. This is an important task for the project, as the AML parser will often run in -kernelspace, and so should not panic from any input, however invalid (some more work is needed to make this the -case, however). - -[Lexicographic comparison was also implemented for `Buffer` and `String` AML objects](https://github.com/rust-osdev/acpi/commit/6d2045de3acb9b74347ac6ce9ad01051be7bea82), -which means we should now be able to perform all comparisons tables are allowed to make (bar some object -conversions, which still need some work). - -The changes this month, as well as some made in December that should improve compile speed a little, have been -published as [`aml v0.10.0`](https://crates.io/crates/aml). - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In November, we merged the following updates: - -- [Don't deny warnings on CI](https://github.com/rust-osdev/x86_64/pull/201) -- [Rename `enable_interrupts_and_hlt` to `enable_and_hlt`](https://github.com/rust-osdev/x86_64/pull/206) -- [Release version 0.12.3](https://github.com/rust-osdev/x86_64/pull/200) - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2-elf64) - -The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. We merged the following updates this month: - -- [Access to non-available memory areas](https://github.com/rust-osdev/multiboot2-elf64/pull/71) (published as `v0.10.0`) -- [Fix a few warnings](https://github.com/rust-osdev/multiboot2-elf64/commit/a1237bcf357e5d4a5a6c40038fd1e690ef7305d9) (published as `v0.10.1`) - -Thanks to [@CalebLBaker](https://github.com/CalebLBaker) for their contribution! - -## Personal Projects - -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. - -### [`IsaacWoods/pebble`](https://github.com/IsaacWoods/pebble) - -(Section written by [@IsaacWoods](https://github.com/IsaacWoods)) - -Between university and work on `acpi`, I haven't had a huge amount of time to work on Pebble for the last couple of -months, but in November I: -- Implemented a basic form of [TLS](https://en.wikipedia.org/wiki/Thread-local_storage) for userspace tasks. Pebble - doesn't have threads, but an Address Space can have multiple Tasks running from the same image, each of which - need their copy of the master TLS record. TLS support is also needed very early in Rust's `std`, so this was the - next step in creating a `std` implementation for Pebble. -- Tried to fix a bug in Pebble's UEFI bootloader, where we crash if memory allocated to Boot Services is unmapped - after `ExitBootServices`. This may be a bug in OVMF - please get in touch if you've come across something - similar and know what's going on! -- Continued work on the USB XHCI driver -- Improved detection of Intel microarchitectures - we can now differentiate Kaby Lake and Coffee Lake processors - based on their `cpuid` steppings - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -In November, we merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog: - -- [Add Right-to-Left support for template](https://github.com/phil-opp/blog_os/pull/875) -- [Add Persian translation for posts of `Bare Bone` Chapter](https://github.com/phil-opp/blog_os/pull/878) -- [Show all available languages](https://github.com/phil-opp/blog_os/pull/880) -- [Emphasize moving code](https://github.com/phil-opp/blog_os/pull/883) - -Thanks to [@hamidrezakp](https://github.com/hamidrezakp), [@Undin](https://github.com/Undin), and [@briankung](https://github.com/briankung) for their contributions! - -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). - -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. - -### [`lucis-fluxum/ps2-rs`](https://github.com/lucis-fluxum/ps2-rs) - -(Section written by [@lucis-fluxum](https://github.com/lucis-fluxum)) - -This is a new library I created to provide OS kernels with low-level access to the PS/2 controller and devices. It -uses a poll-based approach with a timeout to read and write data to the IO ports. - -While some of the library's functionality won't work on modern devices due to differing implementations of PS/2 -emulation between manufacturers, it should be enough to get initialized and receiving scancodes and mouse events. -Theoretically, it should work with PS/2-compatible keyboards all the way back to the IBM Model M! - -## Join Us? - -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). diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md deleted file mode 100644 index 8e80bc9b..00000000 --- a/content/this-month/2020-12/index.md +++ /dev/null @@ -1,175 +0,0 @@ -+++ -title = "This Month in Rust OSDev (December 2020)" -date = 2021-01-07 - -[extra] -month = "December 2020" -authors = [ - "phil-opp", - "IsaacWoods", - "GabrielMajeri", - # add yourself here -] -+++ - -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. - - - -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 new _comment form_ at the bottom of this page. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In December, we published the following three new releases: - -#### [`v0.12.4`](https://github.com/rust-osdev/x86_64/pull/220) - -- [Add and fix some intra-doc links](https://github.com/rust-osdev/x86_64/pull/208) -- [GDT: Add `load_unchecked`, `from_raw_slice`, and `as_raw_slice`](https://github.com/rust-osdev/x86_64/pull/210) -- [Fix bad conversion from llvm_asm! to asm!](https://github.com/rust-osdev/x86_64/pull/218) - - _Heads up:_ [Rust does not check the assembly in `asm!` unless its used](https://github.com/rust-lang/rust/issues/80440) - -#### [`v0.13.0` (breaking)](https://github.com/rust-osdev/x86_64/pull/223) - -- [Also return flags for `MapperAllSizes::translate()`](https://github.com/rust-osdev/x86_64/pull/207) -- [Restructure the `TranslateResult` type and create separate `Translate` trait](https://github.com/rust-osdev/x86_64/pull/211) -- [Rename `PhysToVirt` trait to `PageTableFrameMapping`](https://github.com/rust-osdev/x86_64/pull/214)) -- [Use custom error types instead of `()`](https://github.com/rust-osdev/x86_64/pull/199)) -- [Remove deprecated items](https://github.com/rust-osdev/x86_64/pull/223/commits/2df2b97cb53e593b89ab2dbee6669e63d4898386): `UnusedPhysFrame`, `ExceptionStackFrame`, `VirtAddr::new_unchecked`, `interrupts::enable_interrupts_and_hlt` -- [Make `DescriptorTablePointer::base` a `VirtAddr`](https://github.com/rust-osdev/x86_64/pull/215)) -- [Change return type of `read_rip` to `VirtAddr`](https://github.com/rust-osdev/x86_64/pull/216)) -- [Make writing the RFLAGS register unsafe](https://github.com/rust-osdev/x86_64/pull/219)) -- [Remove `PortReadWrite` trait, which is no longer needed](https://github.com/rust-osdev/x86_64/pull/217)) -- [Relaxe `Sized` requirement for `FrameAllocator` in `Mapper::map_to`](https://github.com/rust-osdev/x86_64/pull/204) - -#### [`v0.13.1`](https://github.com/rust-osdev/x86_64/commit/4d5058c1a1c3873294b92a628be0bb151d37ca6a) - -- [PCID support instructions](https://github.com/rust-osdev/x86_64/pull/169) - -Thanks to [@mental32](https://github.com/mental32), [@vinaychandra](https://github.com/vinaychandra), [@tomaka](https://github.com/tomaka), [@haraldh](https://github.com/haraldh), [@tscs37](https://github.com/tscs37), and [@toku-sa-n](https://github.com/toku-sa-n) for their contributions! - -### [`volatile`](https://github.com/rust-osdev/volatile) - -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. In December, we added to new methods for creating read/write-only `Volatile` instances: - -- [Add methods to restrict access](https://github.com/rust-osdev/volatile/pull/19) (published as `v0.4.3`) - -### [`bootimage`](https://github.com/rust-osdev/bootimage) - -The `bootimage` tool allows the creation of bootable disk images for `bootloader`-based kernels. It also provides a runner executable for `cargo` to make `cargo run` and `cargo test` work using QEMU. This month, we fixed a nightly breakage: - -- [Fix nightly breakage of doctests in workspaces](https://github.com/rust-osdev/bootimage/pull/69) (published as `v0.10.2`) - -### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) - -The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we merged a small error reporting improvement: - -- [Don't panic on metadata errors](https://github.com/rust-osdev/cargo-xbuild/pull/100) (published as `v0.6.4`) - -Thanks to [@parasyte](https://github.com/parasyte) for this contribution! - -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). - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. In December, we merged the following changes: - -- [Document the build process](https://github.com/rust-osdev/bootloader/pull/134) -- [Fix CI after breaking change of Github Actions](https://github.com/rust-osdev/bootloader/compare/530b26f86ae0c7cf8906de0d7f5184bb206bcb7c...d8f7a20bb24e9f1d36f86010e1ce00bdfc51d045) - -Thanks to [@Luis-Hebendanz](https://github.com/Luis-Hebendanz) for their contribution! - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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 December, we merged the following changes: - -- [Clarify how new protocols can be defined](https://github.com/rust-osdev/uefi-rs/pull/185) -- [Add support for the device path protocol](https://github.com/rust-osdev/uefi-rs/pull/187) -- [Fix breakage with the latest nightlies](https://github.com/rust-osdev/uefi-rs/pull/188) -- [Publish new versions of the crates](https://github.com/rust-osdev/uefi-rs/pull/189) - -Thanks to [@avirule](https://github.com/avirule) for their contribution! - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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. In December, we: - -- [Exposed the Power Management Timer, part of the ACPI hardware platform](https://github.com/rust-osdev/acpi/pull/83). Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! -- [Improved the behaviour of the BIOS RSDP search algorithm](https://github.com/rust-osdev/acpi/issues/79). If - you're coming across the same problem as the reporter, try updating to `rsdp v1.1.0` or `acpi v2.2.0`. -- [Improved codegen for the `choice!` macro](https://github.com/rust-osdev/acpi/commit/47c4aec17e7995beeaad004447505ab08b84578a). This fixes limitations in how large parsers can get before they break `rustc`'s type limit. - The new version allows better ergonomics, but also generates much less work for the type checker and so speeds up the compilation of the `aml` crate. -- Fixed a few bugs in the handling of `DefBuffer` and `DefPackage` objects ([1](https://github.com/rust-osdev/acpi/commit/4286dfc6a9f683dc652cd019bbc6d018e96e8359), [2](https://github.com/rust-osdev/acpi/commit/0c64768a9eb415a0a9081adf0ebec2ff3aa50503), [3](https://github.com/rust-osdev/acpi/commit/6146d0fa2d22a4191f5d13bd653f8d45c1edb796)). - -## Personal Projects - -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. - - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Translate post-03 to Japanese](https://github.com/phil-opp/blog_os/pull/887) -- [Rename edition folders](https://github.com/phil-opp/blog_os/pull/890) -- [Minor grammar fixes](https://github.com/phil-opp/blog_os/pull/894) -- [Add filepath to code block](https://github.com/phil-opp/blog_os/pull/893) -- [Fix broken QEMU link](https://github.com/phil-opp/blog_os/pull/888) - -Thanks to [@woodyZootopia](https://github.com/woodyZootopia), [@JohnTitor](https://github.com/JohnTitor), [@delta1](https://github.com/delta1), and [@16yuki0702](https://github.com/16yuki0702) for their contributions! - -#### Third Edition? - -Last month, I mentioned that I'm [working on a new revision of the blog](@/this-month/2020-11/index.md#phil-opp-blog-os) with support for UEFI booting, a pixel-based framebuffer, and the APIC interrupt controller. I also mentioned that the Cargo team approved my [proposal to replicate some `cargo/config` settings in the `Cargo.toml`](https://internals.rust-lang.org/t/proposal-move-some-cargo-config-settings-to-cargo-toml/13336), which will be required for the new build system of the blog. In December, we now saw the first pull request based on this proposal: [_Expose build.target .cargo/config setting as packages.target in Cargo.toml_](https://github.com/rust-lang/cargo/pull/9030). Thanks a lot to [@Ekleog](https://github.com/Ekleog) for tackling this! - -While I had planned the new revision for a long time already, there was still one open question: Should I integrate the changes into the second edition or start a new, third edition of the blog? Originally, I tended to integrate the changes into the second edition since a new edition is a lot of work and only a few posts would require substantial changes anyway. However, the recent translation efforts by many great people (thanks to all contributors!) have changed my mind on this because I don't want to throw away any of their work. For this reason I decided to start working on a new, _third edition of the blog 🎉!_ - -Apart from the changes mentioned above, the new edition will have some additional "fun" posts at the start that show how to create a simple shell and some basic games (instead of directly jumping into interrupt handling and memory management). In addition to the [_Testing_](https://os.phil-opp.com/testing/) post we already have, there will be some posts about debugging with GDB and QEMU. There will also be some design improvements such as a refreshed index page and a dark mode. I hope you like these ideas and I look forward to releasing a first draft of the new edition soon! - -### [`phil-opp/linked-list-allocator`](https://github.com/phil-opp/linked-list-allocator) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -The `linked_list_allocator` crate provides a simple heap allocator that is usable on `no_std` systems. It keeps track of free memory blocks by turning them into a linked list data structure. - -In December, the crate received the following updates: - -- [Use new nightly Allocator trait](https://github.com/phil-opp/linked-list-allocator/pull/42) -- [Build on stable without features](https://github.com/phil-opp/linked-list-allocator/pull/43) (published as `v0.8.7`) -- [Fix: do not require alloc crate](https://github.com/phil-opp/linked-list-allocator/pull/44) (published as `v0.8.8`) -- [Don't require nightly for `use_spin` feature](https://github.com/phil-opp/linked-list-allocator/pull/46) (published as `v0.8.9`) -- [Make hole module public for external uses](https://github.com/phil-opp/linked-list-allocator/pull/47) (published as `v0.8.10`) -- [Add new use_spin_nightly feature](https://github.com/phil-opp/linked-list-allocator/pull/49) (published as `v0.8.11`) - -Thanks to [@haraldh](https://github.com/haraldh), [@MarcoCicognani](https://github.com/MarcoCicognani), and [@thalesfragoso](https://github.com/thalesfragoso) for their contributions!. - -### [`lucis-fluxum/ps2-rs`](https://github.com/lucis-fluxum/ps2-rs) - -(Section written by [@lucis-fluxum](https://github.com/lucis-fluxum)) - -I pushed [release v0.1.1](https://docs.rs/ps2/0.1.1/ps2/) this month, which is mainly a documentation update aiming -to improve understanding of how to use the library. I've also added links to some reading material that helped me -understand the PS/2 protocol better and much of the surrounding terminology. May the old keyboards live on! - -## Join Us? - -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). diff --git a/content/this-month/2021-01/index.md b/content/this-month/2021-01/index.md deleted file mode 100644 index f5f377c6..00000000 --- a/content/this-month/2021-01/index.md +++ /dev/null @@ -1,137 +0,0 @@ -+++ -title = "This Month in Rust OSDev (January 2021)" -date = 2021-02-06 - -[extra] -month = "January 2021" -authors = [ - "phil-opp", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Showcase - -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: - -- [The `RustyHermit` Unikernel](@/showcase/hermit/index.md) written by [@stlankes](https://github.com/stlankes) - -If you like to present your project too, just let us know! - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -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): - -- [Update uefi crate to v0.7.0](https://github.com/rust-osdev/bootloader/commit/06f41a28c3227ea28e3d99c12237461b92130d07) -- [Add bootloader version to boot info](https://github.com/rust-osdev/bootloader/commit/0c33cec02a897585bf21d21bac5e1e72854b0a18) -- [Make boot info FFI-safe](https://github.com/rust-osdev/bootloader/commit/86d1db72fd334e34dcfc17c78540b8365a974199) -- [Start providing API docs for all public items](https://github.com/rust-osdev/bootloader/commit/92b069a3414f423789e9921107120c7231608360) -- [Add a test that checks boot info values](https://github.com/rust-osdev/bootloader/commit/dc1267b73faeb40fd0ee33f03331f3439f545b34) -- [Create FAT file system image from `.efi` image](https://github.com/rust-osdev/bootloader/commit/2ac0c8260ca2838ec461ea3a390a383f3cc82958) -- [Create a GPT disk image with an UEFI boot partition](https://github.com/rust-osdev/bootloader/commit/c7828d311f25acc4b9929ce80aadbea197cf5dd0) -- [Only copy first level 4 entry to bootloader page table](https://github.com/rust-osdev/bootloader/commit/14c4e62adb6e05128755646d7fd5f6990a2385c9) - - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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. In January, we added some updates to the `aml` crate: - -- [Parse DefNoop](https://github.com/rust-osdev/acpi/commit/8b5b45795be895eab21a8c5b23978a0c4ce8f11f) -- [Parse DefBreakPoint](https://github.com/rust-osdev/acpi/commit/e4b49be7befca30dcc53b6b1a0c78793e928941a) -- [Implement DefAdd](https://github.com/rust-osdev/acpi/commit/2fec65aacf5ddc962c87274561f764beb4c69b33) -- [Fix lack of store in DefAnd](https://github.com/rust-osdev/acpi/commit/501b18023cc8c1f9ae0739ed5075df3ba9861b83) - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) - -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: - -- [Use stabilized `hint::spin_loop` instead of deprecated `atomic::spin_loop_hint`](https://github.com/rust-osdev/uart_16550/commit/cd497a98dabc66ba151218451d07f856950d443d) - - -### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) - -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: - -- [Ensure copied Cargo.lock is writable](https://github.com/rust-osdev/cargo-xbuild/pull/98) (published as `v0.6.5`) - -Thanks to [@astro](https://github.com/astro) for this contribution! - -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). - -### [`rusty-hermit`](https://crates.io/crates/rusty-hermit) - -RustyHermit is a unikernel targeting a scalable and predictable runtime for high-performance and cloud computing. -This month, we revise the paravirtualized network driver (virtio) and add a simple driver for RTL8139, which Qemu is able to emulate. -With the support of [KubeVirt](https://kubevirt.io), Kubernetes is able to orchestrate RustyHermit applications. -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). - -Thanks to [@tlambertz](https://github.com/tlambertz) and [@mustermeiszer](https://github.com/mustermeiszer) for the contribution! -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -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: - -- [Make index page translatable](https://github.com/phil-opp/blog_os/pull/899) -- [Improve multilingual support and Persian translation](https://github.com/phil-opp/blog_os/pull/901) -- [Persian translation of chapter Interrupts](https://github.com/phil-opp/blog_os/pull/904) -- [Fix layout of right-to-left in homepage and tables](https://github.com/phil-opp/blog_os/pull/896) -- [Adding tracking issue for Persian](https://github.com/phil-opp/blog_os/pull/909) -- [Translate post-04 to Japanese](https://github.com/phil-opp/blog_os/pull/903) -- [Translate common texts into Japanese](https://github.com/phil-opp/blog_os/pull/905) -- [Translate the index page to Japanese](https://github.com/phil-opp/blog_os/pull/907) - -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! - -In addition to the new translations, we merged the following improvements: - -- [Improve explanation for `BootInfoFrameAllocator::usable_frames`](https://github.com/phil-opp/blog_os/pull/897) -- [Added note to specify version 0.2.6 of volatile](https://github.com/phil-opp/blog_os/pull/910) -- [Remove unused import](https://github.com/phil-opp/blog_os/pull/898) -- [Fix typo](https://github.com/phil-opp/blog_os/pull/900) -- [Remove trailing comma in JSON example](https://github.com/phil-opp/blog_os/pull/912) -- [Fix memory address in self-referential struct example](https://github.com/phil-opp/blog_os/commit/cd8e139ab0e3c7cd47de1845c354fc7ddfad4887) - -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! - -#### Third Edition - -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. - -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: - -![Photo of the laptop display, showing some text output](blog-os-uefi.jpg) - -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). - - - -## Join Us? - -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). diff --git a/content/this-month/2021-02/index.md b/content/this-month/2021-02/index.md deleted file mode 100644 index 843dd519..00000000 --- a/content/this-month/2021-02/index.md +++ /dev/null @@ -1,131 +0,0 @@ -+++ -title = "This Month in Rust OSDev (February 2021)" -date = 2021-03-08 - -[extra] -month = "February 2021" -authors = [ - "phil-opp", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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: - -- [Add helper function for retrieving the boot filesystem](https://github.com/rust-osdev/uefi-rs/pull/201) -- [Add support for the block I/O protocol](https://github.com/rust-osdev/uefi-rs/pull/200) -- [Update `x86_64` dependency to version 0.13.2](https://github.com/rust-osdev/uefi-rs/pull/198) (to fix nightly breakage) -- [Fix some issues with the documentation of the `DevicePath` and `LoadedImage` protocols](https://github.com/rust-osdev/uefi-rs/pull/193) - -Thanks to [@gil0mendes](https://github.com/gil0mendes), [@sreehax](https://github.com/sreehax), and [@avirule](https://github.com/avirule) for their contributions! - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -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: - -- [Fix build on latest nightly](https://github.com/rust-osdev/x86_64/pull/230) (published as `v0.13.2`) - -Thanks to [@KernelFreeze](https://github.com/KernelFreeze) for this contribution! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -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: - -- [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`) -- [Fix "panic message is not a string literal"](https://github.com/rust-osdev/bootloader/pull/138) (published as `v0.9.14`) - -Thanks to [@dspencer12](https://github.com/dspencer12) for their contribution! - -There was also some more progress on the `uefi` branch, which contains the upcoming new bootloader version with UEFI support: - -- [Improve reporting of config parse errors](https://github.com/rust-osdev/bootloader/commit/d55f1c87c34e8bba61adc6abffa78ba431aac69f) -- [Add a test for the `map-physical-memory` config key](https://github.com/rust-osdev/bootloader/commit/6a0fd74ecb052ef3f1fa7ce3e556c895c66dfc4e) -- 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). - -The UEFI rewrite is almost done, but we still need to update the docs, improve the configurability of the framebuffer, and add more testing. - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) - -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: - -- [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`) - -### [`vga`](https://github.com/rust-osdev/vga) - -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: - -- [fix: should now compile](https://github.com/rust-osdev/vga/pull/20) (published as `v0.2.6`) - -Thanks to [@Pollux3737](https://github.com/Pollux3737) for this contribution! - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -The [_Writing an OS in Rust_](https://os.phil-opp.com/) blog received the following updates this month: - -- [Translate post-08 to Persian](https://github.com/phil-opp/blog_os/pull/913) -- [Add ja translation for double faults](https://github.com/phil-opp/blog_os/pull/917) -- [Update post to use x86_64 v0.13.2](https://github.com/phil-opp/blog_os/pull/920) -- [Remove note on builtin memory optimizations](https://github.com/phil-opp/blog_os/pull/932) - - [Remove it from Japanese translation as well](https://github.com/phil-opp/blog_os/pull/935) -- [Minor fix in post 6](https://github.com/phil-opp/blog_os/pull/928) -- [Fix typo](https://github.com/phil-opp/blog_os/pull/927) - -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! - -I also made some progress on the upcoming third edition. Some potentially interesting commits are: - -- [Finish first draft of 'Minimal Kernel' post](https://github.com/phil-opp/blog_os/commit/acb478c0b51b0cdf2124772aca00502f15d6cbb6) -- [Simplify boot crate](https://github.com/phil-opp/blog_os/commit/aaae70974f180321ab8bc25eca2052f98695b39a) -- [Add boilerplate for new 'UEFI Booting' post](https://github.com/phil-opp/blog_os/commit/c2fe9960a743bcb32d5a41e5a02e0f84266d950a) -- [Explain how to create minimal UEFI app](https://github.com/phil-opp/blog_os/commit/033be9ac25a146eb4819d9c6799bd6362d97e036) -- [Explain how to create FAT filesystem and GPT disk image](https://github.com/phil-opp/blog_os/commit/83be6c7868f269084ebe4758ad82db9d7f187061) - -### [`cdrzewiecki/celos`](https://gitlab.com/cdrzewiecki/celos) - -(Section written by [@drzewiec](https://github.com/drzewiec)) - -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. - -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: - -* Move the kernel in virtual memory so that it occupies the higher half of the 48-bit address space -* 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) -* Set up memory allocation for the kernel, to get heap allocation -* Once heap allocation is in place, utilize some existing crate to handle TrueType fonts so that text will look a bit nicer on screen - -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! - -## Join Us? - -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). diff --git a/content/this-month/2021-03/index.md b/content/this-month/2021-03/index.md deleted file mode 100644 index 1db349d2..00000000 --- a/content/this-month/2021-03/index.md +++ /dev/null @@ -1,178 +0,0 @@ -+++ -title = "This Month in Rust OSDev (March 2021)" -date = 2021-04-05 - -[extra] -month = "March 2021" -authors = [ - "phil-opp", - "IsaacWoods", - # add yourself here -] -+++ - -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. - - - -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. - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we fixed some build errors that were caused by the update to LLVM 12 in recent Rust nightlies: - -- [Fix linker errors on latest nightlies](https://github.com/rust-osdev/bootloader/pull/139) (published as `v0.9.15`) -- [Replace all remaining `lea`s with `mov` + `offset`](https://github.com/rust-osdev/bootloader/pull/140) (published as `v0.9.16`) - -We also made some good progress on the [UEFI rewrite](https://github.com/rust-osdev/bootloader/pull/130): - -- [Set up VESA mode properly instead of hardcoding it](https://github.com/rust-osdev/bootloader/pull/130/commits/7f7fec78ffb7125a7eb0312698714d7897bf9fb9) -- [Detect actual pixel format instead of hardcoding it (BIOS)](https://github.com/rust-osdev/bootloader/pull/130/commits/58564910a743ec48e6c1b3113151d96c7b54ca63) -- [Use `quote` crate for creating `Config` struct instead of debug impls](https://github.com/rust-osdev/bootloader/pull/130/commits/f7478eba3034c98bde0c7725ce21a7b56a473d61) -- [Allow specifying addresses as TOML integers too](https://github.com/rust-osdev/bootloader/pull/130/commits/ba9d943dbb18ef756979f1d2c14df297c1003b45) -- [Add docs for crate and `Config` struct](https://github.com/rust-osdev/bootloader/pull/130/commits/536e0f6b53b8dcd53b6125c3383dec3bdb7a3cc3) -- [Document the created disk images](https://github.com/rust-osdev/bootloader/pull/130/commits/eccb89d61a3e390b36f767d6d8780187bd962e58) - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In March, we merged these changes: - -- [Implement `Clone` for `PageTable`](https://github.com/rust-osdev/x86_64/pull/236) (published as `v0.13.3`) -- [Implement more fmt traits for addr types](https://github.com/rust-osdev/x86_64/pull/237) (published as `v0.13.4`) - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) and [@dbeckwith](https://github.com/dbeckwith) for their contributions! - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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 March, we merged the following changes: - -- [Expose device path types](https://github.com/rust-osdev/uefi-rs/pull/202) -- [Fix running tests in CI](https://github.com/rust-osdev/uefi-rs/pull/203) -- [Fix typo in regular.rs](https://github.com/rust-osdev/uefi-rs/pull/204) - -Thanks to [@gil0mendes](https://github.com/gil0mendes) and [@ocadaruma](https://github.com/ocadaruma) for their contributions! - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2-elf64) - -The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. We merged the following updates this month: - -- [Use `impl Iterator` as return type instead of named types](https://github.com/rust-osdev/multiboot2-elf64/pull/72) -- [Docs: Remove fragile `asm!` code example](https://github.com/rust-osdev/multiboot2-elf64/pull/73) -- [Apply `rustfmt`](https://github.com/rust-osdev/multiboot2-elf64/pull/74) - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contributions! - -### [`volatile`](https://github.com/rust-osdev/volatile) - -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. In March, we fixed a build error that was caused by a change in nightly Rust: - -- [Replace feature `range_bounds_assert_len` with `slice_range`](https://github.com/rust-osdev/volatile/pull/21) (published as `v0.4.4`) -- [Add a test for `slice::as_chunks_mut` usage](https://github.com/rust-osdev/volatile/commit/15bbfac9c7cb42ff56698ac5c00daeddbcdb6a0d) - - By using `as_chunks_mut`, it is possible read and write multiple slice elements through a single volatile operation. This allows the compiler to optimize the code better (compared to reading the elements one by one). - -Thanks to [@KernelFreeze](https://github.com/KernelFreeze) for their contribution! - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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 has seen substantial changes to both -the `acpi` and `aml` crates: - -- [We made the types that represent raw ACPI tables public](https://github.com/rust-osdev/acpi/pull/86). This allows library users to work directly with tables such as the - [FADT](https://docs.rs/acpi/2.3.1/acpi/fadt/struct.Fadt.html) if they need to, which is needed to access power - management features we don't yet expose. (published as `acpi v2.3.1`) -- [Native functions are now supported by the AML interpreter!](https://github.com/rust-osdev/acpi/pull/88). A - 'native function' is an AML method that is defined in Rust, rather than using AML bytecode. This is useful for - defining "up-call" methods (where a method is provided by the OS, and called by the firmware), and will hopefully - by useful in the future for patching methods in broken tables. A native method can easily be created with - the [`AmlValue::native_method` constructor](https://docs.rs/aml/0.11.0/aml/value/enum.AmlValue.html#method.native_method). -- However, supporting native functions needed a bit of breakage - `AmlValue` no longer implements `PartialEq` or `Eq`. This actually improves correctness, - as correctly comparing two `AmlValue`s may require type conversions to be done, and so should be done with the - [`AmlValue::cmp`](https://docs.rs/aml/0.11.0/aml/value/enum.AmlValue.html#method.cmp) method, but does make `aml - v0.11.0` a breaking change. -- We also used this opportunity to remove the `legacy_mode` parameter to `AmlContext::new`, which will affect all - crate users, but makes user's lives simpler - handling old tables will now be done automatically. -- Fallout from `AmlValue` no longer being `Eq` also led to some cleanups in how control flow is handled in the - interpreter. This is not likely to affect users, but the "fake" error `AmlError::Return` has been removed, which - is also technically a breaking change in `aml v0.11.0`. -- The AML interpreter now correctly supplies the `\_OS`, `\_OSI`, and `\_REV` objects. These objects were designed - to allow firmware to detect OS support for new AML features, but [come with a bit of baggage](https://www.kernel.org/doc/html/latest/firmware-guide/acpi/osi.html). - This is important for supporting running on real hardware, which often assumes the existence of these objects. - (published as `aml v0.11.0`) - -## Call for Participation -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - -If you maintain a Rust OSDev project 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. - -- [(`acpi`) Record attempted conversion in `AmlError::IncompatibleValueConversion`](https://github.com/rust-osdev/acpi/issues/53) -- [(`acpi`) Support the new MADT Multiprocessor Wakeup structure](https://github.com/rust-osdev/acpi/issues/87) - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -The [_"Writing an OS in Rust"_](https://os.phil-opp.com) blog received the following updates this month: - -- [Translate post-05 to Japanese](https://github.com/phil-opp/blog_os/pull/941) -- [Fix rendering of Japanese translation: Add spaces around some "two asterisk" notations](https://github.com/phil-opp/blog_os/pull/943) -- [Convert `before_build.py` to python3](https://github.com/phil-opp/blog_os/commit/f87cc129fc660473f2d14e9c8d1f8f1e484e105d) -- [Lots of grammar and typo fixes](https://github.com/phil-opp/blog_os/pulls?q=is%3Apr+is%3Aclosed+merged%3A2021-03-22..2021-03-31+) - -Thanks to [@woodyZootopia](https://github.com/woodyZootopia), [@alexxroche](https://github.com/alexxroche), and [@ClementNerma](https://github.com/ClementNerma) for their contributions! - -The third edition is making progress too. I mostly worked on the post about UEFI booting this month: - -- [Describe how to include the uefi crate](https://github.com/phil-opp/blog_os/commit/8740b619a5debe3fa1069c47c61ceed471a3b2f6) -- [Describe how to use various UEFI protocols with the `uefi` crate](https://github.com/phil-opp/blog_os/commit/9c1babd0273ff3d4f632b6e1acf288267138b90f) -- [Provide a high-level explanation on how to create bootloader](https://github.com/phil-opp/blog_os/commit/db47b2702446c1a469e8e064fb090370040bfa2e) - -### [`rust-embedded/rust-raspberrypi-OS-tutorials`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) - -(Section written by [@andre-richter](https://github.com/andre-richter)) - -The [Operating System development tutorials in Rust on the Raspberry Pi](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) project -got two more tutorials this month: - -- [Tutorial 15 - `Virtual Memory Part 3: Precomputed Translation Tables`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/15_virtual_mem_part3_precomputed_tables) -- [Tutorial 16 - `Virtual Memory Part 4: Higher-Half Kernel`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/16_virtual_mem_part4_higher_half_kernel) - -The two tutorials finally conclude the challenging but rewarding journey of enabling the kernel to execute **from the top of the 64 bit virtual address space**. - -Here is a sneak peek of the end result when booting the `kernel` on a **Raspberry Pi 4** (slightly modified to fit on the page): - -``` -[5.011] Booting on: Raspberry Pi 4 -[5.011] MMU online: -[5.011] -------------------------------------------------------------------------- -[5.013] Virtual Physical Size Attr Entity -[5.015] -------------------------------------------------------------------------- -[5.017] 0xffff_ffff_8008_0000 --> 0x0008_0000 | 64 KiB | C RO X | Kernel code -[5.018] 0xffff_ffff_8009_0000 --> 0x0009_0000 | 448 KiB | C RW XN | Kernel data -[5.020] 0xffff_ffff_8011_0000 --> 0x0011_0000 | 512 KiB | C RW XN | Kernel stack -[5.021] 0xffff_ffff_f000_0000 --> 0xfe20_0000 | 64 KiB | D RW XN | BCM GPIO -[5.023] | BCM PL011 UART -[5.024] 0xffff_ffff_f001_0000 --> 0xff84_0000 | 64 KiB | D RW XN | GICD -[5.026] | GICC -[5.027] -------------------------------------------------------------------------- -[5.029] Current privilege level: EL1 -``` - -## Join Us? - -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). diff --git a/content/this-month/2021-04/index.md b/content/this-month/2021-04/index.md deleted file mode 100644 index 65037e76..00000000 --- a/content/this-month/2021-04/index.md +++ /dev/null @@ -1,181 +0,0 @@ -+++ -title = "This Month in Rust OSDev (April 2021)" -date = 2021-05-05 - -[extra] -month = "April 2021" -authors = [ - "phil-opp", - "IsaacWoods", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In April, we merged the following changes: - -- [Added XCR0 register](https://github.com/rust-osdev/x86_64/pull/239) (published as `v0.13.5`) -- _Breaking:_ [Fixes for x86-interrupt calling convention](https://github.com/rust-osdev/x86_64/pull/242) (published as `v0.14.0`) -- [Fix some warnings](https://github.com/rust-osdev/x86_64/pull/243) -- [Add `sidt` support](https://github.com/rust-osdev/x86_64/pull/246) -- [Fix `Debug` and `PartialEq` implementations for `IDT` entry type](https://github.com/rust-osdev/x86_64/pull/249) -- [Looser trait bounds for `Port` types](https://github.com/rust-osdev/x86_64/pull/247) - -Thanks to [@Luis-Hebendanz](https://github.com/Luis-Hebendanz), [@CraftSpider](https://github.com/CraftSpider), and [@dbeckwith](https://github.com/dbeckwith) for their contributions! - -We also prepared a pull request to fix the build on the latest Rust nightlies: - -- Use new `const_fn_trait_bound` feature to fix build on latest nightly ([#250](https://github.com/rust-osdev/x86_64/pull/250)) - -Since `rustfmt` is [currently broken](https://github.com/rust-lang/rust/issues/84538) on the affected newer nightlies, many users are still on older nightlies where the `const_fn_trait_bound` feature does not exist yet (`rustup update` skips nightlies where an installed component is missing). For this reason, we decided to wait with merging the fix until the `rustfmt` component is fixed. For people that want to use the latest nightly already, we pre-published the above fix as version `v0.14.1-beta`. - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we finally merged the UEFI rewrite branch: - -- [Rewrite for UEFI support](https://github.com/rust-osdev/bootloader/pull/130) (published as `v0.10.0`) - -This pull request changes the build process completely so that `v0.10.0` is no longer compatible with `v0.9.x` and below. Instead of using the [`bootimage`](https://github.com/rust-osdev/bootimage) crate, it is now recommended to create a custom builder crate. See the [API docs](https://docs.rs/bootloader/0.10.2/bootloader/) for more details. In addition to the build system changes, there are also some API changes such as a new `BootInfo` struct and a different system init state (e.g. a pixel-based framebuffer instead of the VGA text mode). Right now the documentation for the new version is still a bit sparse. We plan to improve this soon, including an update to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog (see below). - -In addition to the UEFI pull request, we merged the following changes this month: - -- [Fix documented type for entry point function](https://github.com/rust-osdev/bootloader/pull/147) -- [`llvm_asm!` -> `asm!`](https://github.com/rust-osdev/bootloader/pull/154) -- [Reduce the number of used unstable features of `x86_64` crate](https://github.com/rust-osdev/bootloader/pull/155) (published as `v0.10.2`) - - Backported as `v0.9.17` to fix compilation on latest nighlies. - -Thanks to [@mkroening](https://github.com/mkroening) and [@CraftSpider](https://github.com/CraftSpider) for their contributions! - -### [`xhci`](https://github.com/rust-osdev/xhci) - -The `xhci` crate provides types of xHCI structures such as Contexts, Extended Capabilities, Registers, and TRBs. - -Previously the repository was hosted under [`@toku-sa-n`](https://github.com/toku-sa-n). Since April, the Rust OSDev team hosts the repository. - -This crate is still under depelopment. Some types or field accessors may be missing. If you find missing features, feel free to send a PR! - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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, we improved diagnostics by recording the original and target AML types in the `AmlError::IncompatibleValueConversion` error. This error is emitted when AML tries to convert a value -to a data type that it can't be interpreted as - AML's rules on possible type conversions and where they can occur are very elaborate, so it helps to know the conversion that was actually attempted. -(published as `v0.12.0`) - -Thanks to [@Knapsac](https://github.com/KnapSac) and [@toothbrush7777777](https://github.com/toothbrush7777777) for their contributions! - -### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) - -In order to make it easier to run UEFI disk images in [QEMU](https://www.qemu.org/) using [OVMF](https://github.com/tianocore/tianocore.github.io/wiki/OVMF), we created a new `ovmf-prebuilt` project this month. The projects automatically downloads the latest prebuilt OVMF RPM images from [Gerd Hoffman's firmware repository](https://web.archive.org/web/20250505152052/https://www.kraxel.org/repos/) and publishes the extracted `OVMF_*.fd` files as [GitHub releases](https://github.com/rust-osdev/ovmf-prebuilt/releases). A new release is created daily through a CI script. Note that the licensing terms of the [`tianocore/edk2`](https://github.com/tianocore/edk2) repository apply to the released files. - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. In April, we updated the `x86_64` dependency to fix the build on the latest nightlies: - -- [Update x86_64 dependency and make it more robust](https://github.com/rust-osdev/uart_16550/pull/14) (published as `v0.2.13`) - -This pull request also minimizes the number of unstable features that are enabled for the `x86_64` dependency to prevent breakage on future `const_fn` changes. - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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 April, we merged the following changes: - -- [Expose NamedFileProtocolInfo's Header types](https://github.com/rust-osdev/uefi-rs/pull/205) -- [Upgrade to GitHub-native Dependabot](https://github.com/rust-osdev/uefi-rs/pull/207) - -Thanks to [@ocadaruma](https://github.com/ocadaruma) for their contribution! - -### [`spinning_top`](https://github.com/rust-osdev/spinning_top) - -The `spinning_top` crate provides a simple spinlock implementation based on the abstractions of the [`lock_api`](https://docs.rs/lock_api/0.4.1/lock_api/) crate. This month, we fixed a compiler warning: - -- [Fix `spin_loop_hint` warning on Rust 1.51](https://github.com/rust-osdev/spinning_top/pull/10) (published as `v0.2.3`) - - -## Call for Participation -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - - - -_No tasks were proposed for this section._ - - - -If you maintain a Rust OSDev project 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. - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following improvements to the [_Writing an OS in Rust_] blog this month: - -- [Translate common texts into Chinese](https://github.com/phil-opp/blog_os/pull/962) -- [Remove note about previously updated dependency](https://github.com/phil-opp/blog_os/pull/964) -- [The `wake_trait` feature is now stable](https://github.com/phil-opp/blog_os/pull/963) -- [Suggestion for `.cargo/config.toml` Explanation](https://github.com/phil-opp/blog_os/pull/974) -- [Add missing word](https://github.com/phil-opp/blog_os/pull/960) -- [Fix typo](https://github.com/phil-opp/blog_os/pull/978) - -Thanks to [@alexxroche](https://github.com/alexxroche), [@hi-rustin](https://github.com/hi-rustin), [@moomoolive](https://github.com/moomoolive), and [@kahirokunn](https://github.com/kahirokunn) for their contributions! - -We also made some further progress on the upcoming third edition of the blog: - -- [Minor improvements to UEFI code examples](https://github.com/phil-opp/blog_os/commit/0b9231f0ba57c189f747660f92bb1e4087e2b20b) -- [Finish first draft of 'UEFI Booting' post](https://github.com/phil-opp/blog_os/commit/1aa7d21d8b3aabd3d4bb2e345f5590451e4dc2da) -- [Resolve some TODOs](https://github.com/phil-opp/blog_os/commit/c61c37643aee942bea7c8dbbb235d0dffa6218bf) -- [Explain how to run the disk images in QEMU (both BIOS and UEFI)](https://github.com/phil-opp/blog_os/commit/b3eace12608d9def1a996f5e2e46549858ba76c4) - -### [`cdrzewiecki/celos`](https://gitlab.com/cdrzewiecki/celos) - -(Section written by [@drzewiec](https://github.com/drzewiec)) - -Over the past couple of months I have made some great strides on my OS. - -* Migrated the kernel to the higher half of virtual memory -* Added double fault handling -* Added page fault handling which will attempt to (safely) expand the kernel stack if it overflows -* Related to the above, added more robust frame allocation -* Added basic heap allocation - -Still working hard on squashing bugs, adding all of the things above gave me some pretty serious memory allocation bugs and it's taken me a while to get those worked out. I still want to do more testing to make sure I have all the bugs here worked out before moving on. - -Next steps will be to get nicer font drawing, and then attempt to implement process support. - -## Join Us? - -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). diff --git a/content/this-month/2021-05/index.md b/content/this-month/2021-05/index.md deleted file mode 100644 index ba8ef44a..00000000 --- a/content/this-month/2021-05/index.md +++ /dev/null @@ -1,201 +0,0 @@ -+++ -title = "This Month in Rust OSDev (May 2021)" -date = 2021-06-07 - -[extra] -month = "May 2021" -authors = [ - "phil-opp", - "GabrielMajeri", - "IsaacWoods", - "toku-sa-n", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In May, we merged the following changes: - -- [Use new `const_fn_trait_bound` feature to fix build on latest nightly](https://github.com/rust-osdev/x86_64/pull/250) (published as `v0.14.1`) -- [Multiple improvements to the inline assembly code](https://github.com/rust-osdev/x86_64/pull/251) (published as `v0.14.2`) -- [Minor lint fixes](https://github.com/rust-osdev/x86_64/pull/253) -- [Cleanup `const_fn!`](https://github.com/rust-osdev/x86_64/pull/255) -- [Use marker types for Port read/write access](https://github.com/rust-osdev/x86_64/pull/248) -- [Bump version to 0.14.3](https://github.com/rust-osdev/x86_64/pull/256) (published as `v0.14.3`) - -We also started to [prepare a `v0.15` release](https://github.com/rust-osdev/x86_64/issues/262), for which we already implemented the following breaking changes: - -- [Replace `software_interrupt!` macro with generic function](https://github.com/rust-osdev/x86_64/pull/259) -- [`software_interrupt`: Add additional testing](https://github.com/rust-osdev/x86_64/pull/260) -- [Fix typo in docs](https://github.com/rust-osdev/x86_64/pull/265) -- [idt: Fixup Options structure and cleanup `set_handler_fn`](https://github.com/rust-osdev/x86_64/pull/226) (resubmitted in [#261](https://github.com/rust-osdev/x86_64/pull/261)) -- [Use SegmentSelector in InterruptStackFrame](https://github.com/rust-osdev/x86_64/pull/263) - -Thanks to [@dbeckwith](https://github.com/dbeckwith) and [@Freax13](https://github.com/Freax13) for their contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes: - -- [Change register used in setting `SS` in `stage_4`](https://github.com/rust-osdev/bootloader/pull/156) (published as `v0.10.3`) -- [Fix build on latest Rust nightly by updating to `uefi` v0.9.0](https://github.com/rust-osdev/bootloader/pull/162) -- [Fix higher half kernels by identity mapping context switch fn earlier](https://github.com/rust-osdev/bootloader/pull/161) (published as `v0.10.4`) -- [Make bootloader v0.10 compatible with latest Rust nightlies by updating uefi-rs dependency](https://github.com/rust-osdev/bootloader/pull/170) (published as `v0.10.5`) -- [Add some usage examples](https://github.com/rust-osdev/bootloader/pull/166) -- [Uefi: Look for an ACPI2 RSDP first](https://github.com/rust-osdev/bootloader/pull/174) -- [Identity-map GDT into kernel address space](https://github.com/rust-osdev/bootloader/pull/175) -- [Don't check target architecture for builder crate to support cross-compiling](https://github.com/rust-osdev/bootloader/pull/176) (published as `v0.10.6`) - -Thanks to [@Elekrisk](https://github.com/Elekrisk) for their contribution! - -We also published the following backport to `v0.9`: - -- [Fix nightly regression by manually passing `--gc-sections`](https://github.com/rust-osdev/bootloader/pull/168) (published as `v0.9.18`) - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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 May, we merged the following changes: - -- [Switch to the newer `Try` trait API](https://github.com/rust-osdev/uefi-rs/pull/221) -- [Add `FromResidual>` impl for `Status`](https://github.com/rust-osdev/uefi-rs/pull/223) -- [Add `PartitionInfo` protocol](https://github.com/rust-osdev/uefi-rs/pull/225) -- [Add shim lock protocol](https://github.com/rust-osdev/uefi-rs/pull/226) - -Thanks to [@phil-opp](https://github.com/phil-opp) and [@nicholasbishop](https://github.com/nicholasbishop) for their contributions! - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following changes this month: - -- [SerialPort::new() no longer requires nightly](https://github.com/rust-osdev/uart_16550/pull/16) (published as `v0.2.14`) -- [Add support for memory mapped UARTs](https://github.com/rust-osdev/uart_16550/pull/15) -- [Improvements to new MMIO support](https://github.com/rust-osdev/uart_16550/pull/18) (published as `v0.2.15`) - -Thanks to [@josephlr](https://github.com/josephlr) and [@remimimimi](https://github.com/remimimimi) for their contributions! - -### [`pic_8259`](https://github.com/rust-osdev/pic8259) - -The `pic_8259` crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs). It is a new fork of the [`pic8259_simple`](https://github.com/emk/toyos-rs/tree/master/crates/pic8259_simple) crate, which appears to be no longer maintained. - -We merged the following changes on top of the original `pic8259_simple` crate: - -- [PIC: Masks](https://github.com/emk/toyos-rs/pull/7) -- [cpuio: Use new feature flag for const functions](https://github.com/emk/toyos-rs/pull/9) -- [Replace `cpuio` dependency with `x86_64` crate](https://github.com/rust-osdev/pic8259/commit/92f7a123224e7fa1ce3813fc62b84e290d2fc799) -- [Rename to pic8259 and bump version to 0.10.0](https://github.com/rust-osdev/pic8259/commit/3e5602aaff3d30f6371c4976149eb693d5838d7c) - -Thanks to [@mkroening](https://github.com/mkroening) and [@hanmertens](https://github.com/hanmertens) for their contributions! - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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 was fairly quiet, but an important regression was fixed. When native methods were introduced in March, -`AmlContext` lost its `Send + Sync`, as these native methods weren't required to be thread-safe. This meant that -`AmlContext` could no longer be stored in types such as `spin::Once`, or shared between threads/tasks. This is -undesirable for `AmlContext`, as it is very expensive to construct, and AML does (in theory) provide mechanisms to -make itself thread-safe, so any probject should only need one. - -This was fixed by requiring native methods to be `Send + Sync`. If you're hitting this issue, please upgrade to the -latest version. (published as `v0.13.0`) - -Thanks to [@michaelmelanson](https://github.com/michaelmelanson) for his contribution! - -### [`xhci`](https://github.com/rust-osdev/xhci) - -The `xhci` crate provides types of xHCI structures such as Contexts, Extended Capabilities, Registers, and TRBs. - -In May we finished implementing all of these structures and field getters/setters. Still there may exist missing. If you find one, feel free to send a PR! - -### [`spinning_top`](https://github.com/rust-osdev/spinning_top) - -The `spinning_top` crate provides a simple spinlock implementation based on the abstractions of the [`lock_api`](https://docs.rs/lock_api/0.4.1/lock_api/) crate. This month, we released version `v0.2.4` with the following small improvements: - -- [Define `MappedSpinlockGuard` alias](https://github.com/rust-osdev/spinning_top/pull/12) -- [Fix unclosed code block in doc comment](https://github.com/rust-osdev/spinning_top/pull/11/files) - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for these contributions! - -### [`vga`](https://github.com/rust-osdev/vga) - -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. This month, we fixed a nightly build error: - -- [Update dependencies to latest versions to fix E0557](https://github.com/rust-osdev/vga/pull/23) -- [Update testing](https://github.com/rust-osdev/vga/pull/24) (published as `v0.2.7`) - -Thanks to [@ethindp](https://github.com/ethindp) for their contribution! - -### [`ps2-mouse`](https://github.com/rust-osdev/ps2-mouse) - -The `ps2-mouse` library provides a basic interface for interacting with a PS/2 mouse. It was also affected by the nightly breakage in `x86_64`, so it required a dependency update too: - -- [Update x86_64 to 0.14.2](https://github.com/rust-osdev/ps2-mouse/pull/2) (published as `v0.1.4`) - -Thanks to [@littledivy](https://github.com/littledivy) for this contribution! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - -- [(`acpi`) Add initial support for `DefExternal` opcodes](https://github.com/rust-osdev/acpi/issues/96) -- [(`acpi`) Add test to make sure `AmlContext` remains `Send + Sync`](https://github.com/rust-osdev/acpi/issues/98) - -If you maintain a Rust OSDev project 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. - - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following improvements to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Update posts to fix build on latest nightly](https://github.com/phil-opp/blog_os/pull/990) - - [Update x86_64 dependency to v0.14.2 to fix nightly breakage](https://github.com/phil-opp/blog_os/pull/984) - - Adjust `post-XX` tags for x86_64 v0.14: [`post-05`](https://github.com/phil-opp/blog_os/pull/985), [`post-06`](https://github.com/phil-opp/blog_os/pull/986), [`post-07`](https://github.com/phil-opp/blog_os/pull/987), [`post-08`](https://github.com/phil-opp/blog_os/pull/988) - - [Switch to `pic8259` fork](https://github.com/phil-opp/blog_os/pull/987) - - [Update `linked_list_allocator` dependency to v0.9.0](https://github.com/phil-opp/blog_os/pull/989) -- [Translate post 08 to Japanese](https://github.com/phil-opp/blog_os/pull/954) -- [Remove wrong suggestion part](https://github.com/phil-opp/blog_os/pull/983) -- [Fix typo](https://github.com/phil-opp/blog_os/pull/978) -- [Fix typos in edition 3 uefi booting post](https://github.com/phil-opp/blog_os/pull/981) - -Thanks to [@woodyZootopia](https://github.com/woodyZootopia), [@kahirokunn](https://github.com/kahirokunn), [@HKalbasi](https://github.com/HKalbasi), and [@bjorn3](https://github.com/bjorn3) for their contributions! - -## Join Us? - -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). diff --git a/content/this-month/2021-06/index.md b/content/this-month/2021-06/index.md deleted file mode 100644 index e8559946..00000000 --- a/content/this-month/2021-06/index.md +++ /dev/null @@ -1,137 +0,0 @@ -+++ -title = "This Month in Rust OSDev (June 2021)" -date = 2021-07-08 - -[extra] -month = "June 2021" -authors = [ - "phil-opp", - "IsaacWoods", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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, both the `rsdp` and `acpi` crates saw breaking changes. These changes should require minimal work to migrate to; -please file an issue if you encounter any difficulties. (published as `rsdp v2.0.0` and `acpi v3.0.0`) - -- [Basic support for the MADT's new Multiprocessor Wakeup Structure was added](https://github.com/rust-osdev/acpi/pull/99) -- [`PhysicalMapping` now implements `Send`](https://github.com/rust-osdev/acpi/pull/101) -- [`PhysicalMapping`'s fields were made private, preventing construction of unsound mappings in safe code](https://github.com/rust-osdev/acpi/pull/102). - The `unmap_physical_region` method of `AcpiHandler` also lost its `self` type - handlers that used `self` should - instead access themselves through the `PhysicalMapping::handler` method. This prevents a mapping from being - unmapped using a different handler to the one that mapped it. -- [Accesses to potentially unaligned packed field were fixed](https://github.com/rust-osdev/acpi/commit/d58e64b39e9f22367bc76b64a68826a519615226). - `repr(packed)` structures are very common in OS Dev, and make sure the layout of Rust's structures matches the - hardware's. Unfortunately, they can be slightly tricky to work with - creating an unaligned reference is - undefined behaviour, and references can transiently be created by, for example, calling a method on an unaligned - field of a packed structure (e.g. `entry.flags.get_bit(4)`). You can read more about this issue [here](https://github.com/rust-lang/rust/issues/82523). -- [`acpi::platform` no longer re-exports the contents of its `interrupt` submodule](https://github.com/rust-osdev/acpi/commit/fdd88add32497411d439c2d18fe28258a3fe6525) - -Thanks to [@wusyong](https://github.com/wusyong) and [@Freax13](https://github.com/wusyong) for their contributions! - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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: - -- [Make the `qemu-exit` dependency optional](https://github.com/rust-osdev/uefi-rs/pull/229) -- [Fix type of the media field in the `BlockIO` protocol](https://github.com/rust-osdev/uefi-rs/pull/234) -- [Use `newtype_enum` for `DevicePath` enums](https://github.com/rust-osdev/uefi-rs/pull/230) -- [Make `DevicePath` and `AcpiDevicePath` unaligned](https://github.com/rust-osdev/uefi-rs/pull/231) -- [Derive `Debug` for `CharConversionError`](https://github.com/rust-osdev/uefi-rs/pull/233) -- [Rename boot services' `memset` to `set_mem`](https://github.com/rust-osdev/uefi-rs/pull/235) -- [Implement image loading/starting](https://github.com/rust-osdev/uefi-rs/pull/237) -- [Add `num_blocks` method to `GptPartitionEntry`](https://github.com/rust-osdev/uefi-rs/pull/238) -- [`ShimLock` protocol uses `sysv64` function ABI](https://github.com/rust-osdev/uefi-rs/pull/227) -- [Make using the `stdio` handles require a mutable ref](https://github.com/rust-osdev/uefi-rs/pull/240) -- [Fix AArch64 build](https://github.com/rust-osdev/uefi-rs/pull/243) - -Thanks to [@nicholasbishop](https://github.com/nicholasbishop), [@iankronquist](https://github.com/iankronquist) and [@josephlr](https://github.com/josephlr) for their contributions! - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In June, we merged the following changes: - -- [Add common abstractions for x86 Segments](https://github.com/rust-osdev/x86_64/pull/258) -- [Specify sysv64 for the calling convention of the external assembly functions](https://github.com/rust-osdev/x86_64/pull/267) -- [Make IDT module available on stable Rust](https://github.com/rust-osdev/x86_64/pull/271) -- [Fix off-by-one error in GDT `from_raw_slice()`](https://github.com/rust-osdev/x86_64/pull/269) - -We did not issue a new crates.io release with these changes yet, but we plan to do so soon. - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - -**[`phil-opp/blog_os`](https://github.com/phil-opp/blog_os):** - -- [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). - -If you maintain a Rust OSDev project 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. - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -The [_Writing an OS in Rust_](https://os.phil-opp.com/) blog received the following changes this month: - -- [Switch comments from utterances to giscus](https://github.com/phil-opp/blog_os/pull/996) -- [giscus: Use specific search term instead of `og:title`](https://github.com/phil-opp/blog_os/pull/1007) -- [giscus: Make it possible to set discussion thread manually per post](https://github.com/phil-opp/blog_os/pull/1010) -- [Translate `post-12` to Japanese](https://github.com/phil-opp/blog_os/pull/977) -- 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) - -Thanks to: - -- [@kahirokunn](https://github.com/kahirokunn) for the new Japanese translation, -- [@woodyZootopia](https://github.com/woodyZootopia), [@JohnTitor](https://github.com/JohnTitor), and [@sozysozbot](https://github.com/sozysozbot) for reviewing this translation, and -- [@Foo-x](https://github.com/Foo-x), [@tsao-chi](https://github.com/tsao-chi), and [@conorbros](https://github.com/conorbros) for fixing typos. - -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! - -## Join Us? - -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). diff --git a/content/this-month/2021-07/index.md b/content/this-month/2021-07/index.md deleted file mode 100644 index 394244d5..00000000 --- a/content/this-month/2021-07/index.md +++ /dev/null @@ -1,149 +0,0 @@ -+++ -title = "This Month in Rust OSDev (July 2021)" -date = 2021-08-07 - -[extra] -month = "July 2021" -authors = [ - "phil-opp", - "IsaacWoods", - "GabrielMajeri", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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: - -- [Add support for getting/setting variables](https://github.com/rust-osdev/uefi-rs/pull/245) -- [Better logger that includes filename and line](https://github.com/rust-osdev/uefi-rs/pull/246) -- [device path: add constants for all subtypes](https://github.com/rust-osdev/uefi-rs/pull/250) -- [device path: change the length type to u16](https://github.com/rust-osdev/uefi-rs/pull/251) -- [Implement `BootServices::protocols_per_handle`](https://github.com/rust-osdev/uefi-rs/pull/253) -- [Add method to get variable names](https://github.com/rust-osdev/uefi-rs/pull/254) -- [Better `fmt::Debug` for `Time` struct + `fmt::Display`](https://github.com/rust-osdev/uefi-rs/pull/256) -- [Fix `BltRegion::Full` bounds check](https://github.com/rust-osdev/uefi-rs/pull/257) -- [Fix procedural macros](https://github.com/rust-osdev/uefi-rs/pull/260) -- [device path: add header struct](https://github.com/rust-osdev/uefi-rs/pull/263) -- [device path: add iter method and test](https://github.com/rust-osdev/uefi-rs/pull/264) - -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! - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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: - -- [Definitions were added for the FADT's fixed and architecture flags](https://github.com/rust-osdev/acpi/pull/103) -- [Table signatures were added for more static tables](https://github.com/rust-osdev/acpi/pull/103) -- [AML: support was added for the `DefPowerResource` opcode](https://github.com/rust-osdev/acpi/commit/7f6bb2ee53c9abb6c552434dbdb4e13cf38b6b26) -- [AML: support was added for the `DefThermalZone` opcode](https://github.com/rust-osdev/acpi/commit/a55d82bad3e5b7ffd42d19487a57ca65359e3bad) -- [AML: support was added for the `DefExternal` opcode](https://github.com/rust-osdev/acpi/commit/188d62fdab853c16e9c3e66bb183acc3e1c9f134) -- [AML: support was added for the `DefConcat` opcode](https://github.com/rust-osdev/acpi/commit/6f92f675a4b0e21a5bc63edd99de1010efdb61fa) -- [AML: support was added for the `DefConcatRes` opcode](https://github.com/rust-osdev/acpi/commit/a883868dd57473a61a095c56d3e7490dfe012700) -- [AML: support was added for the `DefMid` opcode](https://github.com/rust-osdev/acpi/commit/a37008df127c6f2160c1a2ac3ba5f536f8616732) - -These changes were published as `acpi v3.1.0` and `aml v0.14.0`. Thanks to [@ethindp](https://github.com/ethindp) -and [@toku-sa-n](https://github.com/toku-sa-n) for their contributions. - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) - -The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. - -In July, our `multiboot2` maintenance team gained [@phip1611](https://github.com/phip1611) as a new member. Welcome! - -The following changes were merged this month: - -- [much improved debug output of BootInformation + enum TagType](https://github.com/rust-osdev/multiboot2/pull/76) (published as `v0.11.0`) -- [Set up CI on Github Actions](https://github.com/rust-osdev/multiboot2/commit/1d7c0e21fe532550f5ee9757252881e18c88a063) -- [Add multiboot2 magic number](https://github.com/rust-osdev/multiboot2/pull/77) -- [Fixing future compiler error "unaligned_references" (82523)](https://github.com/rust-osdev/multiboot2/pull/82) -- [Rust edition 2018 + formatting + clippy](https://github.com/rust-osdev/multiboot2/pull/84) -- [**Breaking:** `load` returns a result now (no more assertions that could panic)](https://github.com/rust-osdev/multiboot2/pull/80) -- [Renamed multiboot2 bootloader magic constant](https://github.com/rust-osdev/multiboot2/pull/85) -- [Cargo toml prepare release v0.12 + changelog](https://github.com/rust-osdev/multiboot2/pull/87) (published as `v0.12.0`) -- [Rename old Github urls in README](https://github.com/rust-osdev/multiboot2/pull/88) - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In July, we merged the following improvements: - -- [feat(idt): make it available in the stable Rust](https://github.com/rust-osdev/x86_64/pull/271) -- [gdt: Fix off-by-one error in from_raw_slice()](https://github.com/rust-osdev/x86_64/pull/269) -- [Make align_up and align_down const](https://github.com/rust-osdev/x86_64/pull/270) -- [Add a SelectorErrorCode to segment_not_present in IDT](https://github.com/rust-osdev/x86_64/pull/274) -- [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) -- [fix(Changelog.md): typo #278](https://github.com/rust-osdev/x86_64/pull/278) -- [feat(instructions): define `tables::sgdt`](https://github.com/rust-osdev/x86_64/pull/279) -- [Create a CI script for automated releases](https://github.com/rust-osdev/x86_64/pull/281) -- [CI: Use more efficient crates.io API endpoint](https://github.com/rust-osdev/x86_64/pull/282) -- [Release version to 0.14.4](https://github.com/rust-osdev/x86_64/pull/283) -- [Rename XCr0 and CR4 flags](https://github.com/rust-osdev/x86_64/pull/275) - -Thanks to [@budde25](https://github.com/budde25) and [@toku-sa-n](https://github.com/toku-sa-n) for their contributions. - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - - - -_No tasks were proposed for this section._ - - - -If you maintain a Rust OSDev project 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. - - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -This month, the [_Writing an OS in Rust_](https://os.phil-opp.com) blog received the following updates: - -- [Translate first two posts into Russian](https://github.com/phil-opp/blog_os/pull/1029) - - Thanks to [@MrZloHex](https://github.com/MrZloHex) for the translation and [@SnejUgal](https://github.com/SnejUgal) and [@vdjagilev](https://github.com/vdjagilev) for reviewing! -- [docs: update version of crates](https://github.com/phil-opp/blog_os/pull/1031) -- [Replace MS doc link in german](https://github.com/phil-opp/blog_os/pull/1034) -- 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. - -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. - -## Join Us? - -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). diff --git a/content/this-month/2021-08/index.md b/content/this-month/2021-08/index.md deleted file mode 100644 index b0326dba..00000000 --- a/content/this-month/2021-08/index.md +++ /dev/null @@ -1,186 +0,0 @@ -+++ -title = "This Month in Rust OSDev (August 2021)" -date = 2021-09-08 - -[extra] -month = "August 2021" -authors = [ - "phil-opp", - "IsaacWoods", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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. - -There was a fair amount of progress this month, including adding support for a major AML feature: buffer fields. -These are objects that represent bit-level slices of buffer objects, allowing a section of a buffer to be read and -written. This requires us to support multiple namespace objects operating on the same underlying data - -currently this is handled simply with spinlocks, but we're looking to improve this situation in the future. -With this, we grew support for the `DefCreateBitField`, `DefCreateByteField`, `DefCreateWordField`, -`DefCreateDWordField`, `DefCreateQWordField`, and `DefCreateField` opcodes, as well as logic for reading and -writing `Integer`s and `Buffer`s out of them. (published as `aml v0.16.0`) - -The `acpi` crate also saw improvement, and unfortunately some more breakage. We now support X2APIC entries -appearing in the MADT, and so have changed the representation of Processor UIDs and Local APIC IDs in -`acpi::platform::Processor` to `u32`, to support the wider IDs that X2APIC uses to support more processors. On -older platforms that only support APIC, the upper bits will simply always be zeroed, and so these values can be -cast down to `u8` when needed. Note that for complex legacy reasons, you cannot rely upon ACPI for detecting -whether a platform has X2APIC support or not, and so whether the MADT actually contained X2APIC entries is not exposed -by this interface - this is by design. (published as `acpi v4.0.0`) - -Other changes were: -- [`aml`: the contents of the `namespace` module were made public](https://github.com/rust-osdev/acpi/pull/107). - Thanks to [@Andy-Python-Programmer](https://github.com/Andy-Python-Programmer) for this contribution! -- [`aml`: store locals and method arguments in arrays](https://github.com/rust-osdev/acpi/commit/c1597aba3d39344834292637fb81e2f2971d6c04). If you're manually calling AML methods - that take arguments, you will need to update how you create them. -- [`aml`: support the `DefFatal` opcode](https://github.com/rust-osdev/acpi/commit/514e55df07acbca93dfd4eb2db3cdd6fdea5aaf5). `DefFatal` will cause a panic by default, but this behaviour can be overridden by implementing `Handler::handle_fatal_error`. -- [`aml`: implement the `DefWhile` opcode](https://github.com/rust-osdev/acpi/commit/06409b360ef30b3b08b56865f3ee380315751f14) -- [`aml`: implement the `DefBreak` opcode](https://github.com/rust-osdev/acpi/commit/da5f5cec8096d2ebd5697212e282abbeaed6edb7) -- [`aml`: implement the `DefContinue` opcode](https://github.com/rust-osdev/acpi/commit/ed0400092e18598c73ca6048fb96b2522237808d) -- [`aml`: implement the `DefIncrement` and `DefDecrement` opcodes](https://github.com/rust-osdev/acpi/commit/b854d5491e48e5a4f332ff259ce185cb357261d0) -- [`aml`: implement the `ToInteger` opcode](https://github.com/rust-osdev/acpi/commit/00a61d8b7471dae725283296f4ee9c0c20013156) - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -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 August, [@nicholasbishop](https://github.com/nicholasbishop) joined as a co-maintainer of the crate. Welcome! - -Many improvements were merged this month: - -- [Add `BootServices::exit` method; Make `PointerMode`'s fields public for checking against support of a pointer device](https://github.com/rust-osdev/uefi-rs/pull/261) -- [Implement `PartialEq`+`Eq` for `DevicePath`](https://github.com/rust-osdev/uefi-rs/pull/265) -- [System table can get debug-formatted](https://github.com/rust-osdev/uefi-rs/pull/248) -- [loaded image: add set_image function](https://github.com/rust-osdev/uefi-rs/pull/266) -- [Better `CStr16` to `String` and `str` conversions](https://github.com/rust-osdev/uefi-rs/pull/249) -- [Add a minimal UEFI application template](https://github.com/rust-osdev/uefi-rs/pull/268) -- [Use the built-in `aarch64-unknown-uefi` target](https://github.com/rust-osdev/uefi-rs/pull/269) -- [Make `GraphicsOutput.query_mode(...)` public](https://github.com/rust-osdev/uefi-rs/pull/270) -- [Publish new versions of all the crates](https://github.com/rust-osdev/uefi-rs/pull/276) (published `uefi v0.12.0`, `uefi-macros v0.4.0`, and `uefi-services v0.9.0`) -- [Add newtype enum for variable vendors and add `IMAGE_SECURITY_DATABASE` to it](https://github.com/rust-osdev/uefi-rs/pull/273) -- [Fix doc link and make CI lints stricter](https://github.com/rust-osdev/uefi-rs/pull/272) -- [Add num_bytes method to `CStr16`](https://github.com/rust-osdev/uefi-rs/pull/274) -- [Add `CString16`](https://github.com/rust-osdev/uefi-rs/pull/275) -- [Enhance `Guid::from_values` and `Guid::fmt`](https://github.com/rust-osdev/uefi-rs/pull/280) -- [Handle panics by unwinding the stack and implement check_event method](https://github.com/rust-osdev/uefi-rs/pull/282) - -Thanks to [@HTG-YT](https://github.com/HTG-YT), [@phip1611](https://github.com/phip1611), [@Andy-Python-Programmer](https://github.com/Andy-Python-Programmer), and [@timrobertsdev](https://github.com/timrobertsdev) for their contributions! - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In August, we merged the following changes: - -- [Rename `XCr0` and `CR4` flags](https://github.com/rust-osdev/x86_64/pull/275) -- [Fix CI tests on Windows](https://github.com/rust-osdev/x86_64/pull/297) -- [Use `#[cfg(doc)]` instead of docs.rs-specific cfg flag](https://github.com/rust-osdev/x86_64/pull/287) -- [Expose `MapperFlush::new` and `MapperFlushAll::new`](https://github.com/rust-osdev/x86_64/pull/296) -- [docs: Update segment register references in `GDT::load*` method to non-deprecated methods](https://github.com/rust-osdev/x86_64/pull/301) -- [docs(idt): remove a panic note](https://github.com/rust-osdev/x86_64/pull/300) -- [Fix typo and doc links in GDT docs](https://github.com/rust-osdev/x86_64/pull/302) - -These changes were not published yet, but a pull request for a new version is open already: [Release version 0.14.5](https://github.com/rust-osdev/x86_64/pull/304). - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) and [@ncatelli](https://github.com/ncatelli) for their contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. - -This month, we merged the following changes: - -- [[v0.9] Set `relocation-model: static` and `panic-strategy: abort` and fix `.intel_syntax` warnings](https://github.com/rust-osdev/bootloader/pull/185) (published as `v0.9.19`) -- [Fix relocation-model field name in the target spec json](https://github.com/rust-osdev/bootloader/pull/186) (published as `v0.10.7`) -- [Pad uefi fat file length](https://github.com/rust-osdev/bootloader/pull/180) -- [Also check cfg gated target field for bootloader dependency](https://github.com/rust-osdev/bootloader/pull/182) (published as `v0.10.8`) -- [Fix typo in link in changelog](https://github.com/rust-osdev/bootloader/pull/194) - -Thanks to [@vinc](https://github.com/vinc), [@bjorn3](https://github.com/bjorn3), [@Freax13](https://github.com/Freax13), [@yusdacra](https://github.com/yusdacra), and [@martica](https://github.com/martica) for their contributions! - -### [`multboot2`](https://github.com/rust-osdev/multiboot2) - -The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. - -The following changes were merged this month: - -- [Unpublic tags bugfix](https://github.com/rust-osdev/multiboot2/pull/89) (published as `v0.12.1`) -- [Fix `ModuleTag` cmdline](https://github.com/rust-osdev/multiboot2/pull/91) -- [Stricter typing + better split of modules + bugfix](https://github.com/rust-osdev/multiboot2/pull/90) - -### [`pic_8259`](https://github.com/rust-osdev/pic8259) - -The `pic_8259` crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs). - -In August, we added cargo features to make the crate buildable on stable: - -- [Add `nightly` and `stable` feature flags to enable compilation on stable Rust](https://github.com/rust-osdev/pic8259/pull/1) (published as `v0.10.2`) - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for this contribution! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - - - -_No tasks were proposed for this section._ - - - -If you maintain a Rust OSDev project 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. - - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following improvements to the [_Writing an OS in Rust_](https://os.phil-opp.com) blog: - -- [Update crate versions across translations](https://github.com/phil-opp/blog_os/pull/1031) -- [Replace MS doc link that linked to a German page](https://github.com/phil-opp/blog_os/pull/1034) -- [Fix link: The const_fn unstable feature no longer exists](https://github.com/phil-opp/blog_os/commit/c1e6a66e356653c166426adbcdbb158792bc408c) -- [Replace fathom analytics with goatcounter](https://github.com/phil-opp/blog_os/commit/27ab4518acbb132e327ed4f4f0508393e9d4d684) -- [fix: typo](https://github.com/phil-opp/blog_os/pull/1040) -- [Fix links in Russian translation](https://github.com/phil-opp/blog_os/pull/1046) - -Thanks to [@Foo-x](https://github.com/Foo-x), [@adi-g15](https://github.com/adi-g15), [@Kalbiq](https://github.com/Kalbiq), and [@non-descriptive](https://github.com/non-descriptive) for their contributions! - -## Join Us? - -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). diff --git a/content/this-month/2021-09/index.md b/content/this-month/2021-09/index.md deleted file mode 100644 index 248d3547..00000000 --- a/content/this-month/2021-09/index.md +++ /dev/null @@ -1,142 +0,0 @@ -+++ -title = "This Month in Rust OSDev (September 2021)" -date = 2021-10-07 - -[extra] -month = "September 2021" -authors = [ - "phil-opp", - "phip1611", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In September, we merged the following changes: - -- [Add `clean_up` and `clean_up_with_filter`](https://github.com/rust-osdev/x86_64/pull/264) for deallocating unused page tables -- [Add exception vector type](https://github.com/rust-osdev/x86_64/pull/303) -- [Bump `bit_field` to 0.10.1](https://github.com/rust-osdev/x86_64/pull/306) -- [Release version 0.14.5](https://github.com/rust-osdev/x86_64/pull/304) -- [Move segment types into a new registers::segmentation module](https://github.com/rust-osdev/x86_64/pull/309) -- [Release version 0.14.6](https://github.com/rust-osdev/x86_64/pull/310) - -Thanks to [@Freax13](https://github.com/Freax13), [@npmccallum](https://github.com/npmccallum), and [@mkroening](https://github.com/mkroening) for their contributions! - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. - -This month, we merged the following changes: - -- [Improve macro errors](https://github.com/rust-osdev/uefi-rs/pull/277) -- [Implement missing methods of `DebugSupport`](https://github.com/rust-osdev/uefi-rs/pull/290) -- [macros: add compilation tests](https://github.com/rust-osdev/uefi-rs/pull/286) -- [Remove attribute to enable `const_panic`](https://github.com/rust-osdev/uefi-rs/pull/296) -- [Add a test command to build.py and also use it in the CI](https://github.com/rust-osdev/uefi-rs/pull/283) - -Thanks to [@necauqua](https://github.com/necauqua) and [@timrobertsdev](https://github.com/timrobertsdev) for their contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. - -We finally merged a long-desired feature this month: - -- [Framebuffer configuration](https://github.com/rust-osdev/bootloader/pull/179) (published as `v0.10.9`) - -Thanks to [@anellie](https://github.com/anellie) for this contribution! - -### [`multboot2`](https://github.com/rust-osdev/multiboot2) - -The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. - -It is now part of a workspace and lives next to the new crate `multiboot2-header`. - -The following changes were merged this month: - -- [Code style improvements + optional CI job (clippy, rustfmt, rustdoc)](https://github.com/rust-osdev/multiboot2/pull/92) -- [std in tests; hash for TagType](https://github.com/rust-osdev/multiboot2/pull/94) -- [editorconfig file](https://github.com/rust-osdev/multiboot2/pull/93) -- [prepared cargo workspace, as discussed in PR #79](https://github.com/rust-osdev/multiboot2/pull/86) - -The changes were published as `v0.12.2`. - - -### [`multboot2-header`](https://github.com/rust-osdev/multiboot2) (**new**) - -The `multiboot2-header` crate provides abstraction types for the Multiboot2 header -and a builder struct to construct these headers. The corresponding repository was -prepared ([#86](https://github.com/rust-osdev/multiboot2/pull/86)) and the initial release -is expected in early October. See [#95](https://github.com/rust-osdev/multiboot2/pull/95) for more details. - - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - -- [(`phil-opp/blog_os`) Looking for a reviewer for a French translation](https://github.com/phil-opp/blog_os/pull/1053) - - - -If you maintain a Rust OSDev project 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. - - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged two small fixes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Fix typos in code examples in Async/Await post](https://github.com/phil-opp/blog_os/pull/1051) -- [Fix link syntax in Russian translation](https://github.com/phil-opp/blog_os/pull/1046) - -Thanks to [@jongillham](https://github.com/jongillham) and [@non-descriptive](https://github.com/non-descriptive) for these contributions! - -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. - -## Join Us? - -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). diff --git a/content/this-month/2021-10/index.md b/content/this-month/2021-10/index.md deleted file mode 100644 index b32db58a..00000000 --- a/content/this-month/2021-10/index.md +++ /dev/null @@ -1,117 +0,0 @@ -+++ -title = "This Month in Rust OSDev (October 2021)" -date = 2021-11-08 - -[extra] -month = "October 2021" -authors = [ - "phil-opp", - "phip1611", - "IsaacWoods", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -The `uefi` 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: - -- [Implement missing Event-related functions](https://github.com/rust-osdev/uefi-rs/pull/293) -- [Remove attribute to enable `const_panic`](https://github.com/rust-osdev/uefi-rs/pull/296) -- [Use build-std-features instead of rlibc](https://github.com/rust-osdev/uefi-rs/pull/298) -- [Update `set_virtual_address_map()` to allow remapping of `SystemTable`](https://github.com/rust-osdev/uefi-rs/pull/301) -- [Fix new clippy errors](https://github.com/rust-osdev/uefi-rs/pull/304) - -Thanks to [@timrobertsdev](https://github.com/timrobertsdev), [@YtvwlD](https://github.com/YtvwlD), and [@foxcob](https://github.com/foxcob) for their contributions! - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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, [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 -passed from firmware to the OS to communicate information about the state of the screen when control is passed -over, as lots of firmwares like to print display a logo when booting. (published as `acpi v4.1.0`) - -Thanks to [@ethindp](https://github.com/ethindp) for this contribution! - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In October, we merged the following changes: - -- [Enable manipulation of `InterruptStackFrame`](https://github.com/rust-osdev/x86_64/pull/312) -- [Fix docs for `page_table_index`](https://github.com/rust-osdev/x86_64/pull/318) - -Thanks to [@haraldh](https://github.com/haraldh) and [@Freax13](https://github.com/Freax13) for their contributions! - -### [`multiboot2-header`](https://github.com/rust-osdev/multiboot2) (**new**) - -The `multiboot2-header` crate provides abstraction types for Multiboot2 headers, -parsing utilities, and a builder to construct such headers. The initial release took -place in early October and now is ready to be used. Because lots of code was published -without any in-depth reviews, further testing and code reviews will be highly appreciated. - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - - - -_No tasks were proposed for this section._ - - - -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. - -## Personal Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Add French translation for the first post](https://github.com/phil-opp/blog_os/pull/1053) - - Thanks to [@Alekzus](https://github.com/Alekzus) for this contribution, and [@dallenng](https://github.com/dallenng) and [@CBenoit](https://github.com/CBenoit) for reviewing! - - Published at . -- [Improve our integration of the giscus comment system](https://github.com/phil-opp/blog_os/pull/1054) -- [Use Iosevka font for code blocks and inline code](https://github.com/phil-opp/blog_os/pull/1056) -- [Initial Dark Mode Support](https://github.com/phil-opp/blog_os/pull/1057) 🌑 -- [Implement a switch for switching between light and dark mode](https://github.com/phil-opp/blog_os/pull/1058) -- [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) -- [Use `crate-ci/typos` action to check for typos](https://github.com/phil-opp/blog_os/pull/1060) - -## Join Us? - -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). diff --git a/content/this-month/2021-11/index.md b/content/this-month/2021-11/index.md deleted file mode 100644 index 6bca1db8..00000000 --- a/content/this-month/2021-11/index.md +++ /dev/null @@ -1,118 +0,0 @@ -+++ -title = "This Month in Rust OSDev (November 2021)" -date = 2021-12-06 - -[extra] -month = "November 2021" -authors = [ - "phil-opp", - "berkus" - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -The `uefi` 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: - -- [loaded_image: document size argument unit](https://github.com/rust-osdev/uefi-rs/pull/308) -- [Revert "Temporarily disable a false-positive clippy lint"](https://github.com/rust-osdev/uefi-rs/pull/312) -- [Fix `locate_device_path` impl argument pointer](https://github.com/rust-osdev/uefi-rs/pull/310) -- [Change `Handle` representation to be non-nullable so that `Option` is FFI-safe](https://github.com/rust-osdev/uefi-rs/pull/309) -- [Improve `Handle` buffer handling code](https://github.com/rust-osdev/uefi-rs/pull/314) -- [Add `CStr16::from_str_with_buf`](https://github.com/rust-osdev/uefi-rs/pull/291) -- [Update and reorganize documentation](https://github.com/rust-osdev/uefi-rs/pull/315) -- [Add flag to `build.py` for disabling KVM](https://github.com/rust-osdev/uefi-rs/pull/316) - -Thanks to [@necauqua](https://github.com/necauqua) and [@baloo](https://github.com/baloo) for their contributions! - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -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! - -We merged the following non-breaking changes this month: - -- [Add `set_general_handler` macro](https://github.com/rust-osdev/x86_64/pull/285) -- [Add the VMM Communication Exception (`#VC`) to the `InterruptDescriptorTable`](https://github.com/rust-osdev/x86_64/pull/313) -- [Derive common traits for number, range and enum types](https://github.com/rust-osdev/x86_64/pull/315) -- [Remove redundant alignment check](https://github.com/rust-osdev/x86_64/pull/314) -- [fix(idt): fix panic messages for index and `#VC`](https://github.com/rust-osdev/x86_64/pull/321) - -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): - -- [Implement `Index` for IDT instead of `Index`](https://github.com/rust-osdev/x86_64/pull/319) -- [Fix memory safety of `load_tss` and `GlobalDescriptorTable`](https://github.com/rust-osdev/x86_64/pull/323) -- [Change type of `InterruptStackFrameValue::cpu_flags` to `RFlags`](https://github.com/rust-osdev/x86_64/pull/324) -- [Add `InvalidStarSegmentSelectors` error type](https://github.com/rust-osdev/x86_64/pull/317) -- [Add `PcidTooBig` error](https://github.com/rust-osdev/x86_64/pull/316) -- [Activate `feature(asm_const)`](https://github.com/rust-osdev/x86_64/pull/320) - -Thanks to [@Freax13](https://github.com/Freax13), [@haraldh](https://github.com/haraldh), and [@mpajkowski](https://github.com/mpajkowski) for their contributions! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - - - -_No tasks were proposed for this section._ - - - -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. - -## Personal Projects - -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. - -### [`metta-systems/vesper`](https://github.com/metta-systems/vesper) - -(Section written by [@berkus](https://github.com/berkus)) - -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. - -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. - -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/). - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -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. - -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. - -## Join Us? - -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). diff --git a/content/this-month/2021-12/index.md b/content/this-month/2021-12/index.md deleted file mode 100644 index 053e18c5..00000000 --- a/content/this-month/2021-12/index.md +++ /dev/null @@ -1,176 +0,0 @@ -+++ -title = "This Month in Rust OSDev (December 2021)" -date = 2022-01-08 - -[extra] -month = "December 2021" -authors = [ - "phil-opp", - "IsaacWoods", - "GabrielMajeri", - "berkus" - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -We merged the following changes in December: - -- [Fix build error on the latest nightly (`asm!` import)](https://github.com/rust-osdev/x86_64/pull/329) -- [Remove `const_assert!` in favor of std's `assert!`](https://github.com/rust-osdev/x86_64/pull/326) -- [Enable `unsafe_block_in_unsafe_fn` lint](https://github.com/rust-osdev/x86_64/pull/328) -- [Move bootloader integration test to separate CI job](https://github.com/rust-osdev/x86_64/pull/330) -- [**Release version `0.14.7`**](https://github.com/rust-osdev/x86_64/pull/331) -- [Add an immutable getter for the level 4 page table](https://github.com/rust-osdev/x86_64/pull/327) - - This breaking change will be part of the upcoming `v0.15` release. - -Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. - -This month, we released new patch versions for both `v0.9` and `v0.10` to fix the `asm!` macro imports on the latest Rust nightlies: - -- [[v0.9] Update x86_64 dependency to `v0.14.7` to fix nightly breakage](https://github.com/rust-osdev/bootloader/pull/208) (published as `v0.9.20`) -- [Fix `asm` imports on latest nightly](https://github.com/rust-osdev/bootloader/pull/209) (published as `v0.10.10`) - -We also continued the work on the upcoming `v0.11` version, which will feature the following improvements: - -- Configuration via Rust structs and the `entry_point` macro, instead of a `[package.metadata.bootloader]` table in the `Cargo.toml`. - - The config data is serialized at compile time and put into a separate ELF section of the kernel executable. - - This makes it possible to read the config data dynamically when loading the kernel, so we no longer need to recompile the bootloader on config changes. - - The build process is also simplified as we don't need to read the kernel's `Cargo.toml` anymore. -- Instead of including the kernel ELF file using the [`include_bytes`](https://doc.rust-lang.org/stable/core/macro.include_bytes.html) macro, we read the file dynamically from disk during the boot process. - - The boot image is now a proper FAT partition for both UEFI and BIOS. The kernel file is simply copied to this partition. - - In combination with the new config mechanism, the dynamic loading means that the bootloader only needs to be compiled once. -- The bootloader crate is split into three subcrates: - - an API crate that defines the configuration and boot information structs, and provides the `entry_point` macro (this will be used by kernels) - - an implementation crate that contains the actual BIOS and UEFI bootloader code - - a builder crate that allows to turn kernel ELF files into bootable disk images - - includes the compiled implementation crate, either by including a precompiled binary or through cargo's upcoming [_artifact dependencies_](https://github.com/rust-lang/cargo/pull/9992) feature - -The [new configuration system](https://github.com/rust-osdev/bootloader/commit/b3df5e8debad2cfd9d0cad5c4b3914568ec613c7) is already done and working for both the BIOS and UEFI implementations. For UEFI, we also implemented the [kernel loading from a FAT partition](https://github.com/rust-osdev/bootloader/commit/a9c8e9e79cf58cd6b0a0a9024fc06be00bc7f2df) already. Unfortunately, this part is more challenging for the BIOS implementation since the loading needs to happen in 16-bit real mode (as it requires calling functions of the BIOS). Parsing a FAT filesystem is not easy using assembly code, so we're currently working on porting all the lower boot stages to Rust. This includes the [boot sector](https://github.com/rust-osdev/bootloader/tree/next/bios/first_stage), which needs to fit into 448 bytes, so we need some trickery to get a Rust executable that is small enough. - - -### [`acpi`](https://github.com/rust-osdev/acpi) - -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. - -December was a fairly quiet month, but [an important bug-fix landed](https://github.com/rust-osdev/acpi/pull/114) that corrected the way we handled `_CRS` objects in a structure -called the `_PRT`, which are found on PCI root bridges and tell the OS how interrupt pins on PCI devices have been routed to the platform's interrupt controller. Each pin can be -hardwired to a specific interrupt, or more commonly, can be dynamically assigned using a 'Link Object' through a set of control methods: `_PRS`, `_CRS`, `_SRS`, and `_DIS`. -However, many platforms implement Link Objects that actually hardcode the interrupts (including QEMU) and this is where the bug slipped in: `_CRS` was being evaluated as a -hardcoded object. We now treat these objects correctly as control methods, supporting properly-configured tables. (published as `aml v0.16.1`) - -Thanks to [@Dentosal](https://github.com/Dentosal) for this contribution! - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -The `uefi` 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: - -- [Implement `open_protocol`, use it to fix flaky screenshot test](https://github.com/rust-osdev/uefi-rs/pull/318) -- [Change `memory_map_size` to return entry size as well](https://github.com/rust-osdev/uefi-rs/pull/326) -- [Document how to publish new versions of the crates](https://github.com/rust-osdev/uefi-rs/pull/322) -- [Improve clippy linting in `build.py` and CI](https://github.com/rust-osdev/uefi-rs/pull/319) -- [`build.py`: fix `clippy --verbose`](https://github.com/rust-osdev/uefi-rs/pull/323) -- [`build.py`: deny warnings when running clippy](https://github.com/rust-osdev/uefi-rs/pull/324) -- [Move `build.py` to the root of the repo](https://github.com/rust-osdev/uefi-rs/pull/334) -- [Fix unused use warning that shows up with some build configs](https://github.com/rust-osdev/uefi-rs/pull/330) -- [Fix build error on latest nightly](https://github.com/rust-osdev/uefi-rs/pull/328) -- [Update the version of `qemu-exit`](https://github.com/rust-osdev/uefi-rs/pull/331) -- [Add missing `#[must_use]` marker attributes](https://github.com/rust-osdev/uefi-rs/pull/332) - -Thanks to [@StevenDoesStuffs](https://github.com/StevenDoesStuffs) and [@toku-sa-n](https://github.com/toku-sa-n) for their contributions! - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following changes this month: - -- [Add `send_raw()` function to allow sending arbitrary binary data using the serial port](https://github.com/rust-osdev/uart_16550/pull/21) (published as `v0.2.16`) - -Thanks to [@olivercalder](https://github.com/olivercalder) for this contribution and [@Kazurin-775](https://github.com/Kazurin-775) for reporting this problem! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - - - -_No tasks were proposed for this section._ - - - -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. - -## Other Projects - -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. - -### [`metta-systems/vesper`](https://github.com/metta-systems/vesper) - -(Section written by [@berkus](https://github.com/berkus)) - -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. - -The kernel is in very early stages of development, while I am building up tooling support to make future development fast and painless. This is my second post here and as usual, I will link directly to my blog for more details. [Read the full article here](https://metta.systems/blog/osdev-tooling-2/). - -Just a note: since features described in the article are not fully finalized, they are not merged to the main development branch yet and live in [their own branch](https://github.com/metta-systems/vesper/tree/feature/chainboot), which is subject to frequent rebases. Caveat emptor! - -### [`rusty-hermit`](https://crates.io/crates/rusty-hermit) - -(Section written by [@stlankes](https://github.com/stlankes)) - -RustyHermit is a unikernel targeting a scalable and predictable runtime for high-performance and cloud computing. - -This month, we integrated a [virtual i/o device driver](https://docs.oasis-open.org/virtio/virtio/v1.1/csprd01/virtio-v1.1-csprd01.html), which is based on memory mapped i/o and doesn't depend on PCI device specification. -For instance, micro VMs like [Firecracker](https://firecracker-microvm.github.io) and Qemu's [microvm machine type](https://www.qemu.org/docs/master/system/i386/microvm.html) don't support the PCI specification to accelerate the boot time and to improve the performance. -With this device driver, `rusty-hermit` is able to run on Qemu's microvm platform. -We are working to support Firecracker in the near future. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -This month, we merged a small translation improvement to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog: - -- [Add Chinese translation to `_index.zh-CN.md`](https://github.com/phil-opp/blog_os/pull/1067) - -Thanks to [@TisnKu](https://github.com/TisnKu) for this contribution! - -My personal focus this month has been on the new bootloader version [mentioned above](#bootloader), which I plan to use for the third edition of the blog. I'm also thinking about writing a post about creating a basic BIOS bootloader in Rust if I can find the time. - -## Join Us? - -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). diff --git a/content/this-month/2022-01/index.md b/content/this-month/2022-01/index.md deleted file mode 100644 index 33099a47..00000000 --- a/content/this-month/2022-01/index.md +++ /dev/null @@ -1,165 +0,0 @@ -+++ -title = "This Month in Rust OSDev (January 2022)" -date = 2022-02-03 - -[extra] -month = "January 2022" -authors = [ - "phil-opp", - "ColinFinck", - "phip1611", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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. - -In January, we merged the following pull requests: - -- [Add `Cr2::read_raw`](https://github.com/rust-osdev/x86_64/pull/334) -- [Add support for `MXCSR` register](https://github.com/rust-osdev/x86_64/pull/336) -- [Bump version to `0.14.8`](https://github.com/rust-osdev/x86_64/pull/339) - -Thanks to [@jarkkojs](https://github.com/jarkkojs) for their contribution! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. - -This month, we merged the following changes: - -- [Use `set_reg` method of `CS`, `DS`, `ES` and `SS` segment structs](https://github.com/rust-osdev/bootloader/pull/211) -- [Remove feature flag for `lang_items`, `asm` and `global_asm`](https://github.com/rust-osdev/bootloader/pull/210) (published as `v0.10.11`) -- [Add support for position independent executables](https://github.com/rust-osdev/bootloader/pull/206) -- [Logger: nicer font rendering into framebuffer](https://github.com/rust-osdev/bootloader/pull/213) -- [Rework `UsedLevel4Entries`](https://github.com/rust-osdev/bootloader/pull/219) -- [Add small doc-comment to `entry_point!` macro](https://github.com/rust-osdev/bootloader/pull/220) - -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! - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -The `uefi` 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 changes in January: - -- [Release version 0.14.0](https://github.com/rust-osdev/uefi-rs/pull/341) -- [Release `uefi-services` version 0.11.0](https://github.com/rust-osdev/uefi-rs/pull/342) -- [System Table and Handle: From-implementation to create objects from raw pointers](https://github.com/rust-osdev/uefi-rs/pull/338) -- [Replace build.py with the xtask pattern](https://github.com/rust-osdev/uefi-rs/pull/335) -- [Fix logs cut off after screenshot test](https://github.com/rust-osdev/uefi-rs/pull/336) -- [Remove `vec_spare_capacity` nightly feature](https://github.com/rust-osdev/uefi-rs/pull/347) -- [uefi-macros: fix new clippy lint](https://github.com/rust-osdev/uefi-rs/pull/350) - -Thanks to [@phip1611](https://github.com/phip1611) for their contribution! - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) - -The `multiboot2` crate provides abstraction types for the boot information of multiboot2 bootloaders. -The latest release of the `multiboot2`-crate is now `v.0.13.1` (was `v0.12.2`). It contains minor improvements, -such as new getters that were originally missing. - -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). - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - - - -_No tasks were proposed for this section._ - - - -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. - -## Other Projects - -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. - -### [`ntfs`](https://github.com/ColinFinck/ntfs) - -(Section written by [@ColinFinck](https://github.com/ColinFinck)) - -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. - -For those of you who are not running Windows: -NTFS is the primary filesystem in Windows, from Windows NT's release in 1993 up to the current Windows 11. -Unlike FAT32, NTFS has no practical limits for file and partition sizes, comes with B-Tree Indexes for faster lookups, and adds a few resilience and efficiency features (such as journaling, compression, and sparse files). - -The ntfs crate supports Rust's no_std environment and is therefore not tied to a specific platform API. -It aims to be embeddable in firmware-level code and kernels just as well as in user-mode applications. - -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. -The talk is on Saturday, 5 February at 17:00 (CET, UTC+1). -The conference is virtual and admission is free. - - -### [`phip1611/noto-sans-mono-bitmap-rs`](https://github.com/phip1611/noto-sans-mono-bitmap-rs) - -(Section written by [@phip1611](https://github.com/phip1611)) - -Philipp Schuster released an initial version of his [noto-sans-mono-bitmap](https://github.com/phip1611/noto-sans-mono-bitmap-rs) -crate this month. It provides a pre-rasterized bitmap font from *Noto Sans Mono*, an open font from Google. -The crate is a replacement for legacy bitmap fonts, such as the [font8x8 crate](https://crates.io/crates/font8x8). -It is suitable for printing high quality/nice looking text to a framebuffer in bootloaders, kernels and similar -environments where you don't want or can't use the FPU. - -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) -in different sizes and font weights (light, regular, bold) as Rust constants paired with a convenient getter function. - -![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.") - -The screenshot above shows text that is rendered into an UEFI framebuffer using the bitmap font -from `noto-sans-mono-bitmap`. - -An example of usage can be found in [PR#213](https://github.com/rust-osdev/bootloader/pull/213) of the -`rust-osdev/bootloader` crate, where this crate was merged and replaced `font8x8`. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -This month, we merged three small improvements for the _Writing an OS in Rust_ blog: - -- [Add Chinese translation for index page](https://github.com/phil-opp/blog_os/pull/1067) -- [Upgrade to zola 0.15.3](https://github.com/phil-opp/blog_os/pull/1061) -- [Remove dark mode warning again](https://github.com/phil-opp/blog_os/commit/b24122a6044879d2305e65d30960dc03cd50ff17) - -Thanks to [@TisnKu](https://github.com/TisnKu) for their contribution! - -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. - -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. - -## Join Us? - -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). diff --git a/content/this-month/2022-02/index.md b/content/this-month/2022-02/index.md deleted file mode 100644 index 957f84b3..00000000 --- a/content/this-month/2022-02/index.md +++ /dev/null @@ -1,149 +0,0 @@ -+++ -title = "This Month in Rust OSDev: February 2022" -date = 2022-03-06 - -[extra] -month = "February 2022" -authors = [ - "phil-opp", - "GabrielMajeri", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri) and [@nicholasbishop](https://github.com/orgs/rust-osdev/people/nicholasbishop) - -The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. - -One of the pain points of developers building software using `uefi-rs` has been the `Completion` type, which is like an expanded `Result` type which also handles warnings (besides successes and errors). There's an [open proposal](https://github.com/rust-osdev/uefi-rs/issues/360) to drop this type and revert to using more standard `Result`s everywhere, by treating all warnings as errors. Initial feedback suggests that such a change would be beneficial to the project, but comments and suggestions are welcome on the linked issue. - -We merged the following changes in February: - -- [Run tests on AArch64 VM in CI](https://github.com/rust-osdev/uefi-rs/pull/353) -- [Add IA32 target to `xtask` and test it in CI](https://github.com/rust-osdev/uefi-rs/pull/354) -- [Fix links in project template `README` file](https://github.com/rust-osdev/uefi-rs/pull/356) -- [Remove `CStr16::as_string`](https://github.com/rust-osdev/uefi-rs/pull/357) -- [Fix status code check at end of VM test](https://github.com/rust-osdev/uefi-rs/pull/355) -- [Automatically test latest crate release on latest nightly in CI](https://github.com/rust-osdev/uefi-rs/pull/348) -- [Fix various phrasing inconsistencies and spelling errors in protocol docs](https://github.com/rust-osdev/uefi-rs/pull/193) -- [Remove implicit string conversion from `File::open`](https://github.com/rust-osdev/uefi-rs/pull/363) -- [Expand `Align` trait docstring](https://github.com/rust-osdev/uefi-rs/pull/367) -- [Add string equality operator impls](https://github.com/rust-osdev/uefi-rs/pull/366) -- [Fix file info structures' sizes and add tests](https://github.com/rust-osdev/uefi-rs/pull/365) -- [Implicitly run tests with `+nightly`](https://github.com/rust-osdev/uefi-rs/pull/364) -- [Remove more implicit string conversions](https://github.com/rust-osdev/uefi-rs/pull/368) -- [Add a `CHANGELOG.md`](https://github.com/rust-osdev/uefi-rs/pull/369) -- [Add minimal test for `LoadedImage` protocol](https://github.com/rust-osdev/uefi-rs/pull/370) -- [Fix `ProtocolsPerHandle` internal slice property](https://github.com/rust-osdev/uefi-rs/pull/374) -- [Update changelog for file info changes](https://github.com/rust-osdev/uefi-rs/pull/373) -- [Make the load options API on `LoadedImage` protocol safer](https://github.com/rust-osdev/uefi-rs/pull/375) -- [Switch all packages to the 2021 edition](https://github.com/rust-osdev/uefi-rs/pull/376) - -Thanks to [@nicholasbishop](https://github.com/nicholasbishop), [@Stzx](https://github.com/Stzx), [@avirule](https://github.com/avirule) and [@AtsukiTak](https://github.com/AtsukiTak) for their contributions! - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@josephlr](https://github.com/orgs/rust-osdev/people/josephlr), [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13), and [@rybot666](https://github.com/orgs/rust-osdev/people/rybot666) - -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. - -In February, we merged the following pull requests: - -- [Remove external assembly](https://github.com/rust-osdev/x86_64/pull/343) -- [Implement `core::iter::Step` for `VirtAddr` and `Page`](https://github.com/rust-osdev/x86_64/pull/342) -- [Make fields of `VirtAddrNotValid` and `PhysAddrNotValid` public](https://github.com/rust-osdev/x86_64/pull/340) -- [Fix: `VirtAddrNotValid` and `PhysAddrNotValid` should contain the whole address](https://github.com/rust-osdev/x86_64/pull/347) - -We also merged a few breaking changes, which will be part of the upcoming `v0.15` release: - -- [Merge latest changes from `master` into `next` and migrate code](https://github.com/rust-osdev/x86_64/pull/338) -- [Make `Cr2::read` return a result](https://github.com/rust-osdev/x86_64/pull/335) -- [Remove `external_asm` and `inline_asm` features](https://github.com/rust-osdev/x86_64/pull/345) - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@rybot666](https://github.com/rybot666), and [@64](https://github.com/64) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. - -We merged the following changes this month: - -- [Add ASLR](https://github.com/rust-osdev/bootloader/pull/221) -- [`maybe_uninit_extra` is no longer feature-gated](https://github.com/rust-osdev/bootloader/pull/222) (published as `v0.10.12`) -- [[v0.9] Remove the `asm` and `global_asm` features, which are now stable](https://github.com/rust-osdev/bootloader/pull/227) (published as `v0.9.22`) - -Thanks to [@Freax13](https://github.com/Freax13) and [@kennystrawnmusic](https://github.com/kennystrawnmusic) for their contributions! - -We also pushed a [big restructuring](https://github.com/rust-osdev/bootloader/commit/8fb5eff0de2f776979271b771e78c94af752135e) to the [`next`](https://github.com/rust-osdev/bootloader/tree/next) branch, which will become the `v0.11` version eventually. The branch is still in an experimental state and not documented yet, so it's probably a bit early to try it out. But we are making good progress! - -### [`vga`](https://github.com/rust-osdev/vga) - -Maintained by [@RKennedy9064](https://github.com/RKennedy9064) - -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. This month, we merged the following pull request: - -- [Set color palette to standard 256 VGA palette](https://github.com/rust-osdev/vga/pull/26) - -Thanks to [@clavierpaul](https://github.com/clavierpaul) for this contribution! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - -- [(`rust-osdev/uefi`) Feedback requested: Treat UEFI warnings as errors](https://github.com/rust-osdev/uefi-rs/issues/360) -- [(`phil-opp/blog_os`) Looking for a reviewer for a new Korean translation](https://github.com/phil-opp/blog_os/pull/1079) - - -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. - -## Other Projects - -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. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged two fixes for the _Writing an OS in Rust_ blog this month: - -- [Fix link to MS Docs](https://github.com/phil-opp/blog_os/pull/1077) -- [Fix typo in `02-minimal-rust-kernel`](https://github.com/phil-opp/blog_os/pull/1080) - -Thanks to [@kITerE](https://github.com/kITerE) and [@MaxDesiatov](https://github.com/MaxDesiatov) for these contributions! - -I'm also still working on the third edition of the blog. The current state is the following: - -- This month, cargo finally gained [support for artifact dependencies](https://github.com/rust-lang/cargo/pull/9992), which is a feature that I plan to use for the edition. There are still a few issues with it, for example [a panic in combination with `-Zbuild-std`](https://github.com/rust-lang/cargo/issues/10444) and that there is currently no way to enable `-Zbuild-std=core` for an artifact dependency without enabling it globally. -- The upcoming `v0.11` version of the `bootloader` crate is already finished for the UEFI part. I'm still working on the BIOS implementation, which is more difficult unfortunately. - -## Join Us? - -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). diff --git a/content/this-month/2022-03/index.md b/content/this-month/2022-03/index.md deleted file mode 100644 index ff919f86..00000000 --- a/content/this-month/2022-03/index.md +++ /dev/null @@ -1,236 +0,0 @@ -+++ -title = "This Month in Rust OSDev: March 2022" -date = 2022-04-07 - -[extra] -month = "March 2022" -authors = [ - "phil-opp", - "GabrielMajeri", - "josephlr", - "phip1611", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@josephlr](https://github.com/josephlr), [@Freax13](https://github.com/Freax13), and [@rybot666](https://github.com/rybot666) - -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. - -This month, we released version **`0.14.9`** of the `x86_64` crate with lots of improvements: - -#### New Features - -- [Add `UCet` and `SCet` registers](https://github.com/rust-osdev/x86_64/pull/349) -- [Specific MSRV now noted in `README`](https://github.com/rust-osdev/x86_64/pull/355) -- Use [`rustversion`](https://crates.io/crates/rustversion) to [mark certain functions `const fn` on Rust 1.61](https://github.com/rust-osdev/x86_64/pull/353) -- [`Entry::handler_addr()` is now public](https://github.com/rust-osdev/x86_64/pull/354) -- [Increase packed structure alignment](https://github.com/rust-osdev/x86_64/pull/362) -- [Make more address methods `const fn`](https://github.com/rust-osdev/x86_64/pull/369) - - `VirtAddr::as_ptr()` - - `VirtAddr::as_mut_ptr()` - - `PhysAddr::new()` - - `PhysAddr::try_new()` - -_Already merged last month:_ - -- [Remove all uses of external assembly](https://github.com/rust-osdev/x86_64/pull/343) - - `external_asm` and `inline_asm` features are deprecated and now have no effect. - - `instructions` feature (on by default) now requires Rust 1.59 -- [Implement `core::iter::Step` for `VirtAddr` and `Page`](https://github.com/rust-osdev/x86_64/pull/342) - - This trait is only available on nightly. - - Gated behind `step_trait` feature flag -- [Address in `VirtAddrNotValid` and `PhysAddrNotValid` is now public](https://github.com/rust-osdev/x86_64/pull/340) - - [This field now contains the whole invalid address](https://github.com/rust-osdev/x86_64/pull/347) - -#### Bug fixes and Documentation - -- [Fixed overflow bug in `PageRangeInclusive`](https://github.com/rust-osdev/x86_64/pull/351) -- [Remove stabilized `const_fn_fn_ptr_basics` and `const_fn_trait_bound` features](https://github.com/rust-osdev/x86_64/pull/352) -- [Don't set `nomem` in `load_tss`](https://github.com/rust-osdev/x86_64/pull/358) -- [Correctly initialize TSS's IOPB to be empty](https://github.com/rust-osdev/x86_64/pull/357) -- [Improve `GlobalDescriptorTable::add_entry` error handling](https://github.com/rust-osdev/x86_64/pull/361)) -- [Update `tss_segment` documentation](https://github.com/rust-osdev/x86_64/pull/366)) - -Thanks to [@jarkkojs](https://github.com/jarkkojs), [@drzewiec](https://github.com/drzewiec), and [@kevinaboos](https://github.com/kevinaboos) for contributing to this release! - -#### v0.15 - -We also merged some breaking changes which will be published in the upcoming `v0.15` release: - -- [Allow the GDT to be of any length](https://github.com/rust-osdev/x86_64/pull/360) - - [gdt: Check that MAX is in range](https://github.com/rust-osdev/x86_64/pull/365) -- [`VirtAddr` improvements](https://github.com/rust-osdev/x86_64/pull/370) -- [Remove `software_interrupt!` macro](https://github.com/rust-osdev/x86_64/pull/363) -- [Remove usize trait impls](https://github.com/rust-osdev/x86_64/pull/364) -- [Remove deprecated functions/flags](https://github.com/rust-osdev/x86_64/pull/368) -- [Update "next" MSRV to 1.59](https://github.com/rust-osdev/x86_64/pull/359) - -Special thanks to our co-maintainer [@josephlr](https://github.com/josephlr), who did a lot of great work this month! - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri) and [@nicholasbishop](https://github.com/nicholasbishop) - -The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. - -One of the pain points of developers building software using `uefi-rs` has been the `Completion` type, which is like an expanded `Result` type which also handles warnings (besides successes and errors). The [RFC for the removal of the `Completion` type](https://github.com/rust-osdev/uefi-rs/issues/360) has been accepted and the corresponding changes [have been merged](https://github.com/rust-osdev/uefi-rs/pull/361) in March: the `Completion` type has been removed and the crate has reverted to using more standard `Result`s everywhere, by treating all warnings as errors. - -We merged the following changes in March: - -#### New features/protocols - -- [Implement the `connect_controller`/`disconnect_controller` methods](https://github.com/rust-osdev/uefi-rs/pull/311) -- [Implement `BootServices::locate_handle_buffer` function](https://github.com/rust-osdev/uefi-rs/pull/380) -- [Add rng protocol](https://github.com/rust-osdev/uefi-rs/pull/386) -- [Add `BootServices::load_image`](https://github.com/rust-osdev/uefi-rs/pull/383) -- [Add `GptPartitionAttributes` bitflags](https://github.com/rust-osdev/uefi-rs/pull/388) -- [Add `FileHandle` convenience methods and new file system tests](https://github.com/rust-osdev/uefi-rs/pull/392) -- [Add `RuntimeServices::query_variable_info`](https://github.com/rust-osdev/uefi-rs/pull/396) - -#### Refactorings - -- [Make `Error` public](https://github.com/rust-osdev/uefi-rs/pull/382) -- [Simplify `uefi::Result` type and remove `Completion`](https://github.com/rust-osdev/uefi-rs/pull/361) -- [Improve `Time` struct](https://github.com/rust-osdev/uefi-rs/pull/395) - -#### Bug fixes - -- [Fix alignment issues in file info types](https://github.com/rust-osdev/uefi-rs/pull/377) -- [Update changelog for file info changes](https://github.com/rust-osdev/uefi-rs/pull/373) -- [Make `LoadedImage`'s load options API safer](https://github.com/rust-osdev/uefi-rs/pull/375) -- [Fix status to `Result` conversions](https://github.com/rust-osdev/uefi-rs/pull/389) - -#### CI & testing - -- [Add miri action to `xtask` and CI](https://github.com/rust-osdev/uefi-rs/pull/381) -- [Don't run doctests with invalid pointers](https://github.com/rust-osdev/uefi-rs/pull/378) - -#### Misc & chores - -- [Add package sections to changelog](https://github.com/rust-osdev/uefi-rs/pull/385) -- [Remove some no-longer-needed unstable features](https://github.com/rust-osdev/uefi-rs/pull/387) -- [Drop maintenance badges from the README](https://github.com/rust-osdev/uefi-rs/pull/393) -- [Remove no-longer-needed allows for clippy lints](https://github.com/rust-osdev/uefi-rs/pull/394) -- [Publish new versions of the crates](https://github.com/rust-osdev/uefi-rs/pull/390) - -Thanks to [@nicholasbishop](https://github.com/nicholasbishop), [@sven-eliasen](https://github.com/sven-eliasen), [@necauqua](https://github.com/necauqua) and [@AtsukiTak](https://github.com/AtsukiTak) for their contributions! - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) - -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following changes this month: - -- [Remove stabilized nightly feature `const_ptr_offset`](https://github.com/rust-osdev/uart_16550/pull/22) (published as `v0.2.17`) - -Thanks to [@tsatke](https://github.com/tsatke) for this contribution! - -### [`xhci`](https://github.com/rust-osdev/xhci) - -Maintained by [@toku-sa-n](https://github.com/toku-sa-n) - -The `xhci` crate provides types of xHCI structures such as Contexts, Extended Capabilities, Registers, and TRBs. This month, we merged some cleanups: - -- [fix: clippy warnings](https://github.com/rust-osdev/xhci/pull/130) -- [ci(deps): enable dependabot](https://github.com/rust-osdev/xhci/pull/129) - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - - - -_No tasks were proposed for this section._ - - - -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. - -## Other Projects - -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. - -### [`phip1611/simple-chunk-allocator`](https://github.com/phip1611/simple-chunk-allocator) - -(Section written by [@phip1611](https://github.com/phip1611)) - -Philipp Schuster recently released an initial version of his [simple-chunk-allocator](https://github.com/phip1611/simple-chunk-allocator) -crate. It focuses on being a very simple-to-use general purpose allocator that "just works" for various workloads -in `no_std` context. A bitmap is used for bookkeeping of used blocks/chunks. This enables a simple algorithm that is easy -to understand. The allocator uses a combination of the strategies "next fit" and "best fit". It is usable as `#[global_allocator]` -and operates on static memory, i.e., no paging mechanism involved. The crate is suited to manage the heap inside a kernel -or in a similar `no_std` application. It is part of the roottask in [Philipp's Diplom (Master) Thesis](https://github.com/phip1611/diplomarbeit-impl) -where he wrote a runtime system for a Microkernel in Rust. - - -### [`phip1611/linux-libc-auxv`](https://github.com/phip1611/linux-libc-auxv) - -(Section written by [@phip1611](https://github.com/phip1611)) - -Philipp Schuster recently released an initial version of his [linux-libc-auxv](https://github.com/phip1611/linux-libc-auxv) -crate. The crate enables the creation and the parsing of the initial Linux stack layout. This layout is a -special data structure that Linux prepares for applications before they start execution. The C runtime behind the -`_start` symbol of a libc implementation uses this to find program arguments, environment variables, and the -auxiliary vector. The layout is tricky to create because the creator must ensure that the layout is valid in the -address space of the target. However, `linux-libc-auxv` found a way to cope with this. - -You can write a "freestanding" binary, i.e., without libc, with this crate, run it under Linux and parse the stack -layout yourself. This is similar to what the libc does, before Rust's runtime starts, that eventually calls the -main function of a Rust program. - -The crate is part of [Philipp's Diplom (Master) Thesis](https://github.com/phip1611/diplomarbeit-impl) -where he wrote a runtime system for a Microkernel in Rust that can emulate Linux behaviour and run unmodified -Linux applications. - -### [`phip1611/diplomarbeit-impl`](https://github.com/phip1611/diplomarbeit-impl) - -(Section written by [@phip1611](https://github.com/phip1611)) - -Philipp Schuster submitted his Diplom (Master) Thesis at TU Dresden where he build a policy-free system-call layer for -the Hedron microhypervisor. The project comes with a runtime system written in Rust for the microkernel and involves -a roottask that enables the execution of unmodified Linux binaries through an OS personality/Linux emulation. The -runtime system covers several interesting aspects of OS development, such as interaction with a kernel, system call -emulation, and starting programs from ELF files. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged a [new Korean translation](https://github.com/JOE1994) of first post of [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month. Thanks a lot to [@JOE1994](https://github.com/JOE1994) for creating this translation and [@QuqqU](https://github.com/QuqqU) for reviewing it! - -We also received lots of smaller fixes, by [@MaxDesiatov](https://github.com/phil-opp/blog_os/pull/1080), [@alaincao](https://github.com/phil-opp/blog_os/pull/1089), [@Programatic](https://github.com/phil-opp/blog_os/pull/1096), [@ruhuang2001](https://github.com/phil-opp/blog_os/pull/1091), [@Hofer-Julian](https://github.com/phil-opp/blog_os/pull/1093), [@SilensAngelusNex](https://github.com/phil-opp/blog_os/pull/1094), and [@julien-me](https://github.com/phil-opp/blog_os/pull/1095). Thank you all for your contributions! - -Unfortunately I didn't have time to work on the new version of the `bootloader` crate for the upcoming third edition of the blog this month. However, there was some surprising development on the Rust side that should help us with the new build system: [@bstrie](https://github.com/bstrie) created a _Major Change Proposal_ to [promote the `x86_64-unknown-none` target to Tier 2](https://github.com/rust-lang/compiler-team/issues/499). This is a bare-metal target that should be compatible with our kernel, so we might not need `-Zbuild-std` anymore in the future. Instead, we could download a precompiled version of the `core`/`alloc` crates via `rustup target add`. The great news is that the proposal was already accepted and the [corresponding implementation PR](https://github.com/rust-lang/rust/pull/95705) is ready for review too! - -## Join Us? - -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). diff --git a/content/this-month/2022-04/index.md b/content/this-month/2022-04/index.md deleted file mode 100644 index 1d7fdede..00000000 --- a/content/this-month/2022-04/index.md +++ /dev/null @@ -1,247 +0,0 @@ -+++ -title = "This Month in Rust OSDev: April 2022" -date = 2022-05-07 - -[extra] -month = "April 2022" -authors = [ - "phil-opp", - "toku-sa-n", - "phip1611", - "andre-richter", - "berkus", - "GabrielMajeri", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@josephlr](https://github.com/orgs/rust-osdev/people/josephlr), [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13), and [@rybot666](https://github.com/orgs/rust-osdev/people/rybot666) - -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. - -In April, we merged the following improvements and fixes: - -- [Provide null segment selector as associated constant on SegmentSelector](https://github.com/rust-osdev/x86_64/pull/373) -- [Correct wrong comment](https://github.com/rust-osdev/x86_64/pull/374) -- [Fix align functions](https://github.com/rust-osdev/x86_64/pull/375) -- [Cleanup Segment macros](https://github.com/rust-osdev/x86_64/pull/376) -- [Update comment and docs](https://github.com/rust-osdev/x86_64/pull/382) - -Thanks to [@prinzdezibel](https://github.com/prinzdezibel) for their contribution! - -We also merged two updates into the `next` branch for the upcoming `v0.15` release: - -- [Add `structures::gdt::Entry` type](https://github.com/rust-osdev/x86_64/pull/380) -- [Allow GDT to be loaded with shared reference](https://github.com/rust-osdev/x86_64/pull/381) - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri) and [@nicholasbishop](https://github.com/nicholasbishop) - -The `uefi` 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 changes in April: - -#### Features - -- [Add support to get the file path of loaded image](https://github.com/rust-osdev/uefi-rs/pull/398) -- [Add `FilePathMediaDevicePath` (and a bunch of supporting code)](https://github.com/rust-osdev/uefi-rs/pull/404) -- [Improve device path API](https://github.com/rust-osdev/uefi-rs/pull/421) - -#### Bug fixes - -- [Fix undefined behavior in `File::get_boxed_info`](https://github.com/rust-osdev/uefi-rs/pull/407) -- [Fix potential undefined behavior in file info](https://github.com/rust-osdev/uefi-rs/pull/408) -- [Fix `test_get_boxed_info` when `-Zmiri-tag-raw-pointers` is enabled](https://github.com/rust-osdev/uefi-rs/pull/415) -- [Fix off-by-one test error](https://github.com/rust-osdev/uefi-rs/pull/422) - -#### CI and linting - -- [Enable the `clippy::ptr_as_ptr` lint](https://github.com/rust-osdev/uefi-rs/pull/410) - -#### Documentation improvements - -- [Add changelog entries for recent PRs](https://github.com/rust-osdev/uefi-rs/pull/405) -- [Add documentation on why `UnsafeCell` is used for protocols](https://github.com/rust-osdev/uefi-rs/pull/409) -- [Add documentation links for `BootServices` and `RuntimeServices`](https://github.com/rust-osdev/uefi-rs/pull/419) - -Thanks to [@supdrewin](https://github.com/supdrewin), [@nicholasbishop](https://github.com/nicholasbishop) and [@raccog](https://github.com/raccog) for their contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@rybot666](https://github.com/rybot666), and [@64](https://github.com/64) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes: - -- [Add dynamic range configuration](https://github.com/rust-osdev/bootloader/pull/229) -- [Correct typos in `src/binary/level_4_entries.rs`](https://github.com/rust-osdev/bootloader/pull/228) - -Thanks to [@Freax13](https://github.com/Freax13) and [@toothbrush7777777](https://github.com/toothbrush7777777) for these contributions! - -We also made some good progress on the upcoming `v0.11` version of the crate: - -- [Replace artifact dependency with build script](https://github.com/rust-osdev/bootloader/commit/ee9bf20314be3e304f4210c03ba73348d4868c7c) -- [Add function to create UEFI disk image to library](https://github.com/rust-osdev/bootloader/commit/aefa4aa68fa25c7c52a2d84dbf4f664dee3e6390) -- [Adjust and merge PR #219 into next](https://github.com/rust-osdev/bootloader/commit/fd7b2cfc1c5ddf0c6253a61fbba9012718c91754) -- [Integrate latest changes from `main`](https://github.com/rust-osdev/bootloader/commit/fdf9d4bfd10adc66c23c1b3a07ba22f3b716d35a) -- [Update test framework to rewrite](https://github.com/rust-osdev/bootloader/commit/4d4b5849831c12e81e2c6897fbf051fda73aa02d) -- [Merge PR #229 into next and adjust it to new config system](https://github.com/rust-osdev/bootloader/commit/3aef58c1b59c1ee1529d079145cf3c2de1c51302) -- [Remove uefi dependency of common crate](https://github.com/rust-osdev/bootloader/commit/5dbc5038d71af72095315c7de194370f1ddb8540) -- [Replace `rand_chacha` with `rand_hc`](https://github.com/rust-osdev/bootloader/commit/6134fedfa1ce0cf7adddc3f8b13cca21201f7cbd) -- [Start integrating BIOS bootloader into build system](https://github.com/rust-osdev/bootloader/commit/eb6d71f244c54031bddbf87042d710bcdd1aa0bb) -- [Simplify MBR code and choose bootable partition](https://github.com/rust-osdev/bootloader/commit/0d77948df2c331612c94e186672a34a1694f23de) -- [Refactor FAT creation function to take arbitrary file list](https://github.com/rust-osdev/bootloader/commit/d8b50dcb801dfc775e6f211a8f0e3d3bf2486ad7) -- [Integrate BIOS bootsector into build system](https://github.com/rust-osdev/bootloader/commit/5310e4b97743094d45dd0711939e1961463da9e3) -- [Build and load a second stage](https://github.com/rust-osdev/bootloader/commit/b3207dbf62b27202f3afa2fc19e0b8bf4893b1fb) -- [Use pie relocation model for second stage](https://github.com/rust-osdev/bootloader/commit/4d41efe84c14487d824f5270667ed93baa274772) -- [Clean up boot sector code](https://github.com/rust-osdev/bootloader/commit/5fd311542c73f3014136ce0b4ecbed133443c01b) - -The next steps now are: setting up unreal mode on the CPU, loading the kernel from the FAT partition, loading the memory map, and setting up the page tables. - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) - -Maintained by [@IsaacWoods](https://github.com/IsaacWoods), [@phip1611](https://github.com/phip1611), [@robert-w-gries](https://github.com/robert-w-gries), [@ahmedcharles](https://github.com/ahmedcharles), and [@Caduser2020](https://github.com/Caduser2020) - -The `multiboot2` crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 -bootloaders. The latest release of the `multiboot2`-crate is now `v.0.13.2` (was `v0.13.1`). It contains minor -improvements, such as that `TagType` implements `Ord`. - -### [`multboot2-header`](https://github.com/rust-osdev/multiboot2) - -Maintained by [@IsaacWoods](https://github.com/IsaacWoods), [@phip1611](https://github.com/phip1611), [@robert-w-gries](https://github.com/robert-w-gries), [@ahmedcharles](https://github.com/ahmedcharles), and [@Caduser2020](https://github.com/Caduser2020) - -The `multiboot2-header` crate provides abstraction types for Multiboot2 headers and a builder struct to construct such -headers. The latest release of the `multiboot2-header`-crate is now `v0.2.0` (was `v0.1.0`). The changes include a -bugfix that prevented the usage in `no_std` contexts. Furthermore, overall code quality was improved. The internal CI -was updated to verify `no_std` builds as well as regular builds. -Full changelog: - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) - -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month: - -- [Remove use of `stable` and `nightly` features](https://github.com/rust-osdev/uart_16550/pull/24) (published as `v0.2.18`) - -Thanks to [@josephlr](https://github.com/josephlr) for this contribution! - -### [`volatile`](https://github.com/rust-osdev/volatile) - -Maintained by [@phil-opp](https://github.com/phil-opp) - -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. In April, we merged the following pull request: - -- [Remove the const_generics feature flag](https://github.com/rust-osdev/volatile/pull/25) (published as `v0.4.5`) - -Thanks to [@hawkw](https://github.com/hawkw) for this contribution! - -### [`xhci`](https://github.com/rust-osdev/xhci) - -Maintained by [@toku-sa-n](https://github.com/toku-sa-n) - -The `xhci` crate provides types of xHCI structures, such as Registers and TRBs. - -In this month, we released a new version 0.8.3 which includes [a bug fix](https://github.com/rust-osdev/xhci/pull/132) reported and committed by [@Yuna-Tomi](https://github.com/Yuna-Tomi). The bug was that `EventRingDequeuePointerRegister::event_ring_dequeue_pointer()` did not return the correct address. Thanks for the contribution!. - - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - -- [(`multiboot2`) Missing Tags](https://github.com/rust-osdev/multiboot2/issues/100) - - - -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. - -## Other Projects - -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. - -### [`rust-embedded/rust-raspberrypi-OS-tutorials`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) - -(Section written by [@andre-richter](https://github.com/andre-richter)) - -The [Operating System development tutorials in Rust on the Raspberry Pi](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials) project -saw two more tutorial releases: - -- [Tutorial 17 - `Kernel Symbols`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/17_kernel_symbols) -- [Tutorial 18 - `Backtracing`](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/18_backtrace) - -The two tutorials implement the generation of backtraces that show address and symbol information. Here is an example of the of a backtrace generated as part of the kernel's panic handler: - -``` -[ 0.002782] Writing to bottom of address space to address 1 GiB... -[ 0.004623] Kernel panic! - -Panic location: - File 'kernel/src/_arch/aarch64/exception.rs', line 59, column 5 - -[...] - -Backtrace: - ---------------------------------------------------------- - Address Function containing address - ---------------------------------------------------------- - 1. ffffffffc0001294 | core::fmt::write - 2. ffffffffc0005560 | libkernel::panic_wait::_panic_print - 3. ffffffffc00054a0 | rust_begin_unwind - 4. ffffffffc0002950 | core::panicking::panic_fmt - 5. ffffffffc0004898 | current_elx_synchronous - 6. ffffffffc0000a74 | __vector_current_elx_synchronous - 7. ffffffffc000111c | kernel_init - ----------------------------------------------------------- -``` - -### [`metta-systems/vesper`](https://github.com/metta-systems/vesper) - -(Section written by [@berkus](https://github.com/berkus)) - -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. - -The kernel is in very early stages of development. This time I will update on the progress of tooling and my next steps. As usual, I will link directly to my blog for more details. [Read the full article here](https://metta.systems/blog/osdev-tooling-3/). - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following improvements for the "Writing an OS in Rust" blog this in April: - -- [Korean translation for chapter 2](https://github.com/phil-opp/blog_os/pull/1101) -- [Update the code in the `post-06` branch](https://github.com/phil-opp/blog_os/pull/1099) -- [fix: typo](https://github.com/phil-opp/blog_os/pull/1103) - -Thanks to [@JOE1994](https://github.com/JOE1994), [@QuqqU](https://github.com/QuqqU), [@ruhuang2001](https://github.com/ruhuang2001), and [@PoorlyDefinedBehaviour](https://github.com/PoorlyDefinedBehaviour) for their contributions! - -For the current status of the upcoming third edition, see [my comment](https://github.com/phil-opp/blog_os/issues/1025#issuecomment-1107843473) on the related GitHub issue. - -## Join Us? - -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). diff --git a/content/this-month/2022-05/index.md b/content/this-month/2022-05/index.md deleted file mode 100644 index ff1924f9..00000000 --- a/content/this-month/2022-05/index.md +++ /dev/null @@ -1,121 +0,0 @@ -+++ -title = "This Month in Rust OSDev: May 2022" -date = 2022-06-08 - -[extra] -month = "May 2022" -authors = [ - "phil-opp", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri) and [@nicholasbishop](https://github.com/nicholasbishop) - -The `uefi` 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 changes in May: - -#### Improvements - -- [Change logger max level to be set by feature](https://github.com/rust-osdev/uefi-rs/pull/429) -- [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`) -- [Implement `Deref` and `DerefMut` for `ScopedProtocol`](https://github.com/rust-osdev/uefi-rs/pull/434) -- [Implement `core::fmt::Write` for `Serial`](https://github.com/rust-osdev/uefi-rs/pull/437) -- [Add documentation links](https://github.com/rust-osdev/uefi-rs/pull/426) - -#### Fixes - -- [Fix an accidental `*const` conversion](https://github.com/rust-osdev/uefi-rs/pull/423) -- [Fix compilation of the xtask package under Windows and add to CI](https://github.com/rust-osdev/uefi-rs/pull/438) -- [Switch back to automatic `Debug` derive for `Header` struct](https://github.com/rust-osdev/uefi-rs/pull/435) -- [Check table version before calling UEFI 2.0+ functions](https://github.com/rust-osdev/uefi-rs/pull/436) - -Thanks to [@JonahPlusPlus](https://github.com/JonahPlusPlus), [@raccog](https://github.com/raccog), and [@verticalegg](https://github.com/verticalegg) for their contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@rybot666](https://github.com/rybot666), and [@64](https://github.com/64) - -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: - -- [Add UEFI PXE support](https://github.com/rust-osdev/bootloader/pull/237) to load a kernel from a TFTP server - -This feature will be part of the upcoming `v0.11` release. Thanks to [@Freax13](https://github.com/Freax13) for this contribution! - -### [`pci_types`](https://github.com/rust-osdev/pci_types) - -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 -between projects, and would benefit from community contributions. - -We merged the following change in May: - -- [PCI capabilities and status register support](https://github.com/rust-osdev/pci_types/pull/3) - -Thanks to [@alesharik](https://github.com/alesharik) for this contribution! - -### [`xhci`](https://github.com/rust-osdev/xhci) - -Maintained by [@toku-sa-n](https://github.com/toku-sa-n) - -The `xhci` crate provides types of xHCI structures, such as Registers and TRBs. - -We merged the following fix this month: - -- [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`) - -Thanks to [@Yuna-Tomi](https://github.com/Yuna-Tomi) for this contribution! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - - - -_No tasks were proposed for this section this month._ - - - -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. - -## Other Projects - -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. - - - -_No projects were proposed for this section this month._ - - - -## Join Us? - -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). diff --git a/content/this-month/2022-06/index.md b/content/this-month/2022-06/index.md deleted file mode 100644 index 55500281..00000000 --- a/content/this-month/2022-06/index.md +++ /dev/null @@ -1,182 +0,0 @@ -+++ -title = "This Month in Rust OSDev: June 2022" -date = 2022-07-10 - -[extra] -month = "June 2022" -authors = [ - "phil-opp", - "phip1611", - # add yourself here -] -+++ - -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. - - - -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. - - - -## Project Updates - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) - -Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns) - -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. - -This month, [@jamesmunns](https://github.com/jamesmunns) redesigned the internal API for traversing the linked list in order to pass the strict tests of [`miri`](https://github.com/rust-lang/miri), which is an experimental interpreter for Rust's intermediate representation (MIR). Among other things, `miri` checks that pointers are correctly aligned and that no invalid aliasing occurs (based on different formal models). By checking our implementation against `miri`, we make it more robust and reduce the chance that undefined behavior occurs with future compiler versions. - -The change was implemented across the following pull requests: - -- [Refactor with Cursor-based API, and passing Miri tests](https://github.com/rust-osdev/linked-list-allocator/pull/62) (published as `v0.10.0`, but yanked later) -- ([fix(deallocate_middle): advance to next in `try_insert_after`](https://github.com/rust-osdev/linked-list-allocator/pull/63)) -- [Fix free logic](https://github.com/rust-osdev/linked-list-allocator/pull/64) ([published](https://github.com/rust-osdev/linked-list-allocator/pull/65) as `v0.10.1`) - -Thanks to [@jamesmunns](https://github.com/jamesmunns) for the redesign and [@haraldh](https://github.com/haraldh) for reporting a critical issue in the `v0.10.0` release and providing a fix! Also, we would like to welcome [@jamesmunns](https://github.com/jamesmunns) as a maintainer of this crate! - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) - -Maintained by [@IsaacWoods](https://github.com/IsaacWoods), [@phip1611](https://github.com/phip1611), [@robert-w-gries](https://github.com/robert-w-gries), [@ahmedcharles](https://github.com/ahmedcharles), and [@Caduser2020](https://github.com/Caduser2020) - -The `multiboot2` crate provides abstraction types for the multiboot information structure (MBI) -of multiboot2 bootloaders. The latest release of the `multiboot2`-crate is now `v.0.14.0` (was -`v0.13.2`). It contains some small breaking changes because so far, we used some unsafe code and -relied on having not to verify UTF-8 strings. For a full changelog, please refer to the -[GitHub repo](https://github.com/rust-osdev/multiboot2/blob/main/multiboot2/Changelog.md). - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri) and [@nicholasbishop](https://github.com/nicholasbishop) - -The `uefi` 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 changes in June: - -#### Fixes - -- [Remove `exts::allocate_buffer`](https://github.com/rust-osdev/uefi-rs/pull/443) -- [Fix incorrect pointer cast in get_rng](https://github.com/rust-osdev/uefi-rs/pull/447) - -#### Improvements - -- [Remove unused `From` impls](https://github.com/rust-osdev/uefi-rs/pull/450) -- [Remove `eh_personality` lang item](https://github.com/rust-osdev/uefi-rs/pull/451) -- [Simplify `uefi-services` panic handler](https://github.com/rust-osdev/uefi-rs/pull/453) - -#### Internal changes - -- [Fix `query_variable_info` test](https://github.com/rust-osdev/uefi-rs/pull/442) -- [Fix errors due to deprecations in the `clap` API](https://github.com/rust-osdev/uefi-rs/pull/445) - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@rybot666](https://github.com/rybot666), and [@64](https://github.com/64) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we made more progress on the upcoming `v0.11` version: - -- [WIP: try to start loading FAT partition in second stage](https://github.com/rust-osdev/bootloader/commit/3b6aa00dc33005f4353568c5dccad694d0f54f90) -- [Start custom FAT implementation based on `mini_fat` crate](https://github.com/rust-osdev/bootloader/commit/abfdba522e990fcaf865302b7b7d91f0abef04a7) (to keep the executable size down) -- [Read root dir entries from FAT partition](https://github.com/rust-osdev/bootloader/commit/96d2bdbae6fdc91c8df958fd09d4207a3ab20020) -- [Use segment-based addressing for DAP to support loading larger second stages](https://github.com/rust-osdev/bootloader/commit/eef2109861d718e0da82b3c5e4c2d9308d34da56) -- [Implement looking up `kernel-x86_64` file on FAT partition](https://github.com/rust-osdev/bootloader/commit/1d7ff1f0627fa33dab3f811af150a547e1f48172) -- [Read FAT clusters of kernel file](https://github.com/rust-osdev/bootloader/commit/06d3b9521cc8bac981068bafe0ab84b5c4a7e8c0) -- [Ensure proper alignment of DAP target buffer](https://github.com/rust-osdev/bootloader/commit/6e8f9fa964bfcd23b95fe902fe3a5f2c55065e27) -- [Enter unreal mode](https://github.com/rust-osdev/bootloader/commit/7a24837692d96c8e9b04377fa2e7646648637dcb) - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@josephlr](https://github.com/orgs/rust-osdev/people/josephlr), [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13), and [@rybot666](https://github.com/orgs/rust-osdev/people/rybot666) - -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. - -In June, we merged the following pull request: - -- [Add `registers::debug`](https://github.com/rust-osdev/x86_64/pull/286) ([published](https://github.com/rust-osdev/x86_64/pull/386) as `v0.14.10`) - -Thanks to [@mkroening](https://github.com/mkroening) for this contribution! - -### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) - -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. It is mostly useful in situations, where cargo's unstable `-Zbuild-std` flag is not usable. - -This month, we fixed a build error of the `alloc` crate on the latest nightlies: - -- [Fix: The alloc crate uses the Rust 2021 edition now](https://github.com/rust-osdev/cargo-xbuild/pull/105) (published as `v0.6.6`) - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding -issues in one of our projects and get started! - - - -- [(`rust-osdev/volatile`) New design based on pointer types](https://github.com/rust-osdev/volatile/pull/28) - - We are currently discussing a new design for the `volatile` crate based on raw pointer types in order to avoid potential undefined behavior. The linked pull requests proposes an implementation where the volatile wrapper type is `Copy` and its methods take `self` by value. We haven't reached a decision yet, so if anyone has more input on this, please join the discussion. For more context, see also [PR #22](https://github.com/rust-osdev/volatile/pull/22). - - - -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. - -## Other Projects - -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. - -### [`google/gpt-disk-rs`](https://github.com/google/gpt-disk-rs) - -(Section written by [@nicholasbishop](https://github.com/nicholasbishop)) - -`gpt-disk-rs` is a collection of three libraries related to [GPT](https://en.wikipedia.org/wiki/GUID_Partition_Table) (GUID Partition Table) disk data. The crates are no-std by default, have minimal dependencies, and include a lot of documentation. I'm hoping they'll be a suitable base for any project that wants to read or write GPT data. - -* [`uguid`](https://crates.io/crates/uguid): GUID data type. -* [`gpt_disk_types`](https://crates.io/crates/gpt_disk_types): all the GPT types defined by the UEFI specification -* [`gpt_disk_io`](https://crates.io/crates/gpt_disk_io): types for reading and writing GPT data to an abstract block IO device. - -### [`vinc/moros`](https://github.com/vinc/moros) - -(Section written by [@vinc](https://github.com/vinc)) - -MOROS is a text-based hobby operating system targeting computers with a x86-64 architecture and a BIOS. It is inspired by Unix and ITS but is closer to a modern DOS at the moment in term of features. - -In the last month I finally managed to run rust programs (without alloc) inside the OS after being limited to nasm programs for a long time. This triggered a lot of refactoring and improvements in the shell and the lisp language used for scripting. - -Next step will be publishing a 0.8.0 release and working on userspace allocation. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -This month, we merged the following improvements: - -- [[Translation][Korean] post-03 (edition-2)](https://github.com/phil-opp/blog_os/pull/1121) - - Thanks to [@JOE1994](https://github.com/JOE1994) for creating the translation and [@QuqqU](https://github.com/QuqqU) for reviewing it! -- [Fix typo in Japanese translation](https://github.com/phil-opp/blog_os/pull/1122) (thanks to [@KisaragiEffective](https://github.com/KisaragiEffective)) -- [Translate the giscus comment system](https://github.com/phil-opp/blog_os/pull/1118) -- [Move comment threads for translated posts to separate category](https://github.com/phil-opp/blog_os/pull/1116) -- [Remove goatcounter analytics again](https://github.com/phil-opp/blog_os/pull/1117) - -## Join Us? - -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). diff --git a/content/this-month/2022-07/index.md b/content/this-month/2022-07/index.md deleted file mode 100644 index 4d759794..00000000 --- a/content/this-month/2022-07/index.md +++ /dev/null @@ -1,186 +0,0 @@ -+++ -title = "This Month in Rust OSDev: July 2022" -date = 2022-08-10 - -[extra] -month = "July 2022" -editors = [ - "phil-opp", - # add yourself here -] -+++ - -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. - - - -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. - - - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -The `uefi` 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 changes in July: - -- [Protocol safety improvements](https://github.com/rust-osdev/uefi-rs/pull/460) -- [Add MemoryProtection protocol](https://github.com/rust-osdev/uefi-rs/pull/454) -- [`EqStrUntilNul` trait to compare Rust strings (`str`, `String`) against `CStr16` and `CString16`](https://github.com/rust-osdev/uefi-rs/pull/462) -- [cargo: additive panic-handler feature](https://github.com/rust-osdev/uefi-rs/pull/456) (_breaking_) -- [Allow qemu test to work under Windows without WSL](https://github.com/rust-osdev/uefi-rs/pull/463) -- [xtask: Fix channel of cargo operations](https://github.com/rust-osdev/uefi-rs/pull/466) -- [Improve entry macro tests](https://github.com/rust-osdev/uefi-rs/pull/471) - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@josephlr](https://github.com/orgs/rust-osdev/people/josephlr), [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13), and [@rybot666](https://github.com/orgs/rust-osdev/people/rybot666) - -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. - -In July, we merged the following changes: - -- [Add getters for the page table frame mapping](https://github.com/rust-osdev/x86_64/pull/385) -- [Release `v0.14.10`](https://github.com/rust-osdev/x86_64/pull/386) -- [Add missing IDT entries `#CP` and `#HV`](https://github.com/rust-osdev/x86_64/pull/387) - -Thanks to [@Zildj1an](https://github.com/Zildj1an) for their contribution! - -### [`xhci`](https://github.com/rust-osdev/xhci) - -Maintained by [@toku-sa-n](https://github.com/toku-sa-n) - -The `xhci` crate provides types of xHCI structures, such as Registers and TRBs. - -We merged the following changes this month: - -- [Remove the line number limitation](https://github.com/rust-osdev/xhci/pull/138) -- [feat: added `TryFrom<[u32; 4]>` to Command/Transfer TRB structs](https://github.com/rust-osdev/xhci/pull/137) -- [Release 0.8.5](https://github.com/rust-osdev/xhci/pull/139) -- [Fix `try_from!` macro not checking MSb of type](https://github.com/rust-osdev/xhci/pull/140) -- [Release 0.8.6](https://github.com/rust-osdev/xhci/pull/141) - -Thanks to [@Demindiro](https://github.com/Demindiro) and [@ytoml](https://github.com/ytoml) for their contributions! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues! - - - -- [(`rust-osdev/volatile`) Various improvements for the new design](https://github.com/rust-osdev/volatile/pull/28) - - We are currently discussing a new design for the `volatile` crate based on raw pointer types in order to avoid potential undefined behavior. The linked pull requests proposes an implementation where the volatile wrapper type is `Copy` and its methods take `self` by value. We haven't reached a decision yet, so if anyone has more input on this, please join the discussion. For more context, see also [PR #22](https://github.com/rust-osdev/volatile/pull/22). - - -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. - -## Other Projects - -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. - -### [`rust-lang/rust`](https://github.com/rust-lang/rust/) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -This Month, [@dvdhrm](https://github.com/dvdhrm) started an initiative to get the `*-unknown-uefi` targets to [Tier-2](https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-2-without-host-tools). As a first step, they [added a detailed description of the platform](https://github.com/rust-lang/rust/pull/99760) to the rustc book. The entry is already published [in the nightly release of the book](https://doc.rust-lang.org/nightly/rustc/platform-support/unknown-uefi.html). - -Please reach out if you would like to help with this! - -### [Theseus OS](https://github.com/theseus-os/Theseus) - -(Section written by [Kevin Boos](https://www.theseus-os.com/kevinaboos/) ([@kevinaboos](https://github.com/kevinaboos))) - -Theseus is a safe-language OS written from scratch in Rust that is in the process of migrating from pure academic research objectives to more general usability and legacy compatibility. - -Theseus dynamically loads and links all components at runtime, and executes everything in a single address space and at a single privilege level. -With this, Theseus employs *intralingual* design principles to maximally leverage the strengths of the Rust language, allowing the compiler to both view and semantically understand (and thus extend its safety checks to) all components from top-level apps to low-level kernel entities. -Theseus strives to not only ensure isolation between different entity components and subsystems in the OS, but also to go further than language safety to provide various invariants that guarantee properties about most system-provided types. -For more, check out [the Theseus OS Book](https://www.theseus-os.com/Theseus/book/index.html) or our [academic papers and presentations](https://www.theseus-os.com/Theseus/book/misc/papers_presentations.html). - -Theseus is fully open-source and always welcomes [contributions](https://www.theseus-os.com/Theseus/book/contribute/contribute.html) from anyone. - -Over the past month (or two), Theseus OS made significant progress on a variety of topics: -* Finished the first known port of Wasmtime to `no_std`, enabling us to [run WASM binary workloads on Theseus](https://github.com/theseus-os/Theseus/pull/556) with relative ease. - * Importantly, this overcomes the classic limitation of safe-language OSes -- that all components must be written in that safe language -- to allow unsafe (e.g., C, C++) programs to run on Theseus in a sandboxed WASM environment. - * See our [blog post with more info](https://www.theseus-os.com/2022/06/21/wasmtime-complete-no_std-port.html) on this endeavor. -* Thanks to funding from Futurewei Technologies, Theseus Systems [hired two developers](https://www.theseus-os.com/2022/04/29/Theseus-Is-Hiring.html) to work on Theseus's next several milestones, [Nathan Royer](https://github.com/NathanRoyer) and [Klim Tsoutsman](https://github.com/tsoutsman/)., - * Thanks to everyone who reached out to us and participated in interviews; we received a lot more interest than expected! -* Began work on porting the Rust `std` library to Theseus. -* Designed a [completely new configuration interface based on cargo features](https://github.com/theseus-os/Theseus/pull/522), which enables one to easily include or exclude specific Theseus crates in a build of Theseus, but in a safe, dependency-aware manner. -* Significantly improved speed and memory usage of our runtime loader and linker: - * Introduced a [custom linker script and linker pass](https://github.com/theseus-os/Theseus/pull/562) that performs partial relinking of object files to merge their per-function/per-data sections together. - * This results in a **30-40%** reduction in object file size and a **15-18x** improvement in loading/linking times. For example, loading and linking the full Wasmtime project (60+ crates) now takes ~100ms instead of 15 seconds. - * [De-duplicated strings in our metadata](https://github.com/theseus-os/Theseus/pull/549) related to crate loading, which reduces heap usage by about 20%. -* Added support for [booting Theseus using the `limine` bootloader](https://github.com/theseus-os/Theseus/pull/541) and for [building Theseus on non-Debian Linux distributions like Fedora](https://github.com/theseus-os/Theseus/pull/536). -* Improved support for the [IXGBE ethernet NIC](https://github.com/theseus-os/Theseus/pull/523). -* [Sped up post-`rustc` build steps by about 15-20 seconds](https://github.com/theseus-os/Theseus/pull/565) with simple Makefile loop parallelization. - -Check out the [Theseus OS blog](https://www.theseus-os.com/) for the latest details. - -### [`nt-list`: Windows Linked Lists in idiomatic Rust](https://colinfinck.de/posts/nt-list-windows-linked-lists-in-idiomatic-rust/) - -(Section written by [@ColinFinck](https://github.com/ColinFinck)) - -On his quest to develop a ReactOS/Windows bootloader in Rust, Colin Finck released another building block as a reusable `no_std` crate this month. -After [nt-hive](https://github.com/ColinFinck/nt-hive) for reading Windows registry hive files and [ntfs](https://github.com/ColinFinck/ntfs) to access Microsoft's proprietary NTFS filesystem, the [nt-list](https://github.com/ColinFinck/nt-list) crate provides a type-safe and idiomatic Rust interface to work with Windows Linked Lists, known as [`LIST_ENTRY`](https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-list_entry) and [`SINGLE_LIST_ENTRY`](https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-single_list_entry). -This is what Windows, Windows drivers, and components influenced by Windows (e.g. UEFI) have been using for a long time to uniformly handle linked lists. - -[Colin's blog post](https://colinfinck.de/posts/nt-list-windows-linked-lists-in-idiomatic-rust/) goes into detail about some of the differences between textbook and Windows linked lists and the challenges in coming up with a safe Rust implementation. -The final interface provided by nt-list is as simple to use as `Vec` while being fully compatible to the original `LIST_ENTRY`. -The compatibility is proven in a WinDbg debugging session: - -[![Using WinDbg to traverse a Windows Linked List created by the nt-list Rust crate](windbg.png "Using WinDbg to traverse a Windows Linked List created by the nt-list Rust crate")](windbg.png) - -If you want to give it a spin, the crate is available on [crates.io](https://crates.io/crates/nt-list), and make sure to also check the [docs](https://docs.rs/nt-list/). - -### Comparison between [`phip1611/simple-chunk-allocator`](https://github.com/phip1611/simple-chunk-allocator) and [`rust-osdev/linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) - -(Section written by [@phip1611](https://github.com/phip1611)) - -In March 2022, Philipp Schuster proposed his [`simple-chunk-allocator`](https://github.com/phip1611/simple-chunk-allocator) -crate. It focuses on being a very simple-to-use general purpose allocator that "just works" for various workloads -in `no_std` context. However, there are other allocators, such as [`rust-osdev/linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator). -When you choose an allocator, you should not only consider the API and how to set it up, but actually the runtime -characteristics. OS research has shown us that there is no perfect allocator. You can optimize an allocator for speed, -memory utilization (i.e., prevent fragmentation), code simplicity, and worst case execution time. There exist different -strategies to reach those goals: first-fit, next-fit, best-fit - -Recently, Philipp benchmarked his `simple-chunk-allocator` against [`rust-osdev/linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) -to learn under which conditions which performs better. But at first, let's point out some differences. `simple-chunk-allocator` needs -a static backing storage for heap and an additional static backing storage for its internal bookkeeping. `linked-list-allocator` -can solve this better by organizing the heap with the heap backing memory itself. `simple-chunk-allocator` uses a slightly -adjusted variant of best-fit that tries to reduce fragmentation. `linked-list-allocator` is a first-fit allocator that -has a lower performance to more heap is used. - -The relevant outcome is that `simple-chunk-allocator` always outperforms `linked-list-allocator` in median allocation time. -For stress tests with a low heap consumption, thus, no long stress test with 90% and more heap usage, `simple-chunk-allocator` -also outperforms `linked-list-allocator` in average allocation time. However, if the heap is full and frequent allocations -happen, the average (but not the median) allocation time of `linked-list-allocator` is better. Also, `linked-list-allocator` -can come close to 100% heap usage which is not the case for `simple-chunk-allocator`, because it suffers from internal -fragmentation under certain circumstances. Last but not least, even small allocations always takes up a multiple of the -used chunk size in `simple-chunk-allocator`. - -In the end, there is no optimal allocator. You must choose which properties are more relevant for your scenario. -For concrete measurements, please head to the README of [`simple-chunk-allocator`](https://github.com/phip1611/simple-chunk-allocator). - -## Join Us? - -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). diff --git a/content/this-month/2022-08/index.md b/content/this-month/2022-08/index.md deleted file mode 100644 index 3c822e86..00000000 --- a/content/this-month/2022-08/index.md +++ /dev/null @@ -1,231 +0,0 @@ -+++ -title = "This Month in Rust OSDev: August 2022" -date = 2022-09-06 - -[extra] -month = "August 2022" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -The `uefi` 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 changes in August: - -- [Add `DiskIo` and `DiskIo2` protocols](https://github.com/rust-osdev/uefi-rs/pull/467) -- [Added macros `print!` and `println!`](https://github.com/rust-osdev/uefi-rs/pull/430) -- [Use `doc_auto_cfg` to show feature requirements on docs.rs](https://github.com/rust-osdev/uefi-rs/pull/487) -- [add `Ord` and `PartialOrd` for `Guid` struct](https://github.com/rust-osdev/uefi-rs/pull/493) -- [QEMU/OVMF improvements](https://github.com/rust-osdev/uefi-rs/pull/474) -- [Update `nix` requirement from 0.24.1 to 0.25.0](https://github.com/rust-osdev/uefi-rs/pull/480) -- [Update deprecation version in `ScopedProtocol::interface`](https://github.com/rust-osdev/uefi-rs/pull/485) -- [Relax version requirements for various deps](https://github.com/rust-osdev/uefi-rs/pull/482) - -We also published a subset of the above changes as a new `v0.16.1` release: - -- [Cherry-pick fixes to the `version-0.16` branch](https://github.com/rust-osdev/uefi-rs/pull/490) -- [Update changelog for 0.16.1](https://github.com/rust-osdev/uefi-rs/pull/492) - -Thanks to [@kendase3](https://github.com/kendase3), [@JonahPlusPlus](https://github.com/JonahPlusPlus), and [@e820](https://github.com/e820) for their contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@rybot666](https://github.com/rybot666), and [@64](https://github.com/64) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. - -This month, we finally finished the new BIOS boot implementation for the [upcoming `v0.11` release](https://github.com/rust-osdev/bootloader/pull/232). It's now almost completely written in Rust (instead of assembly), which should make further improvements much easier. - -Some selected commits that might be interesting: - -- [Load a third stage](https://github.com/rust-osdev/bootloader/pull/232/commits/6492eab051b71a19b58a4f70185e7898fabb2c46) -- [Load the kernel into buffer memory](https://github.com/rust-osdev/bootloader/pull/232/commits/84eea29b69ac75c0d7ce9c36e0d2a1369052dc2b) -- [Copy kernel to protected mode](https://github.com/rust-osdev/bootloader/pull/232/commits/52ad3e2afab4f902ef5acb3241d7bc34c2a16e94) -- [Jump to third stage](https://github.com/rust-osdev/bootloader/pull/232/commits/7cf073eae6a5c6e30684a67cdac66016c7dcfdf2) -- [Set up paging and enter long mode (compatibility mode)](https://github.com/rust-osdev/bootloader/pull/232/commits/824786b0498a8f02e4d79ca8c8477ed68dae0068) -- [Create prototype for long mode stage 4 and load it](https://github.com/rust-osdev/bootloader/pull/232/commits/39ba5269eada8ad40963d2ec7c92c4a6410060ab) -- [Load long mode `GDT` and jump to 4th stage](https://github.com/rust-osdev/bootloader/pull/232/commits/05130d1d356e7e1566f7e576245580fc542184e6) -- [Query vesa modes and filter by resolution](https://github.com/rust-osdev/bootloader/pull/232/commits/d8931970365a2ac26088320678cc8ce6ae60150d) -- [Enable VESA framebuffer and update screen writer in stages 3 and 4](https://github.com/rust-osdev/bootloader/pull/232/commits/557c03427f5d143ee814fb908b05c584ec37b87a) -- [Load `E820` memory map and put everything together](https://github.com/rust-osdev/bootloader/pull/232/commits/48cd6dcd109778032ce586735f5be1f1dac67117) - -All the tests are passing now, so we only need to do some cleanup and write proper documentation, then we should be ready to publish an alpha release for testing. - -### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) - -Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns) - -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. - -In August, [Evan Richter](https://github.com/evanrichter) discovered a _vulnerability in `Heap::extend`_ that could lead to out-of-bound writes. The issue occurred when `extend` was called with a size smaller than `size_of:: * 2`, i.e., a size too small to store the metadata for the new memory region. - -Upon investigating this issue, we found several similar issues: - -- Initializing a heap with a size smaller than `size_of:: * 3` could result in an out-of-bounds write too. -- Calling `extend` on an uninitialized heap could also result in an out-of-bounds write. -- Calling `extend` on a heap whose size is not a multiple of the size of two `usize`s resulted in unaligned writes. - -We created a [security advisory](https://github.com/rust-osdev/linked-list-allocator/security/advisories/GHSA-xg8p-34w2-j49j) with more details and released a fix in `v0.10.2`, with the following changes: - -- The initialization functions now panic if the given size is not large enough to store the necessary metadata. Depending on the alignment of the heap bottom pointer, the minimum size is between `2 * size_of::` and `3 * size_of::`. -- The `extend` method now panics when trying to extend an uninitialized heap. -- Extend calls with a size smaller than `size_of::() * 2` are now buffered internally and not added to the list directly. The buffered region will be merged with future `extend` calls. -- The `size()` method now returns the _usable_ size of the heap, which might be slightly smaller than the `top() - bottom()` difference because of alignment constraints. - -Thanks to [@evanrichter](https://github.com/evanrichter) for reporting this vulnerability and working with us on a fix. - -### [`xhci`](https://github.com/rust-osdev/xhci) - -Maintained by [@toku-sa-n](https://github.com/toku-sa-n) - -The `xhci` crate provides types of xHCI structures, such as Registers and TRBs. - -We merged the following changes this month: - -- [Rename `InterruptRegisterSet` to `InterrupterRegisterSet`](https://github.com/rust-osdev/xhci/pull/143) ([published as `0.8.7`](https://github.com/rust-osdev/xhci/pull/144)) -- [Allow updating single fields of InterrupterRegisterSet](https://github.com/rust-osdev/xhci/pull/142) ([published as `0.9.0`](https://github.com/rust-osdev/xhci/pull/145)) - -Thanks to [@Demindiro](https://github.com/Demindiro) for their contribution! - - -### [`pci_types`](https://github.com/rust-osdev/pci_types) - -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - - -The `pci_types` library provides types for accessing and configuring PCI devices from Rust operating systems. - -We merged the following change in August: - -- [64-bit `BAR` clarification](https://github.com/rust-osdev/pci_types/pull/6) - -Thanks to [@0Killian](https://github.com/0Killian) for this contribution! - - -### [`acpi`](https://github.com/rust-osdev/acpi) - -Maintained by [@IsaacWoods](https://github.com/IsaacWoods), [@Restioson](https://github.com/Restioson), and [@Gegy](https://github.com/Gegy) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. - -We merged the following changes this month: - - -- [fix `HpetInfo::num_comparators`](https://github.com/rust-osdev/acpi/pull/121) -- [Various comments, fix `PM_TMR_BLK` checking of `PM_TMR_LEN` to match spec](https://github.com/rust-osdev/acpi/pull/123) - -Thanks to [@semiviral](https://github.com/semiviral), and [@Freax13](https://github.com/Freax13) for their contributions! - - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues! - - - -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. - -## Other Projects - -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. - -### [`cdrzewiecki/celos`](https://gitlab.com/cdrzewiecki/celos) -(Section written by [@drzewiec](https://github.com/drzewiec)) - -It's been a while since my last project update! That's partly because life has been busy, but also because this update concerns a huge feature. I'm very pleased to report that I have been able to add preemptive multitasking to CelOS. - -This was feature that took a good bit of foundation to be able to implement (hence why it took me so long). I had to spend a good bit of time getting memory allocation (both physical and virtual) into a happier place, as well as add support for ACPI and the APIC. And, of course, there were many snags along the way as I learned (at least some of) the traps that are easy to step into when doing something as delicate as context switching. - -Now that I have finished this key feature, I plan to work on setting up the other infrastructure needed to begin writing services in userspace (such as message passing and synchronization primitives). And, hopefully soon, finally make the jump into ring 3! - -As always, many thanks to [@phil-opp](https://github.com/phil-opp) for his hard work on supporting the Rust osdev community, and for writing the [apic](https://github.com/rust-osdev/apic) crate which helped serve as a sanity check while I wrote my own driver for the IOAPIC and LAPIC. Thanks as well to the maintainers of the excellent [acpi](https://github.com/rust-osdev/acpi) crate, you guys are doing incredible work out there! - -### Blog Post: GNU ld Discards Section Containing Code – Section Flags in Assembly are Important - -(Section written by [@phip1611](https://github.com/phip1611)) - -In late August/early September, I encountered problems when building my Rust kernel. I faced -unintuitive interaction between my global assembly code and the linker. I specified a custom -section in assembly with executable code with `.section .bootcode`. The linker never linked -the code where I specified it in my linker script. It's address was not what it is supposed to be. -`readelf` didn't show the section inside the binary either. The section was discarded no matter -how hard I tried to modify the linker, thus, `KEEP((.bootcode));` also didn't work. An experienced -colleague ensured me that my linker script is correct. - -Section names such as `.init` or `.text.bootcode` worked by the way. Only my custom name was -rejected somehow. In the end, I figured out writing `.section .bootcode, "ax"` does the trick. The -difference is small, but the impact to the object file and final executable of those section flags -is big. I could find the answer in the ELF specification. A section needs to be allocatable -(`a`-flag) so that it can be properly placed in a LOAD segment/program header. The section names -`.init` and `.text.*` have this pre-configured but my custom section name `.bootcode` has not. - -I traced it down to a minimal reproducible example that can be found [on GitHub](https://github.com/phip1611/gnu-linker-discards-code-section-that-is-not-in-text-section). -A comprehensive write-up can be found on my website [Phip's Blog](https://phip1611.de/blog/gnu-ld-discards-section-containing-code/). - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -This month, we merged a pull request that fixes numerous grammar and punctuation errors across all posts of the [_"Writing an OS in Rust"_](https://os.phil-opp.com/) series. Thanks to [@hecatia-elegua](https://github.com/hecatia-elegua) for this contribution! - -We also received multiple pull requests to add and update translations: - -- [Fix Japanese translation of "Double Faults"](https://github.com/phil-opp/blog_os/pull/1127) -- [Update the chinese translation](https://github.com/phil-opp/blog_os/pull/1131) -- [[Translation][Korean] post-04](https://github.com/phil-opp/blog_os/pull/1135) - -We are still looking for reviewers for the last two PRs. If you speak Chinese or Korean, it would be great if you could take a look! - -Thanks to [@ykomatsu](https://github.com/ykomatsu), [@liuyuran](https://github.com/liuyuran), and [@JOE1994](https://github.com/JOE1994) for contributing these translations! - - - - -## Join Us? - -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). diff --git a/content/this-month/2022-09/index.md b/content/this-month/2022-09/index.md deleted file mode 100644 index 83bc8e1a..00000000 --- a/content/this-month/2022-09/index.md +++ /dev/null @@ -1,195 +0,0 @@ -+++ -title = "This Month in Rust OSDev: September 2022" -date = 2022-10-07 - -[extra] -month = "September 2022" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@rybot666](https://github.com/rybot666), and [@64](https://github.com/64) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. - -We encountered various boot issues with the new `v7.1.0` release of QEMU in September. This also affected downstream projects such as [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os/issues/1138) and [`hawkw/mycelium`](https://github.com/hawkw/mycelium/issues/321). After some debugging, we found out that QEMU now reports a new memory region at offset ~1 TiB in the physical memory map, which was much higher than expected by the bootloader crate. As a result, BIOS booting became unusably slow (because of the initial identity mapping) and the automated offset selection for the physical memory map ran into a panic. For full details, see the [summary issue](https://github.com/rust-osdev/bootloader/issues/259). - -We fixed the issues in the following way: - -- [Limit BIOS bootloader's `max_phys_addr` to 4 GiB](https://github.com/rust-osdev/bootloader/pull/260) -- [Only perform a single TLB flush after identity mapping](https://github.com/rust-osdev/bootloader/pull/265) -- [fix `get_free_address` for large sizes (0.10)](https://github.com/rust-osdev/bootloader/pull/263) (published as `0.10.13`) -- [allow allocating more than one level 4 entry (0.9)](https://github.com/rust-osdev/bootloader/pull/264) (published as `0.9.23`) - -Thanks to [@hawkw](https://github.com/hawkw) and [@Freax13](https://github.com/Freax13) for these contributions! - -We also brought the [upcoming `v0.11` release](https://github.com/rust-osdev/bootloader/pull/232) even closer to the finish line. Thanks to an extensive review of [@Freax13](https://github.com/Freax13), we found and fixed multiple remaining issues. Also thanks to [@asensio-project](https://github.com/asensio-project) and [@TheBotlyNoob](https://github.com/TheBotlyNoob) for testing the new version and reporting bugs! Some notable changes are: - -- [Allocate kernel as normal UEFI loader data](https://github.com/rust-osdev/bootloader/commit/08e4b5829bf5882d9d396e641e32b65de72704b2) -- [Preserve `RUNTIME_SERVICES_*` memory regions](https://github.com/rust-osdev/bootloader/commit/667e57f552e214f9c19848306e03b00d91a8114f) -- [Update usage instructions and architecture description in README](https://github.com/rust-osdev/bootloader/commit/454f70740df13107d4748d63b1d646f176f6fa62) - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -- [Add an mdBook](https://github.com/rust-osdev/uefi-rs/pull/515) - - Read it at -- [More protocol safety improvements](https://github.com/rust-osdev/uefi-rs/pull/478) -- [Implement `HardDriveMediaDevicePath` (along with MBR and GPT tests). ](https://github.com/rust-osdev/uefi-rs/pull/497) -- [Drop use of unstable try_trait_v2 feature](https://github.com/rust-osdev/uefi-rs/pull/479) -- ["is_regular_file" for file trait + integration test](https://github.com/rust-osdev/uefi-rs/pull/475) -- [`CStr8` cleanup and enhancements](https://github.com/rust-osdev/uefi-rs/pull/506) -- [Transform feature "ignore-logger-errors" to additive feature.](https://github.com/rust-osdev/uefi-rs/pull/476) -- [Release `uefi-macros-0.8.0`, `uefi-0.17.0`, `uefi-services-0.14.0`](https://github.com/rust-osdev/uefi-rs/pull/513) -- [Add `PhysicalAddress` and `VirtualAddress` type aliases](https://github.com/rust-osdev/uefi-rs/pull/518) -- [Change DevicePath[From|To]Text methods to return a Result](https://github.com/rust-osdev/uefi-rs/pull/514) - - - -Thanks to [@ColinFinck](https://github.com/ColinFinck) for their contribution! - - -### [`xhci`](https://github.com/rust-osdev/xhci) - -Maintained by [@toku-sa-n](https://github.com/toku-sa-n) - -The `xhci` crate provides types of xHCI structures, such as Registers and TRBs. - -We merged the following changes in September: - -- [Implement Default for registers without RsvdP bits](https://github.com/rust-osdev/xhci/pull/147) -- [Add set_0_* to rw1c! macro](https://github.com/rust-osdev/xhci/pull/148) -- [Release 0.9.1](https://github.com/rust-osdev/xhci/pull/149) - -Thanks to [@Demindiro](https://github.com/Demindiro) for their contribution! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues! - - - -- [(`phil-opp/blog_os`) Looking for a reviewer for a Chinese translation](https://github.com/phil-opp/blog_os/pull/1131#issuecomment-1251963782) -- [(`phil-opp/blog_os`) Looking for a reviewer for a Korean translation](https://github.com/phil-opp/blog_os/pull/1135#issuecomment-1264665246) -- [(`phil-opp/blog_os`) Looking for a reviewer for a French translation](https://github.com/phil-opp/blog_os/pull/1144) - -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. - -## Other Projects - -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. - - - -### [Theseus OS](https://github.com/theseus-os/Theseus) - -(Section written by [Kevin Boos](https://www.theseus-os.com/kevinaboos/) ([@kevinaboos](https://github.com/kevinaboos))) - -Theseus is a safe-language OS written from scratch in Rust that is in the process of migrating from pure academic research objectives to more general usability and legacy compatibility. -As a fully open-source project, we welcome and encourage contributions from everyone! - -Since our [last update](https://rust-osdev.com/this-month/2022-07/index.html#theseus-os) here two months ago, we have worked on the following things: -* Continued our port of Rust `std` to Theseus - * Follow our progress in [this tracking issue](https://github.com/theseus-os/rust/issues/12) - * Completed: [environment variables](https://github.com/theseus-os/Theseus/pull/581), [RNGs](https://github.com/theseus-os/Theseus/pull/582) - * In progress: timekeeping, proper virtual filesystem implementation, raw synchronization primitives -* Began adding support for the `aarch64` ARM architecture to Theseus - * Still an early work-in-progress -* [Redesigned our Local APIC implementation](https://github.com/theseus-os/Theseus/pull/592) to avoid unnecessary conditionals and panics - * Now the abstraction of functionality across xAPIC and x2APIC is cleaner -* Only disable preemption, not interrupts, during sensitive task management functions - * Introduced a [safe abstraction for a preemption-disabling guard type](https://github.com/theseus-os/Theseus/pull/595) - * Added a [preemption-safe `Mutex` and `RwLock` implementation](https://github.com/theseus-os/Theseus/pull/627) - * We now use preemption-safe guards for [task switching](https://github.com/theseus-os/Theseus/pull/603), [task lifecycle/cleanup functions](https://github.com/theseus-os/Theseus/pull/616), and [runqueue management](https://github.com/theseus-os/Theseus/pull/629) -* Improved task management functions to expediently clean up existed tasks - * Introduced a clear concept of a [post-context switch action](https://github.com/theseus-os/Theseus/pull/600) - * Guarantees that the post-context switch action will *always* occur, even when switching to a brand new task or switching away from an exited task - * Clarified the [ownership of the next task's `TaskRef` during a task switch](https://github.com/theseus-os/Theseus/pull/630), ensuring that it is dropped at the right time to avoid delays in its cleanup - * Ensured that [orphaned tasks are properly reaped](https://github.com/theseus-os/Theseus/pull/614) via the `JoinableTaskRef` type -* [Avoided using `lazy_static` where possible](https://github.com/theseus-os/Theseus/pull/605) in favor of plain `const` expressions - * Rust's `const_btree_new` nightly feature allows `BTree::new()` to be `const` - * Also [contributed a PR to the `rangemap` crate](https://github.com/jeffparsons/rangemap/pull/52) such that it can optionally use that new feature - * This makes it [faster to access and generate TLS data images](https://github.com/theseus-os/Theseus/pull/606) for new Task creation in Theseus -* Refactored all interrupt handlers into a more conventional design - * Previously, the single `interrupts` crate would statically register device-specific interrupt handlers - * Now, each device crate dynamically registers their interrupt handlers with the `interrupts` crate when they initialize themselves - * Examples: PS2 [mouse](https://github.com/theseus-os/Theseus/commit/5423124bd54003c015ec66b68c797d1a7686b550), [keyboard](https://github.com/theseus-os/Theseus/commit/0bebdc1c9a2e058ed50f09313968a6eaf1b4fec2), [ATA disks](https://github.com/theseus-os/Theseus/pull/611), - * The original design favored explicit dependencies from `interrupts` to `` for predictable behavior over dynamically-registered states, but causes problems with inverted and cyclic dependencies -* Introduced `clippy` CI action and [addressed most lint warnings](https://github.com/theseus-os/Theseus/issues/526) - * `rustfmt` is next, with the hope of standardizing our code base - - -Check out the [Theseus OS blog](https://www.theseus-os.com/) for the latest details. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) - -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes this month: - -- [Translate post-07 to Japanese](https://github.com/phil-opp/blog_os/pull/1141) -- [Copyedit edition 2 `paging-introduction/index.md`](https://github.com/phil-opp/blog_os/pull/1129) -- [Fix typo in french translation `01-freestanding-rust-binary`](https://github.com/phil-opp/blog_os/pull/1142) - -Thanks to [@shimomura1004](https://github.com/shimomura1004), [@woodyZootopia](https://github.com/woodyZootopia), [@bolded](https://github.com/bolded), and [@Firenezz](https://github.com/Firenezz) for their contributions! - -## Join Us? - -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). diff --git a/content/this-month/2022-10/index.md b/content/this-month/2022-10/index.md deleted file mode 100644 index 6b5dd1a6..00000000 --- a/content/this-month/2022-10/index.md +++ /dev/null @@ -1,204 +0,0 @@ -+++ -title = "This Month in Rust OSDev: October 2022" -date = 2022-11-07 - -[extra] -month = "October 2022" -editors = ["phil-opp", "IsaacWoods"] -+++ - -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. - - - -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. - - - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -- [Change `Event` to be FFI-safe using `NonNull`](https://github.com/rust-osdev/uefi-rs/pull/507) -- [Add `guid!` macro](https://github.com/rust-osdev/uefi-rs/pull/536) -- [Add Guid methods to convert to/from byte arrays](https://github.com/rust-osdev/uefi-rs/pull/535) -- [Fixes and improvements for `Revision`](https://github.com/rust-osdev/uefi-rs/pull/529) -- [Replace `UnalignedCStr16` with `UnalignedSlice`](https://github.com/rust-osdev/uefi-rs/pull/539) -- [Add new `DeviceSubType` values](https://github.com/rust-osdev/uefi-rs/pull/537) -- [Fix clippy warnings](https://github.com/rust-osdev/uefi-rs/pull/538) -- [uefi-services: Change panic handler log message.](https://github.com/rust-osdev/uefi-rs/pull/526) - -Thanks to [@timrobertsdev](https://github.com/timrobertsdev) and [@raccog](https://github.com/raccog) for their contributions! - - - - -### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns) - -- [Consider regions that lead to very small back paddings as unsuitable](https://github.com/rust-osdev/linked-list-allocator/pull/71) - - Fixes a potential [memory leak](https://github.com/rust-osdev/linked-list-allocator/issues/66) that was introduced with `v0.10`. -- [Add a random action fuzzer](https://github.com/rust-osdev/linked-list-allocator/pull/69) - - Runs randomized tests against the `allocate_first_fit`, `deallocate`, and `extend` methods - - This is the fuzzer that was used to discover the [possible out-of-bounds writes in versions `<=0.10.1`](https://github.com/rust-osdev/linked-list-allocator/security/advisories/GHSA-xg8p-34w2-j49j) -- [Run new cargo-fuzz job on CI with time limit](https://github.com/rust-osdev/linked-list-allocator/pull/72) - - Fuzzes each commit and PR for 5 minutes as a guard against regressions - - The CI job is also run on schedule every day to test against the latest Rust nightly and to increase the chance of finding improbably bugs over time. - -Thanks to [@evanrichter](https://github.com/evanrichter) for their contribution! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp), [@rybot666](https://github.com/rybot666), and [@64](https://github.com/64) - -We merged the following changes this month: - -- [Update `noto-sans-mono-bitmap` to `v0.2.0`](https://github.com/rust-osdev/bootloader/pull/267) - - now supports more unicode ranges, including the fallback character `�` - - code ranges are optional via cargo features to minimize binary size -- [implement read-only relocations](https://github.com/rust-osdev/bootloader/pull/269) - - implements `GNU_RELRO` program header handling to make relocations read-only -- [allow booting without a UEFI graphics output](https://github.com/rust-osdev/bootloader/pull/268) - - don't error if no UEFI framebuffer is detected - - this was merged into the `next` branch for the upcoming `v0.11` release - -Thanks to [@phip1611](https://github.com/phip1611), and [@Freax13](https://github.com/Freax13) for their contributions! - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -This month, we began work to remove `acpi`'s dependence on the `alloc` crate for allocations, instead directly -using the [`core::alloc::Allocator`](https://doc.rust-lang.org/beta/core/alloc/trait.Allocator.html) API. This -improves support for bootloaders and kernels that want to treat memory allocation as fallible, allowing them to -more gracefully recover from out-of-memory situations. In the future, we hope that this support will be brought -into `alloc`, so that the library can return to using the standard containers. - -These changes are not yet finished or released, but a new major version will likely be out in December with these -changes, as well as better support for PCI topologies with multiple segment groups, and a few other changes. If -you'd like to make use of these new features as they're developed, they're already in `main`, so you can use a Git -dependency. - -- [Rework crate to work without allocations](https://github.com/rust-osdev/acpi/pull/131) -- [Add Debug implementations](https://github.com/rust-osdev/acpi/pull/128) - -Thanks to [@semiviral](https://github.com/semiviral), and [@mattfbacon](https://github.com/mattfbacon) for their contributions! - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues! - - - - - -_No tasks were proposed for this section this month._ - - - -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. - -## Other Projects - -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. - - - -### [`d-sonuga/blog-blasterball`](https://github.com/d-sonuga/blog-blasterball/) -(Section written by [@d-sonuga](https://github.com/d-sonuga)) - -[Demilade Sonuga's Blog](https://d-sonuga.netlify.app/) is a new blog on writing a -simple blasterball game with no OS, no engine and minimal external crates. The blog's aim is to take a Rust -beginner from starting the project to finishing it and understanding everything involved in the project's -creation. - -The project is still in it's early stages, so lots of feedback is very much needed. - -If you're interested, please take a look, and send your thoughts to [@d_sonuga](https://twitter.com/d_sonuga/) -on Twitter. - -### Talk on Windows Linked Lists in safe and idiomatic Rust -(Section written by [@ColinFinck](https://github.com/ColinFinck)) - -At the first ever EuroRust conference from 13th to 14th October, Colin Finck gave a talk about the challenges of developing his [`nt-list`](https://github.com/ColinFinck/nt-list) crate. -The crate provides a safe and idiomatic Rust wrapper around the Windows variant of Linked Lists. -It was presented on this blog [in July](/this-month/2022-07/#nt-list-windows-linked-lists-in-idiomatic-rust). - -A [recording](https://www.youtube.com/watch?v=IxhZIyXOIw8) of the talk has just been uploaded. -Check it out, and also check out the [other videos](https://www.youtube.com/channel/UCR3gXcme1HMK7_TrUaNZOqw/videos) from that conference for some great takes on Rust! - -[![Preview of video: Windows linked lists in safe and idiomatic Rust - Colin Finck - EuroRust 2022](nt-list-video.jpg "Preview of video: Windows linked lists in safe and idiomatic Rust - Colin Finck - EuroRust 2022")](https://www.youtube.com/watch?v=IxhZIyXOIw8) - -### [`MaderNoob/galloc`](https://github.com/MaderNoob/galloc) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -The new [`good_memory_allocator`](https://crates.io/crates/good_memory_allocator) crate implements a `no_std`-compatible linked list allocator, inspired by the [`dlmalloc`](https://gee.cs.oswego.edu/dl/html/malloc.html) algorithm. It stores an additional `usize` of metadata per allocation, which decreases memory efficiency, but increased runtime efficiency. The `README` includes promising [benchmark results](https://github.com/MaderNoob/galloc#benchmarks) that compare the crate against the [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) and [`simple-chunk-allocator`](https://github.com/phip1611/simple-chunk-allocator) crates. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Korean translation of _Testing_ post](https://github.com/phil-opp/blog_os/pull/1135) - - Read it at - - Thanks to [@JOE1994](https://github.com/JOE1994) for creating the translation and to [@SNOOPYOF](https://github.com/SNOOPYOF) and [@dalinaum](https://github.com/dalinaum) for reviewing! -- [Korean translation of _CPU Exceptions_ post](https://github.com/phil-opp/blog_os/pull/1162) - - Read it at - - Thanks to [@JOE1994](https://github.com/JOE1994) for creating the translation and to [@KimWang906](https://github.com/KimWang906) for reviewing! -- [French translation of _A Minimal Rust Kernel_ post](https://github.com/phil-opp/blog_os/pull/1144) - - Read it at - - Thanks to [@TheMimiCodes](https://github.com/TheMimiCodes) and [@maximevaillancourt](https://github.com/maximevaillancourt) for creating the translation and to [@alaincao](https://github.com/alaincao) for reviewing (and for [fixing links](https://github.com/phil-opp/blog_os/pull/1166))! -- [Update zola to v0.16.1](https://github.com/phil-opp/blog_os/pull/1147) -- [Fixes bad URL from `post-09` address calculation section](https://github.com/phil-opp/blog_os/pull/1146) (thanks to [@seewishnew](https://github.com/seewishnew)) -- [Remove warning output from QEMU command](https://github.com/phil-opp/blog_os/pull/1151) (thanks to [@lovemeforareason](https://github.com/lovemeforareason)) - -## Other News - -- [Rust UEFI Firmware Targets Promoted To Tier-2 Status](https://www.phoronix.com/news/Rust-UEFI-Promoted-Tier-2) -- [Microsoft seems to ship Rust code in Windows Font Parsing (dwrite)](https://twitter.com/dwizzzleMSFT/status/1578532292662005760) -- Announcement of [COSMIC Text](https://github.com/pop-os/cosmic-text), a pure Rust library for font shaping, layout, and rendering - - Based on [`rustybuzz`](https://github.com/RazrFalcon/rustybuzz) and [`swash`](https://github.com/dfrg/swash), with custom layout and font fallback implementations - - Developed for the upcoming Rust-based desktop environment for [Pop_OS](https://pop.system76.com/) and also usable for [Redox OS](https://www.redox-os.org/) - -## Join Us? - -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). diff --git a/content/this-month/2022-11/index.md b/content/this-month/2022-11/index.md deleted file mode 100644 index f72bd40a..00000000 --- a/content/this-month/2022-11/index.md +++ /dev/null @@ -1,276 +0,0 @@ -+++ -title = "This Month in Rust OSDev: November 2022" -date = 2022-12-07 - -[extra] -month = "November 2022" -editors = ["phil-opp"] -+++ - -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. - - - -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. - -We have some new sections this month, we hope you like the content! - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - -### UEFI Targets are now Tier 2 -(Section written by [@nicholasbishop](https://github.com/nicholasbishop)) - -The [MCP to raise the three UEFI targets to tier 2](https://github.com/rust-lang/compiler-team/issues/555) by [@dvdhrm](https://github.com/dvdhrm) was recently approved. -Following that we merged a PR to [dist builds of the UEFI targets](https://github.com/rust-lang/rust/pull/103933) so that you can install them via rustup (e.g. `rustup target add --toolchain nightly x86_64-unknown-uefi`), and a PR to [add an initial QEMU test]( -https://github.com/rust-lang/rust/pull/101703) for the x86_64 UEFI target to help prevent regressions from landing. - -The initial nightlies containing the prebuilt UEFI targets revealed some issues in `compiler_builtins` which we fixed and are in the [0.1.84](https://github.com/rust-lang/compiler-builtins/compare/0.1.83...0.1.84) release. -Finally, we [changed the C compiler for the UEFI targets from gcc to clang](https://github.com/rust-lang/rust/pull/104622), which resolved some linker problems. -As of the 2022-11-22 nightly, the three UEFI targets should be fully usable, which means you no longer need to use the unstable `-Zbuild-std` feature. - -## Announcements, News, and Blog Posts - -- [Redox OS 0.8.0](https://www.redox-os.org/news/release-0.8.0/) -- \[Talk\] [FerrOS: Rust-y unikernels on seL4](https://www.youtube.com/watch?v=osepBlSQjY8) -- [Aero, a new modern OS made in rust and is now able to run Xorg](https://www.reddit.com/r/rust/comments/ytrpss/aero_a_new_modern_os_made_in_rust_and_is_now_able/) -- [Tales of the M1 GPU](https://asahilinux.org/2022/11/tales-of-the-m1-gpu/) - - Asahi Lina shares her experience with writing a Linux kernel driver for the Apple M1 GPU in Rust. -- [Memory Safe Languages in Android 13](https://security.googleblog.com/2022/12/memory-safe-languages-in-android-13.html) - - There are now ~1.5 million lines of Rust code in AOSP. - - "Based on this historical vulnerability density, it’s likely that using Rust has already prevented hundreds of vulnerabilities from reaching production." -- [Rust Developers Move Ahead With Preparing To Upstream More Code Into The Linux Kernel](https://www.phoronix.com/news/More-Rust-Upstream-Prep-Linux) - - - - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) - -Just a few days ago, we finally [released](https://github.com/rust-osdev/bootloader/pull/293) version `0.11.0` of the the `bootloader` crate. This release is a [major rewrite](https://github.com/rust-osdev/bootloader/pull/232) with various new features and also breaking changes: - -- **Separate API crate:** The bootloader is now split into two parts: A [`bootloader_api`](https://docs.rs/bootloader_api/0.11.0/bootloader_api/) crate to make kernels loadable by the bootloader and the actual bootloader implementation. This makes the build process for kernels much easier and faster. -- **New config system:** Instead of configuring the bootloader via a special table in the `Cargo.toml`, the configuration now happens through a normal Rust struct, which is part of the [`entry_point!` macro](https://docs.rs/bootloader_api/0.11.0/bootloader_api/macro.entry_point.html). The macro then serializes the config struct at compile time and places it in a special ELF output section. The compile time serialization happens through a manually implemented `const fn` of the config struct. -- **Load the kernel at runtime:** Up to version `0.10`, the bootloader used to link the kernel at compile time, which required recompiling the bootloader whenever the kernel was modified. In `v0.11`, we now load both the kernel and the configuration at runtime, so no rebuilding of the bootloader is needed anymore. -- **Split into sub-crates:** Since the bootloader build process does not need access to the kernel executable or its `Cargo.toml` anymore, we can build the different parts of the bootloader independently. For example, the BIOS boot sector is now a separate crate, and the UEFI bootloader is too. (We plan to make them proper [artifact dependencies](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#artifact-dependencies) as soon as they're allowed on crates.io.) -- **Library to create disk images:** To create an abstraction the complex build steps of the different bootloader executables, we compile them inside cargo build scripts. At the top level, we provide a [`bootloader`](https://docs.rs/bootloader/0.11.0/bootloader/) _library_ crate, which compiles everything as part of its build script. This library includes functions for creating BIOS and UEFI disk images for a given kernel. These functions can be used e.g. from a builder crate or a build script of the downstream operating system. - -See our [README](https://github.com/rust-osdev/bootloader/blob/main/README.md) for detailed usage instructions. We also created [migration guides](https://github.com/rust-osdev/bootloader/tree/main/docs/migration) that explain how to update from `v0.9` and `v0.10`. - -Thanks a lot to the numerous people that tested our beta releases and reported issues! - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -#### Features - -- [Make the `cstr16!` macro usable in const contexts](https://github.com/rust-osdev/uefi-rs/pull/544) -- [const fn for trivial getters where possible](https://github.com/rust-osdev/uefi-rs/pull/545) -- [Support ISA-specific `MemoryAttribute`s in `MemoryDescriptor`s](https://github.com/rust-osdev/uefi-rs/pull/549) -- [Allow uefi-services to work when the "logger" feature is disabled in uefi](https://github.com/rust-osdev/uefi-rs/pull/552) -- [Unicode collation](https://github.com/rust-osdev/uefi-rs/pull/551) -- [Add structs for all device path node types and a new `DevicePathBuilder`](https://github.com/rust-osdev/uefi-rs/pull/547) -- [Implement additional `BootServices` functions](https://github.com/rust-osdev/uefi-rs/pull/550) -- [Publish new releases](https://github.com/rust-osdev/uefi-rs/pull/571) -- [const fn wherever possible](https://github.com/rust-osdev/uefi-rs/pull/546) -- [rename crate features](https://github.com/rust-osdev/uefi-rs/pull/561) -- [Several small improvements to EqStrUntilNul](https://github.com/rust-osdev/uefi-rs/pull/580) -- [`TryFrom` implementation for `CStr8`](https://github.com/rust-osdev/uefi-rs/pull/581) -- [`Directory::read_entry_boxed` plus common abstraction `make_boxed`](https://github.com/rust-osdev/uefi-rs/pull/559) -- [Implement Error trait for `uefi::Error`](https://github.com/rust-osdev/uefi-rs/pull/587) -- [Added `read_entry_boxed_in` and `get_boxed_info_in` that use the `allocator_api`](https://github.com/rust-osdev/uefi-rs/pull/584) - -#### Docs - -- [Add uefi/README.md](https://github.com/rust-osdev/uefi-rs/pull/577) -- [Install UEFI targets via rustup](https://github.com/rust-osdev/uefi-rs/pull/555) -- [book: Add a graphics example](https://github.com/rust-osdev/uefi-rs/pull/586) -- [documentation and code improvements for Status, Error, and read()](https://github.com/rust-osdev/uefi-rs/pull/556) -- [Clean up crate feature list documentation](https://github.com/rust-osdev/uefi-rs/pull/589) -- [Add `unstable` feature and improve CI for feature flags](https://github.com/rust-osdev/uefi-rs/pull/590) -- [Doc updates: add "Running on Hardware" to book and drop BUILDING.md](https://github.com/rust-osdev/uefi-rs/pull/588) - -#### Internal - -- [Update `mbrman` to 0.5.0](https://github.com/rust-osdev/uefi-rs/pull/543) -- [Don't explicitly require compiler-builtins(-mem)](https://github.com/rust-osdev/uefi-rs/pull/534) -- [Add temporary workaround for yanked dependency](https://github.com/rust-osdev/uefi-rs/pull/574) -- [workspace: uefi (main library) is in a dedicated directory now](https://github.com/rust-osdev/uefi-rs/pull/566) -- [Copy LICENSE to the new uefi directory](https://github.com/rust-osdev/uefi-rs/pull/576) -- [Improve clap help for `--target`](https://github.com/rust-osdev/uefi-rs/pull/578) -- [several unrelated cleanups](https://github.com/rust-osdev/uefi-rs/pull/562) -- [uefi-test-runner: Assume that we're running in the special QEMU env](https://github.com/rust-osdev/uefi-rs/pull/579) -- [Simplify serial usage in test-runner and check that tests completed](https://github.com/rust-osdev/uefi-rs/pull/582) -- [clippy: require must_use_candidate lint](https://github.com/rust-osdev/uefi-rs/pull/592) -- [doc: add '--document-private-items' to `cargo xtask doc`](https://github.com/rust-osdev/uefi-rs/pull/569) -- [test-runner: Make some tests stricter](https://github.com/rust-osdev/uefi-rs/pull/595) -- [test-runner: Open serial device in exclusive mode](https://github.com/rust-osdev/uefi-rs/pull/598) -- [Make GOP test work on aarch64](https://github.com/rust-osdev/uefi-rs/pull/599) - - - -Thanks to [@blitz](https://github.com/blitz), [@YtvwlD](https://github.com/YtvwlD), [@timrobertsdev](https://github.com/timrobertsdev), [@NathanRoyer](https://github.com/NathanRoyer), and [@d-sonuga](https://github.com/d-sonuga) for their contributions! - - - -### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns) - -We merged the following tooling changes this month to make the crate more reliable: - -- [Detect fragmentation when fuzzing](https://github.com/rust-osdev/linked-list-allocator/pull/73) -- [Fix miri test failures caused by address unleaking of heap data in tests](https://github.com/rust-osdev/linked-list-allocator/pull/75) - -Thanks to [@evanrichter](https://github.com/evanrichter) for their contribution! - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -- [Improve `PciConfigRegions` API](https://github.com/rust-osdev/acpi/pull/132) - -Thanks to [@semiviral](https://github.com/semiviral) for their contribution! - - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues! - - - - - -_No tasks were proposed for this section this month._ - - - -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. - -## Other Projects - -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. - - - -### [`bendudson/EuraliOS`](https://github.com/bendudson/EuraliOS) -(Section written by [@bendudson](https://github.com/bendudson)) - -EuraliOS is a hobby multitasking operating system written in -Rust. It's based on a microkernel ("Merriwig") that provides on-demand -paging, stack and heap memory management for multi-threaded user -processes. Drivers run in Ring 3 and communication between processes -is by Rendezvous message passing. Each process can have its own -virtual file system, enabling multiple users to be isolated from each -other. - -This still has many rough edges and doesn't have many drivers: -EuraliOS only has ramdisk storage, but does have a TCP stack thanks to -the [smoltcp](https://github.com/smoltcp-rs/smoltcp) crate. The only -user programs are a simple shell and a -[Gopher](https://en.wikipedia.org/wiki/Gopher_(protocol)) client; I'm -trying to port the [kibi](https://github.com/ilai-deutel/kibi) text -editor but have a lot of work to do on the standard library. - -This was based on [Phil's blog](https://os.phil-opp.com/) and uses -many rust-osdev crates including -[x86_64](https://github.com/rust-osdev/x86_64), -[bootloader](https://github.com/rust-osdev/bootloader) and -[vga](https://github.com/rust-osdev/vga). Thanks to Phil and -Rust-OSdev contributors for all their work supporting this community! - -I've tried to -[document](https://github.com/bendudson/EuraliOS#documentation) the -development steps and hope these are useful for others, particularly -the sections on getting into Ring 3, implementing syscalls and -switching stacks with `swapgs`. Suggestions for improvement welcome! - -### [`hermitcore/hermit-sync`](https://github.com/hermitcore/hermit-sync) -(Section written by [@mkroening](https://github.com/mkroening)) - -While working on the [`libhermit-rs`] kernel, I moved the synchronization primitives targeted at kernel development into a separate crate: [`hermit-sync`]. -Whilst I was there, I also enhanced the code and made it independent from libhermit, so the code can now be used in other projects as well; at least x86_64 and aarch64 ones for the moment. - -The crate contains the following features: - -* a function for running a closure without interrupts -* a simple spinlock with exponential backoff -* a fair ticket lock with exponential backoff -* `OnceCell` and `Lazy` based on [`generic_once_cell`] (another recent project of mine) - -All of these primitives are available with and without interrupt safety. -See the [API docs] for more details. - -Any feedback is very welcome of course. - -[`libhermit-rs`]: https://github.com/hermitcore/libhermit-rs -[`hermit-sync`]: https://github.com/hermitcore/hermit-sync -[`generic_once_cell`]: https://github.com/mkroening/generic_once_cell -[API docs]: https://docs.rs/hermit-sync - -### [`phip1611/paging-calculator`](https://github.com/phip1611/paging-calculator) - -(Section written by [@phip1611](https://github.com/phip1611)) - -I worked on setting up page tables in a low-level project and noticed that there is lots of room for -confusion. For example, x86 has at least four different modes of paging: 32-bit paging, 32-bit -paging with PAE, 64-bit 4-level paging, and 64-bit 5-level paging. 32-bit without PAE paging uses 10 -bits to index into a page table while 64-bit paging uses 9 bits to index into the table of each -level. To demystify the magic a little, I created a CLI utility called `paging-calculator` that -takes a virtual address as input and shows you the indices the hardware will use. You can find the -utility on [crates.io](https://crates.io/crates/paging-calculator). - - -## Join Us? - -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). diff --git a/content/this-month/2022-12/index.md b/content/this-month/2022-12/index.md deleted file mode 100644 index 65d44d54..00000000 --- a/content/this-month/2022-12/index.md +++ /dev/null @@ -1,279 +0,0 @@ -+++ -title = "This Month in Rust OSDev: December 2022" -date = 2023-01-09 - -[extra] -month = "December 2022" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -### [Experimental feature gate proposal `interoperable_abi`](https://github.com/rust-lang/rust/pull/105586) - -This Rust language proposal suggests to create a new `extern "interop"` ABI as a strict superset of the C ABI. -The goal of this new ABI is to "define a standard way to make calls across high-level languages, passing high-level data types, without dropping to the lowest common denominator of C". -For example, it will define a specific memory representation for strings, tuples, and common standard library types such as `Option` and `Result`. - -This new ABI would be very useful for operating system development because there are often multiple executables that need to communicate with each other using a stable ABI. -For example, user-space programs communicate with the kernel using [system calls](https://en.wikipedia.org/wiki/System_call), and with other programs using different forms of [inter-process communication](https://en.wikipedia.org/wiki/Inter-process_communication). -With new `extern "interop"` ABI, these communication boundaries could use safe, higher-level types when both sides are written in Rust. - -### [`default_alloc_error_handler` has been stabilized](https://github.com/rust-lang/rust/pull/102318) - -On `no_std` targets, enabling `alloc` requires providing an OOM (out-of-memory) handler. The usual implementation of this handler just panics, but implementing the handler requires an unstable feature: [`alloc_error_handler`]. The newly-stabilized `default_alloc_error_handler` automatically provides an OOM handler that panics if no custom handler is implemented. This is an [important step towards using some targets on the stable channel][towards-stable]. - -[`alloc_error_handler`]: https://doc.rust-lang.org/unstable-book/language-features/alloc-error-handler.html#alloc_error_handler -[towards-stable]: https://github.com/rust-lang/rust/pull/102318#issuecomment-1331865137 - -## Announcements, News, and Blog Posts - - - -- [Linux 6.1 Released With MGLRU, Initial Rust Code](https://www.phoronix.com/news/Linux-6.1-Released) -- [Kernel/Boot: Cope with a Relocation by a Bootloader in 32-bit x86 Assembly Code](https://phip1611.de/blog/kernel-boot-cope-with-a-relocation-by-a-bootloader-in-32-bit-x86-assembly-code/) \ - In this blogpost, [@phip1611](https://github.com/phip1611) shows you how you can cope with a - relocation by a bootloader in x86 32-bit assembly code. -- [How Does the “File Size is Smaller Than Mem Size” Optimization Work in GNU ld for the .bss Section?](https://phip1611.de/blog/how-does-the-file-size-is-smaller-than-mem-size-optimization-work-in-gnu-ld/) \ - In this blogpost, [@phip1611](https://github.com/phip1611) explains what properties bring the GNU - linker ld to save disk space, as symbols in the `.bss` section do not need to be statically - allocated inside the ELF. Symbols in the `.bss` segment are expected to be initialized to all - zeroes. -- [GNU ld: Linking .bss into .data to Ensure that Mem Size Equals File Size For Each LOAD Segment (.bss in a PROGBITS Section)](https://phip1611.de/blog/linking-bss-into-data-to-ensure-the-mem-size-equals-file-size-for-each-load-segment-bss-in-a-progbits-section/) \ - In this blogpost, [@phip1611](https://github.com/phip1611) explains what steps you have to do - that the GNU linker put's all symbols of the `.bss` section "as they are" into the binary - so that they occupy zeroed memory in the ELF. This is relevant for some very rudimentary - ELF loaders that are found in some microkernels to bootstrap their initial process. -- [The Probably Simplest x86 Driver Written in Assembly – Printing to QEMU’s debugcon-Device)](https://phip1611.de/blog/the-probably-simplest-x86-driver-written-in-assembly-printing-to-qemus-debugcon-device/) \ - In this blogpost, [@phip1611](https://github.com/phip1611) codes with you probably the simplest - driver that one can write in assembly. *This blogpost is from September but wasn't mentioned here - earlier.* - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -The `uefi` 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 changes last month: - -#### Features - -- [Implement `SIMPLE_NETWORK_PROTOCOL`](https://github.com/rust-osdev/uefi-rs/pull/606) -- [Initial support for TCG TPM protocols](https://github.com/rust-osdev/uefi-rs/pull/605) -- [Add `unsafe_protocol` macro and drop use of the unstable `negative_impls` feature](https://github.com/rust-osdev/uefi-rs/pull/607) -- [`UnalignedSlice`: impl `Clone` and improve `Debug`](https://github.com/rust-osdev/uefi-rs/pull/603) -- [Implement `Error` and `Display` traits for `FromStrError`](https://github.com/rust-osdev/uefi-rs/pull/610) -- [Simplification: No longer return "impl Iterator"](https://github.com/rust-osdev/uefi-rs/pull/619) -- [uefi: Add `ptr_meta` dependency](https://github.com/rust-osdev/uefi-rs/pull/621) -- [Drop unstable `maybe_uninit_slice` and `vec_into_raw_parts` features](https://github.com/rust-osdev/uefi-rs/pull/622) - -#### Fixes - -- [uefi: bug fix found by clippy](https://github.com/rust-osdev/uefi-rs/pull/620) - -#### Docs - -- [Add list of possible errors to `BootServices::open_protocol` docs](https://github.com/rust-osdev/uefi-rs/pull/600) -- [Add list of possible errors to some `BootServices` function docs](https://github.com/rust-osdev/uefi-rs/pull/602) -- [Add docs to `BootServices` functions describing error cases](https://github.com/rust-osdev/uefi-rs/pull/604) -- [Shortened error documentation for all methods in `BootServices`](https://github.com/rust-osdev/uefi-rs/pull/608) -- [Replaced UEFI chapter numbers with function identifiers in the docs](https://github.com/rust-osdev/uefi-rs/pull/611) -- [Add some documentation for media protocols](https://github.com/rust-osdev/uefi-rs/pull/614) - -#### Tooling - -- [xtask: Update to mbrman 0.5.1](https://github.com/rust-osdev/uefi-rs/pull/601) -- [Editorconfig: switch to max line width of 80](https://github.com/rust-osdev/uefi-rs/pull/615) - - -Thanks to [@veluca93](https://github.com/veluca93), [@phip1611](https://github.com/phip1611), and [@raccog](https://github.com/raccog) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -Maintained by [@phil-opp](https://github.com/phil-opp), [@josephlr](https://github.com/orgs/rust-osdev/people/josephlr), [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13), and [@rybot666](https://github.com/orgs/rust-osdev/people/rybot666) - -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. - -We merged the following changes in December: - -- [Adding `next_higher_level` to `PageLevelIndex`](https://github.com/rust-osdev/x86_64/pull/400) -- [Adding `is_empty` to `PageTable`](https://github.com/rust-osdev/x86_64/pull/399) -- [fix `Page::from_page_table_indices`](https://github.com/rust-osdev/x86_64/pull/398) (for upcoming `v0.15` release) - -Thanks to [@TornaxO7](https://github.com/TornaxO7) for their contribution! - - -## Call for Participation - -Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues! - - - - - -_No tasks were proposed for this section this month._ - - - -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. - -## Other Projects - -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. - -### [Theseus OS](https://github.com/theseus-os/Theseus) - -(Section written by [Kevin Boos](https://www.theseus-os.com/kevinaboos/) ([@kevinaboos](https://github.com/kevinaboos))) - -Theseus is a safe-language OS written from scratch in Rust that is in the midst of a shift from academic research to usability and legacy compatibility. -Theseus loads and links all components at runtime, and executes everything at a single privilege level in a single address space, relying on Rust safety for isolation and correctness. - -As a fully open-source project, we welcome and encourage contributions from everyone! - -Since our [last update](https://rust-osdev.com/this-month/2022-09/index.html#theseus-os) here a few months ago, we have worked on the following things: -* Introduced `dreadnought`, a basic async executor that brings Rust's `async`/`await` syntax to Theseus - * Usable by both applications and low-level kernel components - * Integrated the concept of wakers with Theseus's native task subsystem - * Currently, there is a 1-to-1 relationship between async `dreadnought` tasks and native Theseus tasks -* Rewrote our networking interface to offer better, simpler, and cleaner abstractions - * It now supports the latest `smoltcp` version, `0.8` -* Added support for booting Theseus on UEFI - * Previously, Theseus could boot from only multiboot2-compliant bootloaders using legacy BIOS - * UEFI on x86_64 now successfully boots after significant redesign of early bootstrap routines - * New custom `uefi_loader` tool, loosely based on the rust-osdev org's `bootloader` project - * Early graphical display for basic text printing is a work-in-progress - * UEFI is required to boot Theseus on aarch64; this is also a work-in-progress -* Almost completed porting core subsystems to aarch64 - * Bootstrap and logging over UART - * Memory management: page table modification, arch-agnostic PTE flags and basic memory types, etc - * Basic context switching and task bootstrap - * SMP multicore, plus identification of CPU cores - * Interrupt handling via GIC -* Redesigned the drivers for PS/2 controller, keyboard, and mouse in an intralingual manner that fully leverages Rust's strong type system. -* Started implementing a brand new graphics stack and window manager, `Porthole`, from scratch - * Added support for x86's Page Attribute Table, which allows Theseus to control the caching properties of individual memory pages - * We now map graphics video memory as *write-combining* instead of cache-disabled, which significantly improves performance -* Redesigned task management to give arbitrary tasks fewer privileges - * Two new types: `JoinableTaskRef` and `ExitableTaskRef` - * `JoinableTaskRef` is similar to `std::task::JoinHandle`, but is fully safe - * Ensures that a task can only be `join`ed by the "parent" task that spawned it - * Remove distinction between `join`ing a task and obtaining its `ExitValue` - * Automatically reaps "orphan" tasks that are no longer joinable - * `ExitableTaskRef` statically ensures that only a task itself can mark itself as exited - * Now, a given task can no longer invalidly mark another arbitrary task as exited - * Refactored scheduler and task switching to not hold any `TaskRef`s during a context switch - * Ensures that exited tasks are dropped and cleaned up expediently - * Native ELF Thread-Local Storage (TLS) variables are used to store the current task - * Accessing the current task is much faster, albeit slightly more complicated to initialize -* Implemented a new shell called `hull`, plus new terminal, console, and TTY components - * Theseus can now run headlessly, e.g., interactively over a serial port instead of via a graphical display. -* Removed usage of `owning_ref`, a crate with unsoundness, in favor of our own types: - * `BorrowedMappedPages`: a pseudo-self-referential type that allows persistent, efficient borrowing of a `MappedPages` memory region as a specific type `T` - * Accepts a `Mutability` type parameter for either immutable (`&T`) or mutable (`&mut T`) borrowing - * Sister type `BorrowedSliceMappedPages` also supports dynamically-sized slices, i.e., `&[T]` and `&mut [T]` - * Much more efficient than `owning_ref` because `MappedPages` is always pinned in memory, avoiding the need for `Box` allocation - * `dereffer`: a new library crate that provides `DerefsTo`, a generic wrapper type that allows the enclosed object `T` to be arbitrarily dereferenced to *any* inner type reachable from that object `T` - * Supports much more arbitrary and complex deref functions than `std::ops::Deref` -* Canonicalized the content of Theseus's `x86_64-unknown-theseus` target spec - * Codegen flags are now moved into the target spec, making out-of-tree builds easier and more repeatable - * Target specs are now ready to be upstreamed into `rustc` as built-in targets -* `owned_borrowed_trait`: a new library crate that abstracts over Owned values vs. Borrowed refs - * Uses traits and marker types instead of the existing enum-based designs (like `Cow`) - * Doesn't require `Clone` or care about any characteristics of the inner type `T` - * Allows you to use generics and associated `const`s to conditionally branch based on whether an owned value or borrowed reference was passed into a function - * Allows you to return a different (generic) type from a function based on whether an owned value or borrowed reference was passed in - -Check out the [Theseus OS blog](https://www.theseus-os.com/) for more. - -### [`Andy-Python-Programmer/Aero`](https://github.com/Andy-Python-Programmer/aero) - -(Section written by [@Andy-Python-Programmer](https://github.com/Andy-Python-Programmer)) - -Aero is a new modern, experimental, unix-like operating system following the monolithic kernel design. Supporting modern PC features such as long mode, 5-level paging, and SMP (multicore), to name a few. - -This month, Aero successfully managed to get [`mesa-demos`](https://github.com/freedesktop/mesa-demos) and [`alacritty`](https://github.com/alacritty/alacritty) running. - -![Aero](aero.png) - -In addition, `deps.sh` script was added to automate the process of installing the required dependencies on the host to build the sysroot. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog in the past two months: - -- [[Chinese] Translate posts 5-8 and improve translation of posts 1-4](https://github.com/phil-opp/blog_os/pull/1131) - - Thanks to [@liuyuran](https://github.com/liuyuran) for creating this translation. - - Thanks to [@JiangengDong](https://github.com/JiangengDong) and [@Byacrya](https://github.com/Byacrya) for reviewing. -- [[Translation][Korean] post-06](https://github.com/phil-opp/blog_os/pull/1175) and [[Translation][Korean] post-07](https://github.com/phil-opp/blog_os/pull/1177) - - Thanks to [@JOE1994](https://github.com/JOE1994) for creating these translations. - - Thanks to [@dalinaum](https://github.com/dalinaum) for reviewing. -- [French translation's links fixes](https://github.com/phil-opp/blog_os/pull/1166) (thanks to [@alaincao](https://github.com/alaincao)) -- [Specify latest 0.9 patch version of `bootloader`](https://github.com/phil-opp/blog_os/pull/1176) (thanks to [@seewishnew](https://github.com/seewishnew)) - - - -## Join Us? - -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). diff --git a/content/this-month/2023-01/index.md b/content/this-month/2023-01/index.md deleted file mode 100644 index 271a97af..00000000 --- a/content/this-month/2023-01/index.md +++ /dev/null @@ -1,267 +0,0 @@ -+++ -title = "This Month in Rust OSDev: January 2023" -date = 2023-02-07 - -[extra] -month = "January 2023" -editors = ["phil-opp", "berkus"] -+++ - -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. - - - -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. - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Stabilize `abi_efiapi` feature](https://github.com/rust-lang/rust/pull/105795) -- [Add checks for the signature of the `start` lang item](https://github.com/rust-lang/rust/pull/106092) -- [default OOM handler: use non-unwinding panic, to match std handler](https://github.com/rust-lang/rust/pull/106045) - -## Announcements, News, and Blog Posts - - - -- [A GUI installer for redox is coming soon, written in iced!](https://www.reddit.com/r/rust/comments/109qm9j/media_a_gui_installer_for_redox_is_coming_soon/) -- [cargo-show-asm 0.2.10](https://www.reddit.com/r/rust/comments/107h9ay/cargoshowasm_0210_new_and_improved_all_over_the/) -- [RustyHermit @ FOSDEM 2023: A Rust-Based, modular Unikernel for MicroVMs](https://fosdem.org/2023/schedule/event/rustunikernel/) - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@rybot666](https://github.com/rybot666) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. - -We merged lots of improvements this month: - -#### Features - -- [Load ramdisk feature](https://github.com/rust-osdev/bootloader/pull/302) -- [Add support for a boot configuration file](https://github.com/rust-osdev/bootloader/pull/326) -- [Make log level configurable](https://github.com/rust-osdev/bootloader/pull/303) -- [Add support for logging to serial port (configurable)](https://github.com/rust-osdev/bootloader/pull/314) -- [Add `bios` and `uefi` cargo features](https://github.com/rust-osdev/bootloader/pull/304) -- [Add a `FrameBuffer::into_buffer` method for taking ownership](https://github.com/rust-osdev/bootloader/pull/319) -- [Implement faster bios builds](https://github.com/rust-osdev/bootloader/pull/324) -- [Support higher half position independent kernels](https://github.com/rust-osdev/bootloader/pull/289) - -#### Fixes - -- [Correctly allocate last frame in memory descriptor](https://github.com/rust-osdev/bootloader/pull/316) -- [Fix: treat `kernel_slice_end` as an exclusive bound when checking for overlaps](https://github.com/rust-osdev/bootloader/pull/334) -- [Map BIOS stage-4 at lower address to avoid conflicts with the kernel](https://github.com/rust-osdev/bootloader/pull/337) -- [Correctness fixes for stage2](https://github.com/rust-osdev/bootloader/pull/328) -- [Fix loading of boot configuration](https://github.com/rust-osdev/bootloader/pull/342) - -#### Docs - -- [Fix Create Disk Image Example](https://github.com/rust-osdev/bootloader/pull/300) -- [Make a link in the documentation clickable](https://github.com/rust-osdev/bootloader/pull/341) - -#### Other - -- [Fix spelling and add a check](https://github.com/rust-osdev/bootloader/pull/340) -- [Check for breaking changes on CI](https://github.com/rust-osdev/bootloader/pull/325) -- [Cancel in progress PR builds when a new commit is pushed for that PR](https://github.com/rust-osdev/bootloader/pull/322) -- [Remove dependency on `time` crate](https://github.com/rust-osdev/bootloader/pull/332) -- [[test runner] Print QEMU output directly instead of waiting until it finishes](https://github.com/rust-osdev/bootloader/pull/333) -- [Fix warnings from Clippy](https://github.com/rust-osdev/bootloader/pull/336) -- [Test framework: Don't inherit `stdin` when spawning QEMU](https://github.com/rust-osdev/bootloader/pull/339) - -Thanks to [@jasoncouture](https://github.com/jasoncouture), [@Stary2001](https://github.com/Stary2001), [@AlexJMohr](https://github.com/AlexJMohr), [@Freax13](https://github.com/Freax13), [@tsoutsman](https://github.com/tsoutsman), and [@asensio-project](https://github.com/asensio-project) for their contributions! - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -The `uefi` 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 changes last month: - -#### Features - -- [Implement the rest of the TPM v1 interface](https://github.com/rust-osdev/uefi-rs/pull/631) -- [Implement the rest of the TPM v2 interface](https://github.com/rust-osdev/uefi-rs/pull/634) -- [Release uefi-macros-0.10.0, uefi-0.19.0, and uefi-services-0.16.0](https://github.com/rust-osdev/uefi-rs/pull/642) -- [Add PAGE_SIZE constant and update MemoryProtection protocol docs](https://github.com/rust-osdev/uefi-rs/pull/645) - -#### Fixes - -- [PXE: Fix BaseCode::discover optional argument](https://github.com/rust-osdev/uefi-rs/pull/630) -- [Fix warnings from `abi_efiapi` stabilization](https://github.com/rust-osdev/uefi-rs/pull/635) -- [uefi: Fix protocol functions to work with unsized protocols](https://github.com/rust-osdev/uefi-rs/pull/643) -- [Fix new lints related to derives on a packed struct](https://github.com/rust-osdev/uefi-rs/pull/646) - -#### Docs - -- [uefi: Update MSRV in the readme](https://github.com/rust-osdev/uefi-rs/pull/626) -- [book: Fix link to handles page](https://github.com/rust-osdev/uefi-rs/pull/627) -- [changelog: Move some macro-related changes to correct section](https://github.com/rust-osdev/uefi-rs/pull/639) - -#### Other - -- [Minor alloc-related cleanups](https://github.com/rust-osdev/uefi-rs/pull/623) -- [uefi: Remove useless padding field](https://github.com/rust-osdev/uefi-rs/pull/629) -- [Move some util code from TCG to a new top-level module](https://github.com/rust-osdev/uefi-rs/pull/640) -- [media/test: add integration test for creating a directory](https://github.com/rust-osdev/uefi-rs/pull/625) -- [ci: Update checkout action to latest version](https://github.com/rust-osdev/uefi-rs/pull/633) -- [test-runner: Simplify and slightly refactor the disk test](https://github.com/rust-osdev/uefi-rs/pull/641) -- [ci: fix book/deploy in forks](https://github.com/rust-osdev/uefi-rs/pull/644) - -Thanks to [@nsemmel](https://github.com/nsemmel) and [@liferooter](https://github.com/liferooter) for their contributions! - - -### [`volatile`](https://github.com/rust-osdev/volatile) -Maintained by [@phil-opp](https://github.com/phil-opp) - -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. - -We merged the following PRs this month: - -- [Fix UB in slice methods when `Deref` returns different references](https://github.com/rust-osdev/volatile/pull/27) (published as `v0.4.6`) -- [various improvements for the new design](https://github.com/rust-osdev/volatile/pull/28) - -Thanks to [@Freax13](https://github.com/Freax13) for their contributions! - -We are still working on a new, safer design. This month, we opened PR [#29](https://github.com/rust-osdev/volatile/pull/29) to compare and discuss two alternative designs. The main question is whether the provided `VolatilePtr` type should implement `Copy` or `Send`. Only one of these trait implementations is possible, otherwise there could be data races that lead to undefined behavior. Since both variants have valid use cases, the latest proposal is to implement two different types with conversion methods between them. We haven't reached a decision yet, so if anyone has more input on this, please join the discussion. - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -Maintained by [@phil-opp](https://github.com/phil-opp), [@josephlr](https://github.com/orgs/rust-osdev/people/josephlr), [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13), and [@rybot666](https://github.com/orgs/rust-osdev/people/rybot666) - -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. - -We merged the following changes in January: - -- [Set `repr` to transparent for various types](https://github.com/rust-osdev/x86_64/pull/402) -- [Check for breaking changes on CI](https://github.com/rust-osdev/x86_64/pull/401) - - -## Other Projects - -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. - - - -### [`metta-systems/vesper`](https://github.com/metta-systems/vesper) - -(Section written by [@berkus](https://github.com/berkus)) - -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. - -The kernel is in very early stages of development... - -And for the past few months I've been on and off involved in deciphering a mystical miscompilation problem. I've managed to summarize it in a [ticket to rustc](https://github.com/rust-lang/rust/issues/102849). - -The most minimal reproduction scenario triggers when I use a format_args!() macro in my code and a nightly version later than 2022-08-12. - -Here's a key [snippet](https://github.com/metta-systems/vesper/blob/85fe40f603e500518af96d6aa922f7ecfa57f0c5/src/main.rs#L117-L119): - -``` -// if you keep this line, it works when compiled -// via rustc 2022-08-12 and breaks on 2022-08-13 and all the versions past that. -// if you comment this line out, on 2022-08-13 everything else starts to work. -uart.write_fmt(format_args_nl!("Lets {}!", "go")).ok(); -``` - -There's also a [QEMU-only reproduction code](https://github.com/metta-systems/vesper/blob/c06d89a23c5c2b0cd3ed5d270aec10054216ea5a/src/main.rs), which is much smaller, as it reuses `armv8a_semihosting` and `armv8a_panic_semihosting` crates for pretty much everything. - -The behavior is [the same](https://github.com/metta-systems/vesper/blob/c06d89a23c5c2b0cd3ed5d270aec10054216ea5a/src/main.rs#L29-L31) though: -``` -// if you don't comment it out, it works on 08-12 and breaks on 08-13. -// if you comment this line out on 08-13 everything else starts to work. -armv8a_semihosting::hprintln!("Lets {}!", "go").ok(); -``` - -"Working" here means the kernel boots and runs through to the last panic line: - -``` -[cargo-make] INFO - Running Task: qemu -🚜 Run QEMU -M raspi3b -semihosting with vesper/target/nucleus.bin -Letsgo! -Lets go! -Lets go 2! -panicked at 'Off you go!', src/main.rs:34:5 -``` - -And "not working" is the kernel either panicking on boot in arch64, for which I've extracted panic message but I have low confidence this is what actually happens - panic was in once_cell detecting it is initializing a second time, which I discounted as potentially just a bug in linker script layout and not an actual code generation bug. This code is even completely removed in the latest reproduction (no once_cells) but the kernel still crashes before it even can write anything to serial. - -In the qemu repro it's even weirder: - -``` -🚜 Run QEMU -M raspi3b -semihosting with vesper/target/nucleus.bin - -``` - -No output - because hstdout_str() function from armv8a_semihosting crate fails to open semihosting stdout handle - syscall returns -1. Why would that happen simply by a compiler version change - is the biggest question. - -I'm yet to find what am I missing here - assuming this is my own mistake and not a compiler fault, because it would've been noticed by everybody else then? But who knows, maybe you can spot something - drop me a line if you see anything suspicious, I'm pretty much out of ideas here. - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Fix broken links](https://github.com/phil-opp/blog_os/pull/1188) - -Thanks a lot to [@kennystrawnmusic](https://github.com/kennystrawnmusic) for this contribution! - -We also have an open pull request for a [Chinese translation of the _Paging Implementation_ post](https://github.com/phil-opp/blog_os/pull/1189). -We're still looking for a reviewer, so if you're speaking Chinese we would appreciate if you could take a look. -Thanks! - -Since I mostly worked on the `bootloader` crate this month, I haven't made much process on the upcoming third edition of the blog yet. -I'll do my best to have something ready soon! - -## Join Us? - -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). diff --git a/content/this-month/2023-02/index.md b/content/this-month/2023-02/index.md deleted file mode 100644 index d236d2e8..00000000 --- a/content/this-month/2023-02/index.md +++ /dev/null @@ -1,149 +0,0 @@ -+++ -title = "This Month in Rust OSDev: February 2023" -date = 2023-03-08 - -[extra] -month = "February 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -### [`rust-lang/rust`](https://github.com/rust-lang/rust) - -- [Add `kernel-address` sanitizer support for freestanding targets](https://github.com/rust-lang/rust/pull/99679) -- [Stabilize `#![feature(target_feature_11)]`](https://github.com/rust-lang/rust/pull/99767). Allows enabling target features such as `avx2` for specific functions. -- [Add support for QNX Neutrino to standard library](https://github.com/rust-lang/rust/pull/106673) - -### [Cargo: Add '-C' flag for changing current dir before build](https://github.com/rust-lang/cargo/pull/10952) - - This new flag makes `cargo` switch to the specified directory before building. - 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). - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [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) -- [Writing an OS in Rust to run on RISC-V](https://gist.github.com/cb372/5f6bf16ca0682541260ae52fc11ea3bb) - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -- [uefi-macros: Fix error tests](https://github.com/rust-osdev/uefi-rs/pull/648) -- [Release `uefi-0.19.1`](https://github.com/rust-osdev/uefi-rs/pull/652) -- [Various fixes for tests under Windows](https://github.com/rust-osdev/uefi-rs/pull/651) -- [uefi: Remove mentions of ruyntime usage from GOP docs](https://github.com/rust-osdev/uefi-rs/pull/613) -- [uefi: Rework `exit_boot_services` API](https://github.com/rust-osdev/uefi-rs/pull/653) -- [Add component name protocols](https://github.com/rust-osdev/uefi-rs/pull/656) -- [uefi: Export `cstr8`, `cstr16`, and entry macros from the root](https://github.com/rust-osdev/uefi-rs/pull/657) -- [Implement `Deref` for `HandleBuffer` and `ProtocolsPerHandle`](https://github.com/rust-osdev/uefi-rs/pull/659) -- [uefi: Improve `Input::read_key` docstring](https://github.com/rust-osdev/uefi-rs/pull/664) -- [Make more tests fail if protocol is missing](https://github.com/rust-osdev/uefi-rs/pull/665) -- [xtask: Fully drop support for build-std](https://github.com/rust-osdev/uefi-rs/pull/585) -- [ci: Simplify the VM jobs](https://github.com/rust-osdev/uefi-rs/pull/668) -- [uefi-macros: Improve entry macro errors](https://github.com/rust-osdev/uefi-rs/pull/670) -- [test-runner: Make `unstable` an optional feature](https://github.com/rust-osdev/uefi-rs/pull/667) -- [xtask: Switch fatfs to latest crates.io release](https://github.com/rust-osdev/uefi-rs/pull/672) - -### [`bootloader`](https://github.com/rust-osdev/bootloader) - -- [Create kernel stack with correct size and set up a guard page](https://github.com/rust-osdev/bootloader/pull/335) - -### [`acpi`](https://github.com/rust-osdev/acpi) - -- [Update aml_tester to clap 4](https://github.com/rust-osdev/acpi/pull/149) -- [Add stub implementations for Handler, read_u16 etc.](https://github.com/rust-osdev/acpi/pull/152) -- [Add def_alias, alias shares handle with target](https://github.com/rust-osdev/acpi/pull/153) -- [Update syntax of literal zero](https://github.com/rust-osdev/acpi/pull/148) - -Thanks to [@rw-vanc](https://github.com/rw-vanc) for their contributions! - -### [`spinning_top`](https://github.com/rust-osdev/spinning_top) - -- [Upgrade lock_api to 0.4.7](https://github.com/rust-osdev/spinning_top/pull/13) (published as `v0.2.5`) - -Thanks to [@jannic](https://github.com/jannic) for this contribution! - -### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) - -- [Remove features `const_mut_refs` and `use_spin_nightly`](https://github.com/rust-osdev/linked-list-allocator/pull/77) - -Thanks to [@jannic](https://github.com/jannic) for this contribution! - - -## Other Projects - -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. - - - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [[Translation][Chinese] post-09 (edition-2)](https://github.com/phil-opp/blog_os/pull/1189) - - Thanks to [@weijiew](https://github.com/weijiew) for creating this translation and thanks to [@liuyuran](https://github.com/liuyuran) for reviewing it! -- [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)) - -## Join Us? - -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). diff --git a/content/this-month/2023-03/index.md b/content/this-month/2023-03/index.md deleted file mode 100644 index 57b4504c..00000000 --- a/content/this-month/2023-03/index.md +++ /dev/null @@ -1,342 +0,0 @@ -+++ -title = "This Month in Rust OSDev: March 2023" -date = 2023-04-08 - -[extra] -month = "March 2023" -editors = ["phil-opp", "phip1611"] -+++ - -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. - - - -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. - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Partial stabilization of `once_cell`](https://github.com/rust-lang/rust/pull/105587) -- [Support for Fuchsia RISC-V target](https://github.com/rust-lang/rust/pull/108722) - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [Klint: Compile-time Detection of Atomic Context Violations for Kernel Rust Code](https://www.memorysafety.org/blog/gary-guo-klint-rust-tools/) -- [Writing a Linux Driver for QEMU’s Debugcon Device](https://phip1611.de/blog/writing-a-linux-driver-for-qemus-debugcon-device/) \ - In this blogpost, [@phip1611](https://github.com/phip1611) shows you can - write a Linux driver for the QEMU debugcon device. Although, the driver - still uses C, it is a wonderful example to demonstrate a minimal yet useful - driver. Additionally, it is a good starting point for a rewrite in Rust, once - the Rust tooling and API bindings in the kernel are more mature. Perhaps, - the rewrite in Rust is your next learning project? - - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) - -Maintained by [@IsaacWoods](https://github.com/IsaacWoods), [@phip1611](https://github.com/phip1611), [@robert-w-gries](https://github.com/robert-w-gries), [@ahmedcharles](https://github.com/ahmedcharles), and [@Caduser2020](https://github.com/Caduser2020) - -The `multiboot2` crate provides abstraction types for the multiboot information -structure (MBI) of multiboot2 bootloaders. The latest release of the -`multiboot2`-crate is now `v0.15.0` (was `v0.14.0`), which fixed a -[bug](https://github.com/rust-osdev/multiboot2/pull/119). Furthermore, the -documentation was improved. However, the biggest change is that the library now -allows the parsing of custom multiboot tags, which are not prohibited by the -spec. For a full changelog, please refer to the -[GitHub repo](https://github.com/rust-osdev/multiboot2/blob/main/multiboot2/Changelog.md). - -#### CI Refactoring -In the CI, we want to run many tests that cover a big portion of the cartesian -product of the following properties: -- rust version: stable, nightly, msrv -- type: build, test, style check -- target: default, no_std - -As I (@phip1611) was annoyed by all the boilerplate configuration and -repetition, I've investigated new ways to improve that situation and created -a reusable workflow can be used like that: -```yaml -jobs: - build_msrv: - name: build (msrv) - uses: ./.github/workflows/_build-rust.yml - with: - rust-version: 1.56.1 - do-style-check: false - - style_nightly: - name: style (nightly) - needs: build_nightly - uses: ./.github/workflows/_build-rust.yml - with: - rust-version: nightly - do-style-check: true - do-test: false -``` - -The `./.github/workflows/_build-rust.yml` workflow abstracts setting up the -toolchain, setting up a cargo cache for a faster CI, and, depending on the -configuration, running `cargo test|clippy|doc|build|fmt`. I think that the -outcome is quite nice and might also help others. Feel free to check out the -corresponding [PR](https://github.com/rust-osdev/multiboot2/pull/126). - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -#### Features - -- [debug: add debug implementation for file-related structs](https://github.com/rust-osdev/uefi-rs/pull/624) -- [uefi: Add `delete_variable()` helper](https://github.com/rust-osdev/uefi-rs/pull/682) -- [uefi: Drop `'boot` lifetime from Output protocol](https://github.com/rust-osdev/uefi-rs/pull/689) -- [error: enable `core::error::Error` for all error payloads](https://github.com/rust-osdev/uefi-rs/pull/693) -- [Remove some more protocol lifetime parameters](https://github.com/rust-osdev/uefi-rs/pull/694) -- [uefi: Implement `Borrow`/`ToOwned` for `CString16`/`CStr16`](https://github.com/rust-osdev/uefi-rs/pull/695) -- [drop deprecations that are at least in one release](https://github.com/rust-osdev/uefi-rs/pull/692) -- [Add Sorted Iterator for the UEFI Memory Map (Issue#661)](https://github.com/rust-osdev/uefi-rs/pull/662) -- [Switch to the stable channel :tada: ](https://github.com/rust-osdev/uefi-rs/pull/688) -- [Merge changes from the 0.20 release](https://github.com/rust-osdev/uefi-rs/pull/701) -- [Rename `global_allocator` module and change scope of `global_allocator` feature](https://github.com/rust-osdev/uefi-rs/pull/705) -- [debug everywhere](https://github.com/rust-osdev/uefi-rs/pull/699) -- [cfg: Add ESRT GUID](https://github.com/rust-osdev/uefi-rs/pull/745) - -#### Other Improvements - -- [uefi-macros: Use a more precise error span](https://github.com/rust-osdev/uefi-rs/pull/679) -- [build(deps): update syn requirement from 1.0.74 to 2.0.4](https://github.com/rust-osdev/uefi-rs/pull/704) -- [Update pull request template](https://github.com/rust-osdev/uefi-rs/pull/709) -- [uefi: Remove static references from `SystemTable` implementation](https://github.com/rust-osdev/uefi-rs/pull/710) -- [Set rust-version = 1.68 in all public packages](https://github.com/rust-osdev/uefi-rs/pull/712) -- [uefi: Fill in some more RuntimeServices fn pointers](https://github.com/rust-osdev/uefi-rs/pull/717) -- [uefi: Add opaque_type macro](https://github.com/rust-osdev/uefi-rs/pull/718) -- [uefi: Consistently set `repr(transparent)` on bitflags](https://github.com/rust-osdev/uefi-rs/pull/719) - -#### Docs - -- [uefi-macros: Make `entry` example more compatible with stable](https://github.com/rust-osdev/uefi-rs/pull/678) -- [uefi: Update package docstring](https://github.com/rust-osdev/uefi-rs/pull/683) -- [Rework "Building UEFI programs" sections in the readmes](https://github.com/rust-osdev/uefi-rs/pull/680) -- [uefi: Improve clarity of global_allocator](https://github.com/rust-osdev/uefi-rs/pull/684) - -#### CI & Testing - -
show changes - -- [xtask: Add `--unstable` option to `cargo xtask doc`](https://github.com/rust-osdev/uefi-rs/pull/673) -- [ci: Increase Windows job timeout](https://github.com/rust-osdev/uefi-rs/pull/671) -- [xtask: Enable strict provenance checks in Miri](https://github.com/rust-osdev/uefi-rs/pull/666) -- [ci: Add a nightly_channel job](https://github.com/rust-osdev/uefi-rs/pull/674) -- [xtask: Add option to skip uefi-macros tests](https://github.com/rust-osdev/uefi-rs/pull/677) -- [ci: add spellcheck with "typos"](https://github.com/rust-osdev/uefi-rs/pull/687) -- [xtask: Add OVMF_CODE/OVMF_VARS env vars](https://github.com/rust-osdev/uefi-rs/pull/700) -- [OVMF: enable "cargo xtask run" under NixOS](https://github.com/rust-osdev/uefi-rs/pull/690) -- [add Cargo.lock](https://github.com/rust-osdev/uefi-rs/pull/707) -- [ci: MSRV fixes](https://github.com/rust-osdev/uefi-rs/pull/706) -- [ci: Enable caching](https://github.com/rust-osdev/uefi-rs/pull/702) -- [ci: Drop test_latest_release job](https://github.com/rust-osdev/uefi-rs/pull/708) -- [xtask: Turn off some unnecessary dep features](https://github.com/rust-osdev/uefi-rs/pull/711) -- [Add uefi to workspace members](https://github.com/rust-osdev/uefi-rs/pull/713) -- [dependabot: Ignore patch updates](https://github.com/rust-osdev/uefi-rs/pull/730) -- [dependabot: Fix config syntax](https://github.com/rust-osdev/uefi-rs/pull/732) -- [dependabot: Fix config syntax](https://github.com/rust-osdev/uefi-rs/pull/738) -- [ci: Increase Windows timeout to 10 minutes](https://github.com/rust-osdev/uefi-rs/pull/739) -- [Format `use` consistently](https://github.com/rust-osdev/uefi-rs/pull/743) -- [test-runner: Speculative fix for Windows CI timeout](https://github.com/rust-osdev/uefi-rs/pull/744) - -
- -#### Dependencies - -
show changes - -- [xtask: Upgrade to syn 2.0](https://github.com/rust-osdev/uefi-rs/pull/698) -- [build(deps): bump clap from 4.0.26 to 4.1.13](https://github.com/rust-osdev/uefi-rs/pull/722) -- [build(deps): bump tempfile from 3.3.0 to 3.4.0](https://github.com/rust-osdev/uefi-rs/pull/728) -- [build(deps): bump clap from 4.1.13 to 4.2.0](https://github.com/rust-osdev/uefi-rs/pull/740) -- [build(deps): bump tempfile from 3.4.0 to 3.5.0](https://github.com/rust-osdev/uefi-rs/pull/742) - -
    - - -Thanks to [@hughsie](https://github.com/hughsie), [@nicholasbishop](https://github.com/nicholasbishop), [@JohnAZoidberg](https://github.com/JohnAZoidberg), [@phip1611](https://github.com/phip1611), [@JarlEvanson](https://github.com/JarlEvanson), and [@dependabot[bot]](https://github.com/apps/dependabot) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -- [Remove unused `doc_cfg` feature](https://github.com/rust-osdev/x86_64/pull/408) -- [Enable `doc_auto_cfg` on `docs.rs` builds](https://github.com/rust-osdev/x86_64/pull/407) -- [run xtest bash shell](https://github.com/rust-osdev/x86_64/pull/409) -- [seal off the `PageSize` trait](https://github.com/rust-osdev/x86_64/pull/404) -- [Add `Descriptor::dpl` const method and use it in GDT construction](https://github.com/rust-osdev/x86_64/pull/410) -- [Set permissions to github workflows](https://github.com/rust-osdev/x86_64/pull/412) -- [Create a Security Policy](https://github.com/rust-osdev/x86_64/pull/415) - -Thanks to [@joycebrum](https://github.com/joycebrum) for their contributions! - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -- [acpi: Improve memory mapping usage](https://github.com/rust-osdev/acpi/pull/134) -- [aml: Add `l_and` parser and opcode](https://github.com/rust-osdev/acpi/pull/157) -- [acpi: Add missing and new fields to GIC CPU interface structure](https://github.com/rust-osdev/acpi/pull/156) -- [Add hack to get `aml` compiling on 32-bit platforms](https://github.com/rust-osdev/acpi/pull/159) -- [aml: Do not require unstable features from rustc that are not used](https://github.com/rust-osdev/acpi/pull/168) -- [acpi: Fix compile error when allocator_api is not enabled](https://github.com/rust-osdev/acpi/pull/160) - -Thanks to [@A0lson](https://github.com/A0lson), [@rcerc](https://github.com/rcerc), and [@rw-vanc](https://github.com/rw-vanc) for their contributions! - - -### [`pci_types`](https://github.com/rust-osdev/pci_types) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -- [pci-pci bridge header](https://github.com/rust-osdev/pci_types/pull/7) -- [remove `Send` requirement from `ConfigRegionAccess`](https://github.com/rust-osdev/pci_types/pull/8) - -Thanks to [@devsnek](https://github.com/devsnek) for their contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) - -- [Run cargo update](https://github.com/rust-osdev/bootloader/pull/347) -- [Minor improvements to `BootConfig`](https://github.com/rust-osdev/bootloader/pull/349) -- [Simplified disk builder](https://github.com/rust-osdev/bootloader/pull/320) -- [Release version `0.11.1`](https://github.com/rust-osdev/bootloader/pull/350) -- [Release `v0.11.2`](https://github.com/rust-osdev/bootloader/pull/351) -- [Fix docs.rs build](https://github.com/rust-osdev/bootloader/pull/358) -- [Release `v0.11.3`](https://github.com/rust-osdev/bootloader/pull/359) - -Thanks to [@jasoncouture](https://github.com/jasoncouture) for their contributions! - -### [`vga`](https://github.com/rust-osdev/vga) -Maintained by [@RKennedy9064](https://github.com/RKennedy9064) - -- [Access VGA memory at arbitrary address](https://github.com/rust-osdev/vga/pull/27) -- [Fix bug in `TextModeColor::set_foreground`](https://github.com/rust-osdev/vga/pull/28) - -Thanks to [@bendudson](https://github.com/bendudson) for their contributions! - -### [`pic8259`](https://github.com/rust-osdev/pic8259) -Maintained by [@phil-opp](https://github.com/phil-opp) - -- [Minor typo corrections](https://github.com/rust-osdev/pic8259/pull/2) - -Thanks to [@Virux](https://github.com/Virux) for their contributions! - - -### [`volatile`](https://github.com/rust-osdev/volatile) -Maintained by [@phil-opp](https://github.com/phil-opp) - -- [Update build.yml to use minimal scoped permissions](https://github.com/rust-osdev/volatile/pull/33) -- [Create a Security Policy](https://github.com/rust-osdev/volatile/pull/35) - -Thanks to [@joycebrum](https://github.com/joycebrum) for their contributions! - -## Other Projects - -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. - - - -### [`phip1611/paging-calculator`](https://github.com/phip1611/paging-calculator) - -(Section written by [@phip1611](https://github.com/phip1611)) - -In the November newsletter, I announced the initial release of my -`paging-calculator` CLI utility. Recently, I released a new version, which now -covers page table indices for x86, x86 with physical address extension (PAE), -x86_64, and x86_64 with 5 levels. For example, just type `$ paging-calculator 0xdeadbeef x86` -and `$ paging-calculator 0xdeadbeef x86 --pae`and compare the result. You can -install it from [crates.io](https://crates.io/crates/paging-calculator) or with -the [`pkgs.paging-calculator` attribute](https://github.com/NixOS/nixpkgs/blob/1a165401fe904b9cd89bd731e6e8372883652c7d/pkgs/development/tools/paging-calculator/default.nix), -if you are a [Nix](https://nixos.org/) user. - -![Screenshot: Paging Calculator CLI Utility](screenshot-paging-calculator-x86-pae.png) - -### [`xiaoyang-sde/rust-kernel-riscv`](https://github.com/xiaoyang-sde/rust-kernel-riscv) - -(Section written by [@xiaoyang-sde](https://github.com/xiaoyang-sde)) - -[`rust-kernel-riscv`](https://github.com/xiaoyang-sde/rust-kernel-riscv) is an experimental operating system kernel built using Rust's asynchronous programming model to schedule threads in both kernel and user space. This approach allows for more efficient context switching and eliminates the need for allocating a separate kernel stack for each user process. In its current iteration, the kernel provides a basic shell capable of running several executables that demonstrate various kernel mechanisms. - -The kernel provides a built-in executor, which manages the scheduling and execution of threads. Threads are executed for a time slice before an exception or interrupt occurs, and then the executor switches to another thread. To give you a better understanding, I included the `async` function that represents the lifetime of a user thread below, and I wrote a detailed [design document](https://github.com/xiaoyang-sde/rust-kernel-riscv#design-document). - -```rs -async fn thread_loop(thread: Arc) { - loop { - let trap_context = thread.state().lock().user_trap_context_mut(); - _enter_user_space(trap_context, thread.satp()); - - // Invokes related methods to handle the exception or interrupt, - // which returns a variant of the `ControlFlow` enum - - match control_flow { - ControlFlow::Continue => continue, - ControlFlow::Yield => yield_now().await, - ControlFlow::Exit(exit_code) => { - thread.exit(exit_code); - break; - } - } - } -} -``` - -The idea behind `rust-kernel-riscv` was inspired by Phil's recent [blog post](https://os.phil-opp.com/async-await/) on using `async/await` in the kernel. Thanks Phil for his invaluable support to the Rust community! - -## Join Us? - -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). diff --git a/content/this-month/2023-04/index.md b/content/this-month/2023-04/index.md deleted file mode 100644 index a4a9c7e3..00000000 --- a/content/this-month/2023-04/index.md +++ /dev/null @@ -1,179 +0,0 @@ -+++ -title = "This Month in Rust OSDev: April 2023" -date = 2023-05-05 - -[extra] -month = "April 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -_No updates were proposed for this section this month._ - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [Rust Kernel Programming](https://web.archive.org/web/20241127063903/https://coderjoshdk.github.io/posts/Rust-Kernel-Programming.html) -- [Linux Kernel Rust Modules](https://tomcat0x42.me/linux/rust/2023/04/07/linux-kernel-rust-modules.html) -- [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/) -- [Felix, an x86 hobby OS written in Rust](https://www.reddit.com/r/rust/comments/12gxh8b/felix_an_x86_hobby_os_written_in_rust/) - - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -#### Features - -- [Introducing a high-level FS abstraction](https://github.com/rust-osdev/uefi-rs/pull/472) -- [uefi: debug: add DebugPort protocol](https://github.com/rust-osdev/uefi-rs/pull/755) -- [uefi: Panic if an error is created from Status::SUCCESS](https://github.com/rust-osdev/uefi-rs/pull/749) -- [uefi-macros: Drop !Send and !Sync from unsafe_protocol macro](https://github.com/rust-osdev/uefi-rs/pull/758) -- [cstr[ing]16: convenience functions](https://github.com/rust-osdev/uefi-rs/pull/751) -- [uefi: Clean up some Status -> Result conversions](https://github.com/rust-osdev/uefi-rs/pull/767) -- [Use the uguid crate to replace the `Guid` struct and `guid!` macro](https://github.com/rust-osdev/uefi-rs/pull/777) -- [gop: Derive PartialEq on ModeInfo](https://github.com/rust-osdev/uefi-rs/pull/773) -- [Add RngProtocol to `uefi-raw` and use it from `uefi`](https://github.com/rust-osdev/uefi-rs/pull/778) -- [uefi: Add get_variable_boxed](https://github.com/rust-osdev/uefi-rs/pull/779) - -#### Docs - -- [uefi: Update Status documentation](https://github.com/rust-osdev/uefi-rs/pull/748) -- [doc: build with --no-deps](https://github.com/rust-osdev/uefi-rs/pull/746) -- [uefi: Minor cleanups in the fs module doc](https://github.com/rust-osdev/uefi-rs/pull/753) - -#### Other - -- [ci: shorter job names](https://github.com/rust-osdev/uefi-rs/pull/750) -- [uefi: consistent use of crate:: over uefi::](https://github.com/rust-osdev/uefi-rs/pull/752) -- [Allow passing a constant's path into unsafe_protocol](https://github.com/rust-osdev/uefi-rs/pull/760) -- [uefi-raw: Add mostly-empty package](https://github.com/rust-osdev/uefi-rs/pull/761) -- [ci: Fix book token permission](https://github.com/rust-osdev/uefi-rs/pull/763) -- [Move newtype_enum macro to uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/764) -- [uefi-macros: Fix compiler test for Rust 1.69](https://github.com/rust-osdev/uefi-rs/pull/765) -- [Move `Status` to `uefi-raw`, along with related API changes](https://github.com/rust-osdev/uefi-rs/pull/768) - -Thanks to [@JohnAZoidberg](https://github.com/JohnAZoidberg) and [@felipebalbi](https://github.com/felipebalbi) for their contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) - -- [Fixed bug stemming from treating an exclusive range as an inclusive ranges](https://github.com/rust-osdev/bootloader/pull/362) -- [Update `uefi` dependency to `v0.20`](https://github.com/rust-osdev/bootloader/pull/360) -- [Implemented sorting of uefi memory maps #315](https://github.com/rust-osdev/bootloader/pull/365) - -Thanks to [@kennystrawnmusic](https://github.com/kennystrawnmusic) and [@JarlEvanson](https://github.com/JarlEvanson) for their contributions! - - -### [`pic8259`](https://github.com/rust-osdev/pic8259) -Maintained by [@phil-opp](https://github.com/phil-opp) - -- [Added `new_contiguous` implementation for `ChainedPics`](https://github.com/rust-osdev/pic8259/pull/4) - -Thanks to [@rasheedmhd](https://github.com/rasheedmhd) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -- [Don't use third-party Python libraries in release workflow](https://github.com/rust-osdev/x86_64/pull/421) - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -- [aml_tester: Add positional file arguments, in-order parsing and shared namespace](https://github.com/rust-osdev/acpi/pull/151) -- [AML: Add minimal CondRefOf support](https://github.com/rust-osdev/acpi/pull/170) -- [acpi: Allow Madt and Mcfg fields to be accessed without allocator_api](https://github.com/rust-osdev/acpi/pull/161) - -Thanks to [@A0lson](https://github.com/A0lson), and [@rw-vanc](https://github.com/rw-vanc) for their contributions! - - -### [`ucs2-rs`](https://github.com/rust-osdev/ucs2-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -- [ci: Bring in various improvements from uefi-rs](https://github.com/rust-osdev/ucs2-rs/pull/14) -- [Switch to 2021 edition](https://github.com/rust-osdev/ucs2-rs/pull/15) - - - -## Other Projects - -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. - - - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Update `zola` to `v0.17.2`](https://github.com/phil-opp/blog_os/pull/1209) -- [Fix link syntax](https://github.com/phil-opp/blog_os/pull/1210) -- [fix(translation zh-TW): typo](https://github.com/phil-opp/blog_os/pull/1211) (thanks to [@GNITOAHC](https://github.com/GNITOAHC)!) -- [The `#[alloc_error_handler]` attribute was removed](https://github.com/phil-opp/blog_os/pull/1216) -- [Update 'Heap Allocation' post to remove `alloc_error_handler`](https://github.com/phil-opp/blog_os/pull/1217) - -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. - -## Join Us? - -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). diff --git a/content/this-month/2023-05/index.md b/content/this-month/2023-05/index.md deleted file mode 100644 index 4e8f3029..00000000 --- a/content/this-month/2023-05/index.md +++ /dev/null @@ -1,210 +0,0 @@ -+++ -title = "This Month in Rust OSDev: May 2023" -date = 2023-06-06 - -[extra] -month = "May 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -_No updates were proposed for this section this month._ - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [RTIC (The hardware accelerated Rust RTOS) releases v2.0.0!](https://www.reddit.com/r/rust/comments/13xp6q9/rtic_the_hardware_accelerated_rust_rtos_releases/) -- [My Rust OS for microcontrollers now has a dir command](https://www.reddit.com/r/rust/comments/13aittv/media_my_rust_os_for_microcontrollers_now_has_a/) -- [First Rust Code Shows Up in the Windows 11 Kernel](https://www.thurrott.com/windows/windows-11/282995/first-rust-code-shows-up-in-the-windows-11-kernel) -- [May Flowers Spring COSMIC Showers](https://blog.system76.com/post/may-flowers-spring-cosmic-showers/) -- [Ironclad-Shell: a "shell" made in rust and for OS classes](https://www.reddit.com/r/rust/comments/13h1ii0/ironcladshell_a_shell_made_in_rust_and_for_os/) -- [This moment in `mnemos`](https://onevariable.com/blog/mnemos-moment-1/) - - An update/introduction on the current state of `mnemos`, an async-first hobby OS - - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - -[`rust-osdev`]: https://github.com/rust-osdev/about - - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -- [uefi: Switch Rng repr from C to transparent](https://github.com/rust-osdev/uefi-rs/pull/784) -- [uefi: Make MEMORY_DESCRIPTOR_VERSION an associated constant](https://github.com/rust-osdev/uefi-rs/pull/785) -- [macros: allow to create empty cstr8/16 slices](https://github.com/rust-osdev/uefi-rs/pull/786) -- [Add Revision to uefi-raw and use it from uefi](https://github.com/rust-osdev/uefi-rs/pull/783) -- [Add Tpl to uefi-raw and use it from uefi](https://github.com/rust-osdev/uefi-rs/pull/790) -- [Add PhysicalAddress/VirtualAddress to uefi-raw and use them from uefi](https://github.com/rust-osdev/uefi-rs/pull/789) -- [cstr16: add method to get the underlying bytes](https://github.com/rust-osdev/uefi-rs/pull/788) -- [Move various memory types to uefi-raw and re-export in uefi](https://github.com/rust-osdev/uefi-rs/pull/791) -- [uefi/fs: add path and pathbuf abstraction](https://github.com/rust-osdev/uefi-rs/pull/771) -- [uefi: Clear the Vec in DevicePathBuilder::with_vec](https://github.com/rust-osdev/uefi-rs/pull/794) -- [uefi-macros: Restore entry macro tests](https://github.com/rust-osdev/uefi-rs/pull/796) -- [Add LoadedImageDevicePath protocol](https://github.com/rust-osdev/uefi-rs/pull/795) -- [fs: add new error type](https://github.com/rust-osdev/uefi-rs/pull/792) -- [deps: bump bitflags from 1.0 to 2.1](https://github.com/rust-osdev/uefi-rs/pull/714) -- [uefi-macros: Fix entry macro with docstring](https://github.com/rust-osdev/uefi-rs/pull/797) -- [fs: implement remove_dir_all](https://github.com/rust-osdev/uefi-rs/pull/799) -- [uefi-raw: Drop dep on uefi-macros](https://github.com/rust-osdev/uefi-rs/pull/802) -- [Disable some tests on aarch64](https://github.com/rust-osdev/uefi-rs/pull/803) -- [allocator: Use appropriate memory types](https://github.com/rust-osdev/uefi-rs/pull/804) -- [Release branch](https://github.com/rust-osdev/uefi-rs/pull/806) -- [uefi: Rename FileSystemIOErrorContext to IoErrorContext](https://github.com/rust-osdev/uefi-rs/pull/807) -- [uefi: Improve fs error Display impls, drop derive_more](https://github.com/rust-osdev/uefi-rs/pull/808) -- [Move InterfaceType to uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/811) -- [uefi-raw: Add table Header struct](https://github.com/rust-osdev/uefi-rs/pull/810) -- [build(deps): bump bitflags from 2.2.1 to 2.3.1](https://github.com/rust-osdev/uefi-rs/pull/814) -- [Relax bitflags dep version to 2.0.0](https://github.com/rust-osdev/uefi-rs/pull/815) -- [xtask: Drop an unused test file](https://github.com/rust-osdev/uefi-rs/pull/812) -- [xtask: Improve QEMU boot time](https://github.com/rust-osdev/uefi-rs/pull/805) -- [Move some runtime services types to uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/813) -- [Fix and enable uefi-raw unit/doc tests](https://github.com/rust-osdev/uefi-rs/pull/816) -- [Add Time to uefi-raw and use it from uefi](https://github.com/rust-osdev/uefi-rs/pull/817) -- [uefi-raw: Add Char8/Char16](https://github.com/rust-osdev/uefi-rs/pull/809) -- [uefi: Fix use of tuples in pointer structs](https://github.com/rust-osdev/uefi-rs/pull/822) -- [build(deps): bump clap from 4.2.7 to 4.3.0](https://github.com/rust-osdev/uefi-rs/pull/823) -- [uefi(boot_services): add `install_configuration_table`](https://github.com/rust-osdev/uefi-rs/pull/821) -- [xtask: Add check-raw](https://github.com/rust-osdev/uefi-rs/pull/819) -- [uefi-raw: Add Update Capsule types](https://github.com/rust-osdev/uefi-rs/pull/818) -- [Download OVMF files rather than relying on distro package](https://github.com/rust-osdev/uefi-rs/pull/798) -- [Export FileInfoCreationError](https://github.com/rust-osdev/uefi-rs/pull/831) -- [Move EventType to uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/833) -- [uefi: Derive Eq for Handle](https://github.com/rust-osdev/uefi-rs/pull/836) -- [Add `RuntimeServices` definition to `uefi-raw` and use it from `uefi`](https://github.com/rust-osdev/uefi-rs/pull/832) -- [loaded_image: Add set_unload](https://github.com/rust-osdev/uefi-rs/pull/835) -- [uefi: Change file reading to read in 1 MiB chunks](https://github.com/rust-osdev/uefi-rs/pull/834) - -Thanks to [@RaitoBezarius](https://github.com/RaitoBezarius) and [@medhefgo](https://github.com/medhefgo) for their contributions! - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods), [@phip1611](https://github.com/phip1611), [@robert-w-gries](https://github.com/robert-w-gries), [@ahmedcharles](https://github.com/ahmedcharles), and [@Caduser2020](https://github.com/Caduser2020) - -- [add missing functionality in multiboot2-header (finding the header, getting tags)](https://github.com/rust-osdev/multiboot2/pull/136) -- [multiboot2: properly type DST tags](https://github.com/rust-osdev/multiboot2/pull/134) -- [Add BasicMemoryInfo and SMBIOS tags](https://github.com/rust-osdev/multiboot2/pull/137) -- [multiboot2: Add the end tag](https://github.com/rust-osdev/multiboot2/pull/138) - -Thanks to [@YtvwlD](https://github.com/YtvwlD) for their contributions! - - -### [`vga`](https://github.com/rust-osdev/vga) -Maintained by [@RKennedy9064](https://github.com/RKennedy9064) - -- [implement Graphics1280x800x256](https://github.com/rust-osdev/vga/pull/32) - -Thanks to [@tsatke](https://github.com/tsatke) for their contribution! - - -### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) -Maintained by [@phil-opp](https://github.com/phil-opp) - -- [Rework the repo to build edk2 release tags](https://github.com/rust-osdev/ovmf-prebuilt/pull/1) - -Thanks to [@nicholasbishop](https://github.com/nicholasbishop) for this contribution! - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -- [rsdp: Make whole RSDP readable](https://github.com/rust-osdev/acpi/pull/179) -- [Clean up allocator_api feature](https://github.com/rust-osdev/acpi/pull/177) -- [acpi: fix length of "extended_area_bytes" in RSDP search](https://github.com/rust-osdev/acpi/pull/164) - -Thanks to [@YtvwlD](https://github.com/YtvwlD), [@semiviral](https://github.com/semiviral), and [@A0lson](https://github.com/A0lson) for their contributions! - - -### [`pci_types`](https://github.com/rust-osdev/pci_types) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -- [add function to determine the inteerupt pin and interrupt line](https://github.com/rust-osdev/pci_types/pull/9) - -Thanks to [@stlankes](https://github.com/stlankes) for their contributions! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) - -- [Use `cargo-semver-checks-action`](https://github.com/rust-osdev/bootloader/pull/369) - -Thanks to [@mgr0dzicki](https://github.com/mgr0dzicki) for their contributions! - - -## Other Projects - -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. - - - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Fix panics caused by misaligned pointer dereferences in "Double Faults" & "Introduction to Paging"](https://github.com/phil-opp/blog_os/pull/1226) -- [Correcting typos and errors in French translation of Post 1](https://github.com/phil-opp/blog_os/pull/1219) -- [posts/06-double-faults/index: fixup deprecated fn](https://github.com/phil-opp/blog_os/pull/1218) - -Thanks to [@SPuntte](https://github.com/SPuntte), [@Firenezz](https://github.com/Firenezz), and [@twilfredo](https://github.com/twilfredo) for these contributions! - -There wasn't much progress on the upcoming third edition this month, as I've been on vacation for the past few weeks. I still have a lot of catching up to do, but I'll try my best to continue writing soon :). - -## Join Us? - -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). diff --git a/content/this-month/2023-06/index.md b/content/this-month/2023-06/index.md deleted file mode 100644 index 7e1d7f9c..00000000 --- a/content/this-month/2023-06/index.md +++ /dev/null @@ -1,281 +0,0 @@ -+++ -title = "This Month in Rust OSDev: June 2023" -date = 2023-07-06 - -[extra] -month = "June 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - -- [Redox OS elects its first Board of Directors](https://www.redox-os.org/news/board-meeting-2023-06-21/) -- [Frida 16.1.0 Released](https://frida.re/news/2023/06/23/frida-16-1-0-released/) -- [Intercepting Allocations with the Global Allocator](https://web.archive.org/web/20250513072029/https://bd103.github.io/blog/2023-06-27-global-allocators/) -- [Building an out-of-tree Rust Kernel Module Part Three](https://blog.rnstlr.ch/building-an-out-of-tree-rust-kernel-module-part-three.html) -- Discussion: [How hard would it be to port the Rust toolchain to a new non-POSIX OS written in Rust and get it to host its own development?](https://www.reddit.com/r/rust/comments/14qvu98/how_hard_would_it_be_to_port_the_rust_toolchain/) -- Discussion: [Will there be fewer jailbreaks in the future if operating systems like iOS start adopting rust?](https://www.reddit.com/r/rust/comments/14k49ho/will_there_be_fewer_jailbreaks_in_the_future_if/) - - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -_No updates were proposed for this section this month._ - - -## `rust-osdev` Projects - -In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. - - - - -### [`volatile`](https://github.com/rust-osdev/volatile) -Maintained by [@phil-opp](https://github.com/phil-opp) - -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. - -Unfortunately, the design crate had a [soundness issue](https://github.com/rust-osdev/volatile/pull/13#issuecomment-842455552) because it used reference types for accessing the volatile memory. This is problematic because the Rust compiler marks references are _"dereferenceable"_, which allows LLVM to insert spurious read operations. This is fine for accessing "normal" memory, but it can lead to correctness issues when used in combination with memory-mapped device registers. These registers look like normal memory, but they are actually accessing some device-specific registers, which might change at any time. So they might change between spurious reads, which violates the assumptions of LLVM and can lead to undefined behavior. - -To solve this issue, we started [a full redesign of the crate](https://github.com/rust-osdev/volatile/pull/22) that uses raw pointers only. This solves the issue because raw pointers are not considered _"dereferenceable"_, so LLVM is not allowed to insert spurious reads. While we started working on the new design more than 2 years ago, we didn't merge it until this month because we weren't sure about the implementation details. The main discussion point was whether we should treat the proposed `VolatilePointer` type like Rust's reference types or like Rust's raw pointer types. The difference is that raw pointers implement the `Copy` trait, but are not `Send` to prevent aliasing. References, on the other hand, can safely implement `Send` because they're only `Copy` if the reference is read-only. - -After a lot of back and forth, we decided to [provide both options](https://github.com/rust-osdev/volatile/pull/29) and finally publish [**`volatile v0.5`**](https://docs.rs/volatile/0.5.1/volatile/index.html). So the new design has two wrapper types, [`VolatilePtr`](https://docs.rs/volatile/0.5.1/volatile/struct.VolatilePtr.html) (behaves like a raw pointer) and [`VolatileRef`](https://docs.rs/volatile/0.5.1/volatile/struct.VolatileRef.html) (behaves like a reference). We hope that we support most use cases this way! - -Note that there is also some ongoing discussion [about a potential `VolatileCell` type](https://github.com/rust-osdev/volatile/issues/31) to wrap values in-place. Most implementations of such a type would require support from the Rust compiler, which [needs an RFC](https://github.com/rust-lang/unsafe-code-guidelines/issues/411). However, there is one [promising design based on zero-sized types and proc-macros](https://github.com/rust-osdev/volatile/issues/31#issuecomment-1606044353) by [@Freax13](https://github.com/Freax13) that should not require any new language features. We will continue to investigate. - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -The [multiboot2](https://crates.io/crates/multiboot2) and the [multiboot2-header](https://crates.io/crates/multiboot2) -crates got a big overhaul. The list of new features includes but is not limited to: -- use DSTs for tags where applicable ([#134](https://github.com/rust-osdev/multiboot2/pull/134)) -- model the MBI as DST ([#155](https://github.com/rust-osdev/multiboot2/pull/155)) -- add a runtime builder for an MBI ([#133](https://github.com/rust-osdev/multiboot2/pull/133)) \ - Huge thanks to [YtvwlD / Niklas](https://github.com/YtvwlD) for this great external contribution -- added an integration test including a multiboot2 chainloader for better test coverage ([#129](https://github.com/rust-osdev/multiboot2/pull/129)) -- added miri to the CI for more memory safety ([#128](https://github.com/rust-osdev/multiboot2/pull/128)) -- several fixes and small improvements - -`multiboot2` was updated from `0.15.1` to `0.16.0` and `multiboot2-header` was updated from `0.2.0` to `0.3.0`. Both -releases come with a large amount of [breaking changes](https://github.com/rust-osdev/multiboot2/blob/main/Changelog.md). -However, after a sensible consideration, they are all worth it for a more streamlined API and more memory safety. - -[`rust-osdev`]: https://github.com/rust-osdev/about - -
    - -Merged pull requests: - -- [Add a builder to multiboot2](https://github.com/rust-osdev/multiboot2/pull/133) -- [treewide: code improvements and other stuff](https://github.com/rust-osdev/multiboot2/pull/141) -- [various fixes + cleanup + bump crate versions](https://github.com/rust-osdev/multiboot2/pull/143) -- [streamline default derives](https://github.com/rust-osdev/multiboot2/pull/144) -- [tree-wide: rename builder structs (remove Multiboot2 prefix)](https://github.com/rust-osdev/multiboot2/pull/146) -- [tree-wide: streamline default derives (also Hash everywhere)](https://github.com/rust-osdev/multiboot2/pull/147) -- [workspace: use workspace dependencies](https://github.com/rust-osdev/multiboot2/pull/148) -- [fix memory issue in memory-map](https://github.com/rust-osdev/multiboot2/pull/149) -- [multiboot2: memory-map: derive Eq + uefi-raw@0.3.0](https://github.com/rust-osdev/multiboot2/pull/150) -- [multiboot2: more tag name streamlining](https://github.com/rust-osdev/multiboot2/pull/151) -- [multiboot2: fix memory issue in boxed_dst_tag](https://github.com/rust-osdev/multiboot2/pull/152) -- [multiboot2: builder: add terminating null-bytes to tags that hold a string](https://github.com/rust-osdev/multiboot2/pull/153) -- [multiboot2: load: remove odd offset thingy](https://github.com/rust-osdev/multiboot2/pull/142) -- [various cleanups](https://github.com/rust-osdev/multiboot2/pull/154) -- [multiboot2: model MBI as DST](https://github.com/rust-osdev/multiboot2/pull/155) -- [various fixes](https://github.com/rust-osdev/multiboot2/pull/157) -- [builder: use new abstraction to guarantee alignment](https://github.com/rust-osdev/multiboot2/pull/156) -- [Add Integration Test](https://github.com/rust-osdev/multiboot2/pull/129) -- [multiboot2: create DSTs: hopefully better memory fix](https://github.com/rust-osdev/multiboot2/pull/158) -- [integration-test: cargo update](https://github.com/rust-osdev/multiboot2/pull/159) -- [ci: run miri + adjustments for miri](https://github.com/rust-osdev/multiboot2/pull/128) -- [ci: integrationtest: use magic nix cache](https://github.com/rust-osdev/multiboot2/pull/161) -- [Make InformationBuilder adhere the API guidelines.](https://github.com/rust-osdev/multiboot2/pull/162) - -Thanks to [@YtvwlD](https://github.com/YtvwlD) and [@scholzp](https://github.com/scholzp) for their contributions! - -
    - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following changes this month: - -- [Change Star::write() to use checked subtractions](https://github.com/rust-osdev/x86_64/pull/422) -- [Bump bitflags to 2.3.2](https://github.com/rust-osdev/x86_64/pull/426) -- [add workaround for recursive page tables with recursive index 511](https://github.com/rust-osdev/x86_64/pull/425) -- [Fix off-by-one in documentation](https://github.com/rust-osdev/x86_64/pull/427) - -Thanks to [@Qix-](https://github.com/Qix-), [@grant0417](https://github.com/grant0417), and [@Egggggg](https://github.com/Egggggg) for their contributions! - - -### [`vga`](https://github.com/rust-osdev/vga) -Maintained by [@RKennedy9064](https://github.com/RKennedy9064) - -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. This month, we merged the following pull request: - -- [implement a draw_rect function](https://github.com/rust-osdev/vga/pull/35) - -Thanks to [@tsatke](https://github.com/tsatke) for their contribution! - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), -the successor to the BIOS firmware. It empowers everyone to write EFI- -applications with Rust in a convenient way, such as your own bootloader. - -In June, we added multiple small improvements for developers using -[Nix(OS)](https://nixos.org) and simplifications for working with device -paths. Additionally, we moved more definitions to the new `uefi-raw` crate. - -Furthermore, we'd like to mention the new high-level [File-System API](https://docs.rs/uefi/0.24.0/uefi/fs/index.html). -It was [merged in April](https://github.com/rust-osdev/uefi-rs/issues/747) -actually, but not mentioned in this newsletter so far. Feel free to give it a -try! - -We merged the following PRs this month: - -- [Release uefi-raw-0.2.0, uefi-0.22.0, and uefi-services-0.19.0](https://github.com/rust-osdev/uefi-rs/pull/840) -- [Fix various CI failures](https://github.com/rust-osdev/uefi-rs/pull/844) -- [uefi: Fix wrong install_configuration_table() signature](https://github.com/rust-osdev/uefi-rs/pull/843) -- [Release uefi-0.23.0 and uefi-services-0.20.0](https://github.com/rust-osdev/uefi-rs/pull/846) -- [build(deps): bump tempfile from 3.5.0 to 3.6.0](https://github.com/rust-osdev/uefi-rs/pull/848) -- [device_path: add more convenience (part 2)](https://github.com/rust-osdev/uefi-rs/pull/849) -- [Make UEFI shell protocols testable](https://github.com/rust-osdev/uefi-rs/pull/793) -- [Add DevicePathProtocol to uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/850) -- [Integration test for boot service function load_image](https://github.com/rust-osdev/uefi-rs/pull/826) -- [cargo: Use `[workspace.package]` to deduplicate metadata](https://github.com/rust-osdev/uefi-rs/pull/853) -- [uefi: Update MSRV policy language](https://github.com/rust-osdev/uefi-rs/pull/852) -- [uefi: Remove some uses of MaybeUninit in BootServices](https://github.com/rust-osdev/uefi-rs/pull/854) -- [nix: add more convenience for Nix/NixOS users](https://github.com/rust-osdev/uefi-rs/pull/828) -- [ci: Fix developer_productivity push error](https://github.com/rust-osdev/uefi-rs/pull/855) -- [uefi-raw: Add BootServices table](https://github.com/rust-osdev/uefi-rs/pull/856) -- [uefi: Add raw pointer Event/Handle methods](https://github.com/rust-osdev/uefi-rs/pull/858) -- [uefi: Make BootServices fn ptrs unsafe](https://github.com/rust-osdev/uefi-rs/pull/857) -- [xtask: add "cargo xtask fmt" (and formatting for nix and yml files)](https://github.com/rust-osdev/uefi-rs/pull/757) -- [build(deps): bump ureq from 2.6.2 to 2.7.0](https://github.com/rust-osdev/uefi-rs/pull/860) -- [uefi-raw: Fix arg type in connect_controller](https://github.com/rust-osdev/uefi-rs/pull/862) -- [uefi: Improve support for null protocol interfaces](https://github.com/rust-osdev/uefi-rs/pull/861) -- [uefi: Make `BootServices` a wrapper around `uefi_raw::table::boot::BootServices`](https://github.com/rust-osdev/uefi-rs/pull/863) -- [uefi-raw: Add common derives to `EventType`](https://github.com/rust-osdev/uefi-rs/pull/866) -- [xtask: Improve an error location in check-raw](https://github.com/rust-osdev/uefi-rs/pull/867) -- [uefi-raw: Add ConfigurationTable](https://github.com/rust-osdev/uefi-rs/pull/868) -- [uefi-raw: Add SimpleTextInputProtocol and SimpleTextOutputProtocol](https://github.com/rust-osdev/uefi-rs/pull/869) -- [uefi-raw: Add SystemTable](https://github.com/rust-osdev/uefi-rs/pull/870) -- [uefi-raw: Fill in a few more BootServices function pointers](https://github.com/rust-osdev/uefi-rs/pull/865) -- [uefi-raw: derive all the things](https://github.com/rust-osdev/uefi-rs/pull/871) -- [device_path: add more convenience (part 1)](https://github.com/rust-osdev/uefi-rs/pull/827) -- [Release uefi-raw-0.3.0, uefi-0.24.0, uefi-services-0.21.0](https://github.com/rust-osdev/uefi-rs/pull/873) -- [uefi-raw: Add LoadedImageProtocol](https://github.com/rust-osdev/uefi-rs/pull/874) -- [uefi: Check for null pointer in config_table](https://github.com/rust-osdev/uefi-rs/pull/875) -- [test-runner: Simplify an iterator chain](https://github.com/rust-osdev/uefi-rs/pull/878) -- [build(deps): bump itertools from 0.10.5 to 0.11.0](https://github.com/rust-osdev/uefi-rs/pull/876) -- [uefi: Use uefi_raw's `SimpleTextInputProtocol` in `Input`](https://github.com/rust-osdev/uefi-rs/pull/879) -- [uefi: Use uefi_raw's `SimpleTextOutputProtocol` in `Output`](https://github.com/rust-osdev/uefi-rs/pull/881) -- [uefi: Use uefi_raw's `LoadedImageProtocol` to implement `LoadedImage`](https://github.com/rust-osdev/uefi-rs/pull/882) -- [uefi: Fix warnings when compiling without the alloc feature](https://github.com/rust-osdev/uefi-rs/pull/880) -- [uefi-raw: Add `SimplePointerProtocol`](https://github.com/rust-osdev/uefi-rs/pull/884) -- [uefi: Use uefi_raw's SystemTable to implement SystemTable](https://github.com/rust-osdev/uefi-rs/pull/883) - -Thanks to [@medhefgo](https://github.com/medhefgo) for their contribution! - - -## Other Projects - -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. - -### [`hermitcore/rusty-hermit`](https://github.com/hermitcore/rusty-hermit) -(Section written by [@mkroening](https://github.com/mkroening)) - -The Hermit library operating system allows you to bundle a whole OS directly with your application, creating a freestanding, bootable _Unikernel_ image. -This month, we achieved several milestones for reaching more users with Hermit: - -- Stable Rust support. - - You can now compile your programs for Hermit using the stable Rust toolchain! 🥳 - - While the Hermit targets (`x86_64-unknown-hermit` and `aarch64-unknown-hermit`) are still at tier 3, we now distribute pre-built artifacts of the Rust standard library for use with stable toolchains! - This means, no more `-Zbuild-std`, resulting in faster builds, and the bliss of the stable Rust compiler. - - See [`hermitcore/rust-std-hermit`](https://github.com/hermitcore/rust-std-hermit) for details on our `rust-std` artifacts. - -- Windows support. - - Thanks to Rust's awesome cross-compilation capabilities, you can now compile Hermit applications from anywhere! 😎 - - We have resolved a longstanding issue when building Hermit applications on Windows ([hermitcore/rusty-hermit#431](https://github.com/hermitcore/rusty-hermit/pull/431)). - The issue is all sorted out now and Windows, macOS, and Linux are tested and verified by our CI. - - -- AArch64 (ARM64) support. - - You can now run real applications on AArch64, with scheduling, network and everything! 🤯 - - - PCI now works on AArch64, which allows us to use the network devices ([hermitcore/libhermit-rs#748](https://github.com/hermitcore/libhermit-rs/pull/748)). - - - We merged scheduling support for AArch64 ([hermitcore/libhermit-rs#765](https://github.com/hermitcore/libhermit-rs/pull/765)). - - - You can also now chainload Hermit apps for AArch64 using our loader ([hermitcore/rusty-loader#201](https://github.com/hermitcore/rusty-loader/pull/201)). - - This means, you don't have to statically compile the full application into the final loader image anymore. - -We'd love if you gave Hermit a try. Just start with our "Hello, World!" application template: [`hermitcore/rusty-demo`](https://github.com/hermitcore/rusty-demo). - - - - -## Join Us? - -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). diff --git a/content/this-month/2023-07/index.md b/content/this-month/2023-07/index.md deleted file mode 100644 index c431e94e..00000000 --- a/content/this-month/2023-07/index.md +++ /dev/null @@ -1,207 +0,0 @@ -+++ -title = "This Month in Rust OSDev: July 2023" -date = 2023-08-04 - -[extra] -month = "July 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [Mutex without lock, Queue without push: cancel safety in lilos](https://cliffle.com/blog/lilos-cancel-safety/) -- [Kani 0.32.0 has been released!](https://www.reddit.com/r/KaniRustVerifier/comments/14xytrg/kani_0320_has_been_released/) (verification tool for unsafe code blocks) -- [bwrap: A fast, lightweight, embedded environment-friendly Rust library for wrapping text](https://www.reddit.com/r/rust/comments/151usd5/bwrap_a_fast_lightweight_embedded/) -- ESP32 Standard Library Embedded Rust - - [GPIO Control](https://apollolabsblog.hashnode.dev/esp32-standard-library-embedded-rust-gpio-control) - - [UART Communication](https://apollolabsblog.hashnode.dev/esp32-standard-library-embedded-rust-uart-communication) - - [I2C Communication](https://apollolabsblog.hashnode.dev/esp32-standard-library-embedded-rust-i2c-communication) -- [`allocator_api2`](https://docs.rs/allocator-api2/latest/allocator_api2/) crate to use Rust's nightly allocator API on stable Rust - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Enable `chkstk`/`alloca` intrinsics on `x86_64-unknown-uefi`](https://github.com/rust-lang/compiler-builtins/pull/541) -- [Add `riscv64gc-unknown-hermit` target](https://github.com/rust-lang/rust/pull/114004) -- [Add `x86_64-unikraft-linux-musl` target](https://github.com/rust-lang/rust/pull/113411) -- [Optimize `AtomicBool` for target that don't support byte-sized atomics](https://github.com/rust-lang/rust/pull/114034) - - -## `rust-osdev` Projects - -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. - - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -The [multiboot2](https://crates.io/crates/multiboot2) was bumped from `0.16.0` -to `0.17.0`. The new release includes the builder pattern for the MBI builder -and the ability to use custom memory types in the memory map in addition to -pre-defined ones. For more info, look [here](https://docs.rs/multiboot2/0.17.0/multiboot2/struct.MemoryAreaTypeId.html). - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [Cargo.lock: Update proc-macro2 to fix nightly CI](https://github.com/rust-osdev/uefi-rs/pull/885) -- [Return a SimpleFileSystem from BootServices::get_image_file_system](https://github.com/rust-osdev/uefi-rs/pull/886) -- [uefi-raw: Derive Ord, PartialOrd, and Hash for all newtype enums](https://github.com/rust-osdev/uefi-rs/pull/887) -- [Add `GraphicsOutputProtocol` to `uefi_raw` and use it from `uefi`](https://github.com/rust-osdev/uefi-rs/pull/888) -- [uefi: Use uefi_raw's SimplePointerProtocol to implement Pointer](https://github.com/rust-osdev/uefi-rs/pull/889) -- [build(deps): bump regex from 1.8.1 to 1.9.0](https://github.com/rust-osdev/uefi-rs/pull/890) -- [Fix target_arch name: i386 -> x86](https://github.com/rust-osdev/uefi-rs/pull/891) -- [Add some uefi-raw links/badges](https://github.com/rust-osdev/uefi-rs/pull/892) -- [Fix a new lint in 1.71](https://github.com/rust-osdev/uefi-rs/pull/894) -- [Add raw serial protocol and use it in `uefi`](https://github.com/rust-osdev/uefi-rs/pull/897) -- [Add raw disk protocols and use them in `uefi`](https://github.com/rust-osdev/uefi-rs/pull/895) -- [uefi: Change try_exists to return FileSystemResult](https://github.com/rust-osdev/uefi-rs/pull/898) -- [dependabot: Enable updates for Github Actions](https://github.com/rust-osdev/uefi-rs/pull/900) -- [Rework `FileSystem::copy` to operate on 1MiB chunks](https://github.com/rust-osdev/uefi-rs/pull/899) -- [build(deps): bump crate-ci/typos from 1.13.20 to 1.16.1](https://github.com/rust-osdev/uefi-rs/pull/902) -- [ci: Add merge_group trigger](https://github.com/rust-osdev/uefi-rs/pull/903) -- [build(deps): bump cachix/install-nix-action from 20 to 22](https://github.com/rust-osdev/uefi-rs/pull/901) -- [add event to smp](https://github.com/rust-osdev/uefi-rs/pull/907) - -Thanks to [@devsnek](https://github.com/devsnek) for their contribution! - - -### [`xhci`](https://github.com/rust-osdev/xhci) -Maintained by [@toku-sa-n](https://github.com/toku-sa-n) - -The `xhci` crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month: - -- [Switch Clippy runner on CI](https://github.com/rust-osdev/xhci/pull/156) -- [Fix wrong calculation of data_buffer_pointer of transfer::Normal](https://github.com/rust-osdev/xhci/pull/154) -- [Release 0.9.2](https://github.com/rust-osdev/xhci/pull/157) - -Thanks to [@lemolatoon](https://github.com/lemolatoon) for their contribution! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PR this month: - -- [Add `Descriptor::tss_segment_unchecked`](https://github.com/rust-osdev/x86_64/pull/428) - -Thanks to [@SamZhang3](https://github.com/SamZhang3) for their contribution! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we released a new patch version to fix the build on the latest nightlies: - -- [Run `cargo update` to fix build on nightly](https://github.com/rust-osdev/bootloader/pull/385) -- [Release `v0.11.4`](https://github.com/rust-osdev/bootloader/pull/386) - - -### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `ovmf-prebuilt` project provides pre-built [edk2](https://github.com/tianocore/edk2) releases to make it easier to set up OVMF. We merged the following improvement this month: - -- [Dockerfile: use QemuBuild.py for aarch64 build](https://github.com/rust-osdev/ovmf-prebuilt/pull/2) - -Thanks to [@nicholasbishop](https://github.com/nicholasbishop) for their contribution! - -## Other Projects - -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. - - - - - -### [`SFBdragon/talc`](https://github.com/SFBdragon/talc) -(Section written by [@SFBdragon](https://github.com/SFBdragon)) - -`Talc` is a recently published, fast, and flexible `no-std` memory allocator. -* It's the fastest allocator I've tested as of yet (galloc falls short, buddy_alloc is close but lacks heap efficiency). -* It features a OOM-handling component with dynamic arena resizing. - -By the time you're seeing this, hopefully v2 should be out or coming soon: -* The OOM handler system has been made more powerful. -* `lock_api` is used to allow for custom allocator synchronization. -* The internals and API has been improved to pass miri's stacked borrows validation. -* You can now move the allocator struct around freely. -* And more :3 - -I hope you find it useful! - -### [`vinc/moros`](https://github.com/vinc/moros) -(Section written by [@vinc](https://github.com/vinc)) - -[MOROS](http://moros.cc) is a text-based hobby operating system targeting computers with a x86-64 architecture and a BIOS. - -Since last month's [release](https://github.com/vinc/moros/releases/tag/v0.10.0), I focused on adding new syscalls to interact with [network sockets](https://github.com/vinc/moros/pull/512) from userspace. The DNS and HTTP clients are now using the new UDP and TCP sockets. - -I also added another syscall to poll multiple handles at the same time, to read from the console and a socket, improving the main network tool that can now be used as a simple chat program. - -The VGA driver, the filesystem, and the editor got a few significant [improvements](https://github.com/vinc/moros/blob/trunk/CHANGELOG.md) as well, to support downloading and reading larger files. - -### [`valibali/cluu`](https://github.com/valibali/cluu) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -There is a new project featured in our [Showcase](@/showcase/_index.md) series: - -- [**CLUU (Compact Lightweight Unix Utopia)**](@/showcase/cluu/index.md) by [@valibali](https://github.com/valibali) - - - -## Join Us? - -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). diff --git a/content/this-month/2023-08/index.md b/content/this-month/2023-08/index.md deleted file mode 100644 index d1e63162..00000000 --- a/content/this-month/2023-08/index.md +++ /dev/null @@ -1,247 +0,0 @@ -+++ -title = "This Month in Rust OSDev: August 2023" -date = 2023-09-06 - -[extra] -month = "August 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - -- [Fomos: Experimental OS, built with Rust](https://github.com/Ruddle/Fomos) - - Discussion on [HN](https://news.ycombinator.com/item?id=37316309), [reddit](https://www.reddit.com/r/rust/comments/164li1c/fomos_experimental_rust_os/), [lobste.rs](https://lobste.rs/s/eoyuf6/fomos_experimental_os_built_with_rust) -- [Interview with Rust and operating system Developer Andy Python](https://blog.rust.careers/post/andy-python-interview/) - -### Redox Summer of Code - -- [Redox Summer of Code Wrapup](https://redox-os.org/news/rsoc-2023-wrapup/) -- VirtIO drivers for Redox in a VM - Andy-Python-Programmer: [Part 1](https://www.redox-os.org/news/rsoc-virtio-1/) and [Part 2](https://redox-os.org/news/rsoc-virtio-2/) -- On-Demand Paging for Redox - 4lDO2: [Part 1](https://www.redox-os.org/news/kernel-8/) and [Part 2](https://redox-os.org/news/kernel-9/) -- Using Linux drivers in a VM on Redox - Enygmator: [Overview](https://www.redox-os.org/news/rsoc-2023-eny-1/) - - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [WASI threads, implementation of `wasm32-wasi-preview1-threads`` target](https://github.com/rust-lang/rust/pull/112922) -- [Re-enable atomic loads and stores for all RISC-V targets](https://github.com/rust-lang/rust/pull/98333) -- [Update to LLVM 17](https://github.com/rust-lang/rust/pull/114048) -- [feat: `riscv-interrupt-{m,s}` calling conventions](https://github.com/rust-lang/rust/pull/111891) -- [Add the `relocation_model` to the cfg](https://github.com/rust-lang/rust/pull/113966) -- [Default `relax_elf_relocations` to true](https://github.com/rust-lang/rust/pull/106511) -- [add `aarch64-unknown-teeos` target](https://github.com/rust-lang/rust/pull/113480) -- cargo: [Add support for `target.'cfg(..)'.linker`](https://github.com/rust-lang/cargo/pull/12535) -- cargo: [Support dependencies from registries for artifact dependencies, take 2](https://github.com/rust-lang/cargo/pull/12421) - - -## `rust-osdev` Projects - -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. - - - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [Drop `memmove` and `set_mem` from boot services](https://github.com/rust-osdev/uefi-rs/pull/906) -- [Add block I/O protocol to `uefi-raw` and use it in `uefi`](https://github.com/rust-osdev/uefi-rs/pull/909) -- [uefi-raw: Rename BlockIo to BlockIoProtocol](https://github.com/rust-osdev/uefi-rs/pull/911) -- [Add raw memory protection protocol and use in `uefi`](https://github.com/rust-osdev/uefi-rs/pull/896) -- [Use workspace.dependencies to declare shared dependencies](https://github.com/rust-osdev/uefi-rs/pull/913) -- [Add component name protocol to uefi-raw and use from uefi](https://github.com/rust-osdev/uefi-rs/pull/910) -- [Implement core::error::Error for all error types](https://github.com/rust-osdev/uefi-rs/pull/916) -- [Fix 1.72 lints](https://github.com/rust-osdev/uefi-rs/pull/928) -- [Derive `Debug` in more places (requires Rust 1.70)](https://github.com/rust-osdev/uefi-rs/pull/851) -- [Memory map change](https://github.com/rust-osdev/uefi-rs/pull/915) - - - -Thanks to [@cmoylan](https://github.com/cmoylan) and [@julic20s](https://github.com/julic20s) for their contributions! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs: - -- [kernel image fields & zero out rbp](https://github.com/rust-osdev/bootloader/pull/346) -- [`RacyCell`: Data race allowed on T](https://github.com/rust-osdev/bootloader/pull/390) -- [Update license field following SPDX 2.1 license expression standard](https://github.com/rust-osdev/bootloader/pull/391) - -Thanks to [@frisoft](https://github.com/frisoft), [@devsnek](https://github.com/devsnek), and [@kuzeyardabulut](https://github.com/kuzeyardabulut) for their contributions! - - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PR this month: - -- [Add `inline` attribute to segment functions](https://github.com/rust-osdev/x86_64/pull/430) -- [Add the `iretq` function to the `InterruptStackFrameValue` struct.](https://github.com/rust-osdev/x86_64/pull/431) -- [Fix misc doc typos](https://github.com/rust-osdev/x86_64/pull/432) - -Thanks to [@tsoutsman](https://github.com/tsoutsman), [@NathanKolpa](https://github.com/NathanKolpa), and [@xzmeng](https://github.com/xzmeng) for their contributions! - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [AML: `DefSizeOf` implementation](https://github.com/rust-osdev/acpi/pull/189) -- [AML: Fix `DefIfElse` parser returning `UnexpectedEndOfStream` when `If (...) {}` is not followed by anything](https://github.com/rust-osdev/acpi/pull/190) - -Thanks to [@alnyan](https://github.com/alnyan) for their contributions! - - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month: - -- [x86: crate finally builds with x86 and x86_64](https://github.com/rust-osdev/uart_16550/pull/29) - -Thanks to [@phip1611](https://github.com/phip1611) for their contributions! - - -## Other Projects - -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. - - -### [`mkroening/take-static`](https://github.com/mkroening/take-static) -(Section written by [@mkroening](https://github.com/mkroening)) - -I published a tiny new crate, allowing you to get a mutable reference to static items safely (only once, though): - -```rust -use take_static::take_static; - -take_static! { - static NUMBER: usize = 5; -} - -assert_eq!(NUMBER.take(), Some(&mut 5)); -assert_eq!(NUMBER.take(), None); -``` - -This allows you to easily use statically allocated memory before dynamic memory allocators may be available. -Compared to [`cortex_m::singleton`], `take_static` is thread-safe. -Compared to [`takecell::TakeCell`], `take_static` also supports `!Send` types. - -[`cortex_m::singleton`]: https://docs.rs/cortex-m/0.7.7/cortex_m/macro.singleton.html -[`takecell::TakeCell`]: https://docs.rs/takecell/0.1.1/takecell/index.html - - -### [`hermit-os/kernel`](https://github.com/hermit-os/kernel) -(Section written by [@mkroening](https://github.com/mkroening)) - - - -The Hermit unikernel project allows you to bundle your Rust application with our library operating system to create a bootable unikernel image. -Hermit is a single-address-space operating system. -Since there is only one application running in the virtual machine, no isolation between applications or between user space and kernel space is necessary. -This reduces system call overhead immensely, since every system call is just a library call. -For more information, see our [_The Hermit Operating System_] showcase post. - -[_The Hermit Operating System_]: @/showcase/hermit/index.md - -The RustyHermit project has been renamed. -We have renamed our GitHub organization from [@hermitcore](https://github.com/hermitcore) to [@hermit-os](https://github.com/hermit-os) and reserved the domain. - -We have also renamed some of our core projects to reduce confusion: -- [hermit-os/kernel](https://github.com/hermit-os/kernel) is the Hermit kernel. -- [hermit-os/hermit-rs](https://github.com/hermit-os/hermit-rs) provides Rust application support. -- [hermit-os/uhyve](https://github.com/hermit-os/uhyve) is a specialized hypervisor for Hermit. -- [hermit-os/loader](https://github.com/hermit-os/loader) is a bootloader for other platforms, such as QEMU. - -We have a new logo! -As hermit crabs occupy empty shells produced by other organisms, the original HermitCore occupied one or several cores on a computer. -Because we migrated to Rust in 2018, our new logo of a hermit crab occupying the Rust logo's [bike gear](https://bugzilla.mozilla.org/show_bug.cgi?id=680521) fits quite nicely with the Rust logo as well as Rust's Ferris. - -And as always, please come and try Hermit! :) - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Update post 2 with beginner friendly cargo tips](https://github.com/phil-opp/blog_os/pull/1234) -- [Grammar fix](https://github.com/phil-opp/blog_os/pull/1235) -- [minimal-rust-kernel: fix missing .toml in zh-CN translation](https://github.com/phil-opp/blog_os/pull/1237) - -Thanks to [@Connortsui20](https://github.com/Connortsui20) and [@xzmeng](https://github.com/xzmeng) for these contributions! - - - - - - -## Join Us? - -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). diff --git a/content/this-month/2023-09/index.md b/content/this-month/2023-09/index.md deleted file mode 100644 index a359921d..00000000 --- a/content/this-month/2023-09/index.md +++ /dev/null @@ -1,216 +0,0 @@ -+++ -title = "This Month in Rust OSDev: September 2023" -date = 2023-10-05 - -[extra] -month = "September 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [Toolchain Upgrade - Redox OS](https://www.redox-os.org/news/toolchain-upgrade-1/) -- [Open Sourcing Ferrocene](https://ferrous-systems.com/blog/ferrocene-open-source/) -- [ESP32 Standard Library Embedded Rust: GPIO Interrupts](https://apollolabsblog.hashnode.dev/esp32-standard-library-embedded-rust-gpio-interrupts) -- [The Embedded Rust ESP Development Ecosystem](https://apollolabsblog.hashnode.dev/the-embedded-rust-esp-development-ecosystem) -- [ESP Embedded Rust: Multithreading with FreeRTOS Bindings](https://apollolabsblog.hashnode.dev/esp-embedded-rust-multithreading-with-freertos-bindings) -- [How Rust can build an elegant API around raw memory](https://litchipi.site/post/17611351315151745365) -- [Redox: Development Priorities for 2023/24](https://redox-os.org/news/development-priorities-2023-09/) - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Add Minimal Std implementation for UEFI](https://github.com/rust-lang/rust/pull/105861) -- [Stdio support for UEFI](https://github.com/rust-lang/rust/pull/116207) -- [Promote loongarch64-unknown-none* to Tier 2](https://github.com/rust-lang/rust/pull/115368) -- [Add initial libstd support for Xous](https://github.com/rust-lang/rust/pull/104101) -- [added support for GNU/Hurd](https://github.com/rust-lang/rust/pull/115230) -- [MCP661: Move wasm32-wasi-preview1-threads target to Tier 2](https://github.com/rust-lang/rust/pull/115345) -- [add notes about non-compliant FP behavior on 32bit x86 targets](https://github.com/rust-lang/rust/pull/113053) -- [add more explicit I/O safety documentation](https://github.com/rust-lang/rust/pull/114780) -- [Change `unsafe_op_in_unsafe_fn` to be `warn-by-default` from edition 2024](https://github.com/rust-lang/rust/pull/112038) -- [cargo: Stabilize lint table](https://github.com/rust-lang/cargo/pull/12648) -- Final comments period - - [Stabilize `atomic_from_ptr`](https://github.com/rust-lang/rust/pull/115719) - - [Tracking Issue for `pointer_bytes_offsets`](https://github.com/rust-lang/rust/issues/96283) - - [Add `f16` and `f128` float types](https://github.com/rust-lang/rfcs/pull/3453) - - [RFC: Remove implicit features in a new edition](https://github.com/rust-lang/rfcs/pull/3491) - -## `rust-osdev` Projects - -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. - - - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -The [multiboot2](https://crates.io/crates/multiboot2) was bumped from `0.18.1` -to `0.19.0`. The new release includes the ability to add custom tags to the MBI -builder and a bugfix when parsing Multiboot strings, such as the command line -from a Module tag. - -For more details, please have a look at the [changelog](https://github.com/rust-osdev/multiboot2/releases/tag/multiboot2-v0.19.0). - -Thanks to [@A0lson](https://github.com/A0lson) for their [contribution](https://github.com/rust-osdev/multiboot2/pull/172) -that helped to fix the string parsing bug. - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -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, a new major version of `acpi` was published, offering greater control over how the crate allocates -memory. Specifically, the new `allocator_api` and `alloc` features allow you to opt-out of allocation altogether -(allowing the crate to be used from slimmer environments like bootloaders), or to provide your own allocator using -the new (and still unstable) [`core::alloc::Allocator` API](https://doc.rust-lang.org/beta/core/alloc/trait.Allocator.html). -Enabling both features makes the crate behave very similarly to before, so migration should be relatively easy. - -Because the `acpi` crate can now be used from environements without allocation, the `rsdp` crate has been -deprecated, and all functionality moved into `acpi`. The `rsdp` crate will continue to work, but will not receive -further updates. This should not affect users using `rsdp` to simply find the address of the RSDP, but is a -breaking change as types that have been moved to `acpi` will no longer be usable across the crate boundary. - -Some improvements were also made to the `aml` crate this month, adding functionality and improving our correctness -- many thanks to our contributors! - -We merged the following changes this month: - -- [AML: Implement OpReg-relative PkgLength parser](https://github.com/rust-osdev/acpi/pull/191) -- [AML: Fix DefPackage len less than NumElements failing](https://github.com/rust-osdev/acpi/pull/192) -- [Prepare new version of `acpi`](https://github.com/rust-osdev/acpi/pull/197) -- [AML: add support for the `DefSleep` opcode](https://github.com/rust-osdev/acpi/commit/133001e59d3f56056d371954eb52a79ee5a2b377) -- [AML: add support for the `DefStall` opcode](https://github.com/rust-osdev/acpi/commit/133001e59d3f56056d371954eb52a79ee5a2b377) - -Thanks to [@alnyan](https://github.com/alnyan) for their contributions! - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PR this month: - -- [fix(interrupts): add compiler fences to enable and disable](https://github.com/rust-osdev/x86_64/pull/436) -- [add `flush_broadcast` and `tlbsync` functions](https://github.com/rust-osdev/x86_64/pull/403) -- [Release v0.14.11](https://github.com/rust-osdev/x86_64/pull/437) -- [Add `HandlerFuncType` trait](https://github.com/rust-osdev/x86_64/pull/439) - -Thanks to [@brandonchinn178](https://github.com/brandonchinn178) and [@mkroening](https://github.com/mkroening) for their contributions! - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [Add ShellParams protocol](https://github.com/rust-osdev/uefi-rs/pull/772) -- [github: Change dependabot interval to weekly](https://github.com/rust-osdev/uefi-rs/pull/949) - - - -Thanks to [@JohnAZoidberg](https://github.com/JohnAZoidberg) for their contribution! - - -## Other Projects - -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. - -### [`mkroening/interrupts`](https://github.com/mkroening/interrupts) -(Section written by [@mkroening](https://github.com/mkroening)) - -I created a dependency-free `interrupts` crate, allowing you to temporarily disable interrupts on AArch64, 64-bit RISC-V, and x86-64. -Two different paradigms allow you to run code without interrupts and synchronize with interrupt handlers running on the same hardware thread (core): - -Use [`disable`] to disable interrupts with a guard: - -```rust -// interrupts may or may not be enabled -let guard = interrupts::disable(); -// interrupts are disabled -drop(guard); -// interrupts are restored to the previous state -``` - -Use [`without`] (similar to [`x86_64::instructions::interrupts::without_interrupts`]) to run a closure with disabled interrupts: - -```rust -// interrupts may or may not be enabled -interrupts::without(|| { - // interrupts are disabled -}); -// interrupts are restored to the previous state -``` - -I would appreciate you dropping by and giving it a try. :) - -[`disable`]: https://docs.rs/interrupts/latest/interrupts/fn.disable.html -[`without`]: https://docs.rs/interrupts/latest/interrupts/fn.without.html -[`x86_64::instructions::interrupts::without_interrupts`]: https://docs.rs/x86_64/latest/x86_64/instructions/interrupts/fn.without_interrupts.html - - - - - -## Join Us? - -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). diff --git a/content/this-month/2023-10/index.md b/content/this-month/2023-10/index.md deleted file mode 100644 index 3978024b..00000000 --- a/content/this-month/2023-10/index.md +++ /dev/null @@ -1,291 +0,0 @@ -+++ -title = "This Month in Rust OSDev: October 2023" -date = 2023-11-06 - -[extra] -month = "October 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - -- [On the Challenge of Sound Code for Operating Systems](https://doi.org/10.1145/3623759.3624554) - - An open access paper on common patterns of unsound abstractions in operating systems when the codebase or the programmers are more familiar with C than with Rust -- [Bare-metal Rust in Android](https://security.googleblog.com/2023/10/bare-metal-rust-in-android.html?m=1) -- [The Binder Linux driver is being rewritten in Rust](https://www.reddit.com/r/rust/comments/17lzdwt/the_binder_linux_driver_is_being_rewritten_in_rust/) -- [Microsoft is planning to make Rust a 1st class language across their engineering systems](https://nitter.net/dwizzzleMSFT/status/1720134540822520268?s=20) -- [Vivo Unveils BlueOS, Based on Rust Language](https://en.wikipedia.org/wiki/BlueOS) - - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - -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: - -- [Stabilize `async fn` and return-position `impl Trait` in trait](https://github.com/rust-lang/rust/pull/115822) -- [Distribute `cg_clif` as rustup component on the nightly channel](https://github.com/rust-lang/rust/pull/81746) - - Faster debug builds using [cranelift](https://cranelift.dev/) -- [Implement `gen` blocks in the 2024 edition](https://github.com/rust-lang/rust/pull/116447) - - Allows creating iterators through generators -- [Stabilize `[const_]pointer_byte_offsets`](https://github.com/rust-lang/rust/pull/116205) -- [Stabilize Ratified RISC-V Target Features](https://github.com/rust-lang/rust/pull/116485) -- [Guarantee that `char` has the same size and alignment as `u32`](https://github.com/rust-lang/rust/pull/116894) -- [feat: implement RFC 3127 `-Ztrim-paths`](https://github.com/rust-lang/cargo/pull/12625) - - Allows sanitizing file system paths used in panic messages → can reduce binary size - - See [RFC 3127](https://rust-lang.github.io/rfcs/3127-trim-paths.html) for details - - - -## `rust-osdev` Projects - -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. - - - -### [`spinning_top`](https://github.com/rust-osdev/spinning_top) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `spinning_top` crate provides a simple spinlock implementation based on the abstractions of the [`lock_api`](https://docs.rs/lock_api/0.4.1/lock_api/) crate. - -We merged the following changes this month: - -#### Features - -- [perf: inline everything](https://github.com/rust-osdev/spinning_top/pull/17) -- [feat: add backoff feature](https://github.com/rust-osdev/spinning_top/pull/16) -- [feat: add `RwSpinlock` readers-writer lock](https://github.com/rust-osdev/spinning_top/pull/18) -- [feat: add `arc_lock` feature and typedefs](https://github.com/rust-osdev/spinning_top/pull/25) -- [Prepare for v0.3.0 release](https://github.com/rust-osdev/spinning_top/pull/26) - -#### Other - -- [ci: build with all features](https://github.com/rust-osdev/spinning_top/pull/19) -- [docs: fix typo](https://github.com/rust-osdev/spinning_top/pull/23) -- [test: don't ignore statics example](https://github.com/rust-osdev/spinning_top/pull/22) -- [chore: remove `const_spinlock` function](https://github.com/rust-osdev/spinning_top/pull/20) -- [chore: remove deprecated `nightly` feature](https://github.com/rust-osdev/spinning_top/pull/21) - -Thanks to [@mkroening](https://github.com/mkroening) for their contributions! - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [Release](https://github.com/rust-osdev/uefi-rs/pull/958) -- [Release uefi-services-0.22.0](https://github.com/rust-osdev/uefi-rs/pull/960) -- [uefi-raw: Use workspace dependency for uguid](https://github.com/rust-osdev/uefi-rs/pull/967) -- [uefi/gop: fix memory leak](https://github.com/rust-osdev/uefi-rs/pull/969) -- [Allow indexing of `MemoryMap`.](https://github.com/rust-osdev/uefi-rs/pull/966) -- [uefi-services: Return event in init](https://github.com/rust-osdev/uefi-rs/pull/920) -- [Remove unused UefiRegularFileHandle type alias](https://github.com/rust-osdev/uefi-rs/pull/975) -- [uefi-services: Remove NonNull wrapper from system_table](https://github.com/rust-osdev/uefi-rs/pull/974) -- [Mark free_pages and free_pool as unsafe](https://github.com/rust-osdev/uefi-rs/pull/973) -- [uefi: Change IMAGE_HANDLE to an atomic pointer](https://github.com/rust-osdev/uefi-rs/pull/976) -- [uefi-services: Change SYSTEM_TABLE to an atomic pointer](https://github.com/rust-osdev/uefi-rs/pull/977) -- [Change Logger to use an atomic pointer internally](https://github.com/rust-osdev/uefi-rs/pull/978) -- [uefi: Use atomics instead of `static mut` in allocator](https://github.com/rust-osdev/uefi-rs/pull/979) -- [Use const interface pointers in protocol management functions](https://github.com/rust-osdev/uefi-rs/pull/981) - - - - - - - - - - - - -Thanks to [@JohnAZoidberg](https://github.com/JohnAZoidberg) and [@JarlEvanson](https://github.com/JarlEvanson) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following changes this month: - -- [fix(interrupts): replace compiler fences with potentially-synchronizing assembly](https://github.com/rust-osdev/x86_64/pull/440) -- [add `from_slice`` to VirtAddr](https://github.com/rust-osdev/x86_64/pull/442) -- [Enable dependabot to update actions](https://github.com/rust-osdev/x86_64/pull/420) -- [Bump actions/checkout from 3 to 4](https://github.com/rust-osdev/x86_64/pull/441) - -Thanks to [@Wasabi375](https://github.com/Wasabi375), [@joycebrum](https://github.com/joycebrum), and [@mkroening](https://github.com/mkroening) for their contributions! - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [aml: Implement DefOr, DefSubtract and DefLNot opcodes](https://github.com/rust-osdev/acpi/pull/199) -- [Compile for aarch64 and i686 targets on CI in addition to x86_64](https://github.com/rust-osdev/acpi/pull/201) - -Thanks to [@alnyan](https://github.com/alnyan) for their contribution! - -### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@nicholasbishop](https://github.com/nicholasbishop) - -The `ovmf-prebuilt` project provides pre-built [edk2](https://github.com/tianocore/edk2) releases to make it easier to set up OVMF. We merged the following improvement this month: - -- [Dockerfile: add riscv64 with QemuBuild.py](https://github.com/rust-osdev/ovmf-prebuilt/pull/3) - -Thanks to [@Firenezz](https://github.com/Firenezz) for their contribution! - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs: - -- [Update `rustix` dependency](https://github.com/rust-osdev/bootloader/pull/398) -- [Add an additional MB of space to the generated FAT partition](https://github.com/rust-osdev/bootloader/pull/397) - -Thanks to [@kennystrawnmusic](https://github.com/kennystrawnmusic) for their contribution! - -### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns) - -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: - -- [Fix potential panic due to huge layout](https://github.com/rust-osdev/linked-list-allocator/pull/79) - -Thanks to [@00xc](https://github.com/00xc) for their contribution! - - -## Other Projects - -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. - -### [RavnOS](https://github.com/ShyanJMC/RavnOS) - -RanvOS, (from norwegian; raven), is a operative system programmed in Rust. Aims to be; minimal, stable, secure and modern ( this maybe you know as; state-of-art ). - -The objective of RavnOS is make an operative system minimalist, self hosted (no external crates, all programmed by me), stable and secure. - -- October updates; - - [Minor code changes to follow good practices](https://github.com/ShyanJMC/RavnOS/commit/048cf546b0488fca9b4dabc2f9b38b6d93e373e1) -- September updates; - - [ Rune - Added "du" as built-in. Right now is functional but in the future I will add results sorted by size.](https://github.com/ShyanJMC/RavnOS/commit/abc8d639d51b39c712158b9b3a769b88a0b05b66) - - [ Rune - Now "ls" built-in recognize and show where points the symbolinc link](https://github.com/ShyanJMC/RavnOS/commit/625f2899fa70b6932cbc7899f84f905ebfecd429) - - [ Rune - Added show as built-in, expanded "info" built-in with more information. Show - Deleted because now is Rune's built-in](https://github.com/ShyanJMC/RavnOS/commit/b8e016d78943f6c64ae1e77072d5dba343268bca) - -### [`mkroening/interrupt-mutex`](https://github.com/mkroening/interrupt-mutex) -(Section written by [@mkroening](https://github.com/mkroening)) - -Building upon [last month's `interrupts` crate](@/this-month/2023-09/index.md#mkroening-interrupts), I created a mutex for sharing data with interrupt handlers or signal handlers. - -`RawInterruptMutex` wraps any [`lock_api::RawMutex`](https://docs.rs/lock_api/0.4.10/lock_api/trait.RawMutex.html), be it a [`parking_lot::RawMutex`](https://docs.rs/parking_lot/0.12.1/parking_lot/struct.RawMutex.html) on Unix or a [`spinning_top::RawSpinlock`](https://docs.rs/spinning_top/0.2.5/spinning_top/struct.RawSpinlock.html) on bare metal. -When such an `InterruptMutex` is locked, interrupts are disabled. -When the `InterruptMutex` is unlocked again, the previous interrupt state is restored. -This does not completely rule out deadlocks, since you can just enable interrupts manually when you should not. -Still, it is very convenient to just change the mutex type of data that is shared with interrupt handlers instead of disabling and enabling interrupts manually on every access. - -```rust -// Make a mutex of your choice into an `InterruptMutex`. -type InterruptSpinlock = interrupt_mutex::InterruptMutex; - -static X: InterruptSpinlock> = InterruptSpinlock::new(Vec::new()); - -fn interrupt_handler() { - X.lock().push(1); -} - -let v = X.lock(); -// Raise an interrupt -raise_interrupt(); -assert_eq!(*v, vec![]); -drop(v); - -// The interrupt handler runs - -let v = X.lock(); -assert_eq!(*v, vec![1]); -drop(v); -``` - -### [`mkroening/interrupt-ref-cell`](https://github.com/mkroening/interrupt-ref-cell) -(Section written by [@mkroening](https://github.com/mkroening)) - -Also building upon [last month's `interrupts` crate](@/this-month/2023-09/index.md#mkroening-interrupts), I created a `RefCell` for sharing data with interrupt handlers or signal handlers on the same thread. - -On the same thread (software thread or hardware thread (core)), a compiler fence is sufficient for synchronization with signal handlers (on Unix) and interrupt handlers (on bare metal). -In these cases, the new `InterruptRefCell` allows easy sharing without the overhead of mutexes and without the deadlock potential of mutexes. -Similar to `InterruptMutex`, this is helpful for disabling interrupts on accesses but does not protect you from manually enabling interrupts while holding a reference. - -```rust -use interrupt_ref_cell::{InterruptRefCell, LocalKeyExt}; - -thread_local! { - static X: InterruptRefCell> = InterruptRefCell::new(Vec::new()); -} - -fn interrupt_handler() { - X.with_borrow_mut(|v| v.push(1)); -} - -X.with_borrow(|v| { - // Raise an interrupt - raise_interrupt(); - assert_eq!(*v, vec![]); -}); - -// The interrupt handler runs - -X.with_borrow(|v| assert_eq!(*v, vec![1])); -``` - - - - - -## Join Us? - -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). diff --git a/content/this-month/2023-11/index.md b/content/this-month/2023-11/index.md deleted file mode 100644 index 3a5fa70d..00000000 --- a/content/this-month/2023-11/index.md +++ /dev/null @@ -1,148 +0,0 @@ -+++ -title = "This Month in Rust OSDev: November 2023" -date = 2023-12-07 - -[extra] -month = "November 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - -- [Officially Qualified - Ferrocene](https://ferrous-systems.com/blog/officially-qualified-ferrocene/) -- [Edge IoT with Rust on ESP: NTP](https://apollolabsblog.hashnode.dev/edge-iot-with-rust-on-esp-ntp) - - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - -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: - -- [Stabilize C string literals](https://github.com/rust-lang/rust/pull/117472) -- [Stabilize `ptr::addr_eq`](https://github.com/rust-lang/rust/pull/117968) -- [Feature gate enums in `offset_of`](https://github.com/rust-lang/rust/pull/117537) - - - -## `rust-osdev` Projects - -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. - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) - -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [Configure Renovate](https://github.com/rust-osdev/uefi-rs/pull/986) -- [uefi-raw: Add AbsolutePointerProtocol](https://github.com/rust-osdev/uefi-rs/pull/990) -- [Add SimpleFileSystemProtocol & file types to `uefi-raw`, use those types from `uefi`](https://github.com/rust-osdev/uefi-rs/pull/991) -- [uefi-raw: Add API guidelines](https://github.com/rust-osdev/uefi-rs/pull/992) -- [uefi-macros: Change uefi dev-dependency from version to path](https://github.com/rust-osdev/uefi-rs/pull/998) -- [Add per-package changelogs](https://github.com/rust-osdev/uefi-rs/pull/997) -- [test-runner: Improve uninstall_protocol_interface example](https://github.com/rust-osdev/uefi-rs/pull/931) -- [Release via Github Actions workflow](https://github.com/rust-osdev/uefi-rs/pull/999) -- [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) -- [uefi-raw: Fill in [un]install_multiple_protocol_interfaces pointers](https://github.com/rust-osdev/uefi-rs/pull/1000) -- [book: Use `cargo add` command](https://github.com/rust-osdev/uefi-rs/pull/1002) -- [doc: update PUBLISHING.md](https://github.com/rust-osdev/uefi-rs/pull/959) -- [uefi(data-types): allow `is_ascii` function on `Char16` and `CStr16`](https://github.com/rust-osdev/uefi-rs/pull/1008) - - - -Thanks to [@RaitoBezarius](https://github.com/RaitoBezarius) for their contributions! - - -### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) - -Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns) - -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: - -- [fuzz: remove potential undefined behavior in chaos harness](https://github.com/rust-osdev/linked-list-allocator/pull/80) - -Thanks to [@00xc](https://github.com/00xc) for their contribution! - - -### [`pic8259`](https://github.com/rust-osdev/pic8259) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `pic_8259` crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs). - -We merged the following PR this month: - -- [docs: Remove the redundant word and space](https://github.com/rust-osdev/pic8259/pull/5) - -Thanks to [@zoo868e](https://github.com/zoo868e) for their contribution! - -## Other Projects - -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. - -No projects updates were submitted this month. - - - - - -## Join Us? - -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). diff --git a/content/this-month/2023-12/index.md b/content/this-month/2023-12/index.md deleted file mode 100644 index d29e459a..00000000 --- a/content/this-month/2023-12/index.md +++ /dev/null @@ -1,219 +0,0 @@ -+++ -title = "This Month in Rust OSDev: December 2023" -date = 2024-01-05 - -[extra] -month = "December 2023" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - -- [Motūrus OS](https://github.com/moturus/motor-os) - a new Rust-based Operating System targeting virtual machines. -- [Maestro is a Unix-like kernel and operating system written from scratch in Rust](https://blog.lenot.re/a/introduction) -- [MOROS 0.10.2](https://github.com/vinc/moros/releases/tag/v0.10.2) -- [The first rust driver has been merged into netdev/net-next](https://www.reddit.com/r/rust/comments/18j23d3/the_first_rust_driver_has_been_merged_into/) -- [Linus on Rust in the Linux kernel (December 2023)](https://www.reddit.com/r/rust/comments/18e6qrl/linus_on_rust_in_the_linux_kernel_december_2023/) -- [Rust for Linux — in space](https://lwn.net/Articles/954974/) -- [A `no_std` client for PostgreSQL](https://www.reddit.com/r/rust/comments/18infyx/a_no_std_client_for_postgresql/) -- The Embedded Rustacean: [Issue #8](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-8), [Issue #9](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-9), and [Issue #10](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-10) -- [`cargo-ft`](https://github.com/stormshield/cargo-ft) (cargo filter target) is a cargo extension for specifying supported targets for a crate - - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - -- [Advisory: Miscompilation with `opt-level="z"` on Cortex-M](https://github.com/rust-embedded/cortex-m/discussions/503) -- [Add `core::intrinsics::simd`](https://github.com/rust-lang/rust/pull/118853) -- [Stabilize `ip_in_core` feature](https://github.com/rust-lang/rust/pull/119276) -- [Stabilize `ptr::{from_ref, from_mut}`](https://github.com/rust-lang/rust/pull/117824) -- [Add all known `target_feature` configs to check-cfg](https://github.com/rust-lang/rust/pull/118908) -- [Add `-Zfunction-return={keep,thunk-extern}` option](https://github.com/rust-lang/rust/pull/116892) -- [Add lint against ambiguous wide pointer comparisons](https://github.com/rust-lang/rust/pull/117758) -- [Add new tier 3 `aarch64-apple-watchos` target](https://github.com/rust-lang/rust/pull/119074) -- [Add more SIMD platform-intrinsics](https://github.com/rust-lang/rust/pull/117953) - - - -## `rust-osdev` Projects - -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. - - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs: - -- [Fix: Enable test runner again](https://github.com/rust-osdev/bootloader/pull/407) -- [Fix: Mark `ramdisk` as used in memory map](https://github.com/rust-osdev/bootloader/pull/408) -- [Release `v0.11.5`](https://github.com/rust-osdev/bootloader/pull/410) -- [Embed bios and uefi binaries](https://github.com/rust-osdev/bootloader/pull/395) -- [Add a `take` method to `Optional`](https://github.com/rust-osdev/bootloader/pull/411) - -Thanks to [@mysteriouslyseeing](https://github.com/mysteriouslyseeing) for their contribution! - - -### [`xhci`](https://github.com/rust-osdev/xhci) -Maintained by [@toku-sa-n](https://github.com/toku-sa-n) - -The `xhci` crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month: - -- [Clarify the exact behavior of RW1C setters](https://github.com/rust-osdev/xhci/pull/160) -- [PR for Misc Issue #164](https://github.com/rust-osdev/xhci/pull/167) -- [Forgot to add a changelog for #167](https://github.com/rust-osdev/xhci/pull/168) -- [A little more `Doorbell` renaming](https://github.com/rust-osdev/xhci/pull/170) -- [Add an issue template](https://github.com/rust-osdev/xhci/pull/171) -- [Changelog for #170](https://github.com/rust-osdev/xhci/pull/172) - -Thanks to [@paulsohn](https://github.com/paulsohn) for their contribution! - - -### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@nicholasbishop](https://github.com/nicholasbishop) - -The `ovmf-prebuilt` project provides pre-built [edk2](https://github.com/tianocore/edk2) releases to make it easier to set up OVMF. We merged the following improvement this month: - -- [Configure Renovate](https://github.com/rust-osdev/ovmf-prebuilt/pull/5) -- [Enable the HTTP build flag](https://github.com/rust-osdev/ovmf-prebuilt/pull/15) -- [renovate: Change stategy to update-lockfile](https://github.com/rust-osdev/ovmf-prebuilt/pull/16) -- [Update Rust crate anyhow to v1.0.78](https://github.com/rust-osdev/ovmf-prebuilt/pull/17) - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [Add some new char and string convenience impls/methods](https://github.com/rust-osdev/uefi-rs/pull/1013) -- [Simplify DevicePath `to_string` return type](https://github.com/rust-osdev/uefi-rs/pull/1014) -- [xtask: Allow unions in uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/1018) -- [uefi-raw: Add Ipv4Address, Ipv6Address, and MacAddress types](https://github.com/rust-osdev/uefi-rs/pull/1019) -- [uefi-raw: Add ServiceBindingProtocol and Dhcp4Protocol](https://github.com/rust-osdev/uefi-rs/pull/1020) -- [fs: Remove a couple debug logs](https://github.com/rust-osdev/uefi-rs/pull/1015) -- [uefi-raw: Add HttpProtocol, Ip4Config2Protocol, and TlsConfigurationProtocol](https://github.com/rust-osdev/uefi-rs/pull/1021) -- [renovate: Change stategy to update-lockfile](https://github.com/rust-osdev/uefi-rs/pull/1025) -- [xtask: Upgrade OVMF prebuilt](https://github.com/rust-osdev/uefi-rs/pull/1027) -- [Fix logger connection after opening serial protocol](https://github.com/rust-osdev/uefi-rs/pull/1031) -- [uefi-raw: Add `IpAddress` type](https://github.com/rust-osdev/uefi-rs/pull/1032) - - - - - - - - - - - - - - -### [`pci_types`](https://github.com/rust-osdev/pci_types) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `pci_types` library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month: - -- [Add functionality needed to initialize PCIe on RISC-V](https://github.com/rust-osdev/pci_types/pull/10) - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [fix: issue #200 increment `local_nmi_line_count` and `processor_count` on X2APIC](https://github.com/rust-osdev/acpi/pull/204) - -Thanks to [@ytakano](https://github.com/ytakano) for their contributions! - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -The `multiboot2` crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month: - - - -- [updating header to not include multiboot with alloc](https://github.com/rust-osdev/multiboot2/pull/195) -- [prepare release multiboot2-header-v0.3.2](https://github.com/rust-osdev/multiboot2/pull/197) - -Thanks to [@elbiazo](https://github.com/elbiazo)for their contribution! - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following changes this month: - -- [CI: Run `semver-checks` using stable Rust](https://github.com/rust-osdev/x86_64/pull/444) - - -## Other Projects - -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. - - - - - -## Join Us? - -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). diff --git a/content/this-month/2024-01/index.md b/content/this-month/2024-01/index.md deleted file mode 100644 index 44713d28..00000000 --- a/content/this-month/2024-01/index.md +++ /dev/null @@ -1,219 +0,0 @@ -+++ -title = "This Month in Rust OSDev: January 2024" -date = 2024-02-08 - -[extra] -month = "January 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [This Month in Redox](https://redox-os.org/news/this-month-240131/) -- [x86 Kernel Development & Relocatable Binaries – What I learned about Toolchains and Relocatable Code](https://phip1611.de/blog/x86-kernel-development-relocatable-binaries/) - - This post is roughly a summary of the obscure knowledge Philipp learned - about toolchains and relocatable code in the last couple of years with a - focus on relocatable x86_64 multiboot2 kernels for legacy BIOS boot. -- The Embedded Rustacean [Issue 11](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-11) and [Issue 12](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-12) -- [FOSDEM 2024](https://fosdem.org/2024/) - - [News from the Hermit Crab — From Soundness Foundations to GPU Virtualization](https://fosdem.org/2024/schedule/event/fosdem-2024-3375-news-from-the-hermit-crab-from-soundness-foundations-to-gpu-virtualization/) - - [Making VirtIO sing - implementing virtio-sound in rust-vmm project](https://fosdem.org/2024/schedule/event/fosdem-2024-1910-making-virtio-sing-implementing-virtio-sound-in-rust-vmm-project/) - - [The case for a virtual Rust stateless codec driver](https://fosdem.org/2024/schedule/event/fosdem-2024-2985-the-case-for-a-virtual-rust-stateless-codec-driver/) - - [An open-source, open-hardware offline finding system](https://fosdem.org/2024/schedule/event/fosdem-2024-3264-an-open-source-open-hardware-offline-finding-system/) -- [Making an RISC-V OS (Part 1): Project Setup](https://web.archive.org/web/20240619011057/https://traxys.me/riscv_os_setup.html) -- [Looking for people to help out with CharlotteOS (Beginners are welcome!)](https://www.reddit.com/r/osdev/comments/1aeffha/looking_for_people_to_help_out_with_charlotteos/) -- [The Linux kernel now contains the first useful component written in Rust](https://fosstodon.org/@kernellogger/111741507899977461) -- [BPF Opens Door to Linux Extensible Scheduling (Maybe with Rust!)](https://thenewstack.io/bpf-opens-a-door-to-linux-dynamic-scheduling-maybe-with-rust/) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Stabilize single-field offset_of](https://github.com/rust-lang/rust/pull/118799) -- [LLVM 18 x86 data layout update](https://github.com/rust-lang/rust/pull/116672) -- [cargo: Strip debuginfo when debuginfo is not requested](https://github.com/rust-lang/cargo/pull/13257) - -## `rust-osdev` Projects - -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. - - - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PR this month: - -- [expose `Cr3::write_raw`](https://github.com/rust-osdev/x86_64/pull/445) - -We also merged the following changes into the `next` branch, which will be released as `v0.15` soon: - -- [Update `next` branch with latest changes from `master`](https://github.com/rust-osdev/x86_64/pull/447) -- [remove deprecated from_bits_unchecked functions](https://github.com/rust-osdev/x86_64/pull/449) -- [make `HandlerFuncType` unsafe](https://github.com/rust-osdev/x86_64/pull/450) -- [Update docs to clarify new `set_handler_fn` behavior](https://github.com/rust-osdev/x86_64/pull/451) - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following nightly fixes: - -- [Fix data layout for stage 3 target](https://github.com/rust-osdev/bootloader/pull/413) -- [Release `v0.11.6`](https://github.com/rust-osdev/bootloader/pull/414) -- [[v0.9] Fix data layout for `x86_64-bootloader` target](https://github.com/rust-osdev/bootloader/pull/415) - - Released as v0.9.24 - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [Add `Debug` impl for `PhysicalMapping` even when `T` is not `Debug`](https://github.com/rust-osdev/acpi/pull/206) - -Thanks to [@Spartan2909](https://github.com/Spartan2909) for their contribution! - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [Fix broken UEFI spec link in uefi-raw README.md](https://github.com/rust-osdev/uefi-rs/pull/1046) -- [book: Add a page on building drivers](https://github.com/rust-osdev/uefi-rs/pull/1047) -- [book: Add a link to rust's UEFI target docs](https://github.com/rust-osdev/uefi-rs/pull/1048) -- [uefi-raw: Add LoadFileProtocol and LoadFile2Protocol](https://github.com/rust-osdev/uefi-rs/pull/1022) - - - - - - -Thanks to [@gurry](https://github.com/gurry) for their contribution! - - -## Other Projects - -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. - - - - -### [`phip1611/phipsboot`](https://github.com/phip1611/phipsboot) -(Section written by [@phip1611](https://github.com/phip1611)) - -I'd like to announce my project PhipsBoot. 🎉 PhipsBoot is a relocatable x86_64 -bootloader for legacy x86_64 boot written in Rust and assembly. It is intended -to be loaded by GRUB via Multiboot2, where it uncovers its main benefit: It is -relocatable in physical memory without having relocation information in the -ELF! It outsources a lot of complexity to GRUB which also better fits into -the ecosystem and makes it easier usable. The README contains more background -about why I have chosen to use GRUB instead of writing my own stage 1 -bootloader. - -This project combines a lot of toolchain and binary knowledge and experience I -collected and gained in recent years about legacy x86_64 boot. **The main -contribution IMHO is how the binary is assembled and that the thing boots -with all the properties described in the README, but not the high-level -functionality itself.** - -I am especially proud of the well-commented structure of the assembly files. -For example the whole page-table mappings are done IMHO very nicely even tho -it is assembly language. Also, I think it turned out quite cool how I configured -the linker script. I hope this can be a learning resource for others! - -TL;DR: It is a learning ground and a reference for how to solve the relocation -problem with Multiboot2 and GRUB, as GRUB is not able to load DYN ELFs. - -You have multiple options for testing it out: - -- `$ cloud-hypervisor --debug-console file=log.txt --kernel ./build/phipsboot.elf64` (using Xen PVH) -- `$ qemu-system-x86_64 -kernel ./build/phipsboot.elf32 -debugcon stdio` (using Multiboot 1) - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Update data layouts in target specifications](https://github.com/phil-opp/blog_os/pull/1271) -- [change some format errors for chinese edition minimal kernel](https://github.com/phil-opp/blog_os/pull/1274) -- [fix testing and paging introduction chapter errors in zh-CN translation](https://github.com/phil-opp/blog_os/pull/1262) -- [[Edition 3] fix a lil typo](https://github.com/phil-opp/blog_os/pull/1270) -- [[Edition 3] Fix typos in code for `embedded_graphics` crate in chapter 3](https://github.com/phil-opp/blog_os/pull/1269) -- [[Edition 3] Fix embedded_graphics code + typo in chapter 3](https://github.com/phil-opp/blog_os/pull/1276) -- [[Edition 3] Fix typo in chapter 2](https://github.com/phil-opp/blog_os/pull/1265) -- [[Edition 3] Fix formatting in chapter 2](https://github.com/phil-opp/blog_os/pull/1266) - -Thanks to [@acyanbird](https://github.com/acyanbird), [@proudmuslim-dev](https://github.com/proudmuslim-dev), and [@lachsdachs](https://github.com/lachsdachs) for their contributions! - -## Join Us? - -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). diff --git a/content/this-month/2024-02/index.md b/content/this-month/2024-02/index.md deleted file mode 100644 index 3d7651f1..00000000 --- a/content/this-month/2024-02/index.md +++ /dev/null @@ -1,159 +0,0 @@ -+++ -title = "This Month in Rust OSDev: February 2024" -date = 2024-03-07 - -[extra] -month = "February 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [Redox OS - Porting Strategy](https://www.redox-os.org/news/porting-strategy/) -- [This Month in Redox](https://redox-os.org/news/this-month-240229/) -- [Tock Compiles on Stable Rust!](https://tockos.org/blog/2024/talking-tock-55/) -- [Making an RISC-V OS (Part 2): Kernel in virtual addresses](https://web.archive.org/web/20240714023153/https://traxys.me/riscv_os_2.html) -- 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) -- [Linux Kernel: Rewrite the VP9 codec library in Rust](https://lore.kernel.org/lkml/20240227215146.46487-1-daniel.almeida@collabora.com/) -- [Anouncing stabby 3.0.0](https://www.reddit.com/r/rust/comments/1amjknw/anouncing_stabby_300_and_rustconf_video_available/) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [only set noalias on Box with the global allocator](https://github.com/rust-lang/rust/pull/122018) -- [Add stubs in IR and ABI for `f16` and `f128`](https://github.com/rust-lang/rust/pull/121728) -- [`f16` and `f128` step 2: intrinsics](https://github.com/rust-lang/rust/pull/121841) -- [Add armv8r-none-eabihf target for the Cortex-R52](https://github.com/rust-lang/rust/pull/110482) -- [Add a new `wasm32-wasip1` target to rustc](https://github.com/rust-lang/rust/pull/120468) -- [Add a new `wasm32-wasi-preview2` target](https://github.com/rust-lang/rust/pull/119616) -- [rename `ptr::invalid` -> `ptr::without_provenance`](https://github.com/rust-lang/rust/pull/117658) - -## `rust-osdev` Projects - -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. - - - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [Fix data layout in custom target used for testing](https://github.com/rust-osdev/x86_64/pull/454) -- [optimize `from_page_table_indices`](https://github.com/rust-osdev/x86_64/pull/456) -- [mark as 0.15 as beta release](https://github.com/rust-osdev/x86_64/pull/455) -- [Release v0.14.12](https://github.com/rust-osdev/x86_64/pull/457) -- [Fix release script](https://github.com/rust-osdev/x86_64/pull/459) -- [Merge next into master: releasing `v0.15.0-beta`](https://github.com/rust-osdev/x86_64/pull/458) -- [Update data layout of test target for LLVM 18](https://github.com/rust-osdev/x86_64/pull/460) -- [optimize `Step` impl for `VirtAddr`](https://github.com/rust-osdev/x86_64/pull/462) -- [Miscellaneous improvements](https://github.com/rust-osdev/x86_64/pull/464) -- [Release v0.15.0](https://github.com/rust-osdev/x86_64/pull/463) - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - - - - -- [Add a method to create a MemoryMap from a raw buffer](https://github.com/rust-osdev/uefi-rs/pull/1074) - -Thanks to [@bjorn3](https://github.com/bjorn3) for their contribution! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [Set `NO_EXECUTE` flag for all writable memory regions](https://github.com/rust-osdev/bootloader/pull/409) -- [[v0.9] Fix data layout for custom targets for LLVM 18](https://github.com/rust-osdev/bootloader/pull/421) -- [[v0.9] Fix map errors during kernel loading](https://github.com/rust-osdev/bootloader/pull/422) -- [[v0.9] Fix: unify flags if multiple segments are mapped to same frame with different flags](https://github.com/rust-osdev/bootloader/pull/423) -- [Fix invalid mapping to zero page caused by off-by-one bug](https://github.com/rust-osdev/bootloader/pull/424) -- [adapt data layout to match LLVM's](https://github.com/rust-osdev/bootloader/pull/420) -- [Release `v0.11.7`](https://github.com/rust-osdev/bootloader/pull/426) -- [Remove unused paging imports](https://github.com/rust-osdev/bootloader/pull/430) - -Thanks to [@vinc](https://github.com/vinc) and [@tsatke](https://github.com/tsatke) for their contributions! - -## Other Projects - -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. - - - -No projects updates were submitted this month. - -## Join Us? - -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). diff --git a/content/this-month/2024-03/index.md b/content/this-month/2024-03/index.md deleted file mode 100644 index 4d7280a9..00000000 --- a/content/this-month/2024-03/index.md +++ /dev/null @@ -1,233 +0,0 @@ -+++ -title = "This Month in Rust OSDev: March 2024" -date = 2024-04-10 - -[extra] -month = "March 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [An IRC client in your motherboard](https://axleos.com/an-irc-client-in-your-motherboard/) -- [octox: Writing a Unix-like OS in Rust](https://vmm.dev/en/rust/osinrust.md) -- [This Month in Redox](https://redox-os.org/news/this-month-240330/) -- [Redox Kernel Improvements](https://redox-os.org/news/kernel-10/) -- [MOROS 0.10.3](https://github.com/vinc/moros/releases/tag/v0.10.3) -- [The server chose violence: Hubris's oddest syscall](https://cliffle.com/blog/hubris-reply-fault/) -- [Red Hat's Long, Rust'ed Road Ahead For Nova As Nouveau Driver Successor](https://www.phoronix.com/news/Red-Hat-Nova-Rust-Abstractions) -- [A memory model for Rust code in the Linux kernel](https://lwn.net/SubscriberLink/967049/0ffb9b9ed8940013/) -- [Embedded Rust Bluetooth on ESP: BLE Client](https://apollolabsblog.hashnode.dev/embedded-rust-bluetooth-on-esp-ble-client) -- [EtherCrab 0.4: Distributed Clocks, `io_uring`, Derives, Oh My](https://wapl.es/ethercrab-0-4-io-uring-derives-ethercat-distributed-clocks/) -- The Embedded Rustacean: [Issue 15](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-15) and [Issue 16](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-16) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Add basic trait impls for `f16` and `f128`](https://github.com/rust-lang/rust/pull/123085) -- [Add aarch64-apple-visionos and aarch64-apple-visionos-sim tier 3 targets](https://github.com/rust-lang/rust/pull/121419) -- [Changes to Rust's WASI targets](https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html) -- [RFC: patchable-function-entry](https://github.com/rust-lang/rfcs/pull/3543) was merged -- [unsafe attributes RFC](https://github.com/rust-lang/rfcs/pull/3325) completed FCP -- FCP complete to stabilize [raw slice len() method (slice_ptr_len, const_slice_ptr_len)](https://github.com/rust-lang/rust/issues/71146) -- [stabilize ptr.is_aligned](https://github.com/rust-lang/rust/pull/121948) -- [downgrade ptr.is_aligned_to crate-private](https://github.com/rust-lang/rust/pull/121920) -- [transmute: caution against int2ptr transmutation](https://github.com/rust-lang/rust/pull/122379) -- New RFC: [Add realign_stack attribute to rustc](https://github.com/rust-lang/rfcs/pull/3594) -- [`c_unwind` full stabilization request: change in extern "C" behavior](https://github.com/rust-lang/rust/issues/115285) - -## `rust-osdev` Projects - -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. - - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [AML: Correctly invoke `_SEG`,`_BBN`, and `_ADR` methods for PCI region accesses, plus assorted bits](https://github.com/rust-osdev/acpi/pull/208) -- [acpi: Add `SdtHeaderIterator` to get all headers.](https://github.com/rust-osdev/acpi/pull/202) -- [aml: add extra debug info on parsing error](https://github.com/rust-osdev/acpi/pull/207) -- [AML: implement boolean field](https://github.com/rust-osdev/acpi/pull/211) - -Thanks to [@fslongjin](https://github.com/fslongjin) and [@rw-vanc](https://github.com/rw-vanc) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [miscellaneous improvements](https://github.com/rust-osdev/x86_64/pull/464) -- [release v0.15.0](https://github.com/rust-osdev/x86_64/pull/463) -- [doc: added help on update_flags to get flags](https://github.com/rust-osdev/x86_64/pull/465) -- [Feat: add constructor for `InterruptStackFrameValue`](https://github.com/rust-osdev/x86_64/pull/467) -- [properly jump the address gap in CleanUp](https://github.com/rust-osdev/x86_64/pull/469) -- [expose DEBUG_STR more directly](https://github.com/rust-osdev/x86_64/pull/471) -- [add write_pcid_no_flush](https://github.com/rust-osdev/x86_64/pull/472) -- [release 0.15.1](https://github.com/rust-osdev/x86_64/pull/473) -- [Implement function for creating a gdt in a const environment](https://github.com/rust-osdev/x86_64/pull/413) - -Thanks to [@uglyoldbob](https://github.com/uglyoldbob), [@GZTimeWalker](https://github.com/GZTimeWalker), and [@Sxmourai](https://github.com/Sxmourai) for their contributions! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [Change gitter badge to zulip badge](https://github.com/rust-osdev/bootloader/pull/431) -- [avoid 32-bit relocation to `__BOOTLOADER_CONFIG`](https://github.com/rust-osdev/bootloader/pull/428) - -Thanks to [@nicholasbishop](https://github.com/nicholasbishop), and [@Freax13](https://github.com/Freax13) for their contributions! - - -### [`ucs2-rs`](https://github.com/rust-osdev/ucs2-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -- [Update Cargo.toml metadata](https://github.com/rust-osdev/ucs2-rs/pull/16) -- [Add a short changelog](https://github.com/rust-osdev/ucs2-rs/pull/17) -- [Add auto-release workflow](https://github.com/rust-osdev/ucs2-rs/pull/18) -- [Set MSRV and add CI job to check it](https://github.com/rust-osdev/ucs2-rs/pull/19) -- [Improve test coverage](https://github.com/rust-osdev/ucs2-rs/pull/20) - - -### [`pic8259`](https://github.com/rust-osdev/pic8259) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `pic_8259` crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs). - -We merged the following PR this month: - -- [Update x86_64 dependency to version 0.15.0](https://github.com/rust-osdev/pic8259/pull/6) - -Thanks to [@iTitus](https://github.com/iTitus) for their contribution! - - -### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@nicholasbishop](https://github.com/nicholasbishop) - -The `ovmf-prebuilt` project provides pre-built [edk2](https://github.com/tianocore/edk2) releases to make it easier to set up OVMF. We merged the following improvement this month: - -- [Transition to a workspace](https://github.com/rust-osdev/ovmf-prebuilt/pull/39) -- [Add empty ovmf-prebuilt package](https://github.com/rust-osdev/ovmf-prebuilt/pull/45) -- [fix(deps): update rust crate clap to v4.5.4](https://github.com/rust-osdev/ovmf-prebuilt/pull/46) - - -### [`volatile`](https://github.com/rust-osdev/volatile) -Maintained by [@phil-opp](https://github.com/phil-opp) - -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. - -We merged the following PRs this month: - -- [Implement some useful traits](https://github.com/rust-osdev/volatile/pull/41) -- [Fix clippy warning about clone implementation](https://github.com/rust-osdev/volatile/pull/44) -- [Fix build with `very_unstable` feature](https://github.com/rust-osdev/volatile/pull/45) -- [Remove `Sized` requirement for `Send` and `Sync` on `VolatileRef`](https://github.com/rust-osdev/volatile/pull/42) - -Thanks to [@nspin](https://github.com/nspin) and [@kadiwa4](https://github.com/kadiwa4) for their contributions! - - -### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns) - -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: - -- [Remove stabilized feature](https://github.com/rust-osdev/linked-list-allocator/pull/81) - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - - - -- [uefi: Derive Hash for all char and string types](https://github.com/rust-osdev/uefi-rs/pull/1086) -- [uefi_raw: Add firmware_storage module](https://github.com/rust-osdev/uefi-rs/pull/1085) -- [Use auto-release from crates.io to release](https://github.com/rust-osdev/uefi-rs/pull/1068) -- [uefi-services: Use "dep:" syntax](https://github.com/rust-osdev/uefi-rs/pull/1091) -- [release: uefi-raw-0.5.1, uefi-0.27.0, uefi-services-0.24.0](https://github.com/rust-osdev/uefi-rs/pull/1092) -- [Fix some new lints/warnings](https://github.com/rust-osdev/uefi-rs/pull/1103) - - -## Other Projects - -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. - - - -No projects updates were submitted this month. - -## Join Us? - -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). diff --git a/content/this-month/2024-04/index.md b/content/this-month/2024-04/index.md deleted file mode 100644 index 29bd1373..00000000 --- a/content/this-month/2024-04/index.md +++ /dev/null @@ -1,272 +0,0 @@ -+++ -title = "This Month in Rust OSDev: April 2024" -date = 2024-05-03 - -[extra] -month = "April 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [Testing Virtualization Stacks by Utilizing Mini Operating System Kernels](https://cyberus-technology.de/articles/testing-virtualization-stacks-utilizing-mini-kernels) \ - Multiple mini OS kernels help Cyberus Technology to investigate issues - related to complicated problems in virtualization stacks, such as never - delivered interrupts. Although the Cyberus Guest Tests are written in C++, - they help to find issues and problems in Cloud-Hypervisor, - **a VMM written in Rust**. For better debugging capabilities of the Guest - Tests, Cyberus Technology [upstreamed support for the Debug Console](https://github.com/cloud-hypervisor/cloud-hypervisor/pull/6012) - to Cloud Hypervisor, which is present since `v38`. The [source code of the Guest Tests is on GitHub](https://github.com/cyberus-technology/guest-tests). -- [Redox OS - April 2024 Report](https://redox-os.org/news/this-month-240430/) -- [Giving Rust a chance for in-kernel codecs](https://lwn.net/SubscriberLink/970565/ac5ffc2e9ad20f1e/) -- Video: [From C to Rust: Bringing Rust Abstractions to Embedded Linux](https://www.youtube.com/watch?v=hmQr4fq6sH0) -- The Embedded Rustacean [Issue #17](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-17) and [Issue #18](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-18) -- [Rust-Written LAVD Kernel Scheduler Shows Promising Results For Linux Gaming](https://www.phoronix.com/news/LAVD-Scheduler-Linux-Gaming) -- Video: [LinuxFest Northwest 2024: Meet COSMIC DE](https://www.youtube.com/watch?v=JHLfsWhDvz0) -- New [`offset-allocator`](https://github.com/pcwalton/offset-allocator) crate, providing a fast, simple, hard real time allocator - - not `no_std` yet, but should be easy to port (only requires a `Vec`-like type) -- [Making an RISC-V OS (Part 3): Managing free memory](https://web.archive.org/web/20241006213624/https://traxys.me/riscv_os_buddy.html) -- [Asterinas](https://asterinas.github.io/): a secure, fast, and general-purpose OS kernel written in Rust and compatible with Linux - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [`f16` and `f128` step 4: basic library support](https://github.com/rust-lang/rust/pull/122470) -- [Stabilise `inline_const`](https://github.com/rust-lang/rust/pull/104087) -- [Introduce perma-unstable `wasm-c-abi` flag](https://github.com/rust-lang/rust/pull/117919) -- [Stabilize `(const_)slice_ptr_len` and `(const_)slice_ptr_is_empty_nonnull`](https://github.com/rust-lang/rust/pull/123868) -- [Add `aarch64-apple-visionos` and `aarch64-apple-visionos-sim` tier 3 targets](https://github.com/rust-lang/rust/pull/121419) - -## `rust-osdev` Projects - -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. - - - -### [`volatile`](https://github.com/rust-osdev/volatile) -Maintained by [@phil-opp](https://github.com/phil-opp) - -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. - -We merged the following PRs this month: - -- [Add `VolatileRef::restrict` and `VolatilePtr::restrict`](https://github.com/rust-osdev/volatile/pull/47) -- [Add `VolatileRef::borrow` and `VolatileRef::borrow_mut`](https://github.com/rust-osdev/volatile/pull/46) -- [docs: remove unused `NonNull` imports](https://github.com/rust-osdev/volatile/pull/48) -- [Add support for nested `map_field` operations](https://github.com/rust-osdev/volatile/pull/50) -- [Add `#[derive(VolatileFieldAccess)]` for easy, access-limited field-based access to structs](https://github.com/rust-osdev/volatile/pull/49) -- [fix(Cargo.toml): add categories](https://github.com/rust-osdev/volatile/pull/52) -- [ci: migrate away from unmaintained actions](https://github.com/rust-osdev/volatile/pull/51) -- [Enable all features and `doc_auto_cfg` on docs.rs](https://github.com/rust-osdev/volatile/pull/55) -- [Release v0.5.3](https://github.com/rust-osdev/volatile/pull/53) -- [Fix warnings and deny warnings in CI](https://github.com/rust-osdev/volatile/pull/56) -- [fix(macro): support `#[repr(align(N))]`](https://github.com/rust-osdev/volatile/pull/57) -- [fix(access): properly seal access traits](https://github.com/rust-osdev/volatile/pull/59) -- [Release v0.5.4](https://github.com/rust-osdev/volatile/pull/62) -- [Add a semver checks CI job](https://github.com/rust-osdev/volatile/pull/63) -- [feat: introduce `RestrictAccess` and generalize `restrict` to all access types](https://github.com/rust-osdev/volatile/pull/60) -- [feat: implement derive macro for all access types](https://github.com/rust-osdev/volatile/pull/61) -- [fix: add `#[must_use]` to volatile types, `read`, and `as_raw_ptr`](https://github.com/rust-osdev/volatile/pull/58) - -Thanks to [@mkroening](https://github.com/mkroening) for their contributions! - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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. -Recently, we deprecated the [`uefi-services`] crate and removed all usages from -the [`uefi`](https://github.com/rust-osdev/uefi-rs) repository. A new drop-in -replacement exists in [`uefi::helpers`](https://docs.rs/uefi/latest/uefi/helpers/index.html). - -The test of time showed us that having a single crate with multiple cargo -features is a better and more productive way forward with less maintenance -burden - for users/consumers as well as maintainers. - -Please find more information in: -- -- - -We merged the following PRs this month: - -- [Add timestamp protocol](https://github.com/rust-osdev/uefi-rs/pull/1109) -- [Replace some `as` casts](https://github.com/rust-osdev/uefi-rs/pull/1108) -- [uefi: Add UnalignedSlice::as_ptr](https://github.com/rust-osdev/uefi-rs/pull/1117) -- [Add device path text protocols to uefi-raw and re-use in uefi](https://github.com/rust-osdev/uefi-rs/pull/1118) -- [uefi-services: Fix warning with `--no-default-features`](https://github.com/rust-osdev/uefi-rs/pull/1119) -- [uefi: Add more derives for Handle and Event](https://github.com/rust-osdev/uefi-rs/pull/1120) -- [misc: nix/niv updates and typo updates](https://github.com/rust-osdev/uefi-rs/pull/1125) -- [doc: update fs documentation](https://github.com/rust-osdev/uefi-rs/pull/1126) -- [doc: update README](https://github.com/rust-osdev/uefi-rs/pull/1127) -- [Deprecate `uefi-services` and add `uefi::helpers` as replacement](https://github.com/rust-osdev/uefi-rs/pull/1128) -- [Fix some warnings, and ensure CI catches them in the future](https://github.com/rust-osdev/uefi-rs/pull/1134) -- [release: uefi-raw-0.5.2, uefi-0.28.0, uefi-services-0.25.0](https://github.com/rust-osdev/uefi-rs/pull/1140) -- [build(deps): bump rustls from 0.22.2 to 0.22.4](https://github.com/rust-osdev/uefi-rs/pull/1142) -- [Nuke uefi services from repository](https://github.com/rust-osdev/uefi-rs/pull/1141) -- [[Misc] Add ResetNotification protocol. Add Misc to uefi-test-runner.](https://github.com/rust-osdev/uefi-rs/pull/1116) -- [Minor import/export cleanups](https://github.com/rust-osdev/uefi-rs/pull/1144) -- [uefi: Drop the panic-on-logger-errors feature](https://github.com/rust-osdev/uefi-rs/pull/1143) -- [Replace `cstr16!` with a declarative macro](https://github.com/rust-osdev/uefi-rs/pull/1145) -- [Replace `cstr8!` with a declarative macro](https://github.com/rust-osdev/uefi-rs/pull/1151) -- [Remove xtask from MSRV build and update clap](https://github.com/rust-osdev/uefi-rs/pull/1152) - - - - - - - - - - - - - - - - - - - -Thanks to [@sky5454](https://github.com/sky5454) for their contributions! - -### [`ucs2-rs`](https://github.com/rust-osdev/ucs2-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -- [Add `ucs2_cstr!` macro](https://github.com/rust-osdev/ucs2-rs/pull/21) -- [release: 0.3.3](https://github.com/rust-osdev/ucs2-rs/pull/22) - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [AML: Allow Field in ToInteger (rebased)](https://github.com/rust-osdev/acpi/pull/213) - -Thanks to [@rw-vanc](https://github.com/rw-vanc) for their contribution! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [docs: fix and detect warnings](https://github.com/rust-osdev/x86_64/pull/475) -- [docs: add aliases for `in{,b,w,l}` and `out{,b,w,l}`](https://github.com/rust-osdev/x86_64/pull/474) -- [ci: migrate away from unmaintained actions](https://github.com/rust-osdev/x86_64/pull/478) -- [chore: migrate from legacy `rust-toolchain` to `rust-toolchain.toml`](https://github.com/rust-osdev/x86_64/pull/479) -- [test: replace `x86_64-bare-metal.json` with `x86_64-unknown-none`](https://github.com/rust-osdev/x86_64/pull/477) -- [fix and detect warnings](https://github.com/rust-osdev/x86_64/pull/476) -- [CI: Set `-Crelocation-model=static` in `RUSTFLAGS` for bootloader test job](https://github.com/rust-osdev/x86_64/pull/480) -- [silence warning about cast](https://github.com/rust-osdev/x86_64/pull/482) -- [Only enable instructions on `x86_64`](https://github.com/rust-osdev/x86_64/pull/483) - -Thanks to [@mkroening](https://github.com/mkroening) for their contributions! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [CI: Fix macOS errors](https://github.com/rust-osdev/bootloader/pull/435) -- [[v0.9] Silence dead code warning](https://github.com/rust-osdev/bootloader/pull/436) -- [[v0.9] Rename `.cargo/config` to `.cargo/config.toml`](https://github.com/rust-osdev/bootloader/pull/437) - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -The `multiboot2` crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month: - -- [misc: various improvements](https://github.com/rust-osdev/multiboot2/pull/208) - - - -## Other Projects - -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. - - - -### [RatCornu/efs](https://codeberg.org/RatCornu/efs) - -[`efs`](https://crates.io/efs) is a recently published `no-std` library which provides an OS and architecture independent implementation of some UNIX filesystems in Rust. - -Currently only the [ext2 filesystem](https://fr.wikipedia.org/wiki/Ext2) is directly implemented, but I will soonly work on other filesystems! - -It's still young so it may contain bugs, but it's hugely tested so that it does not happen. - -Some of the features provided : - -* `no_std` support (enabled by default) -* General interface for UNIX files and filesystems -* `read/write` regular files -* retrieve, add and remove directory entries directly from a path and a current working directory. - -I hope you will find this useful! If you have any remark, idea or issue, do not hesitate to submit an issue! - -### [phip1611/tar-no-std](https://github.com/phip1611/tar-no-std) - -[`tar-no-std`](https://github.com/phip1611/tar-no-std) supports a relevant -subset of Tar archives to extract multiple files from a single Tar archive in -`no_std` environments with zero allocations. Recently, `v0.3.0` was released -with support for filenames with up to 256 characters (including the directory -path) and various bug fixes. Using fuzzing, a lot of pitfalls and sudden panics -could be removed in this release. - -## Join Us? - -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). diff --git a/content/this-month/2024-05/index.md b/content/this-month/2024-05/index.md deleted file mode 100644 index 66182b55..00000000 --- a/content/this-month/2024-05/index.md +++ /dev/null @@ -1,208 +0,0 @@ -+++ -title = "This Month in Rust OSDev: May 2024" -date = 2024-06-08 - -[extra] -month = "May 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - -- [This Month in Redox - May 2024](https://www.redox-os.org/news/this-month-240531/): Redox is running COSMIC file manager, editor, and terminal now -- Bachelor's Thesis: [Writing an NVMe Driver in Rust](https://db.in.tum.de/~ellmann/theses/finished/24/pirhonen_writing_an_nvme_driver_in_rust.pdf) (PDF) -- [Building an Async Runtime for the Windows Kernel](https://github.com/carlos-al/windows-kernel-rs) -- [Ferrocene 24.05.0 now available for purchase](https://ferrous-systems.com/blog/ferrocene-24-05-0/) -- [Rust 1.78: Performance Impact of the 128-bit Memory Alignment Fix](https://codspeed.io/blog/rust-1-78-performance-impact-of-the-128-bit-memory-alignment-fix) -- [GxHash - an extremely fast hardware-accelerated non-cryptographic hashing algorithm](https://github.com/ogxd/gxhash) (zero dependencies, no_std compatible) -- The Embedded Rustacean [Issue #19](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-19), [Issue #20](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-20), and [Issue #21](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-21) - - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - -- [Stabilize `LazyCell` and `LazyLock`](https://github.com/rust-lang/rust/pull/121377) (`LazyCell` is available in `no_std`) -- [Stabilize `error_in_core`](https://github.com/rust-lang/rust/pull/125951) -- [Add `x86_64-unknown-linux-none` target](https://github.com/rust-lang/rust/pull/125023) (freestanding linux binaries without `libc` dependency) -- [Add `opt-for-size` core lib feature flag](https://github.com/rust-lang/rust/pull/125011) -- [Implement feature `integer_sign_cast`](https://github.com/rust-lang/rust/pull/125884) - - - - -## `rust-osdev` Projects - -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. - - - -### [`endian-num`](https://github.com/rust-osdev/endian-num) (new project!) -Maintained by [@mkroening](https://github.com/mkroening) - -The `endian-num` crate provides the `Be` (big-endian) and `Le` (little-endian) byte-order-aware numeric types. - -- [initial implementation](https://github.com/rust-osdev/endian-num/commit/000f86f5470401e4d0d8824ec976738fb8a35bb7) -- [docs: elaborate on differences to other crates](https://github.com/rust-osdev/endian-num/pull/1) -- [docs: refer to related crates via docs.rs](https://github.com/rust-osdev/endian-num/pull/2) - -Thanks to [@mkroening](https://github.com/mkroening) for creating and maintaining this crate! - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [Fix risc target_arch cfg](https://github.com/rust-osdev/uefi-rs/pull/1159) -- [Match MaximumCapsuleSize to UEFI spec](https://github.com/rust-osdev/uefi-rs/pull/1161) -- [Add RuntimeServices::update_capsule](https://github.com/rust-osdev/uefi-rs/pull/1162) -- [Add RuntimeServices::query_capsule_capabilities](https://github.com/rust-osdev/uefi-rs/pull/1166) -- [Note about feature flags for uefi book](https://github.com/rust-osdev/uefi-rs/pull/1168) -- [uefi-raw: misc](https://github.com/rust-osdev/uefi-rs/pull/1173) -- [mem: clarify confusion around MemoryDescriptor](https://github.com/rust-osdev/uefi-rs/pull/1174) -- [uefi/helpers: logger logs to debugcon device](https://github.com/rust-osdev/uefi-rs/pull/1172) -- [Add basic API for a global system table](https://github.com/rust-osdev/uefi-rs/pull/1156) -- [uefi: BootServices::allocate_pool now returns NonZero instead of *mut u8](https://github.com/rust-osdev/uefi-rs/pull/1176) -- [Fix uefi-macros trybuild test](https://github.com/rust-osdev/uefi-rs/pull/1183) - - - - - - - - - - - -Thanks to [@stillinbeta](https://github.com/stillinbeta) and [@andre-braga](https://github.com/andre-braga) for their contributions! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [Fix doc comment and error message only referencing the BIOS but used for UEFI](https://github.com/rust-osdev/bootloader/pull/439) -- [Ensure all page table frames are mapped as writable](https://github.com/rust-osdev/bootloader/pull/444) - -Thanks to [@fmckeogh](https://github.com/fmckeogh) and [@Wasabi375](https://github.com/Wasabi375) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [fix cfg related warnings](https://github.com/rust-osdev/x86_64/pull/485) -- [merge master into next](https://github.com/rust-osdev/x86_64/pull/486) -- [add Mapper::clear to clear any page table entry regardless of present flag](https://github.com/rust-osdev/x86_64/pull/484) -- [fix warnings](https://github.com/rust-osdev/x86_64/pull/488) - -Thanks to [@Wasabi375](https://github.com/Wasabi375) for their contribution! - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -The `multiboot2` crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month: - -- [multiboot2: builder: Allow to specify SMBIOS tag multiple times](https://github.com/rust-osdev/multiboot2/pull/210) -- [dev: misc improvements](https://github.com/rust-osdev/multiboot2/pull/213) -- [release](https://github.com/rust-osdev/multiboot2/pull/214) -- [multiboot2: fix handling of efi memory map](https://github.com/rust-osdev/multiboot2/pull/216) - - - -Thanks to [@YtvwlD](https://github.com/YtvwlD) for their contribution! - - -### [`linked-list-allocator`](https://github.com/rust-osdev/linked-list-allocator) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@jamesmunns](https://github.com/jamesmunns) - -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: - -- [Fix warnings about `cfg(fuzzing)`](https://github.com/rust-osdev/linked-list-allocator/pull/82) - - -## Other Projects - -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. - - - - -### [`mkroening/free-list`](https://github.com/mkroening/free-list) -(Section written by [@mkroening](https://github.com/mkroening)) - -The `free-list` crate provides the `FreeList` type for managing virtual or physical memory. -Opposed to normal memory allocators, `FreeList` does not use pointers but page ranges. -It operates by keeping a list of free page ranges (hence the name) and allows allocating at user-provided ranges. -Instead of operating directly on the unallocated memory through a linked list, this free list uses statically allocated memory before dynamically allocating more memory to hold its elements. - -```rust -use free_list::{FreeList, PageLayout}; - -let mut free_list = FreeList::<16>::new(); - -unsafe { - free_list.deallocate((0x1000..0x5000).try_into().unwrap()).unwrap(); -} -assert_eq!(free_list.free_space(), 0x4000); - -let layout = PageLayout::from_size(0x4000).unwrap(); -assert_eq!(free_list.allocate(layout).unwrap(), (0x1000..0x5000).try_into().unwrap()); -``` - - -## Join Us? - -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). diff --git a/content/this-month/2024-06/index.md b/content/this-month/2024-06/index.md deleted file mode 100644 index 6a409a41..00000000 --- a/content/this-month/2024-06/index.md +++ /dev/null @@ -1,191 +0,0 @@ -+++ -title = "This Month in Rust OSDev: June 2024" -date = 2024-07-10 - -[extra] -month = "June 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - -- [Redox OS - Software Showcase #1](https://youtu.be/s-gxAsBTPxA?si=IAPJ25EYP-XxS_FB) - - This is our first showcase video, showing several programs running on Redox OS -- [This Month in Redox - June 2024](https://www.redox-os.org/news/this-month-240630/) -- [k23 - Experimental WASM Microkernel](https://github.com/JonasKruckenberg/k23) - - First announced at RustNL 2024, k23 is an experimental microkernel written in Rust that runs WebAssembly programs. Now Open Source! - - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - -- [Split core's PanicInfo and std's PanicInfo](https://github.com/rust-lang/rust/pull/115974) -- [Stabilize `PanicInfo::message()` and `PanicMessage`](https://github.com/rust-lang/rust/pull/126732) -- [Unsafe extern blocks](https://github.com/rust-lang/rust/pull/124482) -- [Size optimize int formatting](https://github.com/rust-lang/rust/pull/125606) -- [Add `f16` inline ASM support for RISC-V](https://github.com/rust-lang/rust/pull/126530) - - - - -## `rust-osdev` Projects - -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. - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [uefi: Stop enabling `error_in_core` feature](https://github.com/rust-osdev/uefi-rs/pull/1194) -- [reorganize deps](https://github.com/rust-osdev/uefi-rs/pull/1196) -- [uefi: Add TryFrom u8 slice to DevicePathHeader ](https://github.com/rust-osdev/uefi-rs/pull/1199) -- [test-runner: Consistently use global image handle](https://github.com/rust-osdev/uefi-rs/pull/1189) -- [uefi: Add TryFrom u8 slice to DevicePathNode](https://github.com/rust-osdev/uefi-rs/pull/1197) -- [Clean up duplicate global system table pointer in `uefi::helpers`](https://github.com/rust-osdev/uefi-rs/pull/1188) -- [uefi: make DevicePathHeader::try_from idiomatic](https://github.com/rust-osdev/uefi-rs/pull/1202) -- [uefi: Add TryFrom u8 slice to DevicePath](https://github.com/rust-osdev/uefi-rs/pull/1201) -- [uefi: re-export CapsuleFlags](https://github.com/rust-osdev/uefi-rs/pull/1203) -- [ci: Temporarily turn off warnings-as-errors for nightly CI jobs](https://github.com/rust-osdev/uefi-rs/pull/1206) -- [uefi: use UNSPECIFIED_TIMEZONE instead of magic number](https://github.com/rust-osdev/uefi-rs/pull/1210) -- [uefi: Make TimeError more descriptive](https://github.com/rust-osdev/uefi-rs/pull/1211) -- [Fix versions](https://github.com/rust-osdev/uefi-rs/pull/1187) -- [uefi-test-runner: speed up ploting of sierpinski triangle by updating changed pixel only](https://github.com/rust-osdev/uefi-rs/pull/1209) -- [memory map: improvements to fight pitfalls (MemoryMap now owns the memory)](https://github.com/rust-osdev/uefi-rs/pull/1175) -- [uefi: simplify usage of Mode](https://github.com/rust-osdev/uefi-rs/pull/1214) -- [template: fix build failure](https://github.com/rust-osdev/uefi-rs/pull/1217) -- [uefi: Add TryFrom<&[u8]> for Time](https://github.com/rust-osdev/uefi-rs/pull/1212) - -Thanks to [@LightAndLight](https://github.com/LightAndLight), [@andre-braga](https://github.com/andre-braga), and [@JeffLi01](https://github.com/JeffLi01) for their contributions! - - - - - - - - - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [Guard the lower 1MB of memory](https://github.com/rust-osdev/bootloader/pull/446) - -Thanks to [@Wasabi375](https://github.com/Wasabi375) for their contributions! - - -### [`pci_types`](https://github.com/rust-osdev/pci_types) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `pci_types` library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month: - -- [feat: accept `FnOnce` for updating commands](https://github.com/rust-osdev/pci_types/pull/15) -- [ci: add workflow](https://github.com/rust-osdev/pci_types/pull/17) -- [feat: don't truncate reserved bits in `CommandRegister`](https://github.com/rust-osdev/pci_types/pull/16) -- [fix(breaking): clippy lints](https://github.com/rust-osdev/pci_types/pull/18) -- [style: update `rustfmt.toml`](https://github.com/rust-osdev/pci_types/pull/19) -- [feat: derive additional traits for `CommandRegister`](https://github.com/rust-osdev/pci_types/pull/20) -- [feat: add `EndpointHeader::update_interrupt`](https://github.com/rust-osdev/pci_types/pull/21) -- [feat: don't take explicit references to `ConfigRegionAccess`](https://github.com/rust-osdev/pci_types/pull/22) -- [feat: implement `Copy` for all types that already implement `Clone`](https://github.com/rust-osdev/pci_types/pull/23) -- [fix: don't take explicit reference in `update_interrupt`](https://github.com/rust-osdev/pci_types/pull/24) -- [Add method to get the address of any capability](https://github.com/rust-osdev/pci_types/pull/27) -- [Fix docs rendering for MsixCapability::set_enabled](https://github.com/rust-osdev/pci_types/pull/28) -- [feat: make `update_command` take `&mut self`](https://github.com/rust-osdev/pci_types/pull/32) -- [Add method to enable/disable function masking for MSI-X](https://github.com/rust-osdev/pci_types/pull/29) -- [Add unwrap_io and unwrap_mem convenience methods on Bar](https://github.com/rust-osdev/pci_types/pull/25) -- [Remove the function_exists method of ConfigRegionAccess](https://github.com/rust-osdev/pci_types/pull/26) -- [Support 64-bit addressing in MSI capabilities and improve uniformity with rest of library](https://github.com/rust-osdev/pci_types/pull/33) - -Thanks to [@IsaacWoods](https://github.com/IsaacWoods), [@bjorn3](https://github.com/bjorn3), and [@mkroening](https://github.com/mkroening) for their contributions! - - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PR this month: - -- [constify PhysFrame functions](https://github.com/rust-osdev/x86_64/pull/489) - -### [`volatile`](https://github.com/rust-osdev/volatile) -Maintained by [@phil-opp](https://github.com/phil-opp) - -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. - -We merged the following PR this month: - -- [Release v0.6.0](https://github.com/rust-osdev/volatile/pull/64) - - -## Other Projects - -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. - - - -### [`nicholasbishop/ext4-view-rs`](https://github.com/nicholasbishop/ext4-view-rs) -(Section written by [@nicholasbishop](https://github.com/nicholasbishop)) - -I've released a new Rust crate for reading ext4 filesystems. It's easy to use, with an API very similar to [`std::fs`](https://doc.rust-lang.org/std/fs/index.html). The crate is no-std compatible, but does require an allocator. - -Note that by design this crate will remain read-only; writing to an ext4 filesystem is not a goal. - -Thanks to [@tedbrandston](https://github.com/tedbrandston) for doing a ton of code review on this project! - -## Join Us? - -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). diff --git a/content/this-month/2024-07/index.md b/content/this-month/2024-07/index.md deleted file mode 100644 index 4791c2ea..00000000 --- a/content/this-month/2024-07/index.md +++ /dev/null @@ -1,233 +0,0 @@ -+++ -title = "This Month in Rust OSDev: July 2024" -date = 2024-08-08 - -[extra] -month = "July 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - -- [simple-fatfs: A filesystem library aimed at embedded ecosystems](https://www.reddit.com/r/rust/comments/1ejukow/simplefatfs_a_filesystem_library_aimed_at/) -- Redox OS: [Towards userspaceification of POSIX - part I: signal handling and IO](https://www.redox-os.org/news/kernel-11/) -- [Jeremy Soller on OS Development, Legacy Code, Redox OS and the Future of Memory-Safe Languages (Podcast Interview)](https://corrode.dev/podcast/s02e07-system76/) -- [Developing a cryptographically secure bootloader for RISC-V in Rust](https://www.codethink.co.uk/articles/2024/secure_bootloader/) - - - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - -- [Stabilize unsafe extern blocks (RFC 3484)](https://github.com/rust-lang/rust/pull/127921) -- [Stabilize `offset_of_nested`](https://github.com/rust-lang/rust/pull/128284) -- [Add `#[must_use]` to some `into_raw*` functions](https://github.com/rust-lang/rust/pull/127586) -- [treat `&raw (const|mut) UNSAFE_STATIC` implied deref as safe](https://github.com/rust-lang/rust/pull/125834) -- [Add NuttX based targets for RISC-V and ARM](https://github.com/rust-lang/rust/pull/127755) -- [`#[naked]`: report incompatible attributes](https://github.com/rust-lang/rust/pull/127853) -- [Fill out target-spec metadata for all targets](https://github.com/rust-lang/rust/pull/127265) - - - - -## `rust-osdev` Projects - -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. - - -### [`virtio-spec-rs`](https://github.com/rust-osdev/virtio-spec-rs) (new project!) -Maintained by [@mkroening](https://github.com/mkroening) - -The `virtio-spec` crate provides definitions from the Virtual I/O Device (VIRTIO) specification. -This project aims to be unopinionated regarding actual VIRTIO drivers that are implemented on top of this crate. - -The origins of this crate are in [Hermit](https://github.com/hermit-os/kernel). -Due to the need for correct foundational definitions from the Virtio spec that are easily reviewable and independent of the actual driver logic, this project was created from the ground up and without any intended bias towards Hermit. - -Currently, definitions are available for split and packed virtqueues, for Virtio over MMIO and Virtio over PCI, and for the network, socket and file system devices. -Feature requests for additional devices are more than welcome! - - -### [`fuse-abi`](https://github.com/rust-osdev/fuse-abi) (new project!) -Maintained by [@mkroening](https://github.com/mkroening) - -The `fuse-abi` crate provides bindings to FUSE devices. -In motivation similar to that of `virtio-spec`, this project aims to provide correct foundational definitions for the FUSE kernel ABI. -It can even be used together with `virtio-spec` when creating a driver for the Virtio file system device. - -This crate essentially brings [`#include `](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/fuse.h?h=v6.9) to Rust. -The code is autogenerated using [`bindgen`](https://github.com/rust-lang/rust-bindgen), ensuring the correctness of definitions. - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -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: - -- [release: uefi-macros-0.14.0, uefi-raw-0.6.0, uefi-0.29.0](https://github.com/rust-osdev/uefi-rs/pull/1221) -- [book: Publish the latest release instead of main](https://github.com/rust-osdev/uefi-rs/pull/1224) -- [Add redirects for all the html files under HEAD](https://github.com/rust-osdev/uefi-rs/pull/1225) -- [Drop SystemTable arg from uefi::helpers::init](https://github.com/rust-osdev/uefi-rs/pull/1226) -- [uefi-macros: Allow zero-param function in the entry macro](https://github.com/rust-osdev/uefi-rs/pull/1227) -- [uefi: Fix return value lifetime for register_protocol_notify](https://github.com/rust-osdev/uefi-rs/pull/1228) -- [logger: Remove some unnecessary cfgs](https://github.com/rust-osdev/uefi-rs/pull/1235) -- [fix(deps): update rust crate syn to v2.0.70](https://github.com/rust-osdev/uefi-rs/pull/1231) -- [uefi: _print more failsafe](https://github.com/rust-osdev/uefi-rs/pull/1239) -- [mem: introduce traits MemoryMap and MemoryMapMut](https://github.com/rust-osdev/uefi-rs/pull/1234) -- [Add uefi::system module](https://github.com/rust-osdev/uefi-rs/pull/1237) -- [Add PcrEvent::new_in_box/PcrEventInputs::new_in_box](https://github.com/rust-osdev/uefi-rs/pull/1246) -- [Add uefi::runtime module](https://github.com/rust-osdev/uefi-rs/pull/1249) -- [runtime: Add freestanding functions to get/set/delete UEFI variables](https://github.com/rust-osdev/uefi-rs/pull/1250) -- [boot: Always impl Drop for MemoryMapBackingMemory](https://github.com/rust-osdev/uefi-rs/pull/1248) -- [test-runner: Drop the memory map OOM loop](https://github.com/rust-osdev/uefi-rs/pull/1254) -- [uefi-raw: Add more MemoryType constants](https://github.com/rust-osdev/uefi-rs/pull/1253) -- [Add variable key functions to `uefi::runtime`](https://github.com/rust-osdev/uefi-rs/pull/1252) -- [uefi: mem: mem.rs -> mem/mod.rs](https://github.com/rust-osdev/uefi-rs/pull/1251) -- [runtime: Add query_variable_info](https://github.com/rust-osdev/uefi-rs/pull/1256) -- [Fix CI for Rust 1.80](https://github.com/rust-osdev/uefi-rs/pull/1261) -- [Add capsule update functions to `uefi::runtime`](https://github.com/rust-osdev/uefi-rs/pull/1259) -- [Add uefi::boot module](https://github.com/rust-osdev/uefi-rs/pull/1255) -- [runtime: Add uefi::runtime::reset](https://github.com/rust-osdev/uefi-rs/pull/1258) -- [cleanup/follow-up: memory_map](https://github.com/rust-osdev/uefi-rs/pull/1240) -- [Move the global image handle to uefi::boot](https://github.com/rust-osdev/uefi-rs/pull/1262) -- [Add `boot::locate_handle_buffer`](https://github.com/rust-osdev/uefi-rs/pull/1269) -- [boot: Add freestanding version of open_protocol](https://github.com/rust-osdev/uefi-rs/pull/1270) -- [boot: Add freestanding version of open_protocol_exclusive](https://github.com/rust-osdev/uefi-rs/pull/1272) -- [Finalize memory_map module refactoring](https://github.com/rust-osdev/uefi-rs/pull/1263) -- [Add `boot::{load_image, unload_image, start_image}`](https://github.com/rust-osdev/uefi-rs/pull/1273) -- [clippy: add use_self and const fn](https://github.com/rust-osdev/uefi-rs/pull/1271) -- [clippy: streamline lints](https://github.com/rust-osdev/uefi-rs/pull/1274) -- [ci: reorganize nightly CI jobs](https://github.com/rust-osdev/uefi-rs/pull/1275) - - - - - - - - - - - - - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [acpi: add support for SPCR table](https://github.com/rust-osdev/acpi/pull/216) - -Thanks to [@00xc](https://github.com/00xc) for their contributions! - - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month: - -- [build(deps): update bitflags dependency to version 2](https://github.com/rust-osdev/uart_16550/pull/33) -- [feat: add `try_send_raw` and `try_receive`](https://github.com/rust-osdev/uart_16550/pull/34) - -Thanks to [@mkroening](https://github.com/mkroening) for their contributions! - - -### [`endian-num`](https://github.com/rust-osdev/endian-num) -Maintained by [@mkroening](https://github.com/mkroening) - -The `endian-num` crate provides the `Be` (big-endian) and `Le` (little-endian) byte-order-aware numeric types. - -- [test: fix doctests for 32-bit and 16-bit pointer widths](https://github.com/rust-osdev/endian-num/pull/4) -- [chore: remove appendix from LICENSE-APACHE](https://github.com/rust-osdev/endian-num/pull/5) - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [always cover at least the first 4 GiB of physical memory](https://github.com/rust-osdev/bootloader/pull/448) - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PR this month: - -- [Ensure that Page actually implements Hash](https://github.com/rust-osdev/x86_64/pull/490) -- [don't use label starting with `1`](https://github.com/rust-osdev/x86_64/pull/492) -- [Add size and len for PageRange, PhysFrameRange, PageRangeInclusive and PhysFrameRangeInclusive](https://github.com/rust-osdev/x86_64/pull/491) -- [fix testing](https://github.com/rust-osdev/x86_64/pull/495) - -Thanks to [@Wasabi375](https://github.com/Wasabi375) for their contribution! - - - - - -## Other Projects - -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. - - - -### [`phip1611/bit_ops`](https://github.com/phip1611/bit_ops) -(Section written by [@phip1611](https://github.com/phip1611)) - -I've recently created and published [`bit_ops`](https://github.com/phip1611/bit_ops). -It offers common bit-oriented operations on primitive integer types with a focus on -`no_std` and `const` compatibility. Unlike other crates that provide tooling to -create sophisticated high-level types with bitfields, the focus of `bit_ops` is -on raw primitive integer types. - - -## Join Us? - -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). diff --git a/content/this-month/2024-08/index.md b/content/this-month/2024-08/index.md deleted file mode 100644 index fd249ecf..00000000 --- a/content/this-month/2024-08/index.md +++ /dev/null @@ -1,364 +0,0 @@ -+++ -title = "This Month in Rust OSDev: August 2024" -date = 2024-09-04 - -[extra] -month = "August 2024" -editors = ["phil-opp", "phip1611"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [Asahi Lina on how Rust helps with API docs in the Linux kernel](https://vt.social/@lina/113056457969145576) -- [You can kick the alpha tires on System76’s Cosmic, a new Linux desktop](https://arstechnica.com/gadgets/2024/08/you-can-kick-the-alpha-tires-on-system76s-cosmic-a-new-linux-desktop/) -- [WhenFS: a Rust FUSE filesystem for your Google Calendar](https://github.com/lvkv/whenfs) -- [Status update on CharlotteOS: a post-unix operating system written in Rust and assembly language](https://www.reddit.com/r/rust/comments/1epkro0/status_update_on_charlotteos_a_postunix_operating/) - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [add Box::as_ptr and Box::as_mut_ptr methods](https://github.com/rust-lang/rust/pull/129091) -- [Stabilize unsafe extern blocks (RFC 3484)](https://github.com/rust-lang/rust/pull/127921) -- [Stabilize `asm_const`](https://github.com/rust-lang/rust/pull/128570) -- [Stabilize `unsafe_attributes`](https://github.com/rust-lang/rust/pull/128771) -- [Stabilize raw_ref_op (RFC 2582)](https://github.com/rust-lang/rust/pull/127679) -- [Promote riscv64gc-unknown-linux-musl to tier 2](https://github.com/rust-lang/rust/pull/122049) -- [float types: document NaN bit pattern guarantees](https://github.com/rust-lang/rust/pull/129559) -- [Partially stabilize feature(new_uninit)](https://github.com/rust-lang/rust/pull/129401) - -## `rust-osdev` Projects - -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. - - - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -_Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and -the contained information tags. Usable in no_std environments, such as a kernel. -An optional builder feature also allows the construction of the corresponding -structures._ - -🎉 We are happy to announce release `v0.22` of the `multiboot2` crate. This is a -**major step forward** as all Undefined Behaviour (UB) and a bunch of safety and -memory issues have been removed / fixed. 🎉 Now, all unit tests (and there are -many) **pass Miri**! This was possible due to massive internal refactorings done -in [#226](https://github.com/rust-osdev/multiboot2/pull/226) and [#227](https://github.com/rust-osdev/multiboot2/pull/227). - -The quite complex logic to parse all these structures **safe and correctly** -has been moved to a new [`multiboot2-common`](https://docs.rs/multiboot2-common) -crate. This way, the [`multiboot2-header`](https://crates.io/crates/multiboot2-header) -crate can also leverage the new abstractions. A comprehensive writeup about why -the parsing of Multiboot2 structures and typing them correctly in Rust is much -more complex than one initially might think is written down in -[`lib.rs` of `multiboot2-common`](https://docs.rs/multiboot2-common). - -`multiboot2-header` also got a new release `v0.5` and can now be considered -safe and free of UB when parsing the corresponding structures. The internal -refactorings only slightly leak to the public interfaces of `multiboot2` -and `multiboot2-header`. - -Read more: -- [Changelog of `multiboot2`](https://github.com/rust-osdev/multiboot2/blob/b95b73508925b5484a0cf531a45c9c9ce555d560/multiboot2/Changelog.md) -- [Changelog of `multiboot2-header`](https://github.com/rust-osdev/multiboot2/blob/b95b73508925b5484a0cf531a45c9c9ce555d560/multiboot2-header/Changelog.md) - -
    -Background - Read More - -The crate grew historically without a centralized design or approach how to work -with memory and pointers. Therefore, many UB way unintentionally created. We -are happy to get lack of the technical debt. Nevertheless, thanks to everyone -who contributed over the years - sorry if we had to rewrite your code in this -one! :) -
    - -### [`uefi`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. Recently, we released -version `v0.31` with some notable changes: - -1. We introduced a completely new API to access boot and runtime services -2. We reorganized the MemoryMap-related types. -3. We reorganized and improved the documentation, and also added documentation - about how the `std` implementation for UEFI targets compares to `uefi` and - how both can be used together. - -#### 1. New API: Freestanding Functions API Change - -We are planning a massive API change and introduced a new replacement API in -release `v0.31`. The old API co-exists and will be marked as -`#[deprecated]` in `0.32`. The new API will make it easier to call boot or -runtime services without having to pass `&BootServices` around all the time. - -The typical use-case of our library users is to write a UEFI bootloader -application that heavily leverages boot services. Then control is handed over to -the next stage, which is typically the kernel of an OS. Boot services are -usually exited either just prior to launching the kernel or by the kernel -itself. In any case, the UEFI application spends almost all of its time with -boot services active. - -Although the old API design ensures via the type system that no boot -services can be called after they have been exited, the test of time has proven -that this adds unjustified complexity without bringing much real value add. - -Instead, with the new API, which we provide **additionally** at this point, -one can use freestanding functions which are behind the new modules: - -- `uefi::system`: is a new module that provides freestanding functions for - accessing fields of the global system table. -- `uefi::boot`: - is a new module that provides freestanding functions for boot services using - the global system table. -- `uefi::runtime`: is a new module that provides freestanding functions for - runtime services using the global system table. - -The freestanding functions itself are close to the originals ones but without -`&BootServices` or `&RuntimeServices` parameters, as you can see for example -[here](https://github.com/rust-osdev/uefi-rs/pull/1344/files#diff-46f1e3c04d719fff471faf35c4d218430e1d664ac0a0fab9d2c15870c2d0f066). - -The new API design solves API inconsistencies and restrictions already existing -so far, and makes the overall handling a lot easier. This comes with the costs -that functions may panic, if the boot services were exited but one tries to use -them. However, the massive API simplification justifies this. - -Find more and follow the progress and discussions on: -- [the GitHub Issue](https://github.com/rust-osdev/uefi-rs/issues/893#issuecomment-2241610633). -- [The function Migration Guide](https://github.com/rust-osdev/uefi-rs/blob/main/docs/funcs_migration.md) - -#### 2. Memory Map Refactoring - -TL;DR: What used to return `MemoryMap<'buf>` in the API, now returns -`MemoryMapOwned`. Additionally, you can parse a chunk of memory using -`MemoryMapRef` or `MemoryMapRefMut`. - -We put significant effort into refactoring our abstractions for the UEFI memory -map. These started in release v0.29 and were finalized in release v0.31. -Instead of one `MemoryMap<'buf>` type, we now have the traits `MemoryMap` and -`MemoryMapMut` along with the implementations `MemoryMapRef`, `MemoryMapRefMut`, -and `MemoryMapOwned`. It is recommended to work with the specific -implementations, as the main purpose for the traits is only to enforce a -consistent API for these three implementations. This gives users the -flexibility to cover all possible use cases one can have with an UEFI memory -map. Read more: -- [#1175](https://github.com/rust-osdev/uefi-rs/pull/1175) -- [#1251](https://github.com/rust-osdev/uefi-rs/pull/1251) -- [#1240](https://github.com/rust-osdev/uefi-rs/pull/1240) -- [#1263](https://github.com/rust-osdev/uefi-rs/pull/1263) - -In any case, obtaining the memory map from UEFI is hidden behind the -public API of the crate, but we made it very easy to read/parse it in all -possible scenarios! - -#### 3. Documentation Reorganization - -We put notable work into our README and `lib.rs` files to improve the -structure of our documentation. The main value-add and improvement is that we -clearly, directly, and precisely talk about: - -- What is `uefi`? -- Which problems does it solve? -- How can it be used? -- How does it compare to the ecosystem, such as `std` for Rust targets? - -To see an example how `uefi` and `std` can be used together, please head to -[our repository](https://github.com/rust-osdev/uefi-rs/tree/main/uefi-std-example). - -#### Other - -There were also a ton of other interesting fixes, changes, and additions! -Check out our [Changelog](https://github.com/rust-osdev/uefi-rs/blob/main/uefi/CHANGELOG.md). - -We merged the following PRs this month: - -
    Click to expand - - -- [boot: Add freestanding version of raise_tpl](https://github.com/rust-osdev/uefi-rs/pull/1276) -- [boot: Add freestanding connect_controller and disconnect_controller](https://github.com/rust-osdev/uefi-rs/pull/1278) -- [nix/niv: update dependencies](https://github.com/rust-osdev/uefi-rs/pull/1279) -- [boot: Add freestanding exit function](https://github.com/rust-osdev/uefi-rs/pull/1283) -- [uefi: Fix lifetimes in device_path TryFrom<&[u8]> impls](https://github.com/rust-osdev/uefi-rs/pull/1282) -- [release: uefi-0.30.0](https://github.com/rust-osdev/uefi-rs/pull/1285) -- [uefi: Add release data to 0.30.0 release](https://github.com/rust-osdev/uefi-rs/pull/1286) -- [doc: unified catchy new Crate introduction [doc: 1/N]](https://github.com/rust-osdev/uefi-rs/pull/1284) -- [boot: Add freestanding version of `create_event`](https://github.com/rust-osdev/uefi-rs/pull/1280) -- [Merge release-v0.30 branch into main](https://github.com/rust-osdev/uefi-rs/pull/1289) -- [boot: Add freestanding stall](https://github.com/rust-osdev/uefi-rs/pull/1296) -- [boot: Add freestanding check_event](https://github.com/rust-osdev/uefi-rs/pull/1295) -- [doc: move misc stuff from README to lib.rs [doc: 2/N] ](https://github.com/rust-osdev/uefi-rs/pull/1290) -- [Restore some memory exports to uefi::table::boot](https://github.com/rust-osdev/uefi-rs/pull/1299) -- [Remove dead_code workarounds](https://github.com/rust-osdev/uefi-rs/pull/1302) -- [runtime: Add freestanding set_virtual_address_map](https://github.com/rust-osdev/uefi-rs/pull/1301) -- [Add freestanding set_timer and wait_for_event](https://github.com/rust-osdev/uefi-rs/pull/1298) -- [Add freestanding {install,reinstall,uninstall}_protocol_interface functions](https://github.com/rust-osdev/uefi-rs/pull/1300) -- [boot: Add freestanding close_event](https://github.com/rust-osdev/uefi-rs/pull/1304) -- [boot: Add freestanding install_configuration_table](https://github.com/rust-osdev/uefi-rs/pull/1306) -- [boot: Add freestanding version of protocols_per_handle](https://github.com/rust-osdev/uefi-rs/pull/1305) -- [misc small improvements](https://github.com/rust-osdev/uefi-rs/pull/1308) -- [boot: Add freestanding test_protocol](https://github.com/rust-osdev/uefi-rs/pull/1310) -- [boot: Add freestanding set_watchdog_timer](https://github.com/rust-osdev/uefi-rs/pull/1311) -- [boot: Add freestanding memory_map](https://github.com/rust-osdev/uefi-rs/pull/1312) -- [boot: Add freestanding create_event_ex](https://github.com/rust-osdev/uefi-rs/pull/1313) -- [boot: Add freestanding get_handle_for_protocol](https://github.com/rust-osdev/uefi-rs/pull/1314) -- [Add doc on freestanding function migration](https://github.com/rust-osdev/uefi-rs/pull/1315) -- [boot: Add freestanding locate_device_path](https://github.com/rust-osdev/uefi-rs/pull/1316) -- [boot: Add freestanding locate_handle and find_handles](https://github.com/rust-osdev/uefi-rs/pull/1321) -- [boot: Add freestanding get_image_file_system](https://github.com/rust-osdev/uefi-rs/pull/1322) -- [boot: Add freestanding exit_boot_services](https://github.com/rust-osdev/uefi-rs/pull/1325) -- [uefi: Add table::system_table_raw](https://github.com/rust-osdev/uefi-rs/pull/1323) -- [boot: Add freestanding register_protocol_notify](https://github.com/rust-osdev/uefi-rs/pull/1324) -- [doc: add comprehensive About section to lib.rs [doc: 3/N]](https://github.com/rust-osdev/uefi-rs/pull/1291) -- [uefi: Drop BootServices arg from device path <-> text conversions](https://github.com/rust-osdev/uefi-rs/pull/1327) -- [Revert "uefi: Drop BootServices arg from device path <-> text conversions"](https://github.com/rust-osdev/uefi-rs/pull/1328) -- [Update funcs_migration doc](https://github.com/rust-osdev/uefi-rs/pull/1329) -- [uefi: add BootPolicy type](https://github.com/rust-osdev/uefi-rs/pull/1326) -- [ci: cancel obsolete runs automatically + streamline](https://github.com/rust-osdev/uefi-rs/pull/1332) -- [LoadFileProtocol and LoadFile2Protocol](https://github.com/rust-osdev/uefi-rs/pull/1297) -- [doc: Comparison to Ecosystem (including Rust std impl) [doc: 4/N]](https://github.com/rust-osdev/uefi-rs/pull/1292) -- [release: uefi-macros-0.15.0, uefi-raw-0.7.0, uefi-0.31.0](https://github.com/rust-osdev/uefi-rs/pull/1330) -- [uefi: Inline the template example into lib.rs doc](https://github.com/rust-osdev/uefi-rs/pull/1338) -- [release: uefi-0.31.0](https://github.com/rust-osdev/uefi-rs/pull/1339) -- [doc: Talk about Documentation Organization/Overview [doc: 5/N]](https://github.com/rust-osdev/uefi-rs/pull/1293) -- [uefi std: add example and add book chapter](https://github.com/rust-osdev/uefi-rs/pull/1331) -- [uefi: Drop BootServices arg from device path <-> text conversions](https://github.com/rust-osdev/uefi-rs/pull/1340) -- [test-runner: Convert all examples to new style](https://github.com/rust-osdev/uefi-rs/pull/1342) -- [uefi: Drop BootServices arg from GraphicsOutput::modes](https://github.com/rust-osdev/uefi-rs/pull/1344) -- [Update the uefi::allocator module to use the global system table](https://github.com/rust-osdev/uefi-rs/pull/1343) -- [doc: final README streamlining [doc: 6/6]](https://github.com/rust-osdev/uefi-rs/pull/1294) -- [uefi: Drop BootServices arg from ComponentName::open](https://github.com/rust-osdev/uefi-rs/pull/1345) -- [ci: release package check](https://github.com/rust-osdev/uefi-rs/pull/1341) -- [book: Update protocols how-to to use the `boot` module](https://github.com/rust-osdev/uefi-rs/pull/1347) -- [uefi: Move various types to the `uefi::boot` module](https://github.com/rust-osdev/uefi-rs/pull/1346) -- [ci: Use `cargo xtask fmt --check`](https://github.com/rust-osdev/uefi-rs/pull/1348) -- [uefi: Move various types to the `uefi::runtime` module](https://github.com/rust-osdev/uefi-rs/pull/1349) -- [uefi: Make FileSystem work with both variants of ScopedProtocol](https://github.com/rust-osdev/uefi-rs/pull/1352) -- [uefi: Fix compilation of minimal example](https://github.com/rust-osdev/uefi-rs/pull/1353) -- [uefi-macros: Rename generated entry arguments](https://github.com/rust-osdev/uefi-rs/pull/1350) -- [book: Update boot_stages and tables](https://github.com/rust-osdev/uefi-rs/pull/1351) -- [uefi: Drop args from main in the example](https://github.com/rust-osdev/uefi-rs/pull/1355) -- [uefi-macros: Use uefi::boot::set_image_handle](https://github.com/rust-osdev/uefi-rs/pull/1354) -- [template: Drop args to main](https://github.com/rust-osdev/uefi-rs/pull/1356) -- [uefi-macros: Use raw pointer for system table when generating args](https://github.com/rust-osdev/uefi-rs/pull/1357) -- [uefi: Update logger to use the global system table](https://github.com/rust-osdev/uefi-rs/pull/1358) -- [uefi: Update panic handler to use the global system table](https://github.com/rust-osdev/uefi-rs/pull/1359) -- [uefi: Deprecate RuntimeServices](https://github.com/rust-osdev/uefi-rs/pull/1365) -- [uefi: Use global system table in MemoryMapBackingMemory](https://github.com/rust-osdev/uefi-rs/pull/1361) -- [uefi: Update println to use the global system table](https://github.com/rust-osdev/uefi-rs/pull/1360) -- [uefi: Update FS docstring example code](https://github.com/rust-osdev/uefi-rs/pull/1368) -- [uefi: Copy 'Accessing Protocols' docs to uefi::boot](https://github.com/rust-osdev/uefi-rs/pull/1369) -- [uefi: Deprecate BootServices](https://github.com/rust-osdev/uefi-rs/pull/1367) -- [uefi/mem: Update docs referring to BootServices](https://github.com/rust-osdev/uefi-rs/pull/1370) -- [uefi: Update input protocol docs](https://github.com/rust-osdev/uefi-rs/pull/1371) -- [uefi: Update ResetNotification protocol docs](https://github.com/rust-osdev/uefi-rs/pull/1372) -- [uefi: Update LoadedImage protocol docs](https://github.com/rust-osdev/uefi-rs/pull/1373) -- [uefi: Deprecate ancillary types in uefi::table::boot](https://github.com/rust-osdev/uefi-rs/pull/1374) -- [uefi: Update pointer protocol docs](https://github.com/rust-osdev/uefi-rs/pull/1376) -- [uefi: Deprecate table::{system_table_boot,system_table_runtime}](https://github.com/rust-osdev/uefi-rs/pull/1378) -- [uefi: Remove BootServices from more docstrings](https://github.com/rust-osdev/uefi-rs/pull/1377) -- [uefi: Drop references to SystemTable from docstrings](https://github.com/rust-osdev/uefi-rs/pull/1380) -- [docs: Update timeline for the API migration](https://github.com/rust-osdev/uefi-rs/pull/1382) -- [uefi: Deprecate SystemTable](https://github.com/rust-osdev/uefi-rs/pull/1379) -- [Revert "ci: check if crate can be packaged"](https://github.com/rust-osdev/uefi-rs/pull/1384) -- [uefi: Deprecate SystemTableView, Boot, and Runtime](https://github.com/rust-osdev/uefi-rs/pull/1385) -- [Move PAGE_SIZE to uefi-raw and reexport from uefi boot modules](https://github.com/rust-osdev/uefi-rs/pull/1383) -- [uefi: Clean up imports of uefi::table::runtime](https://github.com/rust-osdev/uefi-rs/pull/1386) - - - - - - - - - - - - - -
    - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [Fixed "jc fail" instructions not working properly and updated README.md](https://github.com/rust-osdev/bootloader/pull/453) - -Thanks to [@spencer3035](https://github.com/spencer3035) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) - -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) - -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. - -We merged the following PR this month: - -- [remove `#![feature(asm_const)]`](https://github.com/rust-osdev/x86_64/pull/496) - - -## Other Projects - -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. - - - -No projects updates were submitted this month. - -## Join Us? - -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). diff --git a/content/this-month/2024-09/index.md b/content/this-month/2024-09/index.md deleted file mode 100644 index d1a84a95..00000000 --- a/content/this-month/2024-09/index.md +++ /dev/null @@ -1,213 +0,0 @@ -+++ -title = "This Month in Rust OSDev: September 2024" -date = 2024-10-07 - -[extra] -month = "September 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [Redox OS 0.9.0](https://www.redox-os.org/news/release-0.9.0/) - - [This Month in Redox OS - September 2024](https://www.redox-os.org/news/this-month-240930/) -- [Google's Shift to Rust Programming Cuts Android Memory Vulnerabilities by 68%](https://thehackernews.com/2024/09/googles-shift-to-rust-programming-cuts.html?m=1) -- [Binsider: new tool to analyze ELF binaries with a user-friendly TUI](https://binsider.dev/) -- Rust in the Linux Kernel - - [Best practices for error handling in kernel Rust](https://lwn.net/SubscriberLink/990489/eab6106fa595052e/) - - [Resources for learning Rust for kernel development](https://lwn.net/SubscriberLink/990619/cb5f47f5d88818e4/) - - [Committing to Rust in the kernel](https://lwn.net/SubscriberLink/991062/b0df468b40b21f5d/) -- [Rust in illumos](https://wegmueller.it/blog/posts/2024-09-02-rust-on-illumos) -- [I compiled Rust code to Nintendo Gameboy!](https://www.reddit.com/r/rust/comments/1fhdi28/i_compiled_rust_code_to_nintendo_gameboy/) -- [Rust for Android](https://www.reddit.com/r/rust/comments/1fs798t/rust_for_android/) -- [Rust is rolling off the Volvo assembly line](https://tweedegolf.nl/en/blog/137/rust-is-rolling-off-the-volvo-assembly-line) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Safety Goggles for Alchemists: The Path Towards Safer Transmute](https://jack.wrenn.fyi/blog/safety-goggles-for-alchemists/) -- [Deprecate -Csoft-float because it is unsound (and not fixable)](https://github.com/rust-lang/rust/pull/129897) -- [Stabilize `const_refs_to_static`](https://github.com/rust-lang/rust/pull/129759) -- [Stabilize &mut (and *mut) as well as &Cell (and *const Cell) in const](https://github.com/rust-lang/rust/pull/129195) -- [Implement raw lifetimes and labels (`'r#ident`)](https://github.com/rust-lang/rust/pull/126452) - - -## `rust-osdev` Projects - -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. - - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -_Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and -the contained information tags. Usable in no_std environments, such as a kernel. -An optional builder feature also allows the construction of the corresponding -structures._ - -[Last month](../2024-08), we talked about the major milestone of the `v0.22` -release of the `multiboot2` crate, where all Undefined Behaviour (UB) and a -bunch of safety and memory issues have been removed / fixed. After a short -grace-period of one month, we now yanked all prior releases. As all of them -contain UB, sensitive low-level software can break in subtle ways. - -We hope that all users can have a smooth migration to `v0.22` or above -(with Rust 1.70 from June 2023 as MSRV). If there are problems, we -are happy to temporarily unyank certain versions or create a `v0.22.x` -with a lower MSRV. We can discuss this -[here](https://github.com/rust-osdev/multiboot2/issues/237). - -Further, we released `v0.23` which contains dependency bumps and missing -tags. Specifically: -- ApmTag -- BootdevTag -- NetworkTag - -Please find more in the [changelog](https://github.com/rust-osdev/multiboot2/blob/main/multiboot2/CHANGELOG.md). - -We merged the following PRs this month: - - -- [crate: fix latest clippy nightly complains](https://github.com/rust-osdev/multiboot2/pull/231) -- [multiboot2: add missing tags](https://github.com/rust-osdev/multiboot2/pull/229) -- [Replaces dead link home page multiboot2-header package definition](https://github.com/rust-osdev/multiboot2/pull/232) -- [multiboot2: streamline getters and public tags()](https://github.com/rust-osdev/multiboot2/pull/235) -- [multiboot2-common: improve documentation](https://github.com/rust-osdev/multiboot2/pull/236) -- [workspace: prepare updates](https://github.com/rust-osdev/multiboot2/pull/233) -- [talk about yanked versions in changelog files](https://github.com/rust-osdev/multiboot2/pull/239) -- [multiboot2-common: improve README and diagrams](https://github.com/rust-osdev/multiboot2/pull/240) - -Thanks to [@filiplajszczak](https://github.com/filiplajszczak) for their contributions! - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. - -We merged the following PRs this month: - -- [Fix unused warnings if log-debugcon is not enabled](https://github.com/rust-osdev/uefi-rs/pull/1389) -- [Add uefi::{boot,runtime,system} modules to the prelude](https://github.com/rust-osdev/uefi-rs/pull/1390) -- [uefi: Add panic doc to uefi::helpers::init](https://github.com/rust-osdev/uefi-rs/pull/1391) -- [uefi: Add uefi::runtime::variable_exists](https://github.com/rust-osdev/uefi-rs/pull/1392) -- [release: uefi-raw-0.8.0, uefi-macros-0.16.0, uefi-0.32.0](https://github.com/rust-osdev/uefi-rs/pull/1396) -- [Update the hello-world tutorial](https://github.com/rust-osdev/uefi-rs/pull/1397) -- [uefi: Delete the deprecated helpers::system_table function](https://github.com/rust-osdev/uefi-rs/pull/1398) -- [Drop FileSystem conversion from table::boot::ScopedProtocol](https://github.com/rust-osdev/uefi-rs/pull/1399) -- [test-runner: Remove BootServices from many protocol tests](https://github.com/rust-osdev/uefi-rs/pull/1405) -- [Delete deprecated RuntimeServices struct](https://github.com/rust-osdev/uefi-rs/pull/1404) -- [test-runner: Remove BootServices from remaining proto tests](https://github.com/rust-osdev/uefi-rs/pull/1406) -- [Fix handling of a null interface pointer in `boot::open_protocol`](https://github.com/rust-osdev/uefi-rs/pull/1410) -- [test-runner: Remove remaining tests for deprecated table types](https://github.com/rust-osdev/uefi-rs/pull/1415) -- [uefi: Delete deprecated allocator functions](https://github.com/rust-osdev/uefi-rs/pull/1416) - - - - - - - - - - - - - - - - - -### [`xhci`](https://github.com/rust-osdev/xhci) -Maintained by [@toku-sa-n](https://github.com/toku-sa-n) - -The `xhci` crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month: - -- [removed deprecated clippy check option](https://github.com/rust-osdev/xhci/pull/174) - -Thanks to [@dbydd](https://github.com/dbydd) for their contributions! - - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [aml_tester:Make cli print more pretty](https://github.com/rust-osdev/acpi/pull/221) -- [Ignore `MultiprocessorWakeup` when parse interrupt model](https://github.com/rust-osdev/acpi/pull/220) - -Thanks to [@jokemanfire](https://github.com/jokemanfire), and [@Hsy-Intel](https://github.com/Hsy-Intel) for their contributions! - - -### [`pci_types`](https://github.com/rust-osdev/pci_types) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `pci_types` library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month: - -- [Match the output of lspci in the PciAddress Display impl](https://github.com/rust-osdev/pci_types/pull/34) - -Thanks to [@bjorn3](https://github.com/bjorn3) for their contributions! - - -## Other Projects - -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. - - - -_No updates were proposed for this section this month._ - -## Join Us? - -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). diff --git a/content/this-month/2024-10/index.md b/content/this-month/2024-10/index.md deleted file mode 100644 index c7b53985..00000000 --- a/content/this-month/2024-10/index.md +++ /dev/null @@ -1,191 +0,0 @@ -+++ -title = "This Month in Rust OSDev: October 2024" -date = 2024-11-14 - -[extra] -month = "October 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [This Month in Redox - October 2024](https://www.redox-os.org/news/this-month-241031/) -- [Smart pointers for the kernel](https://lwn.net/Articles/992055/) -- [On Rust in enterprise kernels](https://lwn.net/Articles/993337/) -- [Unsafe Rust Is Harder Than C](https://chadaustin.me/2024/10/intrusive-linked-list-in-rust/) -- [Version `v2.0.0` of `thiserror` released with `no_std` support](https://github.com/dtolnay/thiserror/releases/tag/2.0.0) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Taking a raw ref (`&raw (const|mut)`) of a deref of pointer (`*ptr`) is always safe](https://github.com/rust-lang/rust/pull/129248) -- [mark some target features as 'forbidden' so they cannot be (un)set with `-Ctarget-feature`](https://github.com/rust-lang/rust/pull/129884) -- [make `unsupported_calling_conventions` a hard error](https://github.com/rust-lang/rust/pull/129935) - - -## `rust-osdev` Projects - -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. - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. - -We merged the following PRs this month: - -- [uefi-macros: Require that the entry function takes zero args](https://github.com/rust-osdev/uefi-rs/pull/1418) -- [uefi: Delete the deprecated `uefi::table::{boot,system}` modules](https://github.com/rust-osdev/uefi-rs/pull/1417) -- [uefi: Derive Eq/PartialEq for GptPartitionEntry](https://github.com/rust-osdev/uefi-rs/pull/1421) -- [uefi: Add CStr16 conversions from slices with interior nuls](https://github.com/rust-osdev/uefi-rs/pull/1422) -- [uefi: Improve the VariableKey type and iterator](https://github.com/rust-osdev/uefi-rs/pull/1424) -- [Update timeline section of funcs_migration.md](https://github.com/rust-osdev/uefi-rs/pull/1429) -- [xtask: Add action to generate a code coverage report](https://github.com/rust-osdev/uefi-rs/pull/1423) -- [nix: add cargo-llvm-cov to nix shell + niv update](https://github.com/rust-osdev/uefi-rs/pull/1439) -- [Codecov configuration updates](https://github.com/rust-osdev/uefi-rs/pull/1440) -- [Move DeviceType and DeviceSubType enums to uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/1442) -- [Add device path node types to uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/1445) -- [release: uefi-raw-0.9.0, uefi-macros-0.17.0, uefi-0.33.0](https://github.com/rust-osdev/uefi-rs/pull/1446) -- [Increase MSRV to 1.79](https://github.com/rust-osdev/uefi-rs/pull/1448) - - - - - - - - - - - - - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [Remove stabilized `const_mut_refs` feature](https://github.com/rust-osdev/x86_64/pull/501) -- [Fix clippy warnings](https://github.com/rust-osdev/x86_64/pull/502) - - -### [`pci_types`](https://github.com/rust-osdev/pci_types) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `pci_types` library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month: - -- [Add set bus number funcs](https://github.com/rust-osdev/pci_types/pull/36) - -Thanks to [@ZR233](https://github.com/ZR233) for their contributions! - - -### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) -Maintained by [@nicholasbishop](https://github.com/nicholasbishop) and [@phil-opp](https://github.com/phil-opp) - -The `ovmf-prebuilt` project provides pre-built [edk2](https://github.com/tianocore/edk2) releases to make it easier to set up OVMF. We merged the following improvement this month: - -- [Implement ovmf-prebuilt library](https://github.com/rust-osdev/ovmf-prebuilt/pull/92) -- [Add release workflow](https://github.com/rust-osdev/ovmf-prebuilt/pull/93) -- [release: 0.2.0](https://github.com/rust-osdev/ovmf-prebuilt/pull/96) -- [release: 0.2.0 (take two)](https://github.com/rust-osdev/ovmf-prebuilt/pull/98) - - - - - - - - - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -_Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and -the contained information tags. Usable in no_std environments, such as a kernel. -An optional builder feature also allows the construction of the corresponding -structures._ - -We merged the following PRs this month: - - - -- [multiboot2: various small fixes and doc improvements](https://github.com/rust-osdev/multiboot2/pull/245) -- [multiboot2: bug fixes](https://github.com/rust-osdev/multiboot2/pull/246) - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [Add `from_rsdt` method for `AcpiTables`.](https://github.com/rust-osdev/acpi/pull/222) - -Thanks to [@Hsy-Intel](https://github.com/Hsy-Intel) for their contributions! - - -## Other Projects - -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. - - - -_No updates were proposed for this section this month._ - -## Join Us? - -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). diff --git a/content/this-month/2024-11/index.md b/content/this-month/2024-11/index.md deleted file mode 100644 index a0f7b7a3..00000000 --- a/content/this-month/2024-11/index.md +++ /dev/null @@ -1,209 +0,0 @@ -+++ -title = "This Month in Rust OSDev: November 2024" -date = 2024-12-08 - -[extra] -month = "November 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [VEKOS, a cryptographically verified hobby OS written in Rust](https://www.reddit.com/r/rust/comments/1h5vh2g/vekos_a_cryptographically_verified_hobby_os/) -- [Rust in Production: Oxide Computer Company with Steve Klabnik (Podcast Interview)](https://www.reddit.com/r/rust/comments/1gr9tqp/rust_in_production_oxide_computer_company_with/) -- [This Month in Redox - November 2024](https://www.redox-os.org/news/this-month-241130/) -- [‘Tis the Season for COSMIC Alpha 4!](https://blog.system76.com/post/cosmic-alpha-4/) -- [a #![no_std], #![no_main], no-[#tokio] runtime for AWS Lambda](https://www.reddit.com/r/rust/comments/1h40cdd/a_no_std_no_main_notokio_runtime_for_aws_lambda/) -- [Ferrocene 24.11.0 released with medical qualification](https://public-docs.ferrocene.dev/main/release-notes/24.11.0.html) ([reddit discussion](https://www.reddit.com/r/rust/comments/1h1261s/ferrocene_24110_update_medical_qualification_is/)) -- [Embive: A low-level sandboxing library for RISC-V bytecode](https://www.reddit.com/r/rust/comments/1gxm414/embive_a_lowlevel_sandboxing_library_for_riscv/) -- [Rust in QEMU roadmap](https://lore.kernel.org/all/cc40943e-dec1-4890-a1d9-579350ce296f@pbonzini.local/) -- [kartoffels, a game where you implement a firmware for a potato, v0.6 released! 🥔](https://www.reddit.com/r/rust/comments/1gvrtnq/kartoffels_a_game_where_you_implement_a_firmware/) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [mark some target features as 'forbidden' so they cannot be (un)set with `-Ctarget-feature`](https://github.com/rust-lang/rust/pull/129884) -- [show `abi_unsupported_vector_types` lint in future breakage reports](https://github.com/rust-lang/rust/pull/133374) -- [Stabilize `extended_varargs_abi_support`](https://github.com/rust-lang/rust/pull/116161) - -## `rust-osdev` Projects - -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. - - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [fix field order for INVPCID descriptor](https://github.com/rust-osdev/x86_64/pull/508) -- [fix CI job for building on MSRV](https://github.com/rust-osdev/x86_64/pull/510) -- [gate HandlerFunc behind target_arch = "x86{_64}"](https://github.com/rust-osdev/x86_64/pull/507) -- [fix typo in "InvPicdCommand"](https://github.com/rust-osdev/x86_64/pull/509) -- [TryFrom implementation for ExceptionVector](https://github.com/rust-osdev/x86_64/pull/506) -- [Typo fix in TaskStateSegment comment](https://github.com/rust-osdev/x86_64/pull/504) -- [Minor clarification DescriptorTablePointer::limit comment](https://github.com/rust-osdev/x86_64/pull/503) -- [fix signature of Step::steps_between implementations](https://github.com/rust-osdev/x86_64/pull/513) -- [release 0.15.2](https://github.com/rust-osdev/x86_64/pull/519) -- [backport #513](https://github.com/rust-osdev/x86_64/pull/520) - -Thanks to [@mrjbom](https://github.com/mrjbom) for their contribution! - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [Implement the multiprocessor wakeup mechanism.](https://github.com/rust-osdev/acpi/pull/225) -- [acpi-dumper: fix invocation of compile_error!](https://github.com/rust-osdev/acpi/pull/229) -- [aml: make resource descriptor fields public](https://github.com/rust-osdev/acpi/pull/228) -- [acpi: fix clippy warnings and run clippy in CI](https://github.com/rust-osdev/acpi/pull/230) -- [acpi: fix doc warnings and add missing links](https://github.com/rust-osdev/acpi/pull/231) -- [acpi: spcr: fix typo](https://github.com/rust-osdev/acpi/pull/232) - -Thanks to [@pjhades](https://github.com/pjhades), [@00xc](https://github.com/00xc), and [@Hsy-Intel](https://github.com/Hsy-Intel) for their contributions! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [Remove 3dnow features from stage4 target](https://github.com/rust-osdev/bootloader/pull/471) -- [mention E820 in docs for UnknownBios](https://github.com/rust-osdev/bootloader/pull/461) -- [release v0.11.8](https://github.com/rust-osdev/bootloader/pull/469) -- [copy more PML4 entries](https://github.com/rust-osdev/bootloader/pull/466) -- [Convert LF to CRLF when writing to serial port](https://github.com/rust-osdev/bootloader/pull/474) -- [Update x86_64](https://github.com/rust-osdev/bootloader/pull/478) -- [release v0.11.9](https://github.com/rust-osdev/bootloader/pull/479) - -Thanks to [@Ollrogge](https://github.com/Ollrogge), [@ChocolateLoverRaj](https://github.com/ChocolateLoverRaj), and [@Makonede](https://github.com/Makonede) for their contributions! - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. - -We merged the following PRs this month: - -- [chore(config): migrate renovate config](https://github.com/rust-osdev/uefi-rs/pull/1456) -- [uefi: Deny clippy::ref_as_ptr](https://github.com/rust-osdev/uefi-rs/pull/1455) -- [Move the UnicodeCollation protocol definition to `uefi-raw` and use it from `uefi`](https://github.com/rust-osdev/uefi-rs/pull/1459) -- [Use ovmf-prebuilt](https://github.com/rust-osdev/uefi-rs/pull/1454) -- [xtask: Update OVMF prebuilts](https://github.com/rust-osdev/uefi-rs/pull/1463) -- [uefi-raw: Drop unused dependency on ptr_meta](https://github.com/rust-osdev/uefi-rs/pull/1465) -- [Fix `cargo xtask fmt --check`](https://github.com/rust-osdev/uefi-rs/pull/1464) -- [Fix minor typo in protocols.md](https://github.com/rust-osdev/uefi-rs/pull/1467) -- [Add TCG protocols to `uefi-raw` and use them from `uefi`](https://github.com/rust-osdev/uefi-rs/pull/1469) -- [Mention to turn off secure boot.](https://github.com/rust-osdev/uefi-rs/pull/1468) -- [Clean up some use of unsafe in MemoryMapRefMut](https://github.com/rust-osdev/uefi-rs/pull/1483) - - - - - - - - - - -Thanks to [@diekmann](https://github.com/diekmann) for their contribution! - - -### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) -Maintained by [@nicholasbishop](https://github.com/nicholasbishop) and [@phil-opp](https://github.com/phil-opp) - -The `ovmf-prebuilt` project provides pre-built [edk2](https://github.com/tianocore/edk2) releases to make it easier to set up OVMF. We merged the following improvement this month: - -- [ovmf-prebuilt: Update readme](https://github.com/rust-osdev/ovmf-prebuilt/pull/101) -- [release: 0.2.1](https://github.com/rust-osdev/ovmf-prebuilt/pull/102) - - - - - - - - - - - -### [`uart_16550`](https://github.com/rust-osdev/uart_16550) -Maintained by [@phil-opp](https://github.com/phil-opp) - -The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month: - -- [feat(mmio): add `new_with_stride`](https://github.com/rust-osdev/uart_16550/pull/36) - -Thanks to [@kouchekiniad](https://github.com/kouchekiniad) for their contribution! - -## Other Projects - -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. - - - - - -_No projects were proposed for this section this month._ - - - - -## Join Us? - -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). diff --git a/content/this-month/2024-12/index.md b/content/this-month/2024-12/index.md deleted file mode 100644 index eb3a90b1..00000000 --- a/content/this-month/2024-12/index.md +++ /dev/null @@ -1,169 +0,0 @@ -+++ -title = "This Month in Rust OSDev: December 2024" -date = 2025-01-11 - -[extra] -month = "December 2024" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [This Month in Redox OS - December 2024](https://www.redox-os.org/news/this-month-241231/) -- Video: [Intro to Embassy : embedded development with async Rust](https://www.youtube.com/watch?v=pDd5mXBF4tY) -- [2025: The Year of COSMIC — Alpha 5 Released!](https://blog.system76.com/post/cosmic-alpha-5-released) -- Funding Opportunities - with [Redox OS](https://redox-os.org/) or on your own - - The NGI Zero Commons Fund and NGI Zero Fediversity Fund each have a call for proposals with a Feb. 1 deadline. -If the proposal is successful, it would be to start roughly in June or July (based on our experience) and run for up to 12 months, -with an amount up to 50,000 EUR. -There must be a "European component", so a EU-based developer would be an ideal fit, -or perhaps a project where the maintainer is EU-based. Here are the links: - - [NGI Zero Commons Fund](https://nlnet.nl/commonsfund/) - - [NGI Zero Fediversity Fund](https://nlnet.nl/fediversity/) - - Redox is looking for a part-time or short-term developer to help with implementing device drivers, ACPI support, and similar, -who would like to join our proposal. -You must be knowledgeable in Rust and drivers, and have good reputation in the open source community. -We have an existing relationship with NLnet, so we can craft the proposal, based on your skillset and our priorities. -Please join us on Matrix and let us know you are interested. - - https://matrix.to/#/#redox-join:matrix.org - - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Improve default target options for `x86_64-unknown-linux-none`](https://github.com/rust-lang/rust/pull/134765) -- [De-duplicate and improve definition of core::ffi::c_char](https://github.com/rust-lang/rust/pull/132975) - -## `rust-osdev` Projects - -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. - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. - -We merged the following PRs this month: - -- [Fix clippy::needless_lifetimes in Rust 1.83 and ShimLock ABI on ia32](https://github.com/rust-osdev/uefi-rs/pull/1485) -- [Fix clippy::use_self](https://github.com/rust-osdev/uefi-rs/pull/1486) -- [uefi-raw: Add DriverBindingProtocol](https://github.com/rust-osdev/uefi-rs/pull/1487) -- [Increase MSRV to 1.81](https://github.com/rust-osdev/uefi-rs/pull/1484) -- [Update ptr_meta to 0.3.0](https://github.com/rust-osdev/uefi-rs/pull/1496) -- [Remove unstable gate for `core::error::Error` impls](https://github.com/rust-osdev/uefi-rs/pull/1497) -- [Use size_of/size_of_val/align_of/align_of_val from the prelude](https://github.com/rust-osdev/uefi-rs/pull/1498) -- [book: Set driver link-arg in `build.rs`](https://github.com/rust-osdev/uefi-rs/pull/1502) - - - - - - - - - -Thanks to [@crawfxrd](https://github.com/crawfxrd) and [@JarlEvanson](https://github.com/JarlEvanson) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [fix(idt): panic in `impl fmt::Debug for EntryOptions`](https://github.com/rust-osdev/x86_64/pull/522) -- [Add `MapperFlush` method to get page](https://github.com/rust-osdev/x86_64/pull/525) -- [feat: add `update()` to `Cr3`, `Dr7`, `SFMask`, `UCet`, `SCet`, `mxcsr`, `rflags`, and `XCr0`](https://github.com/rust-osdev/x86_64/pull/527) -- [fix(model_specific): make `{Fs,Gs,KernelGs}Base::write()` unsafe](https://github.com/rust-osdev/x86_64/pull/528) -- [Merge master into next](https://github.com/rust-osdev/x86_64/pull/521) - -Thanks to [@mkroening](https://github.com/mkroening) and [@adavis628](https://github.com/adavis628) for their contributions! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [Remove "UEFI boot" log message](https://github.com/rust-osdev/bootloader/pull/476) - -Thanks to [@ChocolateLoverRaj](https://github.com/ChocolateLoverRaj) for their contributions! - - - -## Other Projects - -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. - - - -### [`roeeshoshani/genesis`](https://github.com/roeeshoshani/genesis) -(Section written by [@roeeshoshani](https://github.com/roeeshoshani)) - -`genesis` is a bare metal firmware implementation for mips. it implements everything from the bottom up, from -initializing the cpu caches, to configuring pci devices and the interrupt controller. - -i noticed that every kernel implementation is always for x86, so i decided to implement it for something a -little more esoteric - mips. - -the project is currently in very early stages but the basics are there. - -it is my hobby project for me to learn about embedded programming. - -feel free to follow along the development of it :). - -## Join Us? - -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). diff --git a/content/this-month/2025-01/index.md b/content/this-month/2025-01/index.md deleted file mode 100644 index 33cd65d8..00000000 --- a/content/this-month/2025-01/index.md +++ /dev/null @@ -1,218 +0,0 @@ -+++ -title = "This Month in Rust OSDev: January 2025" -date = 2025-02-04 - -[extra] -month = "January 2025" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- Podcast: [Rust in Production: Volvo Ships Memory-Safe ECUs in Production Cars](https://www.reddit.com/r/rust/comments/1i88zmb/rust_in_production_volvo_ships_memorysafe_ecus_in/) -- [The VEKOS operating system is now able to execute programs](https://www.reddit.com/r/rust/comments/1ieetqt/the_vekos_operating_system_is_now_able_to_execute/) -- Video: [Windows Kernel Programming with Rust - Matthias Heiden | EuroRust 2024](https://www.youtube.com/watch?v=NfBXDEgm6VY) -- [Understanding the Microsoft Pluton security processor](https://techcommunity.microsoft.com/blog/windows-itpro-blog/understanding-the-microsoft-pluton-security-processor/4370413) (uses Rust and [TockOS](https://tockos.org/)) -- Linux: [Resistance to Rust abstractions for DMA mapping](https://lwn.net/SubscriberLink/1006805/f75d238e25728afe/) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - -- [Insert null checks for pointer dereferences when debug assertions are enabled](https://github.com/rust-lang/rust/pull/134424) -- [Make missing_abi lint warn-by-default](https://github.com/rust-lang/rust/pull/132397) -- [show linker output even if the linker succeeds](https://github.com/rust-lang/rust/pull/119286) - - - - -## `rust-osdev` Projects - -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. - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. - -We merged the following PRs this month: - -- [uefi-raw: Add FirmwareVolume{,Block}2Protocol](https://github.com/rust-osdev/uefi-rs/pull/1503) -- [uefi-raw: hii: Add Database Protocol](https://github.com/rust-osdev/uefi-rs/pull/1510) -- [uefi-raw: Add ScsiIoProtocol](https://github.com/rust-osdev/uefi-rs/pull/1517) -- [Add missing type/subtype checks to `TryFrom<&DevicePathNode>`](https://github.com/rust-osdev/uefi-rs/pull/1516) -- [uefi-raw: Add common impls for http types](https://github.com/rust-osdev/uefi-rs/pull/1518) -- [relicensing: Rewrite allocator, configuration table, and image unload PRs](https://github.com/rust-osdev/uefi-rs/pull/1523) -- [relicensing: Rewrite set_timer PR](https://github.com/rust-osdev/uefi-rs/pull/1524) -- [Fix memory leaks in DevicePathFromText](https://github.com/rust-osdev/uefi-rs/pull/1525) -- [Add warning to custom memory types](https://github.com/rust-osdev/uefi-rs/pull/1526) -- [test-runner: Clean up device path tests](https://github.com/rust-osdev/uefi-rs/pull/1527) - - - - - - - -Thanks to [@crawfxrd](https://github.com/crawfxrd) and [@hannahfluch](https://github.com/hannahfluch) for their contributions! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [use threads instead of futures in build.rs](https://github.com/rust-osdev/bootloader/pull/484) -- [Move test kernels to a separate workspace](https://github.com/rust-osdev/bootloader/pull/486) -- [fix condition for running bootloader common tests](https://github.com/rust-osdev/bootloader/pull/487) - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [fix warnings & remove broken CI job](https://github.com/rust-osdev/x86_64/pull/530) -- [Add page attribute table support](https://github.com/rust-osdev/x86_64/pull/529) -- [use default python again](https://github.com/rust-osdev/x86_64/pull/533) -- [feat(msr): add IA32_APIC_BASE support](https://github.com/rust-osdev/x86_64/pull/532) - -Thanks to [@hannahfluch](https://github.com/hannahfluch) and [@adavis628](https://github.com/adavis628) for their contributions! - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [acpi: Remove Clone Copy traits for MADT](https://github.com/rust-osdev/acpi/pull/238) -- [acpi: Clone impl for PlatformInfo and ManagedSlice](https://github.com/rust-osdev/acpi/pull/239) -- [aml: fix clippy warnings and run clippy in CI](https://github.com/rust-osdev/acpi/pull/237) -- [Fix unsoundness in our representation of the MADT](https://github.com/rust-osdev/acpi/pull/223) - -Thanks to [@IsaacWoods](https://github.com/IsaacWoods), [@mrjbom](https://github.com/mrjbom), and [@00xc](https://github.com/00xc) for their contributions! - - -### [`multiboot2`](https://github.com/rust-osdev/multiboot2) -Maintained by [@phip1611](https://github.com/phip1611) - -_Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and -the contained information tags. Usable in no_std environments, such as a kernel. -An optional builder feature also allows the construction of the corresponding -structures._ - -We merged the following PRs this month: - -- [fix: typos](https://github.com/rust-osdev/multiboot2/pull/253) -- [misc improvements](https://github.com/rust-osdev/multiboot2/pull/254) - - - -## Other Projects - -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. - - - -### [`roeeshoshani/genesis`](https://github.com/roeeshoshani/genesis) -(Section written by [@roeeshoshani](https://github.com/roeeshoshani)) - -`genesis` is a bare metal firmware implementation for mips. it implements everything from the bottom up, from -initializing the cpu caches, to configuring pci devices and the interrupt controller. - -this month, the core async executor was implemented. - -this means that we can implement blocking operations (for example reading a byte from the UART) as rust futures, and we then -`.await` them. - -this makes our lives much easier when writing code that needs to block until some I/O events happen. instead of using callbacks, -and having to pass our state all over the place, we can just `.await` the blocking future, and write our code using async functions, -which is much more ergonomic. - -##### example - -currently, there is only one blocking operation implemented, the operation of reading a byte from the UART. - -this allows code like the following to be written: -```rust -loop { - let byte = uart_read_byte().await; - println!("received uart byte: {}", byte); -} -``` - -which is a huge improvement over the previous implementation of putting the code inside the UART interrupt handler. - -##### how does it work? - -the way this works is that the core kernel's main loop looks roughly like the following: -```rust -loop { - poll_tasks(); - wait_for_interrupt(); -} -``` - -then, the interrupt handler is responsible for waking up the relevant tasks. - -futures that need interrupt handlers to wake them up should somehow register themselves, and the interrupt hanlers will then -wake the registered tasks. - -then, in the next iteration, the tasks that were woken up will be polled again, which completes the loop. - - -## Join Us? - -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). diff --git a/content/this-month/2025-02/index.md b/content/this-month/2025-02/index.md deleted file mode 100644 index d0d67405..00000000 --- a/content/this-month/2025-02/index.md +++ /dev/null @@ -1,188 +0,0 @@ -+++ -title = "This Month in Rust OSDev: February 2025" -date = 2025-03-04 - -[extra] -month = "February 2025" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [This Month in Redox - January 2025](https://www.redox-os.org/news/this-month-250131/) -- [RSoC 2024: Dynamic Linking - Part 2](https://www.redox-os.org/news/02_rsoc2024_dynamic_linker/) -- [Asterinas in 2024](https://asterinas.github.io/2025/01/20/asterinas-in-2024.html) - - [Asterinas](https://github.com/asterinas/asterinas) is a Linux ABI-compatible OS written from scratch in Rust -- [Towards Practical Formal Verification for a General-Purpose OS in Rust](https://asterinas.github.io/2025/02/13/towards-practical-formal-verification-for-a-general-purpose-os-in-rust.html) -- [Writing a Simple Windows Driver in Rust](https://scorpiosoftware.net/2025/02/08/writing-a-simple-driver-in-rust/) -- [FOSDEM talk: Rust for Linux](https://fosdem.org/2025/schedule/event/fosdem-2025-6507-rust-for-linux/) -- [No-Panic Rust: A Nice Technique for Systems Programming](https://blog.reverberate.org/2025/02/03/no-panic-rust.html) -- [PSA: uuid's getrandom update may break no-std V4/V7 users](https://www.reddit.com/r/rust/comments/1ihd0hf/psa_uuids_getrandom_update_may_break_nostd_v4v7/) -- The Embedded Rustacean: [Issue #39](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-39) and [Issue #40](https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-40) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Create a generic AVR target: avr-none](https://github.com/rust-lang/rust/pull/131651) -- [x86: use SSE2 to pass float and SIMD types](https://github.com/rust-lang/rust/pull/135408) -- [add x86-sse2 (32bit) ABI that requires SSE2 target feature](https://github.com/rust-lang/rust/pull/137037) -- [Update to LLVM 20](https://github.com/rust-lang/rust/pull/135763) - -## `rust-osdev` Projects - -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. - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. - -We merged the following PRs this month: - -- [relicensing: Rewrite PR "DevicePathToText and DevicePathFromText Protocol"](https://github.com/rust-osdev/uefi-rs/pull/1528) -- [Relicense to "MIT OR Apache-2.0"](https://github.com/rust-osdev/uefi-rs/pull/1531) -- [Add SPDX headers](https://github.com/rust-osdev/uefi-rs/pull/1532) -- [release: uefi-raw-0.10.0, uefi-macros-0.18.0, uefi-0.34.0](https://github.com/rust-osdev/uefi-rs/pull/1533) -- [uefi: Update license info in docstring](https://github.com/rust-osdev/uefi-rs/pull/1534) -- [release: uefi-0.34.1](https://github.com/rust-osdev/uefi-rs/pull/1535) -- [uefi-raw: add Boolean type](https://github.com/rust-osdev/uefi-rs/pull/1536) -- [uefi-raw: use new Boolean type ](https://github.com/rust-osdev/uefi-rs/pull/1538) -- [xtask/uefi-raw: improve check-raw error messages](https://github.com/rust-osdev/uefi-rs/pull/1537) -- [Fix upcoming lints in clippy 1.85](https://github.com/rust-osdev/uefi-rs/pull/1541) -- [uefi: clarify situation with `boot::memory_map()` and `Status::BUFFER_TOO_SMALL`](https://github.com/rust-osdev/uefi-rs/pull/1540) -- [Fix uefi-raw MSRV build, and improve CI for MSRV](https://github.com/rust-osdev/uefi-rs/pull/1542) -- [Add PXE types to uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/1543) -- [uefi: Replace definition of MacAddress with a re-export from uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/1547) -- [Use bitflags definitions from uefi-raw in uefi's pxe module](https://github.com/rust-osdev/uefi-rs/pull/1548) -- [uefi: Fix the BufferSize argument in SimpleNetwork::transmit](https://github.com/rust-osdev/uefi-rs/pull/1550) -- [Use newtype enum definitions from uefi-raw in uefi's pxe module](https://github.com/rust-osdev/uefi-rs/pull/1551) - - - - - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [Update `x86_64` to `0.15.2`](https://github.com/rust-osdev/bootloader/pull/490) -- [change rustc-abi in custom targets to x86-softfloat](https://github.com/rust-osdev/bootloader/pull/491) -- [[v0.9] change rustc-abi in custom targets to x86-softfloat](https://github.com/rust-osdev/bootloader/pull/492) -- [Release `v0.11.10`](https://github.com/rust-osdev/bootloader/pull/493) -- [Update uart_16550 to 0.3.2](https://github.com/rust-osdev/bootloader/pull/495) -- [Specify kernel-code virt addr in BootloaderConfig](https://github.com/rust-osdev/bootloader/pull/494) -- [Use `Result::ok`](https://github.com/rust-osdev/bootloader/pull/496) - -Thanks to [@Stazer](https://github.com/Stazer), [@Wasabi375](https://github.com/Wasabi375), and [@ChocolateLoverRaj](https://github.com/ChocolateLoverRaj) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [Ensure that addition and subtraction of addresses panics on overflow/underflow](https://github.com/rust-osdev/x86_64/pull/535) -- [don't pass -Crelocation-model=static to host targets](https://github.com/rust-osdev/x86_64/pull/536) - -Thanks to [@farnz](https://github.com/farnz) for their contribution! - - -### [`acpi`](https://github.com/rust-osdev/acpi) -Maintained by [@IsaacWoods](https://github.com/IsaacWoods) - -The `acpi` repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month: - -- [acpi: fix build errors](https://github.com/rust-osdev/acpi/pull/240) - -Thanks to [@jellllly420](https://github.com/jellllly420) for their contribution! - - -### [`ovmf-prebuilt`](https://github.com/rust-osdev/ovmf-prebuilt) -Maintained by [@nicholasbishop](https://github.com/nicholasbishop) and [@phil-opp](https://github.com/phil-opp) - -The `ovmf-prebuilt` project provides pre-built [edk2](https://github.com/tianocore/edk2) releases to make it easier to set up OVMF. We merged the following improvement this month: - -- [Add 202408.01, 202411, and 202502 releases](https://github.com/rust-osdev/ovmf-prebuilt/pull/139) -- [fix(deps): update rust crate ureq to v3](https://github.com/rust-osdev/ovmf-prebuilt/pull/146) -- [Set `Source::LATEST` to `EDK2_STABLE202502_R1`](https://github.com/rust-osdev/ovmf-prebuilt/pull/145) -- [release: 0.2.2](https://github.com/rust-osdev/ovmf-prebuilt/pull/140) -y - - - - - - - -Thanks to [@mkroening](https://github.com/mkroening) for their contributions! - - - - -## Other Projects - -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. - - - -No projects updates were submitted this month. - - -## Join Us? - -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). diff --git a/content/this-month/2025-03/index.md b/content/this-month/2025-03/index.md deleted file mode 100644 index bbc7b3ad..00000000 --- a/content/this-month/2025-03/index.md +++ /dev/null @@ -1,152 +0,0 @@ -+++ -title = "This Month in Rust OSDev: March 2025" -date = 2025-04-06 - -[extra] -month = "March 2025" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [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/) -- [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/) -- [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/) -- [Stalloc: fast memory allocation on the stack](https://www.reddit.com/r/rust/comments/1jqjs6n/stalloc_fast_memory_allocation_on_the_stack/) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Allow `*const W -> *const dyn A` ptr cast](https://github.com/rust-lang/rust/pull/136127) -- [Stabilize `asm_goto` feature gate](https://github.com/rust-lang/rust/pull/133870) - -## `rust-osdev` Projects - -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. - - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. - -We merged the following PRs this month: - -- [uefi: Implement SignalEvent() boot services function](https://github.com/rust-osdev/uefi-rs/pull/1556) -- [uefi: Improve handling of null-address allocations in allocate_pages](https://github.com/rust-osdev/uefi-rs/pull/1558) -- [uefi: Mark all function pointers in pxe::BaseCode unsafe](https://github.com/rust-osdev/uefi-rs/pull/1552) -- [uefi: Exclude null byte from CStr8 Display impl](https://github.com/rust-osdev/uefi-rs/pull/1553) -- [nix: switch to Nix Flake](https://github.com/rust-osdev/uefi-rs/pull/1560) -- [Fix unwanted rebuilds in xtask commands](https://github.com/rust-osdev/uefi-rs/pull/1559) -- [Create FUNDING.yml](https://github.com/rust-osdev/uefi-rs/pull/1563) -- [Implement conversions for IpAddress and MacAddress](https://github.com/rust-osdev/uefi-rs/pull/1564) -- [uefi: Clean up error docs in media protocols](https://github.com/rust-osdev/uefi-rs/pull/1568) -- [uefi: Reformat `use` items in pxe module](https://github.com/rust-osdev/uefi-rs/pull/1567) -- [uefi: Consistently use `&mut self` for pxe::BaseCode methods](https://github.com/rust-osdev/uefi-rs/pull/1566) -- [ci: fix typos](https://github.com/rust-osdev/uefi-rs/pull/1571) -- [Update Protocol/unsafe_protocol docs](https://github.com/rust-osdev/uefi-rs/pull/1574) -- [uefi: Use uefi_raw's `PxeBaseCodeProtocol` to implement the internals of `pxe::BaseCode`](https://github.com/rust-osdev/uefi-rs/pull/1576) -- [uefi-raw: Add DiskInfo protocol binding](https://github.com/rust-osdev/uefi-rs/pull/1580) -- [uefi-raw: Add EXT_SCSI_PASS_THRU protocol binding](https://github.com/rust-osdev/uefi-rs/pull/1581) -- [uefi runtime: Increase default size of name buffer](https://github.com/rust-osdev/uefi-rs/pull/1579) -- [uefi-raw: Add conversions to/from core::net IP address types](https://github.com/rust-osdev/uefi-rs/pull/1582) -- [uefi: Enable unsafe_op_in_unsafe_fn lint](https://github.com/rust-osdev/uefi-rs/pull/1585) -- [uefi: Make pxe::Mode an opaque struct](https://github.com/rust-osdev/uefi-rs/pull/1583) -- [uefi: Implement safe wrapper for EFI_DISK_INFO_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1590) -- [uefi-raw: Add EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1591) -- [uefi-raw: Add documentation to ScsiIoScsiRequestPacket](https://github.com/rust-osdev/uefi-rs/pull/1593) -- [uefi-raw: Add EFI_ATA_PASS_THRU_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1592) - - - - - - - -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! - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [remove #[no_mangle] from panic handler](https://github.com/rust-osdev/bootloader/pull/500) - - -## Other Projects - -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. - - - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Update blog to Rust 2024 edition](https://github.com/phil-opp/blog_os/pull/1405) -- [Latam Spanish translation](https://github.com/phil-opp/blog_os/pull/1368) -- [Fix translation in `zh-CN` testing post](https://github.com/phil-opp/blog_os/pull/1407) - -Thanks to [@dobleuber](https://github.com/dobleuber) and [@JINHUILYU](https://github.com/JINHUILYU) for their contributions! - -## Join Us? - -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). diff --git a/content/this-month/2025-04/index.md b/content/this-month/2025-04/index.md deleted file mode 100644 index 2dd01ddf..00000000 --- a/content/this-month/2025-04/index.md +++ /dev/null @@ -1,160 +0,0 @@ -+++ -title = "This Month in Rust OSDev: April 2025" -date = 2025-05-10 - -[extra] -month = "April 2025" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- Podcast: [Microsoft rewriting Hyper-V components in Rust; calls 2025 "the year of Rust at Microsoft"](https://corrode.dev/podcast/s04e01-microsoft/) -- [Memory-safe sudo to become the default in Ubuntu](https://trifectatech.org/blog/memory-safe-sudo-to-become-the-default-in-ubuntu/) -- [Migration to rust-coreutils in Ubuntu 25.10](https://discourse.ubuntu.com/t/migration-to-rust-coreutils-in-25-10/59708) -- [noshell, a no_std argument parser and a shell for constrained systems](https://github.com/inthehack/noshell) -- [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/) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [Stabilize `naked_functions`](https://github.com/rust-lang/rust/pull/134213/) - -## `rust-osdev` Projects - -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. - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. - -We merged the following PRs this month: - -- [uefi-raw: Add binding for EFI_DEVICE_PATH_UTILITIES_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1598) -- [clippy: fix](https://github.com/rust-osdev/uefi-rs/pull/1602) -- [helpers: Add AlignedBuffer](https://github.com/rust-osdev/uefi-rs/pull/1600) -- [xtask: fix nixfmt + update Nix flake + fix CI](https://github.com/rust-osdev/uefi-rs/pull/1607) -- [uefi/doc: improve documentation of exit_boot_services + change signature](https://github.com/rust-osdev/uefi-rs/pull/1605) -- [uefi: Some convenient DevicePathUtilities helper methods](https://github.com/rust-osdev/uefi-rs/pull/1599) -- [uefi: Add safe protocol wrapper for EFI_EXT_SCSI_PASS_THRU_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1589) -- [uefi-raw: Fix ATA_PASS_THRU_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1619) -- [snp network test fixes](https://github.com/rust-osdev/uefi-rs/pull/1618) -- [uefi-raw: Add EFI_USB_IO_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1623) -- [uefi: Add safe protocol wrapper for EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1594) -- [uefi: Move PoolString to enable additional use](https://github.com/rust-osdev/uefi-rs/pull/1624) -- [uefi-raw: Fix EFI_USB_IO_PROTOCOL implementation](https://github.com/rust-osdev/uefi-rs/pull/1626) -- [uefi-raw: Add EFI_USB2_HC_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1629) -- [uefi: Add safe protocol wrapper for EFI_ATA_PASS_THRU_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1595) -- [uefi-raw: Move EFI_SIMPLE_NETWORK_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1634) -- [Enable access to hidden RAII guard components](https://github.com/rust-osdev/uefi-rs/pull/1635) -- [UEFI Allocator: add PAGE_SIZE shortcut ](https://github.com/rust-osdev/uefi-rs/pull/1611) -- [xtask: Update OVMF release to EDK2_STABLE202502_R2](https://github.com/rust-osdev/uefi-rs/pull/1637) -- [add ip4config2 + http protocols support](https://github.com/rust-osdev/uefi-rs/pull/1614) -- [uefi-raw: Redefine UsbPortStatus and UsbTransferStatus](https://github.com/rust-osdev/uefi-rs/pull/1638) -- [uefi: remove duplication in DevicePathHeader; use uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/1613) -- [uefi: Implement CalculateCrc32() boot services function](https://github.com/rust-osdev/uefi-rs/pull/1649) - - - - - - - - -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! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [fix kani build job](https://github.com/rust-osdev/x86_64/pull/544) -- [improve `VirtAddr` `Add` & `Sub` impls](https://github.com/rust-osdev/x86_64/pull/543) -- [Revert #529 on master](https://github.com/rust-osdev/x86_64/pull/545) -- [merge master into next](https://github.com/rust-osdev/x86_64/pull/546) - - -### [`bootloader`](https://github.com/rust-osdev/bootloader) -Maintained by [@phil-opp](https://github.com/phil-opp) and [@Freax13](https://github.com/orgs/rust-osdev/people/Freax13) - -The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements: - -- [implement Send+Sync for MemoryRegions](https://github.com/rust-osdev/bootloader/pull/502) - - - -## Other Projects - -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. - - - -### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) -(Section written by [@phil-opp](https://github.com/phil-opp)) - -We merged the following changes to the [_Writing an OS in Rust_](https://os.phil-opp.com/) blog this month: - -- [Added [[bin]] section to Cargo.toml](https://github.com/phil-opp/blog_os/pull/1412) -- [loading UEFI using ovmf_prebuilt=0.2.3 with ovmf_code and ovmf_vars](https://github.com/phil-opp/blog_os/pull/1410) - -Thanks to [@tigeryant](https://github.com/tigeryant) and [@v4zha](https://github.com/v4zha) for their contributions! - - -## Join Us? - -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). diff --git a/content/this-month/2025-05/index.md b/content/this-month/2025-05/index.md deleted file mode 100644 index eddebc16..00000000 --- a/content/this-month/2025-05/index.md +++ /dev/null @@ -1,151 +0,0 @@ -+++ -title = "This Month in Rust OSDev: May 2025" -date = 2025-06-05 - -[extra] -month = "May 2025" -editors = ["phil-opp"] -+++ - -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. - - - -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. - - - -## Announcements, News, and Blog Posts - -Here we collect news, blog posts, etc. related to OS development in Rust. - - - -- [Miralis, a RISC-V virtual firmware monitor](https://github.com/CharlyCst/miralis) -- [This Month in Redox](https://redox-os.org/news/this-month-250531/) - - Redox is looking for a developer in the EU - see the job description in our monthly report! -- [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/) -- [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) -- [Edit is now open source](https://devblogs.microsoft.com/commandline/edit-is-now-open-source/) -- [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/) -- [First look at Blinksy](https://blog.mikey.nz/first-look-at-blinksy/) - A Rust no-std no-alloc LED control library for spatial layouts -- [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/) -- [RusTOS - Small RTOS in Rust](https://www.reddit.com/r/rust/comments/1kgx126/rustos_small_rtos_in_rust/) -- [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/) - -## Infrastructure and Tooling - -In this section, we collect recent updates to `rustc`, `cargo`, and other tooling that are relevant to Rust OS development. - - - -- [aarch64-softfloat: forbid enabling the neon target feature](https://github.com/rust-lang/rust/pull/135160) - -## `rust-osdev` Projects - -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. - - - - -### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) -Maintained by [@GabrielMajeri](https://github.com/GabrielMajeri), [@nicholasbishop](https://github.com/nicholasbishop), and [@phip1611](https://github.com/phip1611) - -`uefi` makes it easy to develop Rust software that leverages safe, convenient, -and performant abstractions for UEFI functionality. - -We merged the following PRs this month: - -- [release: uefi-raw-0.11.0, uefi-macros-0.18.1, uefi-0.35.0](https://github.com/rust-osdev/uefi-rs/pull/1652) -- [xtask: Add --ovmf-shell arg](https://github.com/rust-osdev/uefi-rs/pull/1656) -- [xtask: simplify env variables](https://github.com/rust-osdev/uefi-rs/pull/1657) -- [uefi: use Duration for boot::stall](https://github.com/rust-osdev/uefi-rs/pull/1659) -- [xtask: Improve error message for enums in uefi-raw](https://github.com/rust-osdev/uefi-rs/pull/1660) -- [ConfigTableEntry move constants and add example](https://github.com/rust-osdev/uefi-rs/pull/1661) -- [uefi: `system::with_*` now take mutably closure](https://github.com/rust-osdev/uefi-rs/pull/1663) -- [uefi-test-runner: streamline memory related tests](https://github.com/rust-osdev/uefi-rs/pull/1666) -- [rust: edition 2024](https://github.com/rust-osdev/uefi-rs/pull/1586) -- [Unpin uguid](https://github.com/rust-osdev/uefi-rs/pull/1673) -- [uefi: SNP transmit: document parameters](https://github.com/rust-osdev/uefi-rs/pull/1664) -- [doc: improved documentation for boot allocation functions](https://github.com/rust-osdev/uefi-rs/pull/1665) -- [uefi-raw: Add binding for EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1658) -- [doc: streamline device path documentation between uefi-raw and uefi](https://github.com/rust-osdev/uefi-rs/pull/1641) -- [clippy: fix upcoming nightly lints](https://github.com/rust-osdev/uefi-rs/pull/1675) -- [cleanup IPConfig2/Http Protocol](https://github.com/rust-osdev/uefi-rs/pull/1640) -- [uefi: deprecated since 0.36.0](https://github.com/rust-osdev/uefi-rs/pull/1677) -- [doc: help with feature selection](https://github.com/rust-osdev/uefi-rs/pull/1676) -- [uefi: Add safe EFI_USB_IO_PROTOCOL bindings](https://github.com/rust-osdev/uefi-rs/pull/1625) -- [uefi: Add (partial) safe protocol implementation for PCI_ROOT_BRIDGE_IO_PROTOCOL](https://github.com/rust-osdev/uefi-rs/pull/1674) - - - - - - - - - - -Thanks to [@seijikun](https://github.com/seijikun), [@fox0](https://github.com/fox0), and [@JarlEvanson](https://github.com/JarlEvanson) for their contributions! - - -### [`x86_64`](https://github.com/rust-osdev/x86_64) -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) - -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. - -We merged the following PRs this month: - -- [feat(sev): add AMD SEV support](https://github.com/rust-osdev/x86_64/pull/542) -- [implement functions for accessing CR8](https://github.com/rust-osdev/x86_64/pull/547) -- [Add page attribute table support](https://github.com/rust-osdev/x86_64/pull/548) - -Thanks to [@zyuiop](https://github.com/zyuiop) for their contribution! - - - -## Other Projects - -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. - - - - -No projects updates were submitted this month. - -## Join Us? - -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). diff --git a/content/this-month/_index.md b/content/this-month/_index.md deleted file mode 100644 index c49d8261..00000000 --- a/content/this-month/_index.md +++ /dev/null @@ -1,7 +0,0 @@ -+++ -title = "This Month in Rust OSDev" -sort_by = "date" -render = false -+++ - -These posts give a regular overview of the most important changes to the RustOSDev tools and libraries. diff --git a/static/css/main.css b/css/main.css similarity index 100% rename from static/css/main.css rename to css/main.css diff --git a/static/css/poole.css b/css/poole.css similarity index 100% rename from static/css/poole.css rename to css/poole.css diff --git a/index.html b/index.html new file mode 100644 index 00000000..b590bd05 --- /dev/null +++ b/index.html @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    + +

    Rust OSDev

    + + +

    This Month in Rust OSDev

    +

    These posts give a regular overview of the most important changes to the RustOSDev tools and libraries.

    + + + + +

    Showcase

    +

    In this section, we present interesting operating system projects written in Rust. Feel free to add your own project by creating a pull request.

    + + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 00000000..259b0ec4 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://rust-osdev.com/sitemap.xml diff --git a/rss.xml b/rss.xml new file mode 100644 index 00000000..10ad8cbf --- /dev/null +++ b/rss.xml @@ -0,0 +1,529 @@ + + + + Rust OSDev + https://rust-osdev.com + Operating System Development in Rust + Zola + en + + Thu, 05 Jun 2025 00:00:00 +0000 + + This Month in Rust OSDev: May 2025 + Thu, 05 Jun 2025 00:00:00 +0000 + https://rust-osdev.com/this-month/2025-05/ + https://rust-osdev.com/this-month/2025-05/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: April 2025 + Sat, 10 May 2025 00:00:00 +0000 + https://rust-osdev.com/this-month/2025-04/ + https://rust-osdev.com/this-month/2025-04/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: March 2025 + Sun, 06 Apr 2025 00:00:00 +0000 + https://rust-osdev.com/this-month/2025-03/ + https://rust-osdev.com/this-month/2025-03/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: February 2025 + Tue, 04 Mar 2025 00:00:00 +0000 + https://rust-osdev.com/this-month/2025-02/ + https://rust-osdev.com/this-month/2025-02/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: January 2025 + Tue, 04 Feb 2025 00:00:00 +0000 + https://rust-osdev.com/this-month/2025-01/ + https://rust-osdev.com/this-month/2025-01/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: December 2024 + Sat, 11 Jan 2025 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-12/ + https://rust-osdev.com/this-month/2024-12/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: November 2024 + Sun, 08 Dec 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-11/ + https://rust-osdev.com/this-month/2024-11/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: October 2024 + Thu, 14 Nov 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-10/ + https://rust-osdev.com/this-month/2024-10/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: September 2024 + Mon, 07 Oct 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-09/ + https://rust-osdev.com/this-month/2024-09/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: August 2024 + Wed, 04 Sep 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-08/ + https://rust-osdev.com/this-month/2024-08/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: July 2024 + Thu, 08 Aug 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-07/ + https://rust-osdev.com/this-month/2024-07/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: June 2024 + Wed, 10 Jul 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-06/ + https://rust-osdev.com/this-month/2024-06/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: May 2024 + Sat, 08 Jun 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-05/ + https://rust-osdev.com/this-month/2024-05/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: April 2024 + Fri, 03 May 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-04/ + https://rust-osdev.com/this-month/2024-04/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: March 2024 + Wed, 10 Apr 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-03/ + https://rust-osdev.com/this-month/2024-03/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: February 2024 + Thu, 07 Mar 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-02/ + https://rust-osdev.com/this-month/2024-02/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: January 2024 + Thu, 08 Feb 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2024-01/ + https://rust-osdev.com/this-month/2024-01/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: December 2023 + Fri, 05 Jan 2024 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-12/ + https://rust-osdev.com/this-month/2023-12/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: November 2023 + Thu, 07 Dec 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-11/ + https://rust-osdev.com/this-month/2023-11/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: October 2023 + Mon, 06 Nov 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-10/ + https://rust-osdev.com/this-month/2023-10/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: September 2023 + Thu, 05 Oct 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-09/ + https://rust-osdev.com/this-month/2023-09/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: August 2023 + Wed, 06 Sep 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-08/ + https://rust-osdev.com/this-month/2023-08/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: July 2023 + Fri, 04 Aug 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-07/ + https://rust-osdev.com/this-month/2023-07/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: June 2023 + Thu, 06 Jul 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-06/ + https://rust-osdev.com/this-month/2023-06/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + CLUU (Compact Lightweight Unix Utopia) + Wed, 14 Jun 2023 00:00:00 +0000 + https://rust-osdev.com/showcase/cluu/ + https://rust-osdev.com/showcase/cluu/ + <div class="badges"> +<p><a href="https://github.com/valibali/cluu/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License" /></a> <a href="https://valibali.github.io/cluu/"><img src="https://img.shields.io/badge/documentation-RUSTDOCS-blue.svg" alt="Documentation" /></a> <a href="https://github.com/valibali/cluu"><img src="https://img.shields.io/badge/repository-GitHub-green.svg" alt="Repository" /></a></p> +</div> +<p>CLUU is a hobby operating system being written in Rust - in the active development phase - targeting x86_64 and with plans to support aarch64 in the future. The project is made for <strong>fun and joy</strong>, drawing inspiration from various operating systems and projects while incorporating unique approaches and ideas.</p> + + + + This Month in Rust OSDev: May 2023 + Tue, 06 Jun 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-05/ + https://rust-osdev.com/this-month/2023-05/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: April 2023 + Fri, 05 May 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-04/ + https://rust-osdev.com/this-month/2023-04/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: March 2023 + Sat, 08 Apr 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-03/ + https://rust-osdev.com/this-month/2023-03/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: February 2023 + Wed, 08 Mar 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-02/ + https://rust-osdev.com/this-month/2023-02/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: January 2023 + Tue, 07 Feb 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2023-01/ + https://rust-osdev.com/this-month/2023-01/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: December 2022 + Mon, 09 Jan 2023 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-12/ + https://rust-osdev.com/this-month/2022-12/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: November 2022 + Wed, 07 Dec 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-11/ + https://rust-osdev.com/this-month/2022-11/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: October 2022 + Mon, 07 Nov 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-10/ + https://rust-osdev.com/this-month/2022-10/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: September 2022 + Fri, 07 Oct 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-09/ + https://rust-osdev.com/this-month/2022-09/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: August 2022 + Tue, 06 Sep 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-08/ + https://rust-osdev.com/this-month/2022-08/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: July 2022 + Wed, 10 Aug 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-07/ + https://rust-osdev.com/this-month/2022-07/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: June 2022 + Sun, 10 Jul 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-06/ + https://rust-osdev.com/this-month/2022-06/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: May 2022 + Wed, 08 Jun 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-05/ + https://rust-osdev.com/this-month/2022-05/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: April 2022 + Sat, 07 May 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-04/ + https://rust-osdev.com/this-month/2022-04/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: March 2022 + Thu, 07 Apr 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-03/ + https://rust-osdev.com/this-month/2022-03/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev: February 2022 + Sun, 06 Mar 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-02/ + https://rust-osdev.com/this-month/2022-02/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (January 2022) + Thu, 03 Feb 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2022-01/ + https://rust-osdev.com/this-month/2022-01/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (December 2021) + Sat, 08 Jan 2022 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-12/ + https://rust-osdev.com/this-month/2021-12/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (November 2021) + Mon, 06 Dec 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-11/ + https://rust-osdev.com/this-month/2021-11/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (October 2021) + Mon, 08 Nov 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-10/ + https://rust-osdev.com/this-month/2021-10/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (September 2021) + Thu, 07 Oct 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-09/ + https://rust-osdev.com/this-month/2021-09/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (August 2021) + Wed, 08 Sep 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-08/ + https://rust-osdev.com/this-month/2021-08/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (July 2021) + Sat, 07 Aug 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-07/ + https://rust-osdev.com/this-month/2021-07/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (June 2021) + Thu, 08 Jul 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-06/ + https://rust-osdev.com/this-month/2021-06/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (May 2021) + Mon, 07 Jun 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-05/ + https://rust-osdev.com/this-month/2021-05/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (April 2021) + Wed, 05 May 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-04/ + https://rust-osdev.com/this-month/2021-04/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (March 2021) + Mon, 05 Apr 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-03/ + https://rust-osdev.com/this-month/2021-03/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (February 2021) + Mon, 08 Mar 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-02/ + https://rust-osdev.com/this-month/2021-02/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (January 2021) + Sat, 06 Feb 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2021-01/ + https://rust-osdev.com/this-month/2021-01/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + The Hermit Operating System + Fri, 22 Jan 2021 00:00:00 +0000 + https://rust-osdev.com/showcase/hermit/ + https://rust-osdev.com/showcase/hermit/ + <p><a href="http://hermit-os.org">Hermit</a> is a unikernel project, that is completely written in Rust. +<a href="http://unikernel.org/">Unikernels</a> are application images that directly contain the kernel as a library, so they do not require an installed operating system (OS). +They are typically used in virtualized environments, which build the backbone of typical cloud and edge infrastructures.</p> + + + + This Month in Rust OSDev (December 2020) + Thu, 07 Jan 2021 00:00:00 +0000 + https://rust-osdev.com/this-month/2020-12/ + https://rust-osdev.com/this-month/2020-12/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (November 2020) + Thu, 10 Dec 2020 00:00:00 +0000 + https://rust-osdev.com/this-month/2020-11/ + https://rust-osdev.com/this-month/2020-11/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (October 2020) + Sat, 07 Nov 2020 00:00:00 +0000 + https://rust-osdev.com/this-month/2020-10/ + https://rust-osdev.com/this-month/2020-10/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (September 2020) + Sun, 04 Oct 2020 00:00:00 +0000 + https://rust-osdev.com/this-month/2020-09/ + https://rust-osdev.com/this-month/2020-09/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (August 2020) + Wed, 09 Sep 2020 00:00:00 +0000 + https://rust-osdev.com/this-month/2020-08/ + https://rust-osdev.com/this-month/2020-08/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (July 2020) + Sun, 02 Aug 2020 00:00:00 +0000 + https://rust-osdev.com/this-month/2020-07/ + https://rust-osdev.com/this-month/2020-07/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (June 2020) + Sun, 12 Jul 2020 00:00:00 +0000 + https://rust-osdev.com/this-month/2020-06/ + https://rust-osdev.com/this-month/2020-06/ + <p>Welcome to a new issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (May 2020) + Sun, 07 Jun 2020 00:00:00 +0000 + https://rust-osdev.com/this-month/2020-05/ + https://rust-osdev.com/this-month/2020-05/ + <p>Welcome to the second issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem.</p> + + + + This Month in Rust OSDev (April 2020) + Wed, 06 May 2020 00:00:00 +0000 + https://rust-osdev.com/this-month/2020-04/ + https://rust-osdev.com/this-month/2020-04/ + <p>Welcome to the first issue of <em>&quot;This Month in Rust OSDev&quot;</em>. In these posts, we will give a regular overview of notable changes in the Rust operating system development community.</p> + + + + diff --git a/showcase/cluu/index.html b/showcase/cluu/index.html new file mode 100644 index 00000000..2ea7fe83 --- /dev/null +++ b/showcase/cluu/index.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + CLUU (Compact Lightweight Unix Utopia) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    CLUU (Compact Lightweight Unix Utopia)

    + + + +
    +

    License Documentation Repository

    +
    +

    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.

    + + + +

    Motivation

    +

    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.

    +

    Project Information

    +

    CLUU draws inspiration from the following operating systems:

    +
      +
    • Plan 9: 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.
    • +
    • BSD: 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.
    • +
    +

    As well as heavily influenced by the following projects:

    +
      +
    • RedoxOS: 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.
    • +
    • 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
    • +
    • blog_os: 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.
    • +
    +

    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.

    +

    Current State and Goals

    +

    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:

    +
      +
    • UART16550 driver: A driver for UART16550, allowing communication with the serial port for debugging and logging purposes.
    • +
    • 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.
    • +
    • Framebuffer driver: A driver for the framebuffer, providing a graphical output display.
    • +
    • Simple graphics and writing: Basic graphical capabilities have been implemented, allowing for drawing and writing on the screen using a PSF font.
    • +
    • Basic Logging framework: A basic logging framework has been developed to facilitate debugging and information output during the development process.
    • +
    +

    Screencheck serial_output

    +

    As the project progresses, the focus will shift towards implementing additional features, such as:

    +
      +
    • Kernel Implementation: Further development of the microkernel's core functionality, including process management, interprocess communication, and resource management.
    • +
    • Device Drivers: Continued development of drivers for essential hardware components, including keyboard, storage devices, and other peripherals.
    • +
    • Filesystem Support: Introducing filesystem support to enable file I/O operations and provide a foundation for user-level processes and applications.
    • +
    +

    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.

    +

    License

    +

    CLUU is licensed under the MIT License. See LICENSE for more information.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/content/showcase/cluu/screen.png b/showcase/cluu/screen.png similarity index 100% rename from content/showcase/cluu/screen.png rename to showcase/cluu/screen.png diff --git a/content/showcase/cluu/serial_out.png b/showcase/cluu/serial_out.png similarity index 100% rename from content/showcase/cluu/serial_out.png rename to showcase/cluu/serial_out.png diff --git a/content/showcase/hermit/bandwidth.png b/showcase/hermit/bandwidth.png similarity index 100% rename from content/showcase/hermit/bandwidth.png rename to showcase/hermit/bandwidth.png diff --git a/content/showcase/hermit/common_vm.png b/showcase/hermit/common_vm.png similarity index 100% rename from content/showcase/hermit/common_vm.png rename to showcase/hermit/common_vm.png diff --git a/showcase/hermit/index.html b/showcase/hermit/index.html new file mode 100644 index 00000000..6cfab78d --- /dev/null +++ b/showcase/hermit/index.html @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + The Hermit Operating System | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    The Hermit Operating System

    + + + +

    Hermit is a unikernel project, that is completely written in Rust. +Unikernels are application images that directly contain the kernel as a library, so they do not require an installed operating system (OS). +They are typically used in virtualized environments, which build the backbone of typical cloud and edge infrastructures.

    + + + +

    Virtualization Designs

    +

    Common virtualized environments are based on classical virtual machines. +In this case, complete machines are emulated or virtualized, and common operating systems are running on both the host and guest sides:

    +

    Structure of a common virtualization environment

    +

    This technique is established (VMware, Hyper-V, etc.) and widely used. +However, it introduces additional overhead, especially regarding memory consumption and performance.

    +

    An alternative approach to common virtual machines is OS-level virtualization, where the kernel allows the existence of multiple isolated user-space instances. +These isolated instances are also known as “containers.” +Typical representatives are LXC and Docker, which promise less overhead in comparison to common virtual machines. +However, the isolation between the processes is weaker and may provide less security.

    +

    Unikernels

    +

    Often, only one application (e.g., a web server) is running in the container or the virtual machine. +In this case, a unikernel is an attractive solution. +The kernel is provided as a static library and linked to the application. +As the images directly contain the OS kernel, unikernels can be directly booted inside a virtual machine and do not require the typical software stack containing a Linux kernel and its user land within the VM.

    +

    Unikernels do not provide system calls in the classical sense, as everything is running with the privilege level of a kernel, and what is typically done via system calls is provided via a common function call. +At first glance, this sounds more insecure than previous approaches. +However, these kernels are expected to run within a virtual machine, which isolates the application from the real system. +In addition, common compiler analysis is used to check the complete software stack, and unneeded components can even be removed, which can reduce the attack surface of the application.

    +

    Structure of a library operating system

    +

    Well-known unikernels are kernels such as MirageOS and Unikraft. +MirageOS is written in OCaml, while Unikraft still uses C as the programming language of choice. +In contrast to these kernels, Hermit is completely written in Rust to benefit from Rust's performance and security behavior.

    +

    Hermit

    +

    In principle, every existing Rust application can be built on top of Hermit. +However, unikernels are single-tasking operating systems. +Consequently, support for the system call fork and inter-process communication is missing. +In addition, a classical C library is missing, which is typically used as an interface to the operating system. +Every crate that bypasses the standard runtime and tries to communicate directly with the operating system does not work without modifications. +However, many applications do not depend on these features and work on Hermit.

    +

    Performance

    +

    Unikernels can be highly optimized. +For instance, we optimized the network stack of Hermit. +Hermit uses smoltcp as the network stack, which is completely written in Rust. +As the interface between the guest and host operating systems, we use virtio, which is a para-virtualized driver for KVM and widely used in virtualized Linux environments.

    +

    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:

    +

    Bandwidth of the Hermit's experimental network interface

    +

    Especially for small messages, Hermit is faster than Linux.

    +

    Research

    +

    Hermit is also a research project to evaluate new operating system designs, that improve the scalability and security of operating systems in cloud environments. +For instance, Hermit provides classical techniques to improve security behavior, like stack guards and separating the application stack from the libOS stack. +However, a library operating system typically uses a common function call to enter the kernel. +A classical separation of user and kernel space by entering a higher privilege level is missing.

    +

    In a paper, we presented a modified version of Hermit, which provides intra-unikernel isolation with Intel Memory Protection Keys (MPK). +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, making it a compelling candidate for use in unikernels.

    +

    MPK requires modification of page tables at a small performance cost. +Four previously unused bits of each page table entry (the 62nd to the 59th on x86-64) are exploited by MPK. +Since MPK exploits four bits of the page table entry, it supports up to 15 protection keys. +MPK controls per-thread permission on groups of pages. +Each core has a PKRU register (32 bits) containing a permission value. +The value of the PKRU register defines the permission of the thread currently running on that core for each group of pages containing a protection key in their page table entries. +Unlike page-table-level permission, MPK provides thread-local memory permission.

    +

    We provide user and kernel separation, so we simply see the entire application as an untrusted component, independently of application-specific characteristics such as the language it is written in or the level of skill of the application’s programmer. +In addition, we divide the kernel code into trusted and untrusted components. +Trusted kernel components represent pieces of code written in a memory-safe language, i.e., offering strong security guarantees. +Untrusted kernel components correspond to code written either in memory-unsafe languages or in unsafe Rust code blocks.

    +

    By entering the library operating system through the application binary interface, the protection keys will be automatically changed, which allows access to the kernel stack and the kernel heap. +Unauthorized access from within the application will trigger a page fault, which will be handled by the library operating system.

    +

    Getting Started

    +

    Take a look at hermit-os/hermit-rs-template for a simple starter application.

    +

    The Hermit platform is an official Rust target. +You can either use our prebuilt rust-std artifacts on stable Rust or use build-std on nightly Rust. +Alternatively, you can compile the whole Rust compiler for Hermit, of course.

    +

    Roadmap

    +

    In the near future, we plan to stabilize the interface to the hardware. +For instance, the support of virtiofs is at an early stage. +In addition, the integration into the Rust standard library isn't finalized yet, and the current version runs only on x86-64. +In the future, we want to also support AArch64 as a processor architecture.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/content/showcase/hermit/libos.png b/showcase/hermit/libos.png similarity index 100% rename from content/showcase/hermit/libos.png rename to showcase/hermit/libos.png diff --git a/showcase/index.html b/showcase/index.html new file mode 100644 index 00000000..a2d264d4 --- /dev/null +++ b/showcase/index.html @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    + +

    Showcase

    + + +

    In this section, we present interesting operating system projects written in Rust. Feel free to add your own project by creating a pull request.

    +

    + + +
    + +

    CLUU (Compact Lightweight Unix Utopia)

    +
    +
    +

    License Documentation Repository

    +
    +

    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.

    + + read more » +
    + +

    The Hermit Operating System

    +
    +

    Hermit is a unikernel project, that is completely written in Rust. +Unikernels are application images that directly contain the kernel as a library, so they do not require an installed operating system (OS). +They are typically used in virtualized environments, which build the backbone of typical cloud and edge infrastructures.

    + + read more » +
    + +
    + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/showcase/rusty-hermit/index.html b/showcase/rusty-hermit/index.html new file mode 100644 index 00000000..e70d2d8f --- /dev/null +++ b/showcase/rusty-hermit/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

    Click here to be redirected.

    diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..a6ad8f56 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,268 @@ + + + + https://rust-osdev.com/ + + + https://rust-osdev.com/contact/ + + + https://rust-osdev.com/showcase/ + + + https://rust-osdev.com/showcase/cluu/ + 2023-06-14 + + + https://rust-osdev.com/showcase/hermit/ + 2021-01-22 + + + https://rust-osdev.com/this-month/2020-04/ + 2020-05-06 + + + https://rust-osdev.com/this-month/2020-05/ + 2020-06-07 + + + https://rust-osdev.com/this-month/2020-06/ + 2020-07-12 + + + https://rust-osdev.com/this-month/2020-07/ + 2020-08-02 + + + https://rust-osdev.com/this-month/2020-08/ + 2020-09-09 + + + https://rust-osdev.com/this-month/2020-09/ + 2020-10-04 + + + https://rust-osdev.com/this-month/2020-10/ + 2020-11-07 + + + https://rust-osdev.com/this-month/2020-11/ + 2020-12-10 + + + https://rust-osdev.com/this-month/2020-12/ + 2021-01-07 + + + https://rust-osdev.com/this-month/2021-01/ + 2021-02-06 + + + https://rust-osdev.com/this-month/2021-02/ + 2021-03-08 + + + https://rust-osdev.com/this-month/2021-03/ + 2021-04-05 + + + https://rust-osdev.com/this-month/2021-04/ + 2021-05-05 + + + https://rust-osdev.com/this-month/2021-05/ + 2021-06-07 + + + https://rust-osdev.com/this-month/2021-06/ + 2021-07-08 + + + https://rust-osdev.com/this-month/2021-07/ + 2021-08-07 + + + https://rust-osdev.com/this-month/2021-08/ + 2021-09-08 + + + https://rust-osdev.com/this-month/2021-09/ + 2021-10-07 + + + https://rust-osdev.com/this-month/2021-10/ + 2021-11-08 + + + https://rust-osdev.com/this-month/2021-11/ + 2021-12-06 + + + https://rust-osdev.com/this-month/2021-12/ + 2022-01-08 + + + https://rust-osdev.com/this-month/2022-01/ + 2022-02-03 + + + https://rust-osdev.com/this-month/2022-02/ + 2022-03-06 + + + https://rust-osdev.com/this-month/2022-03/ + 2022-04-07 + + + https://rust-osdev.com/this-month/2022-04/ + 2022-05-07 + + + https://rust-osdev.com/this-month/2022-05/ + 2022-06-08 + + + https://rust-osdev.com/this-month/2022-06/ + 2022-07-10 + + + https://rust-osdev.com/this-month/2022-07/ + 2022-08-10 + + + https://rust-osdev.com/this-month/2022-08/ + 2022-09-06 + + + https://rust-osdev.com/this-month/2022-09/ + 2022-10-07 + + + https://rust-osdev.com/this-month/2022-10/ + 2022-11-07 + + + https://rust-osdev.com/this-month/2022-11/ + 2022-12-07 + + + https://rust-osdev.com/this-month/2022-12/ + 2023-01-09 + + + https://rust-osdev.com/this-month/2023-01/ + 2023-02-07 + + + https://rust-osdev.com/this-month/2023-02/ + 2023-03-08 + + + https://rust-osdev.com/this-month/2023-03/ + 2023-04-08 + + + https://rust-osdev.com/this-month/2023-04/ + 2023-05-05 + + + https://rust-osdev.com/this-month/2023-05/ + 2023-06-06 + + + https://rust-osdev.com/this-month/2023-06/ + 2023-07-06 + + + https://rust-osdev.com/this-month/2023-07/ + 2023-08-04 + + + https://rust-osdev.com/this-month/2023-08/ + 2023-09-06 + + + https://rust-osdev.com/this-month/2023-09/ + 2023-10-05 + + + https://rust-osdev.com/this-month/2023-10/ + 2023-11-06 + + + https://rust-osdev.com/this-month/2023-11/ + 2023-12-07 + + + https://rust-osdev.com/this-month/2023-12/ + 2024-01-05 + + + https://rust-osdev.com/this-month/2024-01/ + 2024-02-08 + + + https://rust-osdev.com/this-month/2024-02/ + 2024-03-07 + + + https://rust-osdev.com/this-month/2024-03/ + 2024-04-10 + + + https://rust-osdev.com/this-month/2024-04/ + 2024-05-03 + + + https://rust-osdev.com/this-month/2024-05/ + 2024-06-08 + + + https://rust-osdev.com/this-month/2024-06/ + 2024-07-10 + + + https://rust-osdev.com/this-month/2024-07/ + 2024-08-08 + + + https://rust-osdev.com/this-month/2024-08/ + 2024-09-04 + + + https://rust-osdev.com/this-month/2024-09/ + 2024-10-07 + + + https://rust-osdev.com/this-month/2024-10/ + 2024-11-14 + + + https://rust-osdev.com/this-month/2024-11/ + 2024-12-08 + + + https://rust-osdev.com/this-month/2024-12/ + 2025-01-11 + + + https://rust-osdev.com/this-month/2025-01/ + 2025-02-04 + + + https://rust-osdev.com/this-month/2025-02/ + 2025-03-04 + + + https://rust-osdev.com/this-month/2025-03/ + 2025-04-06 + + + https://rust-osdev.com/this-month/2025-04/ + 2025-05-10 + + + https://rust-osdev.com/this-month/2025-05/ + 2025-06-05 + + diff --git a/templates/index.html b/templates/index.html deleted file mode 100644 index 77794b71..00000000 --- a/templates/index.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends "base.html" %} - -{% block title %}{{ config.title }}{% endblock title %} - -{% block main %} - -

    Rust OSDev

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

    {{ this_month.title }}

    -{{ this_month.content | safe }} - - -{% set showcase = get_section(path = "showcase/_index.md") %} -

    {{ showcase.title }}

    -{{ showcase.content | safe }} - - -{% endblock main %} - -{% block after_main %} - -{% endblock after_main %} diff --git a/templates/page.html b/templates/page.html deleted file mode 100644 index 2eb20bad..00000000 --- a/templates/page.html +++ /dev/null @@ -1,59 +0,0 @@ -{% extends "base.html" %} - -{% block title %}{{ page.title | striptags }} | {{ config.title }}{% endblock title %} - -{% block main %} -

    {{ page.title | safe}}

    - - - - {{ page.content | safe }} - -

    Comments

    - - -{% endblock main %} - -{% block after_main %} -
    - -{% endblock after_main %} diff --git a/templates/plain.html b/templates/plain.html deleted file mode 100644 index 4ee0df74..00000000 --- a/templates/plain.html +++ /dev/null @@ -1,8 +0,0 @@ -{% extends "base.html" %} - -{% block title %}{{ page.title }} | {{ config.title }}{% endblock title %} - -{% block main %} -

    {{ page.title }}

    - {{ page.content | safe }} -{% endblock main %} diff --git a/templates/section.html b/templates/section.html deleted file mode 100644 index 5bac6059..00000000 --- a/templates/section.html +++ /dev/null @@ -1,27 +0,0 @@ -{% extends "base.html" %} - -{% block title %}{{ config.title }}{% endblock title %} - -{% block main %} - -

    {{ section.title }}

    - -{% block introduction %} -

    {{ section.content | safe }}

    -{% endblock introduction %} - -
    - {% for page in section.pages %} -

    {{ page.title | safe}}

    -
    - {{ page.summary | safe }} - read more » -
    - {% endfor %} -
    - -{% endblock main %} - -{% block after_main %} - -{% endblock after_main %} diff --git a/templates/showcase.html b/templates/showcase.html deleted file mode 100644 index 961ac840..00000000 --- a/templates/showcase.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends "base.html" %} - -{% import "snippets.html" as snippets %} - -{% block title %}{{ page.title | striptags }} | {{ config.title }}{% endblock title %} - -{% block main %} -

    {{ page.title | safe}}

    - - - - {{ page.content | replace(from="", to=snippets::showcase_intro()) | safe }} - -

    Comments

    - - -{% endblock main %} - -{% block after_main %} -
    - -{% endblock after_main %} diff --git a/templates/snippets.html b/templates/snippets.html deleted file mode 100644 index 8ab3cdde..00000000 --- a/templates/snippets.html +++ /dev/null @@ -1,5 +0,0 @@ -{% macro showcase_intro() %} - -{% endmacro showcase_intro %} \ No newline at end of file diff --git a/this-month/2020-04/index.html b/this-month/2020-04/index.html new file mode 100644 index 00000000..2960a6b8 --- /dev/null +++ b/this-month/2020-04/index.html @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (April 2020) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (April 2020)

    + + + +

    Welcome to the first 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 community.

    + +

    These posts are the successor of the "Status Update" posts on the "Writing an OS in Rust" blog. Instead of only focusing on the updates to the blog and the directly related crates, we try to give an overview of the full Rust OSDev ecosystem in this new series. This includes all the projects under the rust-osdev GitHub organization, relevant projects of other organizations, and also personal OS projects.

    +

    This series is openly developed on GitHub. 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.

    +

    News and Blog Posts

    +

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

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    This month, we released version 0.10.0 of x86_64, which includes some breaking changes:

    + +

    After v0.10.0, the following changes were merged:

    + +

    Thanks to @m-ou-se, @tomaka, @haraldh, and @imtsuki for their contributions!

    +

    acpi and aml

    +

    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. The crate for parsing the static tables (acpi) was stabilised this month – while it needs more work to support the entire spec, it is now in the state where it can be integrated into a Rust kernel to provide useful information, and its overall architecture is unlikely to change in the near future.

    +

    The full set of changes is:

    + +

    Thanks to @tomaka for their contribution and congratulations to the creator and maintainer @IsaacWoods on the 1.0 release!

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. It received the following updates this month:

    + +

    Thanks to @Freax13 and @realKennyStrawn93 for these changes!

    +

    Right now, @rybot666 and @phil-opp are working on a rewrite of the bootloader. The goal is to port the 16-bit and 32-bit stages from assembly to Rust, which should make the crate safer, more composable, and easier to understand for outsiders. Our progress is tracked in the Rewrite milestone.

    +

    bootimage

    +

    The bootimage tool allows the creation of bootable disk images for bootloader-based kernels. It also provides a runner executable for cargo to make cargo xrun and cargo xtest work using QEMU. In April, the crate received the following updates:

    + +

    Thanks to @Freax13 for their contribution!

    +

    uart_16550

    +

    The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. This month, the crate received support for serial input:

    + +

    Thanks to @imtsuki for their contribution!

    +

    cargo-xbuild

    +

    The cargo-xbuild project provides cargo command wrappers to cross-compile the sysroot crates core and alloc. This month, we added a new environment variable to help debugging build errors:

    + +

    uefi

    +

    The uefi crate provides abstractions for the UEFI standard that replaces the traditional BIOS on modern systems. This month, the crate received a new cargo feature to ignore logger errors:

    + +

    New Projects

    +

    There are a number of new projects in the rust-osdev organization:

    +
      +
    • +

      homepage: As you might have noticed by now, we have a new organization-level homepage at https://rust-osdev.com/. The homepage repository contains the source code for this website. Right now, it is still a work-in-progress and only contains the very minimum to host this post, but we plan to add more content soon.

      +

      Note that we will create a branch for the upcoming May issue of "This Month in Rust OSDev". Please open pull requests for any content that you would like to see next month.

      +
    • +
    • +

      vga: The goal of the vga crate is to allow configuration of the VGA hardware. It already makes it possible to switch from a text-based buffer to a pixel-based framebuffer, which enables drawing of lines, geometric shapes, and even images. The library is created by @RKennedy9064.

      +
    • +
    • +

      ps2-mouse: The library provides a basic interface for interacting with a PS/2 mouse. It is also created by @RKennedy9064.

      +
    • +
    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    IsaacWoods/pebble

    +

    (Section written by @IsaacWoods)

    +

    Pebble has been undergoing a bit of a reorganisation, in the interests of supporting a second architecture (ARM64). A hardware abstraction layer (HAL) has been introduced that abstracts away the platform-specifics of managing page tables, creating processes etc. so that the main kernel crate is now completely platform-independent.

    +

    I also wrote a little TFTP server for netbooting a Raspberry Pi 4 from a development machine. This makes iterating the kernel a lot easier because there's no need to write it to an SD card after every compile. In the next few weeks, I hope to clean this code up and publish it for use as both a library and CLI application, and maybe write a blog-post on the intricacies of netbooting the Pi.

    +

    rust-embedded/rust-raspberrypi-OS-tutorials

    +

    (Section written by @andre-richter)

    +

    The Operating System development tutorials in Rust on the Raspberry Pi project received the following updates recently:

    +
      +
    • Add tutorial 14: Exceptions Part 2: Peripheral IRQs. +
        +
      • We write device drivers for the two interrupt controllers on the Raspberry Pi 3 (Broadcom +custom controller) and Pi 4 (ARM Generic Interrupt Controller v2, GICv2).
      • +
      • Modularity is ensured by interfacing everything through a trait named IRQManager.
      • +
      • Handling for our first peripheral IRQ is implemented: The UART's receive IRQ - one IRQ per +received character.
      • +
      +
    • +
    • Set chainloader relocation address to 32 MiB. +
        +
      • Enables booting on Pi3 A+ devices.
      • +
      +
    • +
    • Run the chainloader natively on non-Linux Unix systems. +
        +
      • Adds experimental support for macOS and other Unix systems which have Ruby available.
      • +
      +
    • +
    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    Apart from a few minor fixes (thanks for all the contributions!), April was a quiet month for the "Writing an OS in Rust" project. I focused my work this month on the x86_64 library, the rewrite of the bootloader, and my job search instead. In this regard, I'm excited to announce that I have decided to do Rust-related freelance work for now, which will allow me to continue dedicating some of my time to open-source work.

    + +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2020-05/index.html b/this-month/2020-05/index.html new file mode 100644 index 00000000..f0a58b2d --- /dev/null +++ b/this-month/2020-05/index.html @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (May 2020) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (May 2020)

    + + + +

    Welcome to the second 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.

    + +

    This series is openly developed on GitHub. 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.

    + + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    In May, the crate received a bugfix for inclusive page/frame ranges. We also landed a long-awaited change to the Mapper::map_to function to set certain page table flags also in higher level page tables:

    + +

    Thanks to @haraldh and @mrll for their contributions!

    +

    cargo-xbuild

    +

    The cargo-xbuild project provides cargo command wrappers to cross-compile the sysroot crates core and alloc.

    +

    This month, rustc/cargo changed their codegen behavior for builds with link-time optimization (LTO), which lead to breakage for LTO builds with cargo-xbuild. Fixing this issue was not easy and required multiple tries until we found a proper solution.

    +

    Unfortunately, the solution still led to link issues for some people, which was caused by a bug in cargo/rustc. Thanks to @alexcrichton, this was quickly fixed in rustc, so that now everything should work again.

    +

    Apart from these bugfixes, there were also two other changes this month:

    + +

    Thanks to @Nils-TUD for their contribution and to all the people that helped investigating the build errors!

    +

    acpi

    +

    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.

    +

    Not a lot happened this month, but preparations +were made to change how the AML namespace is stored on the heap, in order to avoid a lot of small heap allocations +for AML paths, and reduce the number of heap allocations overall. However, some more profiling infrastructure will +need to be built before starting this.

    +

    In preparation, a change to how DefNames are stored in the namespace was made, which avoids an extra heap +allocation per DefName, and also allows us to simplify some code around the aml crate.

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. It received the following updates this month:

    + +

    Thanks to @mark-i-m and @Aaron1011 for their contributions!

    +

    bootimage

    +

    The bootimage tool allows the creation of bootable disk images for bootloader-based kernels. It also provides a runner executable for cargo to make cargo xrun and cargo xtest work using QEMU. In May, the crate was almost completely rewritten with a smaller API to make it more maintainable:

    + +

    uart_16550

    +

    The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. This month, the crate received the following updates:

    + +

    Thanks to @dbeckwith for their contribution!

    +

    uefi

    +

    The uefi crate provides abstractions for the UEFI standard that replaces the traditional BIOS on modern systems. This month, the crate's dependencies were updated, and a bug was fixed in the graphics protocol:

    + +

    Thanks to @imtsuki and @BinaryTENSHi for their contributions!

    + +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    IsaacWoods/pebble

    +

    (Section written by @IsaacWoods)

    +

    This month, I've been tracking down a bug in the kernel that causes usermode stacks to become corrupted on the +return of some system calls. While I've not found the root cause, I've taken this opportunity to add some more +debugging capabilities, which have found a number of other kernel bugs.

    +

    I also started working on the Rust implementation of Ptah, +the wire format for Pebble's message passing interface. It allows libraries to easily use Serde to +serialize and deserialize Rust types to and from the wire format. In the future, a compiler will be able to +generate bindings for Ptah for a number of different supported languages, which will allow tasks written in +different languages to communicate over Pebble Channels using idiomatic types.

    +

    RustyHermit

    +

    (Section written by @stlankes)

    +

    RustyHermit is a unikernel targeting a scalable and predictable runtime. Unikernel means, you bundle your application directly with the kernel library, so that it can run without any installed operating system. +This reduces image size and overhead, therefore, interesting applications include virtual machines and high-performance computing.

    +

    This month the integration of smoltcp has been improved and first support for virtio has been integrated. The integration in Rust's standard runtime is already in progress and clients can be developed with TcpStream. Server side applications will follow soon.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    This month, support for the legacy asm! macro was removed from rustc. This lead to build errors for the Writing an OS in Rust project because some dependencies were still using the macro. To fix this, I landed a number of dependency updates:

    + +

    I also decided to change the design of the executor in the Async/Await post to simplify it:

    + +

    While I already started a draft on the next blog post about processes, I currently plan to look into adding UEFI support to the bootloader crate first. The reason is that UEFI support will require some fundamental changes to the blog because the VGA text buffer and the legacy PIC are not supported on UEFI. This is also relevant to the upcoming post about processes, since different designs would be possible if we used the APIC instead of the legacy PIC. It therefore makes most sense to me to sort this out first.

    +

    rust-embedded/rust-raspberrypi-OS-tutorials

    +

    (Section written by @andre-richter)

    +

    May was a quiet month for the project, since I am currently taking a little hiatus. I am planning to restart working on new content two or three months down the road.

    +

    Therefore, only some maintenance updates went in, e.g. bumping all dependency crates to versions that support the new llvm_asm! macros. Also, the :cn: chinese translations received updates/additions (main Readme; 00_before_we_start).

    + +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2020-06/index.html b/this-month/2020-06/index.html new file mode 100644 index 00000000..16c58f2e --- /dev/null +++ b/this-month/2020-06/index.html @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (June 2020) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (June 2020)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    In June, the crate received some smaller improvements:

    + +

    Thanks to @samueltardieu and @leecannon for their contributions!

    +

    cargo-xbuild

    +

    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:

    + +

    Thanks to @eggyal and @Eijebong for these contributions!

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we fixed a newly introduced Rust warning:

    + +

    Thanks to @Freax13 for this contribution!

    +

    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).

    +

    acpi

    +

    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-related code:

    + +

    uefi

    +

    The uefi crate provides abstractions for the UEFI standard that replaces the traditional BIOS on modern systems. This month, the contribution docs were extended with information how to add new UEFI protocols:

    + +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    In June, I pushed two small improvements to the blog_os repository and the Writing an OS in Rust blog:

    + +

    There were also lots of small contributions this month that fixed typos and dead links and updated the Chinese translation. Thanks a lot to all contributors!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2020-07/index.html b/this-month/2020-07/index.html new file mode 100644 index 00000000..f0cc7e04 --- /dev/null +++ b/this-month/2020-07/index.html @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (July 2020) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (July 2020)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    bootimage

    +

    The bootimage tool allows the creation of bootable disk images for bootloader-based kernels. It also provides a runner executable for cargo to make cargo run and cargo test work using QEMU. In July, the crate was updated to work with cargo's own build-std feature instead of relying on the cargo-xbuild crate:

    + +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. In July, we switched the crate from cargo-xbuild to the build-std feature of cargo and fixed a bug that prevented booting in VirtualBox:

    + +

    Thanks to @rsribeiro for their contribution!

    +

    We also made some progress on adding UEFI support to the bootloader. Our prototype is now able to set up a pixel-based framebuffer, map a given kernel ELF file into virtual memory, and then pass control to its entry point. The next steps are the construction of the boot information structure, including a memory map. You can find a link to the code and the build instructions in this comment.

    +

    acpi

    +

    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 saw some substantial improvements to our AML handling:

    +
      +
    • Objects defined by AML tables exist within a namespace, with objects referred to by paths such as \_SB.PCI0.ISA.COM1. Until now, we represented this namespace using a BTreeMap between the path (allocated on the heap) and a handle to the +object, meaning that there was both a heap-allocated container, and a heap allocation for every single path within the namespace. In this PR, we moved the library to use a new representation that has +a BTreeMap for each level of the namespace. Because each level of the path can only be 4 characters long (_SB, PCI0, ISA, and COM1 are the name segments in the example above), storing the path of each level no longer requires a heap +allocation per object, which reduces the heap-burden of the library significantly.
    • +
    • Some more opcodes were implemented: Target, DefShiftLeft, DefShiftRight, DefLOr, and DefAnd. These all appear in QEMU's tables.
    • +
    • A fairly large PR was merged that provides the ability to traverse the namespace and initialize devices - this is a mechanism that ACPI provides that allows an OS to initialize hardware that it does +not have drivers for, and is a compulsory step in getting modern chipsets to function properly. This required us to build up a lot of functionality, including namespace traversal, reading and writing from operation regions, recursively invoking +control methods, and asking the OS to perform hardware configuration for us (such as reading and writing to IO ports and PCI configuration space). There is still a lot of work in getting all of this working robustly, but this is a great start.
    • +
    +

    uefi-rs

    +

    The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    The major changes which happened in this month are:

    +
      +
    • We've tested out support for AArch64. No updates to the code are needed, just add a custom target file for 64-bit ARM UEFI and then compile your project with it.
    • +
    • The LoadedImage protocol now exposes the handle for the device where the binary is stored.
    • +
    • Our CI is now green again! There is only one test which breaks QEMU, and it's going to stay disabled until it gets fixed.
    • +
    • Building the repository no longer requires cargo-xbuild, we've switched to nightly Cargo's build-std feature.
    • +
    • Updated documentation in various places.
    • +
    +

    spinning_top

    +

    The spinning_top crate provides a simple spinlock implementation based on the abstractions of the lock_api crate. We created the crate to provide an alternative to the no-longer maintained spin crate. In July, the crate received the following updates:

    + +

    Thanks to @akiekintveld for their contributions!

    +

    volatile

    +

    The volatile crate provides safe wrapper types for implementing volatile read and write operations. The crate received the following changes this month:

    + +

    Thanks to @Freax13 for their contributions!

    +

    We are also considering a complete rewrite of the crate to wrap references instead of values directly. The main advantage of this is that it makes working with slices possible. See the pull request for details.

    +

    multiboot2

    +

    The multiboot2 crate provides abstraction types for the boot information of multiboot2 bootloaders. In July, we merged a change that makes the checksum field of the RSDP tag more useful:

    + +

    Thanks to @dlrobertson for this contribution!

    +

    cargo-xbuild

    +

    The cargo-xbuild project provides cargo command wrappers to cross-compile the sysroot crates core and alloc. While there were no updates to the crate itself in July, we added a guide on how to switch from cargo-xbuild to cargo's own build-std feature to the Readme. You can read it here.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    IsaacWoods/pebble

    +

    (Section written by @IsaacWoods)

    +

    Between my work on acpi and university commitments, I have not had much time to work on Pebble this month, but +some small clean-ups were made:

    +
      +
    • The migration from Travis CI to Github Actions was completed, allowing Pebble to be emulated on CI.
    • +
    • Pebble uses a HAL (hardware abstraction layer) to separate hardware access from kernel logic. Various parts of the x86_64 implementation of the HAL were made common to support code-reuse across architectures.
    • +
    • Some tests were added to the buddy allocator (Pebble's physical memory manager). This was to rule out physical memory +allocation as the cause of a bug where user stacks are occasionally corrupted at the userspace-kernel boundary, which unfortunately has still not been fixed.
    • +
    • Our algorithm for efficiently mapping arbitrary areas was rewritten and extended to support 1GiB pages.
    • +
    • Work has started on a topology layer - data structures that represent features of the platform such as processors, caches, NUMA nodes, and +microarchitectural information. This will help in allowing Pebble to make more intelligent decisions about scheduling and resource usage in the future.
    • +
    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    The main change this month was the migration from cargo-xbuild to the build-std feature of cargo. This means that we can now use the normal cargo build/cargo run/cargo test commands for our kernel 🎉.

    +

    The full list of notable changes is:

    + +

    There were also some contributions this month that fixed typos and updated links. Thanks a lot to all contributors!

    +

    For the next weeks/months, my plan is to finish the UEFI bootloader implementation and then adjust the blog to work with both the BIOS and UEFI bootloaders. Among other things, this will require that we switch from the VGA text buffer to a pixel-based framebuffer because the VGA text mode is not available with UEFI. While this makes things more complicated (we need to do some simple font rendering and add slice support to volatile crate), it will allow us to create our own graphical user interface, render a mouse pointer, or display images.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2020-08/index.html b/this-month/2020-08/index.html new file mode 100644 index 00000000..1cb3b845 --- /dev/null +++ b/this-month/2020-08/index.html @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (August 2020) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (August 2020)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    uefi-rs

    +

    The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In August, the crate received a large number of improvements:

    + +

    Thanks to @tomoyat1 for their contribution!

    +

    multiboot2

    +

    The multiboot2 crate provides abstraction types for the boot information of multiboot2 bootloaders. The most important change this month was the update to the latest release of the multiboot2 specification:

    + +

    Thanks to @Caduser2020 for these contributions and welcome to the multiboot2 team!

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. We did not publish any changes to the bootloader crate this month, but we made good progress on the UEFI implementation. See these issue comments for a detailed status report.

    +

    The rewrite of the real mode and protected mode stages of the BIOS bootloader is also making progress. The goal is to replace as much of the existing assembly code with Rust as possible, in order to make the code more robust and easier to understand.

    +

    ansi_rgb

    +

    The ansi_rgb crate implements no_std-compatible support for colored terminal text using ANSI escape sequences. The crate is still in an early state, but it received lots of new features this month:

    + +

    Thanks to @hanmertens for their contributions!

    +

    bootimage

    +

    The bootimage tool allows the creation of bootable disk images for bootloader-based kernels. It also provides a runner executable for cargo to make cargo run and cargo test work using QEMU. In August, we changed the test behavior to fix a bug where a triple fault is interpreted as a test success. We also fixed a small bug related to the --version argument. The relevant pull requests are:

    + +

    Thanks to @Freax13 for their contribution!

    +

    x86_64

    +

    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.

    +

    This month, we added some functions for reading and writing the FS and GS segment base registers:

    + +

    Thanks to @haraldh for this contribution!

    +

    acpi

    +

    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, support for more opcodes was added to the AML parser:

    + +

    spinning_top

    +

    The spinning_top crate provides a simple spinlock implementation based on the abstractions of the lock_api crate. This month, we added an optional feature to make the crate compatible with the owning_ref crate:

    + +

    Thanks to @not-a-seagull for this contribution!

    +

    cargo-xbuild

    +

    The cargo-xbuild project provides cargo command wrappers to cross-compile the sysroot crates core and alloc. At the beginning of this month, we had to update the crate for the new rustc directory layout. The crate also received a small cleanup:

    + +

    Thanks to @toku-sa-n for their contribution!

    +

    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.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    I'm still mostly working on the new bootloader with UEFI support, so there were no major changes to the Writing an OS in Rust series this month. However, I'm making good progress on the bootloader as noted above and I hope to finish the rewrite soon.

    +

    If all goes well, the new version will no longer require the bootimage tool and instead let the users create a simple build script for the bootloader themselves. It will also set up a pixel based framebuffer, which means that we will be able to do display proper graphics instead of just VGA-based text. Unfortunately, I'm currently a bit blocked by limitations of cargo configuration files (our default target should not apply to our build script), but I hope that we can find a solution for this soon.

    +

    While I focused most of my time on the bootloader and the cargo config files, I also merged a few few minor improvements for my blog:

    + +

    Thanks to @RWOverdijk and @JohnTitor for their contributions!

    +

    Japanese translations

    +

    (Section written by @JohnTitor)

    +

    This month, we also added a Japanese translation newly. You can find the languages list in the sidebar and Japanese if you enable that language in your browser. +Only one post is currently translated, but we'd like to translate more posts in the future. +Want to participate in the translation or find a typo? Feel free to open a PR/issue on the repository +(please use English in the description if possible)!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/content/this-month/2020-09/blog_os-rewrite.png b/this-month/2020-09/blog_os-rewrite.png similarity index 100% rename from content/this-month/2020-09/blog_os-rewrite.png rename to this-month/2020-09/blog_os-rewrite.png diff --git a/this-month/2020-09/index.html b/this-month/2020-09/index.html new file mode 100644 index 00000000..ed53369e --- /dev/null +++ b/this-month/2020-09/index.html @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (September 2020) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (September 2020)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    acpi

    +

    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. Lots of work happened this month:

    +
      +
    • Support for the Fixed Memory, Word Address Space, DWord Address Space, QWord Address Space, IRQ Format, +DMA Format, and I/O Port Descriptor resource descriptors were added. These appear in _CRS objects - objects +that describe the resources allocated to a particular hardware device. This should be enough support to parse the +_CRS objects of all devices supported by QEMU. Thanks to @michaelmelanson for his contribution!
    • +
    • Version 2.0.0 of the acpi crate was published, after consultation with contributors to the Redox project. +This splits the library into two parts - discovering ACPI tables using various methods, and separately, parsing them to discover information about the system. +This provides much more flexibility in how tables are parsed, allows support for OS-specific tables, and is +important to the Redox project as it allows parsing of the ACPI tables in userspace. We also used this +opportunity for breaking changes to clean up a few parts of the library, especially in making our method of +mapping physical memory ranges safer.
    • +
    • A new crate, rsdp, was split out from acpi. This new crate provides methods +for searching for the first ACPI table (the Root System Description Pointer (RSDP)) on BIOS systems without +alloc support. This makes it suitable for use from bootloaders and similar applications where heap allocation +is not supported. All types are reexported by the acpi crate, so users can access the same functionality from +the main library.
    • +
    +

    x86_64

    +

    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.

    +

    The crate received the following updates in September:

    + +

    Thanks to @ecstatic-morse, @toku-sa-n, @h33p, and @josephlr for their contributions!

    +

    We would also like to welcome @josephlr to our x86_64 review and maintenance team!

    +

    volatile

    +

    The volatile crate provides safe wrapper types for implementing volatile read and write operations. This month, we published version 0.4.0, which completely rewrites the crate based on reference values. Instead of wrapping the target value directly as e.g. Volatile<u32>, the new implementation works by wrapping reference types such as Volatile<&mut u32>. See our completely revamped documentation for more details.

    +

    The main advantage of the new reference-based implementation is that it is now possible to work with volatile arrays and slices, at least on nightly Rust. Through the index and index_mut methods it is possible to create sub-slices, which can then be read and written efficiently through the copy_into_slice and copy_from_slice methods. All these operations perform volatile memory accesses, so that the compiler won't optimize them away.

    +

    pci_types

    +

    pci_types is a new library in the Rust OSDev organisation that provides types for accessing and configuring PCI +devices from Rust operating systems. Lots of this code (e.g. identifying devices by class codes) can be shared +between projects, and would benefit from community contributions. This month, work started on some types for +representing PCIe addresses, the layout of the configuration space for endpoints, device types, and a trait that +allows the library to access the PCIe configuration space in whichever way the platform exposes it.

    +

    Thanks to @toku-sa-n for their contribution!

    +

    uefi-rs

    +

    The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In September, the crate was updated to Rust's new inline assembly implementation. We also published version 0.6.0 of the crate, including all the improvements added in the past two months.

    +

    Thanks to @toku-sa-n for their contribution!

    +

    bootloader

    +

    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.

    +

    We also made some more progress on the rewrite with UEFI support. It now passes additional framebuffer information and the address of the RSDP structure of ACPI in the boot info. (We later updated the RSDP code to use the new rsdp crate). The bootloader also gained support for setting up a recursive page table mapping, which makes it almost feature-equivalent with the current implementation. There are still a few things missing, but it should be ready to be published soon.

    +

    cargo-xbuild

    +

    The cargo-xbuild project provides cargo command wrappers to cross-compile the sysroot crates core and alloc. This month, we merged some maintenance updates to increase platform compatibility:

    + +

    Thanks to @pfmooney for these contributions!

    +

    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.

    +

    uart_16550

    +

    The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. Like the x86_64 and bootloader crates, this crate received some dependency updates this month to fix nightly breakage. In the process, we released versions 0.2.8 to 0.2.10. Since none of these versions are semver-breaking, a normal cargo update should suffice to update to the latest version.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    IsaacWoods/pebble

    +

    (Section written by @IsaacWoods)

    +

    A fairly large amount of progress has been made on Pebble over the last two months, and a prototype of Pebble's +defining feature (easy message passing between tasks) is now working!

    +
      +
    • The first, basic, version of Pebble's wire format, ptah has been completed. +This first version is implemented as a Serde format, but libraries could be written for any language that can +manipulate a byte stream.
    • +
    • Two system calls, send_message and get_message, were added that allows a message (a series of bytes, and +optionally a number of handles (effectively, permission to access a certain kernel object)) to be sent +down a channel, between two tasks.
    • +
    • Infrastructure for another of Pebble's key features, services, was added. This allows userspace tasks to +advertise their ability to provide some kind of 'service' to other tasks. A task called echo +was built to test this - it provides a service that simply echos any messages sent down it back to the sending +task.
    • +
    • Work started on the Platform Bus, a concept inspired by another hobby OS managarm's mbus. +All hardware devices on the platform will be added to the Platform Bus by Bus Drivers, and described using properties (as an +example, a PCI device will have properties such as pci.vendor_id, and pci.class). Device drivers will be +able to apply to manage devices by sending a Filter to the Platform Bus, which specifies which devices they are +able to handle, based on a device's properties. In the future, Platform Bus will be responsible for handling all +PCI, USB, and hardwired devices on all platforms.
    • +
    • The first Bus Driver was added to manage PCI devices. It uses a new system call, pci_get_info, to get the raw +information about PCI from the kernel, and then creates a Platform Bus device for each function, with the correct +properties. It uses the new pci_types library in the Rust OSDev organisation to identify each device (in the +future, this will be extended to know about specific vendor+device ID combinations, to identify specific devices +such as a particular graphics card).
    • +
    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    This month, the "Writing an OS in Rust" blog received a few minor updates:

    + +

    Apart from that, I did a lot of preparation for the upcoming switch to the UEFI bootloader. My prototype implementation of the blog_os system on top of the new UEFI bootloader has now reached feature parity with the existing implementation:

    +

    QEMU output of new bootloader implementation, including local APIC and I/O APIC debug output, the timer interrupt dots, and the keyboard input "Hello!!!"

    +

    The output looks different now because we are using a pixel based framebuffer instead of the VGA text mode. This is required because the VGA text mode is no longer supported with UEFI. For the framebuffer implementation I'm using the new version of the volatile crate and the font8x8 crate for font rendering.

    +

    You can also see some log output related to the APIC interrupt controller (not to be confused with the ACPI standard). I'm using the APIC instead of the legacy PIC because the latter is not supported anymore on most UEFI systems. For that, I started working on a new apic crate, which will include abstractions for the registers of the local APIC and the IOAPIC.

    +

    For the coming month(s), I'm planning to revamp the "Writing an OS in Rust" blog based on this prototype implementation. This will require complete rewrites of the VGA Text Mode and Hardware Interrupts posts, an update of the bootloader build process in A Minimal Rust Kernel, and replacing the QEMU screenshots across all posts. So I expect that it will take some time until the new version is ready.

    +

    andre-richter/qemu-exit

    +

    (Section written by @andre-richter)

    +

    Version 1.0.x of the crate has been released!

    +

    qemu-exit is a crate that allows you quit a running QEMU session with a user-defined exit code. This is useful for unit or integration tests of bare-metal software (e.g. OS kernels) that are tested in QEMU.

    +

    The crate supports the following architectures:

    +
      +
    • AArch64
    • +
    • RISC-V 64
    • +
    • x86_64
    • +
    +

    If you want to see the crate in action, you can have a look at how it is used in the rust-raspberrypi-OS-tutorials project.

    +

    Shoutout to @phil-opp for inspiring this crate with his original blog post and to @Skallwar for his many contributions.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2020-10/index.html b/this-month/2020-10/index.html new file mode 100644 index 00000000..fa453e38 --- /dev/null +++ b/this-month/2020-10/index.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (October 2020) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (October 2020)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    In October, we merged following changes:

    + +

    Thanks to @toku-sa-n for their contribution! We plan to publish the above changes as version 0.12.3 in the next few days.

    +

    volatile

    +

    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.

    +

    In October, we published a new version to fix the crate's unstable feature on newer Rust nightlies:

    + +

    Thanks to @vetio for this contribution!

    +

    bootloader

    +

    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.

    +

    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 that tracks the remaining issues.

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In October, we merged the following changes:

    + +

    Thanks to @Swampman08 for their contribution!

    +

    pci_types

    +

    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 +between projects, and would benefit from community contributions.

    +

    This month, we published version 0.2.0 with the following changes:

    + +

    cargo-xbuild

    +

    The cargo-xbuild project provides cargo command wrappers to cross-compile the sysroot crates core and alloc. This month, we merged the following changes:

    + +

    Thanks to @luqmana and @koushiro for these contributions!

    +

    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.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    rust-embedded/rust-raspberrypi-OS-tutorials

    +

    (Section written by @andre-richter)

    +

    The Operating System development tutorials in Rust on the Raspberry Pi project now provides Tutorial 15 - Virtual Memory Part 2: MMIO Remap.

    +

    It introduces a first set of changes which are eventually needed for separating kernel and user address spaces:

    +
      +
    • The memory mapping strategy gets more sophisticated and no longer identity maps the whole of the board's address space.
    • +
    • Instead, only ranges that are actually needed are mapped: +
        +
      • The kernel binary stays identity mapped for now.
      • +
      • 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().
      • +
      +
    • +
    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    This month, the Writing an OS in Rust series received the following updates:

    + +

    See the merged pull request list for the complete set of changes this month. Thanks a lot to all contributors!

    +

    In case you speak Persian: There is currently an open pull request to add a Persian translation of Bare Bones chapter that needs reviews. Thanks to everyone involved!

    +

    In in our previous status update 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. 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. Feel free to join the discussion if it's relevant to you!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2020-11/index.html b/this-month/2020-11/index.html new file mode 100644 index 00000000..c19bf342 --- /dev/null +++ b/this-month/2020-11/index.html @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (November 2020) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (November 2020)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    acpi

    +

    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. In November, we started fuzzing the AML parser to +help find inputs that crash it and we found +a few. +We even found a case where +we'd misinterpreted the spec. This is an important task for the project, as the AML parser will often run in +kernelspace, and so should not panic from any input, however invalid (some more work is needed to make this the +case, however).

    +

    Lexicographic comparison was also implemented for Buffer and String AML objects, +which means we should now be able to perform all comparisons tables are allowed to make (bar some object +conversions, which still need some work).

    +

    The changes this month, as well as some made in December that should improve compile speed a little, have been +published as aml v0.10.0.

    +

    x86_64

    +

    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.

    +

    In November, we merged the following updates:

    + +

    Thanks to @toku-sa-n for their contribution!

    +

    multiboot2

    +

    The multiboot2 crate provides abstraction types for the boot information of multiboot2 bootloaders. We merged the following updates this month:

    + +

    Thanks to @CalebLBaker for their contribution!

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    IsaacWoods/pebble

    +

    (Section written by @IsaacWoods)

    +

    Between university and work on acpi, I haven't had a huge amount of time to work on Pebble for the last couple of +months, but in November I:

    +
      +
    • Implemented a basic form of TLS for userspace tasks. Pebble +doesn't have threads, but an Address Space can have multiple Tasks running from the same image, each of which +need their copy of the master TLS record. TLS support is also needed very early in Rust's std, so this was the +next step in creating a std implementation for Pebble.
    • +
    • Tried to fix a bug in Pebble's UEFI bootloader, where we crash if memory allocated to Boot Services is unmapped +after ExitBootServices. This may be a bug in OVMF - please get in touch if you've come across something +similar and know what's going on!
    • +
    • Continued work on the USB XHCI driver
    • +
    • Improved detection of Intel microarchitectures - we can now differentiate Kaby Lake and Coffee Lake processors +based on their cpuid steppings
    • +
    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    In November, we merged the following changes to the Writing an OS in Rust blog:

    + +

    Thanks to @hamidrezakp, @Undin, and @briankung for their contributions!

    +

    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.

    +

    To solve this issue, I created a proposal on the Rust internals forum to move some cargo config settings to Cargo.toml. While it is still not implemented yet, the great news is that the proposal was approved by the Cargo team 🎉! 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.

    +

    lucis-fluxum/ps2-rs

    +

    (Section written by @lucis-fluxum)

    +

    This is a new library I created to provide OS kernels with low-level access to the PS/2 controller and devices. It +uses a poll-based approach with a timeout to read and write data to the IO ports.

    +

    While some of the library's functionality won't work on modern devices due to differing implementations of PS/2 +emulation between manufacturers, it should be enough to get initialized and receiving scancodes and mouse events. +Theoretically, it should work with PS/2-compatible keyboards all the way back to the IBM Model M!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2020-12/index.html b/this-month/2020-12/index.html new file mode 100644 index 00000000..b6a98a0e --- /dev/null +++ b/this-month/2020-12/index.html @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (December 2020) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (December 2020)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our new comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    In December, we published the following three new releases:

    +

    v0.12.4

    + +

    v0.13.0 (breaking)

    + +

    v0.13.1

    + +

    Thanks to @mental32, @vinaychandra, @tomaka, @haraldh, @tscs37, and @toku-sa-n for their contributions!

    +

    volatile

    +

    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. In December, we added to new methods for creating read/write-only Volatile instances:

    + +

    bootimage

    +

    The bootimage tool allows the creation of bootable disk images for bootloader-based kernels. It also provides a runner executable for cargo to make cargo run and cargo test work using QEMU. This month, we fixed a nightly breakage:

    + +

    cargo-xbuild

    +

    The cargo-xbuild project provides cargo command wrappers to cross-compile the sysroot crates core and alloc. This month, we merged a small error reporting improvement:

    + +

    Thanks to @parasyte for this contribution!

    +

    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.

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. In December, we merged the following changes:

    + +

    Thanks to @Luis-Hebendanz for their contribution!

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In December, we merged the following changes:

    + +

    Thanks to @avirule for their contribution!

    +

    acpi

    +

    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. In December, we:

    + +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following changes to the Writing an OS in Rust blog this month:

    + +

    Thanks to @woodyZootopia, @JohnTitor, @delta1, and @16yuki0702 for their contributions!

    +

    Third Edition?

    +

    Last month, I mentioned that I'm working on a new revision of the blog with support for UEFI booting, a pixel-based framebuffer, and the APIC interrupt controller. I also mentioned that the Cargo team approved my proposal to replicate some cargo/config settings in the Cargo.toml, which will be required for the new build system of the blog. In December, we now saw the first pull request based on this proposal: Expose build.target .cargo/config setting as packages.target in Cargo.toml. Thanks a lot to @Ekleog for tackling this!

    +

    While I had planned the new revision for a long time already, there was still one open question: Should I integrate the changes into the second edition or start a new, third edition of the blog? Originally, I tended to integrate the changes into the second edition since a new edition is a lot of work and only a few posts would require substantial changes anyway. However, the recent translation efforts by many great people (thanks to all contributors!) have changed my mind on this because I don't want to throw away any of their work. For this reason I decided to start working on a new, third edition of the blog 🎉!

    +

    Apart from the changes mentioned above, the new edition will have some additional "fun" posts at the start that show how to create a simple shell and some basic games (instead of directly jumping into interrupt handling and memory management). In addition to the Testing post we already have, there will be some posts about debugging with GDB and QEMU. There will also be some design improvements such as a refreshed index page and a dark mode. I hope you like these ideas and I look forward to releasing a first draft of the new edition soon!

    +

    phil-opp/linked-list-allocator

    +

    (Section written by @phil-opp)

    +

    The linked_list_allocator crate provides a simple heap allocator that is usable on no_std systems. It keeps track of free memory blocks by turning them into a linked list data structure.

    +

    In December, the crate received the following updates:

    + +

    Thanks to @haraldh, @MarcoCicognani, and @thalesfragoso for their contributions!.

    +

    lucis-fluxum/ps2-rs

    +

    (Section written by @lucis-fluxum)

    +

    I pushed release v0.1.1 this month, which is mainly a documentation update aiming +to improve understanding of how to use the library. I've also added links to some reading material that helped me +understand the PS/2 protocol better and much of the surrounding terminology. May the old keyboards live on!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/content/this-month/2021-01/blog-os-uefi.jpg b/this-month/2021-01/blog-os-uefi.jpg similarity index 100% rename from content/this-month/2021-01/blog-os-uefi.jpg rename to this-month/2021-01/blog-os-uefi.jpg diff --git a/this-month/2021-01/index.html b/this-month/2021-01/index.html new file mode 100644 index 00000000..f5b1b1eb --- /dev/null +++ b/this-month/2021-01/index.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (January 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (January 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Showcase

    +

    We started a new Showcase section this month, where we introduce and present interesting Rust OSDev projects. The first post of this section is:

    + +

    If you like to present your project too, just let us know!

    +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    bootloader

    +

    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:

    + +

    acpi

    +

    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. In January, we added some updates to the aml crate:

    + +

    uart_16550

    +

    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:

    + +

    cargo-xbuild

    +

    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:

    + +

    Thanks to @astro for this contribution!

    +

    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.

    +

    rusty-hermit

    +

    RustyHermit is a unikernel targeting a scalable and predictable runtime for high-performance and cloud computing. +This month, we revise the paravirtualized network driver (virtio) and add a simple driver for RTL8139, which Qemu is able to emulate. +With the support of KubeVirt, Kubernetes is able to orchestrate RustyHermit applications. +As simple show case is explained in RustyHermit's wiki.

    +

    Thanks to @tlambertz and @mustermeiszer for the contribution!

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We made good progress on the Persian and Japanese translations of the "Writing an OS in Rust" blog this month:

    + +

    Thanks to @hamidrezakp, @MHBahrampour, @woodyZootopia, and @JohnTitor for creating the translations!

    +

    In addition to the new translations, we merged the following improvements:

    + +

    Thanks to @delta1, @NickSchmitt, @nana0-0, and @EvanMu96 for these contributions!

    +

    Third Edition

    +

    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.

    +

    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:

    +

    Photo of the laptop display, showing some text output

    +

    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 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).

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-02/index.html b/this-month/2021-02/index.html new file mode 100644 index 00000000..dbe25c67 --- /dev/null +++ b/this-month/2021-02/index.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (February 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (February 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In February, we merged the following changes:

    + +

    Thanks to @gil0mendes, @sreehax, and @avirule for their contributions!

    +

    x86_64

    +

    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.

    +

    In February, the unstable const_in_array_repeat_expressions feature was removed from Rust because it implicitly changed drop behavior. 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 (and an accidental stabilization in Rust), so the fix was quite simple:

    + +

    Thanks to @KernelFreeze for this contribution!

    +

    bootloader

    +

    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:

    + +

    Thanks to @dspencer12 for their contribution!

    +

    There was also some more progress on the uefi branch, which contains the upcoming new bootloader version with UEFI support:

    + +

    The UEFI rewrite is almost done, but we still need to update the docs, improve the configurability of the framebuffer, and add more testing.

    +

    uart_16550

    +

    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:

    + +

    vga

    +

    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:

    + +

    Thanks to @Pollux3737 for this contribution!

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    The Writing an OS in Rust blog received the following updates this month:

    + +

    Thanks to @MHBahrampour, @garasubo, @dspencer12, @toku-sa-n, and @16yuki0702 for their contributions!

    +

    I also made some progress on the upcoming third edition. Some potentially interesting commits are:

    + +

    cdrzewiecki/celos

    +

    (Section written by @drzewiec)

    +

    I have been working on an OS following along with @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.

    +

    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:

    +
      +
    • Move the kernel in virtual memory so that it occupies the higher half of the 48-bit address space
    • +
    • 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)
    • +
    • Set up memory allocation for the kernel, to get heap allocation
    • +
    • Once heap allocation is in place, utilize some existing crate to handle TrueType fonts so that text will look a bit nicer on screen
    • +
    +

    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 for being so helpful in the osdev journey!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-03/index.html b/this-month/2021-03/index.html new file mode 100644 index 00000000..1ef329fc --- /dev/null +++ b/this-month/2021-03/index.html @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (March 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (March 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we fixed some build errors that were caused by the update to LLVM 12 in recent Rust nightlies:

    + +

    We also made some good progress on the UEFI rewrite:

    + +

    x86_64

    +

    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.

    +

    In March, we merged these changes:

    + +

    Thanks to @toku-sa-n and @dbeckwith for their contributions!

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In March, we merged the following changes:

    + +

    Thanks to @gil0mendes and @ocadaruma for their contributions!

    +

    multiboot2

    +

    The multiboot2 crate provides abstraction types for the boot information of multiboot2 bootloaders. We merged the following updates this month:

    + +

    Thanks to @toku-sa-n for their contributions!

    +

    volatile

    +

    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. In March, we fixed a build error that was caused by a change in nightly Rust:

    + +

    Thanks to @KernelFreeze for their contribution!

    +

    acpi

    +

    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 has seen substantial changes to both +the acpi and aml crates:

    +
      +
    • We made the types that represent raw ACPI tables public. This allows library users to work directly with tables such as the +FADT if they need to, which is needed to access power +management features we don't yet expose. (published as acpi v2.3.1)
    • +
    • Native functions are now supported by the AML interpreter!. A +'native function' is an AML method that is defined in Rust, rather than using AML bytecode. This is useful for +defining "up-call" methods (where a method is provided by the OS, and called by the firmware), and will hopefully +by useful in the future for patching methods in broken tables. A native method can easily be created with +the AmlValue::native_method constructor.
    • +
    • However, supporting native functions needed a bit of breakage - AmlValue no longer implements PartialEq or Eq. This actually improves correctness, +as correctly comparing two AmlValues may require type conversions to be done, and so should be done with the +AmlValue::cmp method, but does make aml v0.11.0 a breaking change.
    • +
    • We also used this opportunity to remove the legacy_mode parameter to AmlContext::new, which will affect all +crate users, but makes user's lives simpler - handling old tables will now be done automatically.
    • +
    • Fallout from AmlValue no longer being Eq also led to some cleanups in how control flow is handled in the +interpreter. This is not likely to affect users, but the "fake" error AmlError::Return has been removed, which +is also technically a breaking change in aml v0.11.0.
    • +
    • The AML interpreter now correctly supplies the \_OS, \_OSI, and \_REV objects. These objects were designed +to allow firmware to detect OS support for new AML features, but come with a bit of baggage. +This is important for supporting running on real hardware, which often assumes the existence of these objects. +(published as aml v0.11.0)
    • +
    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    +

    If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people +getting started in this space, please create a PR against the +next branch with the tasks you want to include in the next issue.

    + +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    The "Writing an OS in Rust" blog received the following updates this month:

    + +

    Thanks to @woodyZootopia, @alexxroche, and @ClementNerma for their contributions!

    +

    The third edition is making progress too. I mostly worked on the post about UEFI booting this month:

    + +

    rust-embedded/rust-raspberrypi-OS-tutorials

    +

    (Section written by @andre-richter)

    +

    The Operating System development tutorials in Rust on the Raspberry Pi project +got two more tutorials this month:

    + +

    The two tutorials finally conclude the challenging but rewarding journey of enabling the kernel to execute from the top of the 64 bit virtual address space.

    +

    Here is a sneak peek of the end result when booting the kernel on a Raspberry Pi 4 (slightly modified to fit on the page):

    +
    [5.011] Booting on: Raspberry Pi 4
    +[5.011] MMU online:
    +[5.011]   --------------------------------------------------------------------------
    +[5.013]           Virtual            Physical      Size      Attr       Entity
    +[5.015]   --------------------------------------------------------------------------
    +[5.017]   0xffff_ffff_8008_0000 --> 0x0008_0000 |  64 KiB | C RO X  | Kernel code
    +[5.018]   0xffff_ffff_8009_0000 --> 0x0009_0000 | 448 KiB | C RW XN | Kernel data
    +[5.020]   0xffff_ffff_8011_0000 --> 0x0011_0000 | 512 KiB | C RW XN | Kernel stack
    +[5.021]   0xffff_ffff_f000_0000 --> 0xfe20_0000 |  64 KiB | D RW XN | BCM GPIO
    +[5.023]                                                             | BCM PL011 UART
    +[5.024]   0xffff_ffff_f001_0000 --> 0xff84_0000 |  64 KiB | D RW XN | GICD
    +[5.026]                                                             | GICC
    +[5.027]   --------------------------------------------------------------------------
    +[5.029] Current privilege level: EL1
    +
    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-04/index.html b/this-month/2021-04/index.html new file mode 100644 index 00000000..62d65b5d --- /dev/null +++ b/this-month/2021-04/index.html @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (April 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (April 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    In April, we merged the following changes:

    + +

    Thanks to @Luis-Hebendanz, @CraftSpider, and @dbeckwith for their contributions!

    +

    We also prepared a pull request to fix the build on the latest Rust nightlies:

    +
      +
    • Use new const_fn_trait_bound feature to fix build on latest nightly (#250)
    • +
    +

    Since rustfmt is currently broken on the affected newer nightlies, many users are still on older nightlies where the const_fn_trait_bound feature does not exist yet (rustup update skips nightlies where an installed component is missing). For this reason, we decided to wait with merging the fix until the rustfmt component is fixed. For people that want to use the latest nightly already, we pre-published the above fix as version v0.14.1-beta.

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we finally merged the UEFI rewrite branch:

    + +

    This pull request changes the build process completely so that v0.10.0 is no longer compatible with v0.9.x and below. Instead of using the bootimage crate, it is now recommended to create a custom builder crate. See the API docs for more details. In addition to the build system changes, there are also some API changes such as a new BootInfo struct and a different system init state (e.g. a pixel-based framebuffer instead of the VGA text mode). Right now the documentation for the new version is still a bit sparse. We plan to improve this soon, including an update to the Writing an OS in Rust blog (see below).

    +

    In addition to the UEFI pull request, we merged the following changes this month:

    + +

    Thanks to @mkroening and @CraftSpider for their contributions!

    +

    xhci

    +

    The xhci crate provides types of xHCI structures such as Contexts, Extended Capabilities, Registers, and TRBs.

    +

    Previously the repository was hosted under @toku-sa-n. Since April, the Rust OSDev team hosts the repository.

    +

    This crate is still under depelopment. Some types or field accessors may be missing. If you find missing features, feel free to send a PR!

    +

    acpi

    +

    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, we improved diagnostics by recording the original and target AML types in the AmlError::IncompatibleValueConversion error. This error is emitted when AML tries to convert a value +to a data type that it can't be interpreted as - AML's rules on possible type conversions and where they can occur are very elaborate, so it helps to know the conversion that was actually attempted. +(published as v0.12.0)

    +

    Thanks to @Knapsac and @toothbrush7777777 for their contributions!

    +

    ovmf-prebuilt

    +

    In order to make it easier to run UEFI disk images in QEMU using OVMF, we created a new ovmf-prebuilt project this month. The projects automatically downloads the latest prebuilt OVMF RPM images from Gerd Hoffman's firmware repository and publishes the extracted OVMF_*.fd files as GitHub releases. A new release is created daily through a CI script. Note that the licensing terms of the tianocore/edk2 repository apply to the released files.

    +

    uart_16550

    +

    The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. In April, we updated the x86_64 dependency to fix the build on the latest nightlies:

    + +

    This pull request also minimizes the number of unstable features that are enabled for the x86_64 dependency to prevent breakage on future const_fn changes.

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In April, we merged the following changes:

    + +

    Thanks to @ocadaruma for their contribution!

    +

    spinning_top

    +

    The spinning_top crate provides a simple spinlock implementation based on the abstractions of the lock_api crate. This month, we fixed a compiler warning:

    + +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    No tasks were proposed for this section.

    +
    +

    If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people +getting started in this space, please create a PR against the +next branch with the tasks you want to include in the next issue.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following improvements to the [Writing an OS in Rust] blog this month:

    + +

    Thanks to @alexxroche, @hi-rustin, @moomoolive, and @kahirokunn for their contributions!

    +

    We also made some further progress on the upcoming third edition of the blog:

    + +

    cdrzewiecki/celos

    +

    (Section written by @drzewiec)

    +

    Over the past couple of months I have made some great strides on my OS.

    +
      +
    • Migrated the kernel to the higher half of virtual memory
    • +
    • Added double fault handling
    • +
    • Added page fault handling which will attempt to (safely) expand the kernel stack if it overflows
    • +
    • Related to the above, added more robust frame allocation
    • +
    • Added basic heap allocation
    • +
    +

    Still working hard on squashing bugs, adding all of the things above gave me some pretty serious memory allocation bugs and it's taken me a while to get those worked out. I still want to do more testing to make sure I have all the bugs here worked out before moving on.

    +

    Next steps will be to get nicer font drawing, and then attempt to implement process support.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-05/index.html b/this-month/2021-05/index.html new file mode 100644 index 00000000..6a2076b9 --- /dev/null +++ b/this-month/2021-05/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (May 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (May 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    In May, we merged the following changes:

    + +

    We also started to prepare a v0.15 release, for which we already implemented the following breaking changes:

    + +

    Thanks to @dbeckwith and @Freax13 for their contributions!

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes:

    + +

    Thanks to @Elekrisk for their contribution!

    +

    We also published the following backport to v0.9:

    + +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In May, we merged the following changes:

    + +

    Thanks to @phil-opp and @nicholasbishop for their contributions!

    +

    uart_16550

    +

    The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following changes this month:

    + +

    Thanks to @josephlr and @remimimimi for their contributions!

    +

    pic_8259

    +

    The pic_8259 crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs). It is a new fork of the pic8259_simple crate, which appears to be no longer maintained.

    +

    We merged the following changes on top of the original pic8259_simple crate:

    + +

    Thanks to @mkroening and @hanmertens for their contributions!

    +

    acpi

    +

    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 was fairly quiet, but an important regression was fixed. When native methods were introduced in March, +AmlContext lost its Send + Sync, as these native methods weren't required to be thread-safe. This meant that +AmlContext could no longer be stored in types such as spin::Once, or shared between threads/tasks. This is +undesirable for AmlContext, as it is very expensive to construct, and AML does (in theory) provide mechanisms to +make itself thread-safe, so any probject should only need one.

    +

    This was fixed by requiring native methods to be Send + Sync. If you're hitting this issue, please upgrade to the +latest version. (published as v0.13.0)

    +

    Thanks to @michaelmelanson for his contribution!

    +

    xhci

    +

    The xhci crate provides types of xHCI structures such as Contexts, Extended Capabilities, Registers, and TRBs.

    +

    In May we finished implementing all of these structures and field getters/setters. Still there may exist missing. If you find one, feel free to send a PR!

    +

    spinning_top

    +

    The spinning_top crate provides a simple spinlock implementation based on the abstractions of the lock_api crate. This month, we released version v0.2.4 with the following small improvements:

    + +

    Thanks to @toku-sa-n for these contributions!

    +

    vga

    +

    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. This month, we fixed a nightly build error:

    + +

    Thanks to @ethindp for their contribution!

    +

    ps2-mouse

    +

    The ps2-mouse library provides a basic interface for interacting with a PS/2 mouse. It was also affected by the nightly breakage in x86_64, so it required a dependency update too:

    + +

    Thanks to @littledivy for this contribution!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people +getting started in this space, please create a PR against the +next branch with the tasks you want to include in the next issue.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following improvements to the Writing an OS in Rust blog this month:

    + +

    Thanks to @woodyZootopia, @kahirokunn, @HKalbasi, and @bjorn3 for their contributions!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-06/index.html b/this-month/2021-06/index.html new file mode 100644 index 00000000..4a79bd4b --- /dev/null +++ b/this-month/2021-06/index.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (June 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (June 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    acpi

    +

    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, both the rsdp and acpi crates saw breaking changes. These changes should require minimal work to migrate to; +please file an issue if you encounter any difficulties. (published as rsdp v2.0.0 and acpi v3.0.0)

    + +

    Thanks to @wusyong and @Freax13 for their contributions!

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In June, we merged the following changes:

    + +

    Thanks to @nicholasbishop, @iankronquist and @josephlr for their contributions!

    +

    x86_64

    +

    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.

    +

    In June, we merged the following changes:

    + +

    We did not issue a new crates.io release with these changes yet, but we plan to do so soon.

    +

    Thanks to @toku-sa-n for their contribution!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + +

    phil-opp/blog_os:

    + +

    If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people +getting started in this space, please create a PR against the +next branch with the tasks you want to include in the next issue.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    The Writing an OS in Rust blog received the following changes this month:

    + +

    Thanks to:

    + +

    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!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-07/index.html b/this-month/2021-07/index.html new file mode 100644 index 00000000..9a39ea49 --- /dev/null +++ b/this-month/2021-07/index.html @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (July 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (July 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In July, we merged the following changes:

    + +

    Thanks to @nicholasbishop, @MaulingMoneky, @phip1611 and @necauqua for their contributions!

    +

    acpi

    +

    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:

    + +

    These changes were published as acpi v3.1.0 and aml v0.14.0. Thanks to @ethindp +and @toku-sa-n for their contributions.

    +

    multiboot2

    +

    The multiboot2 crate provides abstraction types for the boot information of multiboot2 bootloaders.

    +

    In July, our multiboot2 maintenance team gained @phip1611 as a new member. Welcome!

    +

    The following changes were merged this month:

    + +

    x86_64

    +

    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.

    +

    In July, we merged the following improvements:

    + +

    Thanks to @budde25 and @toku-sa-n for their contributions.

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    No tasks were proposed for this section.

    +
    +

    If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people +getting started in this space, please create a PR against the +next branch with the tasks you want to include in the next issue.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    This month, the Writing an OS in Rust blog received the following updates:

    + +

    Thanks to @Foo-x, @adi-g15, @Kalbiq, and @MrZloHex for their contributions.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-08/index.html b/this-month/2021-08/index.html new file mode 100644 index 00000000..ed4cbc89 --- /dev/null +++ b/this-month/2021-08/index.html @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (August 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (August 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    acpi

    +

    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.

    +

    There was a fair amount of progress this month, including adding support for a major AML feature: buffer fields. +These are objects that represent bit-level slices of buffer objects, allowing a section of a buffer to be read and +written. This requires us to support multiple namespace objects operating on the same underlying data - +currently this is handled simply with spinlocks, but we're looking to improve this situation in the future. +With this, we grew support for the DefCreateBitField, DefCreateByteField, DefCreateWordField, +DefCreateDWordField, DefCreateQWordField, and DefCreateField opcodes, as well as logic for reading and +writing Integers and Buffers out of them. (published as aml v0.16.0)

    +

    The acpi crate also saw improvement, and unfortunately some more breakage. We now support X2APIC entries +appearing in the MADT, and so have changed the representation of Processor UIDs and Local APIC IDs in +acpi::platform::Processor to u32, to support the wider IDs that X2APIC uses to support more processors. On +older platforms that only support APIC, the upper bits will simply always be zeroed, and so these values can be +cast down to u8 when needed. Note that for complex legacy reasons, you cannot rely upon ACPI for detecting +whether a platform has X2APIC support or not, and so whether the MADT actually contained X2APIC entries is not exposed +by this interface - this is by design. (published as acpi v4.0.0)

    +

    Other changes were:

    + +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    In August, @nicholasbishop joined as a co-maintainer of the crate. Welcome!

    +

    Many improvements were merged this month:

    + +

    Thanks to @HTG-YT, @phip1611, @Andy-Python-Programmer, and @timrobertsdev for their contributions!

    +

    x86_64

    +

    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.

    +

    In August, we merged the following changes:

    + +

    These changes were not published yet, but a pull request for a new version is open already: Release version 0.14.5.

    +

    Thanks to @toku-sa-n and @ncatelli for their contributions!

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.

    +

    This month, we merged the following changes:

    + +

    Thanks to @vinc, @bjorn3, @Freax13, @yusdacra, and @martica for their contributions!

    +

    multboot2

    +

    The multiboot2 crate provides abstraction types for the boot information of multiboot2 bootloaders.

    +

    The following changes were merged this month:

    + +

    pic_8259

    +

    The pic_8259 crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs).

    +

    In August, we added cargo features to make the crate buildable on stable:

    + +

    Thanks to @toku-sa-n for this contribution!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    No tasks were proposed for this section.

    +
    +

    If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people +getting started in this space, please create a PR against the +next branch with the tasks you want to include in the next issue.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following improvements to the Writing an OS in Rust blog:

    + +

    Thanks to @Foo-x, @adi-g15, @Kalbiq, and @non-descriptive for their contributions!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-09/index.html b/this-month/2021-09/index.html new file mode 100644 index 00000000..2fac962f --- /dev/null +++ b/this-month/2021-09/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (September 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (September 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    In September, we merged the following changes:

    + +

    Thanks to @Freax13, @npmccallum, and @mkroening for their contributions!

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    This month, we merged the following changes:

    + +

    Thanks to @necauqua and @timrobertsdev for their contributions!

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.

    +

    We finally merged a long-desired feature this month:

    + +

    Thanks to @anellie for this contribution!

    +

    multboot2

    +

    The multiboot2 crate provides abstraction types for the boot information of multiboot2 bootloaders.

    +

    It is now part of a workspace and lives next to the new crate multiboot2-header.

    +

    The following changes were merged this month:

    + +

    The changes were published as v0.12.2.

    +

    multboot2-header (new)

    +

    The multiboot2-header crate provides abstraction types for the Multiboot2 header +and a builder struct to construct these headers. The corresponding repository was +prepared (#86) and the initial release +is expected in early October. See #95 for more details.

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + + +

    If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people +getting started in this space, please create a PR against the +next branch with the tasks you want to include in the next issue.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged two small fixes to the Writing an OS in Rust blog this month:

    + +

    Thanks to @jongillham and @non-descriptive for these contributions!

    +

    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.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-10/index.html b/this-month/2021-10/index.html new file mode 100644 index 00000000..e556c0a1 --- /dev/null +++ b/this-month/2021-10/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (October 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (October 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following PRs this month:

    + +

    Thanks to @timrobertsdev, @YtvwlD, and @foxcob for their contributions!

    +

    acpi

    +

    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, support for the Boot Graphics Resource Table (BGRT) table was added to acpi. This static table is +passed from firmware to the OS to communicate information about the state of the screen when control is passed +over, as lots of firmwares like to print display a logo when booting. (published as acpi v4.1.0)

    +

    Thanks to @ethindp for this contribution!

    +

    x86_64

    +

    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.

    +

    In October, we merged the following changes:

    + +

    Thanks to @haraldh and @Freax13 for their contributions!

    +

    multiboot2-header (new)

    +

    The multiboot2-header crate provides abstraction types for Multiboot2 headers, +parsing utilities, and a builder to construct such headers. The initial release took +place in early October and now is ready to be used. Because lots of code was published +without any in-depth reviews, further testing and code reviews will be highly appreciated.

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    No tasks were proposed for this section.

    +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following changes to the Writing an OS in Rust blog this month:

    + +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-11/index.html b/this-month/2021-11/index.html new file mode 100644 index 00000000..81cb9fb7 --- /dev/null +++ b/this-month/2021-11/index.html @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (November 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (November 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following PRs this month:

    + +

    Thanks to @necauqua and @baloo for their contributions!

    +

    x86_64

    +

    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.

    +

    In November, @Freax13 joined our x86_64 maintenance team after doing a lot of great work on the crate. Welcome!

    +

    We merged the following non-breaking changes this month:

    + +

    We also merged a number of breaking changes that will go into the upcoming 0.15 release:

    + +

    Thanks to @Freax13, @haraldh, and @mpajkowski for their contributions!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    No tasks were proposed for this section.

    +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Personal Projects

    +

    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 with the updates of your OS project for the next post.

    +

    metta-systems/vesper

    +

    (Section written by @berkus)

    +

    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.

    +

    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.

    +

    Since rebooting 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.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    There were no visible changes to the Writing an OS in Rust 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 in the kernel's Cargo.toml, users will pass a configuration struct to the entry_point 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.

    +

    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 and per-packet configuration options will be very useful for the project, especially the config options I mentioned in my status update comment on GitHub.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2021-12/index.html b/this-month/2021-12/index.html new file mode 100644 index 00000000..9a77fbf5 --- /dev/null +++ b/this-month/2021-12/index.html @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (December 2021) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (December 2021)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    We merged the following changes in December:

    + +

    Thanks to @toku-sa-n for their contribution!

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.

    +

    This month, we released new patch versions for both v0.9 and v0.10 to fix the asm! macro imports on the latest Rust nightlies:

    + +

    We also continued the work on the upcoming v0.11 version, which will feature the following improvements:

    +
      +
    • Configuration via Rust structs and the entry_point macro, instead of a [package.metadata.bootloader] table in the Cargo.toml. +
        +
      • The config data is serialized at compile time and put into a separate ELF section of the kernel executable.
      • +
      • This makes it possible to read the config data dynamically when loading the kernel, so we no longer need to recompile the bootloader on config changes.
      • +
      • The build process is also simplified as we don't need to read the kernel's Cargo.toml anymore.
      • +
      +
    • +
    • Instead of including the kernel ELF file using the include_bytes macro, we read the file dynamically from disk during the boot process. +
        +
      • The boot image is now a proper FAT partition for both UEFI and BIOS. The kernel file is simply copied to this partition.
      • +
      • In combination with the new config mechanism, the dynamic loading means that the bootloader only needs to be compiled once.
      • +
      +
    • +
    • The bootloader crate is split into three subcrates: +
        +
      • an API crate that defines the configuration and boot information structs, and provides the entry_point macro (this will be used by kernels)
      • +
      • an implementation crate that contains the actual BIOS and UEFI bootloader code
      • +
      • a builder crate that allows to turn kernel ELF files into bootable disk images +
          +
        • includes the compiled implementation crate, either by including a precompiled binary or through cargo's upcoming artifact dependencies feature
        • +
        +
      • +
      +
    • +
    +

    The new configuration system is already done and working for both the BIOS and UEFI implementations. For UEFI, we also implemented the kernel loading from a FAT partition already. Unfortunately, this part is more challenging for the BIOS implementation since the loading needs to happen in 16-bit real mode (as it requires calling functions of the BIOS). Parsing a FAT filesystem is not easy using assembly code, so we're currently working on porting all the lower boot stages to Rust. This includes the boot sector, which needs to fit into 448 bytes, so we need some trickery to get a Rust executable that is small enough.

    +

    acpi

    +

    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.

    +

    December was a fairly quiet month, but an important bug-fix landed that corrected the way we handled _CRS objects in a structure +called the _PRT, which are found on PCI root bridges and tell the OS how interrupt pins on PCI devices have been routed to the platform's interrupt controller. Each pin can be +hardwired to a specific interrupt, or more commonly, can be dynamically assigned using a 'Link Object' through a set of control methods: _PRS, _CRS, _SRS, and _DIS. +However, many platforms implement Link Objects that actually hardcode the interrupts (including QEMU) and this is where the bug slipped in: _CRS was being evaluated as a +hardcoded object. We now treat these objects correctly as control methods, supporting properly-configured tables. (published as aml v0.16.1)

    +

    Thanks to @Dentosal for this contribution!

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following PRs this month:

    + +

    Thanks to @StevenDoesStuffs and @toku-sa-n for their contributions!

    +

    uart_16550

    +

    The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following changes this month:

    + +

    Thanks to @olivercalder for this contribution and @Kazurin-775 for reporting this problem!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    No tasks were proposed for this section.

    +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    +

    metta-systems/vesper

    +

    (Section written by @berkus)

    +

    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.

    +

    The kernel is in very early stages of development, while I am building up tooling support to make future development fast and painless. This is my second post here and as usual, I will link directly to my blog for more details. Read the full article here.

    +

    Just a note: since features described in the article are not fully finalized, they are not merged to the main development branch yet and live in their own branch, which is subject to frequent rebases. Caveat emptor!

    +

    rusty-hermit

    +

    (Section written by @stlankes)

    +

    RustyHermit is a unikernel targeting a scalable and predictable runtime for high-performance and cloud computing.

    +

    This month, we integrated a virtual i/o device driver, which is based on memory mapped i/o and doesn't depend on PCI device specification. +For instance, micro VMs like Firecracker and Qemu's microvm machine type don't support the PCI specification to accelerate the boot time and to improve the performance. +With this device driver, rusty-hermit is able to run on Qemu's microvm platform. +We are working to support Firecracker in the near future.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    This month, we merged a small translation improvement to the Writing an OS in Rust blog:

    + +

    Thanks to @TisnKu for this contribution!

    +

    My personal focus this month has been on the new bootloader version mentioned above, which I plan to use for the third edition of the blog. I'm also thinking about writing a post about creating a basic BIOS bootloader in Rust if I can find the time.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/content/this-month/2022-01/framebuffer-font-noto-sans-mono.png b/this-month/2022-01/framebuffer-font-noto-sans-mono.png similarity index 100% rename from content/this-month/2022-01/framebuffer-font-noto-sans-mono.png rename to this-month/2022-01/framebuffer-font-noto-sans-mono.png diff --git a/this-month/2022-01/index.html b/this-month/2022-01/index.html new file mode 100644 index 00000000..5ac5b886 --- /dev/null +++ b/this-month/2022-01/index.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev (January 2022) | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev (January 2022)

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    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.

    +

    In January, we merged the following pull requests:

    + +

    Thanks to @jarkkojs for their contribution!

    +

    bootloader

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.

    +

    This month, we merged the following changes:

    + +

    Thanks to @abachmann, @Freax13, @phip1611, and @georglauterbach for their contributions!

    +

    uefi-rs

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following changes in January:

    + +

    Thanks to @phip1611 for their contribution!

    +

    multiboot2

    +

    The multiboot2 crate provides abstraction types for the boot information of multiboot2 bootloaders. +The latest release of the multiboot2-crate is now v.0.13.1 (was v0.12.2). It contains minor improvements, +such as new getters that were originally missing.

    +

    The combined diff of all changes can be found here.

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    No tasks were proposed for this section.

    +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    +

    ntfs

    +

    (Section written by @ColinFinck)

    +

    Colin Finck released an initial version of his ntfs crate this month, a Rust library to access Microsoft's proprietary NTFS filesystem.

    +

    For those of you who are not running Windows: +NTFS is the primary filesystem in Windows, from Windows NT's release in 1993 up to the current Windows 11. +Unlike FAT32, NTFS has no practical limits for file and partition sizes, comes with B-Tree Indexes for faster lookups, and adds a few resilience and efficiency features (such as journaling, compression, and sparse files).

    +

    The ntfs crate supports Rust's no_std environment and is therefore not tied to a specific platform API. +It aims to be embeddable in firmware-level code and kernels just as well as in user-mode applications.

    +

    Colin Finck will talk about NTFS and his adventures in writing a filesystem crate in Rust on the upcoming FOSDEM conference. +The talk is on Saturday, 5 February at 17:00 (CET, UTC+1). +The conference is virtual and admission is free.

    +

    phip1611/noto-sans-mono-bitmap-rs

    +

    (Section written by @phip1611)

    +

    Philipp Schuster released an initial version of his noto-sans-mono-bitmap +crate this month. It provides a pre-rasterized bitmap font from Noto Sans Mono, an open font from Google. +The crate is a replacement for legacy bitmap fonts, such as the font8x8 crate. +It is suitable for printing high quality/nice looking text to a framebuffer in bootloaders, kernels and similar +environments where you don't want or can't use the FPU.

    +

    To avoid CPU intensive soft float workloads, the crate contains pre-rendered symbols from the Noto Sans Mono font +in different sizes and font weights (light, regular, bold) as Rust constants paired with a convenient getter function.

    +

    Symbols from the crate 'noto-sans-mono-bitmap' in an UEFI framebuffer.

    +

    The screenshot above shows text that is rendered into an UEFI framebuffer using the bitmap font +from noto-sans-mono-bitmap.

    +

    An example of usage can be found in PR#213 of the +rust-osdev/bootloader crate, where this crate was merged and replaced font8x8.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    This month, we merged three small improvements for the Writing an OS in Rust blog:

    + +

    Thanks to @TisnKu for their contribution!

    +

    I have also brought the 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.

    +

    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.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2022-02/index.html b/this-month/2022-02/index.html new file mode 100644 index 00000000..c4ddf3d0 --- /dev/null +++ b/this-month/2022-02/index.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: February 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: February 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    uefi-rs

    +

    Maintained by @GabrielMajeri and @nicholasbishop

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    One of the pain points of developers building software using uefi-rs has been the Completion type, which is like an expanded Result type which also handles warnings (besides successes and errors). There's an open proposal to drop this type and revert to using more standard Results everywhere, by treating all warnings as errors. Initial feedback suggests that such a change would be beneficial to the project, but comments and suggestions are welcome on the linked issue.

    +

    We merged the following changes in February:

    + +

    Thanks to @nicholasbishop, @Stzx, @avirule and @AtsukiTak for their contributions!

    +

    x86_64

    +

    Maintained by @phil-opp, @josephlr, @Freax13, and @rybot666

    +

    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.

    +

    In February, we merged the following pull requests:

    + +

    We also merged a few breaking changes, which will be part of the upcoming v0.15 release:

    + +

    bootloader

    +

    Maintained by @phil-opp, @rybot666, and @64

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.

    +

    We merged the following changes this month:

    + +

    Thanks to @Freax13 and @kennystrawnmusic for their contributions!

    +

    We also pushed a big restructuring to the next branch, which will become the v0.11 version eventually. The branch is still in an experimental state and not documented yet, so it's probably a bit early to try it out. But we are making good progress!

    +

    vga

    +

    Maintained by @RKennedy9064

    +

    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. This month, we merged the following pull request:

    + +

    Thanks to @clavierpaul for this contribution!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged two fixes for the Writing an OS in Rust blog this month:

    + +

    Thanks to @kITerE and @MaxDesiatov for these contributions!

    +

    I'm also still working on the third edition of the blog. The current state is the following:

    +
      +
    • This month, cargo finally gained support for artifact dependencies, which is a feature that I plan to use for the edition. There are still a few issues with it, for example a panic in combination with -Zbuild-std and that there is currently no way to enable -Zbuild-std=core for an artifact dependency without enabling it globally.
    • +
    • The upcoming v0.11 version of the bootloader crate is already finished for the UEFI part. I'm still working on the BIOS implementation, which is more difficult unfortunately.
    • +
    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2022-03/index.html b/this-month/2022-03/index.html new file mode 100644 index 00000000..8d0843a4 --- /dev/null +++ b/this-month/2022-03/index.html @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: March 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: March 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    Maintained by @phil-opp, @josephlr, @Freax13, and @rybot666

    +

    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.

    +

    This month, we released version 0.14.9 of the x86_64 crate with lots of improvements:

    +

    New Features

    + +

    Already merged last month:

    + +

    Bug fixes and Documentation

    + +

    Thanks to @jarkkojs, @drzewiec, and @kevinaboos for contributing to this release!

    +

    v0.15

    +

    We also merged some breaking changes which will be published in the upcoming v0.15 release:

    + +

    Special thanks to our co-maintainer @josephlr, who did a lot of great work this month!

    +

    uefi-rs

    +

    Maintained by @GabrielMajeri and @nicholasbishop

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    One of the pain points of developers building software using uefi-rs has been the Completion type, which is like an expanded Result type which also handles warnings (besides successes and errors). The RFC for the removal of the Completion type has been accepted and the corresponding changes have been merged in March: the Completion type has been removed and the crate has reverted to using more standard Results everywhere, by treating all warnings as errors.

    +

    We merged the following changes in March:

    +

    New features/protocols

    + +

    Refactorings

    + +

    Bug fixes

    + +

    CI & testing

    + +

    Misc & chores

    + +

    Thanks to @nicholasbishop, @sven-eliasen, @necauqua and @AtsukiTak for their contributions!

    +

    uart_16550

    +

    Maintained by @phil-opp

    +

    The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following changes this month:

    + +

    Thanks to @tsatke for this contribution!

    +

    xhci

    +

    Maintained by @toku-sa-n

    +

    The xhci crate provides types of xHCI structures such as Contexts, Extended Capabilities, Registers, and TRBs. This month, we merged some cleanups:

    + +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    No tasks were proposed for this section.

    +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    +

    phip1611/simple-chunk-allocator

    +

    (Section written by @phip1611)

    +

    Philipp Schuster recently released an initial version of his simple-chunk-allocator +crate. It focuses on being a very simple-to-use general purpose allocator that "just works" for various workloads +in no_std context. A bitmap is used for bookkeeping of used blocks/chunks. This enables a simple algorithm that is easy +to understand. The allocator uses a combination of the strategies "next fit" and "best fit". It is usable as #[global_allocator] +and operates on static memory, i.e., no paging mechanism involved. The crate is suited to manage the heap inside a kernel +or in a similar no_std application. It is part of the roottask in Philipp's Diplom (Master) Thesis +where he wrote a runtime system for a Microkernel in Rust.

    +

    phip1611/linux-libc-auxv

    +

    (Section written by @phip1611)

    +

    Philipp Schuster recently released an initial version of his linux-libc-auxv +crate. The crate enables the creation and the parsing of the initial Linux stack layout. This layout is a +special data structure that Linux prepares for applications before they start execution. The C runtime behind the +_start symbol of a libc implementation uses this to find program arguments, environment variables, and the +auxiliary vector. The layout is tricky to create because the creator must ensure that the layout is valid in the +address space of the target. However, linux-libc-auxv found a way to cope with this.

    +

    You can write a "freestanding" binary, i.e., without libc, with this crate, run it under Linux and parse the stack +layout yourself. This is similar to what the libc does, before Rust's runtime starts, that eventually calls the +main function of a Rust program.

    +

    The crate is part of Philipp's Diplom (Master) Thesis +where he wrote a runtime system for a Microkernel in Rust that can emulate Linux behaviour and run unmodified +Linux applications.

    +

    phip1611/diplomarbeit-impl

    +

    (Section written by @phip1611)

    +

    Philipp Schuster submitted his Diplom (Master) Thesis at TU Dresden where he build a policy-free system-call layer for +the Hedron microhypervisor. The project comes with a runtime system written in Rust for the microkernel and involves +a roottask that enables the execution of unmodified Linux binaries through an OS personality/Linux emulation. The +runtime system covers several interesting aspects of OS development, such as interaction with a kernel, system call +emulation, and starting programs from ELF files.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged a new Korean translation of first post of Writing an OS in Rust blog this month. Thanks a lot to @JOE1994 for creating this translation and @QuqqU for reviewing it!

    +

    We also received lots of smaller fixes, by @MaxDesiatov, @alaincao, @Programatic, @ruhuang2001, @Hofer-Julian, @SilensAngelusNex, and @julien-me. Thank you all for your contributions!

    +

    Unfortunately I didn't have time to work on the new version of the bootloader crate for the upcoming third edition of the blog this month. However, there was some surprising development on the Rust side that should help us with the new build system: @bstrie created a Major Change Proposal to promote the x86_64-unknown-none target to Tier 2. This is a bare-metal target that should be compatible with our kernel, so we might not need -Zbuild-std anymore in the future. Instead, we could download a precompiled version of the core/alloc crates via rustup target add. The great news is that the proposal was already accepted and the corresponding implementation PR is ready for review too!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2022-04/index.html b/this-month/2022-04/index.html new file mode 100644 index 00000000..67fb8bec --- /dev/null +++ b/this-month/2022-04/index.html @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: April 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: April 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    x86_64

    +

    Maintained by @phil-opp, @josephlr, @Freax13, and @rybot666

    +

    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.

    +

    In April, we merged the following improvements and fixes:

    + +

    Thanks to @prinzdezibel for their contribution!

    +

    We also merged two updates into the next branch for the upcoming v0.15 release:

    + +

    uefi-rs

    +

    Maintained by @GabrielMajeri and @nicholasbishop

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following changes in April:

    +

    Features

    + +

    Bug fixes

    + +

    CI and linting

    + +

    Documentation improvements

    + +

    Thanks to @supdrewin, @nicholasbishop and @raccog for their contributions!

    +

    bootloader

    +

    Maintained by @phil-opp, @rybot666, and @64

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following changes:

    + +

    Thanks to @Freax13 and @toothbrush7777777 for these contributions!

    +

    We also made some good progress on the upcoming v0.11 version of the crate:

    + +

    The next steps now are: setting up unreal mode on the CPU, loading the kernel from the FAT partition, loading the memory map, and setting up the page tables.

    +

    multiboot2

    +

    Maintained by @IsaacWoods, @phip1611, @robert-w-gries, @ahmedcharles, and @Caduser2020

    +

    The multiboot2 crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 +bootloaders. The latest release of the multiboot2-crate is now v.0.13.2 (was v0.13.1). It contains minor +improvements, such as that TagType implements Ord.

    +

    multboot2-header

    +

    Maintained by @IsaacWoods, @phip1611, @robert-w-gries, @ahmedcharles, and @Caduser2020

    +

    The multiboot2-header crate provides abstraction types for Multiboot2 headers and a builder struct to construct such +headers. The latest release of the multiboot2-header-crate is now v0.2.0 (was v0.1.0). The changes include a +bugfix that prevented the usage in no_std contexts. Furthermore, overall code quality was improved. The internal CI +was updated to verify no_std builds as well as regular builds. +Full changelog: https://github.com/rust-osdev/multiboot2/releases/tag/multiboot2-header-v0.2.0

    +

    uart_16550

    +

    Maintained by @phil-opp

    +

    The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month:

    + +

    Thanks to @josephlr for this contribution!

    +

    volatile

    +

    Maintained by @phil-opp

    +

    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. In April, we merged the following pull request:

    + +

    Thanks to @hawkw for this contribution!

    +

    xhci

    +

    Maintained by @toku-sa-n

    +

    The xhci crate provides types of xHCI structures, such as Registers and TRBs.

    +

    In this month, we released a new version 0.8.3 which includes a bug fix reported and committed by @Yuna-Tomi. The bug was that EventRingDequeuePointerRegister::event_ring_dequeue_pointer() did not return the correct address. Thanks for the contribution!.

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    +

    rust-embedded/rust-raspberrypi-OS-tutorials

    +

    (Section written by @andre-richter)

    +

    The Operating System development tutorials in Rust on the Raspberry Pi project +saw two more tutorial releases:

    + +

    The two tutorials implement the generation of backtraces that show address and symbol information. Here is an example of the of a backtrace generated as part of the kernel's panic handler:

    +
    [    0.002782] Writing to bottom of address space to address 1 GiB...
    +[    0.004623] Kernel panic!
    +
    +Panic location:
    +      File 'kernel/src/_arch/aarch64/exception.rs', line 59, column 5
    +
    +[...]
    +
    +Backtrace:
    +      ----------------------------------------------------------
    +          Address            Function containing address
    +      ----------------------------------------------------------
    +       1. ffffffffc0001294 | core::fmt::write
    +       2. ffffffffc0005560 | libkernel::panic_wait::_panic_print
    +       3. ffffffffc00054a0 | rust_begin_unwind
    +       4. ffffffffc0002950 | core::panicking::panic_fmt
    +       5. ffffffffc0004898 | current_elx_synchronous
    +       6. ffffffffc0000a74 | __vector_current_elx_synchronous
    +       7. ffffffffc000111c | kernel_init
    +      -----------------------------------------------------------
    +
    +

    metta-systems/vesper

    +

    (Section written by @berkus)

    +

    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.

    +

    The kernel is in very early stages of development. This time I will update on the progress of tooling and my next steps. As usual, I will link directly to my blog for more details. Read the full article here.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following improvements for the "Writing an OS in Rust" blog this in April:

    + +

    Thanks to @JOE1994, @QuqqU, @ruhuang2001, and @PoorlyDefinedBehaviour for their contributions!

    +

    For the current status of the upcoming third edition, see my comment on the related GitHub issue.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2022-05/index.html b/this-month/2022-05/index.html new file mode 100644 index 00000000..baf21b46 --- /dev/null +++ b/this-month/2022-05/index.html @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: May 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: May 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    uefi-rs

    +

    Maintained by @GabrielMajeri and @nicholasbishop

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following changes in May:

    +

    Improvements

    + +

    Fixes

    + +

    Thanks to @JonahPlusPlus, @raccog, and @verticalegg for their contributions!

    +

    bootloader

    +

    Maintained by @phil-opp, @rybot666, and @64

    +

    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:

    + +

    This feature will be part of the upcoming v0.11 release. Thanks to @Freax13 for this contribution!

    +

    pci_types

    +

    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 +between projects, and would benefit from community contributions.

    +

    We merged the following change in May:

    + +

    Thanks to @alesharik for this contribution!

    +

    xhci

    +

    Maintained by @toku-sa-n

    +

    The xhci crate provides types of xHCI structures, such as Registers and TRBs.

    +

    We merged the following fix this month:

    + +

    Thanks to @Yuna-Tomi for this contribution!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + + +

    No tasks were proposed for this section this month.

    +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    + +

    No projects were proposed for this section this month.

    +
    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2022-06/index.html b/this-month/2022-06/index.html new file mode 100644 index 00000000..44bd75fa --- /dev/null +++ b/this-month/2022-06/index.html @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: June 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: June 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Project Updates

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    linked-list-allocator

    +

    Maintained by @phil-opp and @jamesmunns

    +

    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.

    +

    This month, @jamesmunns redesigned the internal API for traversing the linked list in order to pass the strict tests of miri, which is an experimental interpreter for Rust's intermediate representation (MIR). Among other things, miri checks that pointers are correctly aligned and that no invalid aliasing occurs (based on different formal models). By checking our implementation against miri, we make it more robust and reduce the chance that undefined behavior occurs with future compiler versions.

    +

    The change was implemented across the following pull requests:

    + +

    Thanks to @jamesmunns for the redesign and @haraldh for reporting a critical issue in the v0.10.0 release and providing a fix! Also, we would like to welcome @jamesmunns as a maintainer of this crate!

    +

    multiboot2

    +

    Maintained by @IsaacWoods, @phip1611, @robert-w-gries, @ahmedcharles, and @Caduser2020

    +

    The multiboot2 crate provides abstraction types for the multiboot information structure (MBI) +of multiboot2 bootloaders. The latest release of the multiboot2-crate is now v.0.14.0 (was +v0.13.2). It contains some small breaking changes because so far, we used some unsafe code and +relied on having not to verify UTF-8 strings. For a full changelog, please refer to the +GitHub repo.

    +

    uefi-rs

    +

    Maintained by @GabrielMajeri and @nicholasbishop

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following changes in June:

    +

    Fixes

    + +

    Improvements

    + +

    Internal changes

    + +

    bootloader

    +

    Maintained by @phil-opp, @rybot666, and @64

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we made more progress on the upcoming v0.11 version:

    + +

    x86_64

    +

    Maintained by @phil-opp, @josephlr, @Freax13, and @rybot666

    +

    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.

    +

    In June, we merged the following pull request:

    + +

    Thanks to @mkroening for this contribution!

    +

    cargo-xbuild

    +

    Maintained by @phil-opp

    +

    The cargo-xbuild project provides cargo command wrappers to cross-compile the sysroot crates core and alloc. It is mostly useful in situations, where cargo's unstable -Zbuild-std flag is not usable.

    +

    This month, we fixed a build error of the alloc crate on the latest nightlies:

    + +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding +issues in one of our projects and get started!

    + +
      +
    • +

      (rust-osdev/volatile) New design based on pointer types

      +

      We are currently discussing a new design for the volatile crate based on raw pointer types in order to avoid potential undefined behavior. The linked pull requests proposes an implementation where the volatile wrapper type is Copy and its methods take self by value. We haven't reached a decision yet, so if anyone has more input on this, please join the discussion. For more context, see also PR #22.

      +
    • +
    + +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    +

    google/gpt-disk-rs

    +

    (Section written by @nicholasbishop)

    +

    gpt-disk-rs is a collection of three libraries related to GPT (GUID Partition Table) disk data. The crates are no-std by default, have minimal dependencies, and include a lot of documentation. I'm hoping they'll be a suitable base for any project that wants to read or write GPT data.

    +
      +
    • uguid: GUID data type.
    • +
    • gpt_disk_types: all the GPT types defined by the UEFI specification
    • +
    • gpt_disk_io: types for reading and writing GPT data to an abstract block IO device.
    • +
    +

    vinc/moros

    +

    (Section written by @vinc)

    +

    MOROS is a text-based hobby operating system targeting computers with a x86-64 architecture and a BIOS. It is inspired by Unix and ITS but is closer to a modern DOS at the moment in term of features.

    +

    In the last month I finally managed to run rust programs (without alloc) inside the OS after being limited to nasm programs for a long time. This triggered a lot of refactoring and improvements in the shell and the lisp language used for scripting.

    +

    Next step will be publishing a 0.8.0 release and working on userspace allocation.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    This month, we merged the following improvements:

    + +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2022-07/index.html b/this-month/2022-07/index.html new file mode 100644 index 00000000..2b4cba6a --- /dev/null +++ b/this-month/2022-07/index.html @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: July 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: July 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    rust-osdev Projects

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    +

    uefi-rs

    +

    Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following changes in July:

    + +

    x86_64

    +

    Maintained by @phil-opp, @josephlr, @Freax13, and @rybot666

    +

    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.

    +

    In July, we merged the following changes:

    + +

    Thanks to @Zildj1an for their contribution!

    +

    xhci

    +

    Maintained by @toku-sa-n

    +

    The xhci crate provides types of xHCI structures, such as Registers and TRBs.

    +

    We merged the following changes this month:

    + +

    Thanks to @Demindiro and @ytoml for their contributions!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!

    + +
      +
    • +

      (rust-osdev/volatile) Various improvements for the new design

      +

      We are currently discussing a new design for the volatile crate based on raw pointer types in order to avoid potential undefined behavior. The linked pull requests proposes an implementation where the volatile wrapper type is Copy and its methods take self by value. We haven't reached a decision yet, so if anyone has more input on this, please join the discussion. For more context, see also PR #22.

      +
    • +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    +

    rust-lang/rust

    +

    (Section written by @phil-opp)

    +

    This Month, @dvdhrm started an initiative to get the *-unknown-uefi targets to Tier-2. As a first step, they added a detailed description of the platform to the rustc book. The entry is already published in the nightly release of the book.

    +

    Please reach out if you would like to help with this!

    +

    Theseus OS

    +

    (Section written by Kevin Boos (@kevinaboos))

    +

    Theseus is a safe-language OS written from scratch in Rust that is in the process of migrating from pure academic research objectives to more general usability and legacy compatibility.

    +

    Theseus dynamically loads and links all components at runtime, and executes everything in a single address space and at a single privilege level. +With this, Theseus employs intralingual design principles to maximally leverage the strengths of the Rust language, allowing the compiler to both view and semantically understand (and thus extend its safety checks to) all components from top-level apps to low-level kernel entities. +Theseus strives to not only ensure isolation between different entity components and subsystems in the OS, but also to go further than language safety to provide various invariants that guarantee properties about most system-provided types. +For more, check out the Theseus OS Book or our academic papers and presentations.

    +

    Theseus is fully open-source and always welcomes contributions from anyone.

    +

    Over the past month (or two), Theseus OS made significant progress on a variety of topics:

    + +

    Check out the Theseus OS blog for the latest details.

    +

    nt-list: Windows Linked Lists in idiomatic Rust

    +

    (Section written by @ColinFinck)

    +

    On his quest to develop a ReactOS/Windows bootloader in Rust, Colin Finck released another building block as a reusable no_std crate this month. +After nt-hive for reading Windows registry hive files and ntfs to access Microsoft's proprietary NTFS filesystem, the nt-list crate provides a type-safe and idiomatic Rust interface to work with Windows Linked Lists, known as LIST_ENTRY and SINGLE_LIST_ENTRY. +This is what Windows, Windows drivers, and components influenced by Windows (e.g. UEFI) have been using for a long time to uniformly handle linked lists.

    +

    Colin's blog post goes into detail about some of the differences between textbook and Windows linked lists and the challenges in coming up with a safe Rust implementation. +The final interface provided by nt-list is as simple to use as Vec while being fully compatible to the original LIST_ENTRY. +The compatibility is proven in a WinDbg debugging session:

    +

    Using WinDbg to traverse a Windows Linked List created by the nt-list Rust crate

    +

    If you want to give it a spin, the crate is available on crates.io, and make sure to also check the docs.

    +

    Comparison between phip1611/simple-chunk-allocator and rust-osdev/linked-list-allocator

    +

    (Section written by @phip1611)

    +

    In March 2022, Philipp Schuster proposed his simple-chunk-allocator +crate. It focuses on being a very simple-to-use general purpose allocator that "just works" for various workloads +in no_std context. However, there are other allocators, such as rust-osdev/linked-list-allocator. +When you choose an allocator, you should not only consider the API and how to set it up, but actually the runtime +characteristics. OS research has shown us that there is no perfect allocator. You can optimize an allocator for speed, +memory utilization (i.e., prevent fragmentation), code simplicity, and worst case execution time. There exist different +strategies to reach those goals: first-fit, next-fit, best-fit

    +

    Recently, Philipp benchmarked his simple-chunk-allocator against rust-osdev/linked-list-allocator +to learn under which conditions which performs better. But at first, let's point out some differences. simple-chunk-allocator needs +a static backing storage for heap and an additional static backing storage for its internal bookkeeping. linked-list-allocator +can solve this better by organizing the heap with the heap backing memory itself. simple-chunk-allocator uses a slightly +adjusted variant of best-fit that tries to reduce fragmentation. linked-list-allocator is a first-fit allocator that +has a lower performance to more heap is used.

    +

    The relevant outcome is that simple-chunk-allocator always outperforms linked-list-allocator in median allocation time. +For stress tests with a low heap consumption, thus, no long stress test with 90% and more heap usage, simple-chunk-allocator +also outperforms linked-list-allocator in average allocation time. However, if the heap is full and frequent allocations +happen, the average (but not the median) allocation time of linked-list-allocator is better. Also, linked-list-allocator +can come close to 100% heap usage which is not the case for simple-chunk-allocator, because it suffers from internal +fragmentation under certain circumstances. Last but not least, even small allocations always takes up a multiple of the +used chunk size in simple-chunk-allocator.

    +

    In the end, there is no optimal allocator. You must choose which properties are more relevant for your scenario. +For concrete measurements, please head to the README of simple-chunk-allocator.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/content/this-month/2022-07/windbg.png b/this-month/2022-07/windbg.png similarity index 100% rename from content/this-month/2022-07/windbg.png rename to this-month/2022-07/windbg.png diff --git a/this-month/2022-08/index.html b/this-month/2022-08/index.html new file mode 100644 index 00000000..b76cbabd --- /dev/null +++ b/this-month/2022-08/index.html @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: August 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: August 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    rust-osdev Projects

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    + +

    uefi-rs

    +

    Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following changes in August:

    + +

    We also published a subset of the above changes as a new v0.16.1 release:

    + +

    Thanks to @kendase3, @JonahPlusPlus, and @e820 for their contributions!

    +

    bootloader

    +

    Maintained by @phil-opp, @rybot666, and @64

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.

    +

    This month, we finally finished the new BIOS boot implementation for the upcoming v0.11 release. It's now almost completely written in Rust (instead of assembly), which should make further improvements much easier.

    +

    Some selected commits that might be interesting:

    + +

    All the tests are passing now, so we only need to do some cleanup and write proper documentation, then we should be ready to publish an alpha release for testing.

    +

    linked-list-allocator

    +

    Maintained by @phil-opp and @jamesmunns

    +

    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.

    +

    In August, Evan Richter discovered a vulnerability in Heap::extend that could lead to out-of-bound writes. The issue occurred when extend was called with a size smaller than size_of::<usize> * 2, i.e., a size too small to store the metadata for the new memory region.

    +

    Upon investigating this issue, we found several similar issues:

    +
      +
    • Initializing a heap with a size smaller than size_of::<usize> * 3 could result in an out-of-bounds write too.
    • +
    • Calling extend on an uninitialized heap could also result in an out-of-bounds write.
    • +
    • Calling extend on a heap whose size is not a multiple of the size of two usizes resulted in unaligned writes.
    • +
    +

    We created a security advisory with more details and released a fix in v0.10.2, with the following changes:

    +
      +
    • The initialization functions now panic if the given size is not large enough to store the necessary metadata. Depending on the alignment of the heap bottom pointer, the minimum size is between 2 * size_of::<usize> and 3 * size_of::<usize>.
    • +
    • The extend method now panics when trying to extend an uninitialized heap.
    • +
    • Extend calls with a size smaller than size_of::<usize>() * 2 are now buffered internally and not added to the list directly. The buffered region will be merged with future extend calls.
    • +
    • The size() method now returns the usable size of the heap, which might be slightly smaller than the top() - bottom() difference because of alignment constraints.
    • +
    +

    Thanks to @evanrichter for reporting this vulnerability and working with us on a fix.

    +

    xhci

    +

    Maintained by @toku-sa-n

    +

    The xhci crate provides types of xHCI structures, such as Registers and TRBs.

    +

    We merged the following changes this month:

    + +

    Thanks to @Demindiro for their contribution!

    +

    pci_types

    +

    Maintained by @IsaacWoods

    +

    The pci_types library provides types for accessing and configuring PCI devices from Rust operating systems.

    +

    We merged the following change in August:

    + +

    Thanks to @0Killian for this contribution!

    +

    acpi

    +

    Maintained by @IsaacWoods, @Restioson, and @Gegy

    +

    The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS.

    +

    We merged the following changes this month:

    + +

    Thanks to @semiviral, and @Freax13 for their contributions!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!

    + +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    +

    cdrzewiecki/celos

    +

    (Section written by @drzewiec)

    +

    It's been a while since my last project update! That's partly because life has been busy, but also because this update concerns a huge feature. I'm very pleased to report that I have been able to add preemptive multitasking to CelOS.

    +

    This was feature that took a good bit of foundation to be able to implement (hence why it took me so long). I had to spend a good bit of time getting memory allocation (both physical and virtual) into a happier place, as well as add support for ACPI and the APIC. And, of course, there were many snags along the way as I learned (at least some of) the traps that are easy to step into when doing something as delicate as context switching.

    +

    Now that I have finished this key feature, I plan to work on setting up the other infrastructure needed to begin writing services in userspace (such as message passing and synchronization primitives). And, hopefully soon, finally make the jump into ring 3!

    +

    As always, many thanks to @phil-opp for his hard work on supporting the Rust osdev community, and for writing the apic crate which helped serve as a sanity check while I wrote my own driver for the IOAPIC and LAPIC. Thanks as well to the maintainers of the excellent acpi crate, you guys are doing incredible work out there!

    +

    Blog Post: GNU ld Discards Section Containing Code – Section Flags in Assembly are Important

    +

    (Section written by @phip1611)

    +

    In late August/early September, I encountered problems when building my Rust kernel. I faced +unintuitive interaction between my global assembly code and the linker. I specified a custom +section in assembly with executable code with .section .bootcode. The linker never linked +the code where I specified it in my linker script. It's address was not what it is supposed to be. +readelf didn't show the section inside the binary either. The section was discarded no matter +how hard I tried to modify the linker, thus, KEEP((.bootcode)); also didn't work. An experienced +colleague ensured me that my linker script is correct.

    +

    Section names such as .init or .text.bootcode worked by the way. Only my custom name was +rejected somehow. In the end, I figured out writing .section .bootcode, "ax" does the trick. The +difference is small, but the impact to the object file and final executable of those section flags +is big. I could find the answer in the ELF specification. A section needs to be allocatable +(a-flag) so that it can be properly placed in a LOAD segment/program header. The section names +.init and .text.* have this pre-configured but my custom section name .bootcode has not.

    +

    I traced it down to a minimal reproducible example that can be found on GitHub. +A comprehensive write-up can be found on my website Phip's Blog.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    This month, we merged a pull request that fixes numerous grammar and punctuation errors across all posts of the "Writing an OS in Rust" series. Thanks to @hecatia-elegua for this contribution!

    +

    We also received multiple pull requests to add and update translations:

    + +

    We are still looking for reviewers for the last two PRs. If you speak Chinese or Korean, it would be great if you could take a look!

    +

    Thanks to @ykomatsu, @liuyuran, and @JOE1994 for contributing these translations!

    + +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2022-09/index.html b/this-month/2022-09/index.html new file mode 100644 index 00000000..63460cf8 --- /dev/null +++ b/this-month/2022-09/index.html @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: September 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: September 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    rust-osdev Projects

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    + +

    bootloader

    +

    Maintained by @phil-opp, @rybot666, and @64

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.

    +

    We encountered various boot issues with the new v7.1.0 release of QEMU in September. This also affected downstream projects such as phil-opp/blog_os and hawkw/mycelium. After some debugging, we found out that QEMU now reports a new memory region at offset ~1 TiB in the physical memory map, which was much higher than expected by the bootloader crate. As a result, BIOS booting became unusably slow (because of the initial identity mapping) and the automated offset selection for the physical memory map ran into a panic. For full details, see the summary issue.

    +

    We fixed the issues in the following way:

    + +

    Thanks to @hawkw and @Freax13 for these contributions!

    +

    We also brought the upcoming v0.11 release even closer to the finish line. Thanks to an extensive review of @Freax13, we found and fixed multiple remaining issues. Also thanks to @asensio-project and @TheBotlyNoob for testing the new version and reporting bugs! Some notable changes are:

    + +

    uefi-rs

    +

    Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

    + + +

    Thanks to @ColinFinck for their contribution!

    +

    xhci

    +

    Maintained by @toku-sa-n

    +

    The xhci crate provides types of xHCI structures, such as Registers and TRBs.

    +

    We merged the following changes in September:

    + +

    Thanks to @Demindiro for their contribution!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!

    + + +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    + +

    Theseus OS

    +

    (Section written by Kevin Boos (@kevinaboos))

    +

    Theseus is a safe-language OS written from scratch in Rust that is in the process of migrating from pure academic research objectives to more general usability and legacy compatibility. +As a fully open-source project, we welcome and encourage contributions from everyone!

    +

    Since our last update here two months ago, we have worked on the following things:

    + +

    Check out the Theseus OS blog for the latest details.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following changes this month:

    + +

    Thanks to @shimomura1004, @woodyZootopia, @bolded, and @Firenezz for their contributions!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2022-10/index.html b/this-month/2022-10/index.html new file mode 100644 index 00000000..28609adc --- /dev/null +++ b/this-month/2022-10/index.html @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: October 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: October 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    rust-osdev Projects

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    + +

    uefi-rs

    +

    Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

    + +

    Thanks to @timrobertsdev and @raccog for their contributions!

    + +

    linked-list-allocator

    +

    Maintained by @phil-opp and @jamesmunns

    + +

    Thanks to @evanrichter for their contribution!

    +

    bootloader

    +

    Maintained by @phil-opp, @rybot666, and @64

    +

    We merged the following changes this month:

    + +

    Thanks to @phip1611, and @Freax13 for their contributions!

    +

    acpi

    +

    Maintained by @IsaacWoods

    +

    This month, we began work to remove acpi's dependence on the alloc crate for allocations, instead directly +using the core::alloc::Allocator API. This +improves support for bootloaders and kernels that want to treat memory allocation as fallible, allowing them to +more gracefully recover from out-of-memory situations. In the future, we hope that this support will be brought +into alloc, so that the library can return to using the standard containers.

    +

    These changes are not yet finished or released, but a new major version will likely be out in December with these +changes, as well as better support for PCI topologies with multiple segment groups, and a few other changes. If +you'd like to make use of these new features as they're developed, they're already in main, so you can use a Git +dependency.

    + +

    Thanks to @semiviral, and @mattfbacon for their contributions!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!

    + + +

    No tasks were proposed for this section this month.

    +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    + +

    d-sonuga/blog-blasterball

    +

    (Section written by @d-sonuga)

    +

    Demilade Sonuga's Blog is a new blog on writing a +simple blasterball game with no OS, no engine and minimal external crates. The blog's aim is to take a Rust +beginner from starting the project to finishing it and understanding everything involved in the project's +creation.

    +

    The project is still in it's early stages, so lots of feedback is very much needed.

    +

    If you're interested, please take a look, and send your thoughts to @d_sonuga +on Twitter.

    +

    Talk on Windows Linked Lists in safe and idiomatic Rust

    +

    (Section written by @ColinFinck)

    +

    At the first ever EuroRust conference from 13th to 14th October, Colin Finck gave a talk about the challenges of developing his nt-list crate. +The crate provides a safe and idiomatic Rust wrapper around the Windows variant of Linked Lists. +It was presented on this blog in July.

    +

    A recording of the talk has just been uploaded. +Check it out, and also check out the other videos from that conference for some great takes on Rust!

    +

    Preview of video: Windows linked lists in safe and idiomatic Rust - Colin Finck - EuroRust 2022

    +

    MaderNoob/galloc

    +

    (Section written by @phil-opp)

    +

    The new good_memory_allocator crate implements a no_std-compatible linked list allocator, inspired by the dlmalloc algorithm. It stores an additional usize of metadata per allocation, which decreases memory efficiency, but increased runtime efficiency. The README includes promising benchmark results that compare the crate against the linked-list-allocator and simple-chunk-allocator crates.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following changes to the Writing an OS in Rust blog this month:

    + +

    Other News

    + +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/content/this-month/2022-10/nt-list-video.jpg b/this-month/2022-10/nt-list-video.jpg similarity index 100% rename from content/this-month/2022-10/nt-list-video.jpg rename to this-month/2022-10/nt-list-video.jpg diff --git a/this-month/2022-11/index.html b/this-month/2022-11/index.html new file mode 100644 index 00000000..d4475a80 --- /dev/null +++ b/this-month/2022-11/index.html @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: November 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: November 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    +

    We have some new sections this month, we hope you like the content!

    + +

    Infrastructure and Tooling

    +

    In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

    +

    UEFI Targets are now Tier 2

    +

    (Section written by @nicholasbishop)

    +

    The MCP to raise the three UEFI targets to tier 2 by @dvdhrm was recently approved. +Following that we merged a PR to dist builds of the UEFI targets so that you can install them via rustup (e.g. rustup target add --toolchain nightly x86_64-unknown-uefi), and a PR to add an initial QEMU test for the x86_64 UEFI target to help prevent regressions from landing.

    +

    The initial nightlies containing the prebuilt UEFI targets revealed some issues in compiler_builtins which we fixed and are in the 0.1.84 release. +Finally, we changed the C compiler for the UEFI targets from gcc to clang, which resolved some linker problems. +As of the 2022-11-22 nightly, the three UEFI targets should be fully usable, which means you no longer need to use the unstable -Zbuild-std feature.

    +

    Announcements, News, and Blog Posts

    + + +

    rust-osdev Projects

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    + +

    bootloader

    +

    Maintained by @phil-opp

    +

    Just a few days ago, we finally released version 0.11.0 of the the bootloader crate. This release is a major rewrite with various new features and also breaking changes:

    +
      +
    • Separate API crate: The bootloader is now split into two parts: A bootloader_api crate to make kernels loadable by the bootloader and the actual bootloader implementation. This makes the build process for kernels much easier and faster.
    • +
    • New config system: Instead of configuring the bootloader via a special table in the Cargo.toml, the configuration now happens through a normal Rust struct, which is part of the entry_point! macro. The macro then serializes the config struct at compile time and places it in a special ELF output section. The compile time serialization happens through a manually implemented const fn of the config struct.
    • +
    • Load the kernel at runtime: Up to version 0.10, the bootloader used to link the kernel at compile time, which required recompiling the bootloader whenever the kernel was modified. In v0.11, we now load both the kernel and the configuration at runtime, so no rebuilding of the bootloader is needed anymore.
    • +
    • Split into sub-crates: Since the bootloader build process does not need access to the kernel executable or its Cargo.toml anymore, we can build the different parts of the bootloader independently. For example, the BIOS boot sector is now a separate crate, and the UEFI bootloader is too. (We plan to make them proper artifact dependencies as soon as they're allowed on crates.io.)
    • +
    • Library to create disk images: To create an abstraction the complex build steps of the different bootloader executables, we compile them inside cargo build scripts. At the top level, we provide a bootloader library crate, which compiles everything as part of its build script. This library includes functions for creating BIOS and UEFI disk images for a given kernel. These functions can be used e.g. from a builder crate or a build script of the downstream operating system.
    • +
    +

    See our README for detailed usage instructions. We also created migration guides that explain how to update from v0.9 and v0.10.

    +

    Thanks a lot to the numerous people that tested our beta releases and reported issues!

    +

    uefi-rs

    +

    Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

    +

    Features

    + +

    Docs

    + +

    Internal

    + + +

    Thanks to @blitz, @YtvwlD, @timrobertsdev, @NathanRoyer, and @d-sonuga for their contributions!

    +

    linked-list-allocator

    +

    Maintained by @phil-opp and @jamesmunns

    +

    We merged the following tooling changes this month to make the crate more reliable:

    + +

    Thanks to @evanrichter for their contribution!

    +

    acpi

    +

    Maintained by @IsaacWoods

    + +

    Thanks to @semiviral for their contribution!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!

    + + +

    No tasks were proposed for this section this month.

    +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    + +

    bendudson/EuraliOS

    +

    (Section written by @bendudson)

    +

    EuraliOS is a hobby multitasking operating system written in +Rust. It's based on a microkernel ("Merriwig") that provides on-demand +paging, stack and heap memory management for multi-threaded user +processes. Drivers run in Ring 3 and communication between processes +is by Rendezvous message passing. Each process can have its own +virtual file system, enabling multiple users to be isolated from each +other.

    +

    This still has many rough edges and doesn't have many drivers: +EuraliOS only has ramdisk storage, but does have a TCP stack thanks to +the smoltcp crate. The only +user programs are a simple shell and a +Gopher client; I'm +trying to port the kibi text +editor but have a lot of work to do on the standard library.

    +

    This was based on Phil's blog and uses +many rust-osdev crates including +x86_64, +bootloader and +vga. Thanks to Phil and +Rust-OSdev contributors for all their work supporting this community!

    +

    I've tried to +document the +development steps and hope these are useful for others, particularly +the sections on getting into Ring 3, implementing syscalls and +switching stacks with swapgs. Suggestions for improvement welcome!

    +

    hermitcore/hermit-sync

    +

    (Section written by @mkroening)

    +

    While working on the libhermit-rs kernel, I moved the synchronization primitives targeted at kernel development into a separate crate: hermit-sync. +Whilst I was there, I also enhanced the code and made it independent from libhermit, so the code can now be used in other projects as well; at least x86_64 and aarch64 ones for the moment.

    +

    The crate contains the following features:

    +
      +
    • a function for running a closure without interrupts
    • +
    • a simple spinlock with exponential backoff
    • +
    • a fair ticket lock with exponential backoff
    • +
    • OnceCell and Lazy based on generic_once_cell (another recent project of mine)
    • +
    +

    All of these primitives are available with and without interrupt safety. +See the API docs for more details.

    +

    Any feedback is very welcome of course.

    +

    phip1611/paging-calculator

    +

    (Section written by @phip1611)

    +

    I worked on setting up page tables in a low-level project and noticed that there is lots of room for +confusion. For example, x86 has at least four different modes of paging: 32-bit paging, 32-bit +paging with PAE, 64-bit 4-level paging, and 64-bit 5-level paging. 32-bit without PAE paging uses 10 +bits to index into a page table while 64-bit paging uses 9 bits to index into the table of each +level. To demystify the magic a little, I created a CLI utility called paging-calculator that +takes a virtual address as input and shows you the indices the hardware will use. You can find the +utility on crates.io.

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/content/this-month/2022-12/aero.png b/this-month/2022-12/aero.png similarity index 100% rename from content/this-month/2022-12/aero.png rename to this-month/2022-12/aero.png diff --git a/this-month/2022-12/index.html b/this-month/2022-12/index.html new file mode 100644 index 00000000..fc629546 --- /dev/null +++ b/this-month/2022-12/index.html @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: December 2022 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: December 2022

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Infrastructure and Tooling

    +

    In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

    + +

    Experimental feature gate proposal interoperable_abi

    +

    This Rust language proposal suggests to create a new extern "interop" ABI as a strict superset of the C ABI. +The goal of this new ABI is to "define a standard way to make calls across high-level languages, passing high-level data types, without dropping to the lowest common denominator of C". +For example, it will define a specific memory representation for strings, tuples, and common standard library types such as Option and Result.

    +

    This new ABI would be very useful for operating system development because there are often multiple executables that need to communicate with each other using a stable ABI. +For example, user-space programs communicate with the kernel using system calls, and with other programs using different forms of inter-process communication. +With new extern "interop" ABI, these communication boundaries could use safe, higher-level types when both sides are written in Rust.

    +

    default_alloc_error_handler has been stabilized

    +

    On no_std targets, enabling alloc requires providing an OOM (out-of-memory) handler. The usual implementation of this handler just panics, but implementing the handler requires an unstable feature: alloc_error_handler. The newly-stabilized default_alloc_error_handler automatically provides an OOM handler that panics if no custom handler is implemented. This is an important step towards using some targets on the stable channel.

    +

    Announcements, News, and Blog Posts

    + + +

    rust-osdev Projects

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    + +

    uefi-rs

    +

    Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following changes last month:

    +

    Features

    + +

    Fixes

    + +

    Docs

    + +

    Tooling

    + +

    Thanks to @veluca93, @phip1611, and @raccog for their contributions!

    +

    x86_64

    +

    Maintained by @phil-opp, @josephlr, @Freax13, and @rybot666

    +

    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.

    +

    We merged the following changes in December:

    + +

    Thanks to @TornaxO7 for their contribution!

    +

    Call for Participation

    +

    Want to contribute to a Rust OSDev project, but don't know where to start? Help with one of these outstanding issues!

    + + +

    No tasks were proposed for this section this month.

    +
    +

    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 against the next branch with the tasks you want to include in the next issue.

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    +

    Theseus OS

    +

    (Section written by Kevin Boos (@kevinaboos))

    +

    Theseus is a safe-language OS written from scratch in Rust that is in the midst of a shift from academic research to usability and legacy compatibility. +Theseus loads and links all components at runtime, and executes everything at a single privilege level in a single address space, relying on Rust safety for isolation and correctness.

    +

    As a fully open-source project, we welcome and encourage contributions from everyone!

    +

    Since our last update here a few months ago, we have worked on the following things:

    +
      +
    • Introduced dreadnought, a basic async executor that brings Rust's async/await syntax to Theseus +
        +
      • Usable by both applications and low-level kernel components
      • +
      • Integrated the concept of wakers with Theseus's native task subsystem
      • +
      • Currently, there is a 1-to-1 relationship between async dreadnought tasks and native Theseus tasks
      • +
      +
    • +
    • Rewrote our networking interface to offer better, simpler, and cleaner abstractions +
        +
      • It now supports the latest smoltcp version, 0.8
      • +
      +
    • +
    • Added support for booting Theseus on UEFI +
        +
      • Previously, Theseus could boot from only multiboot2-compliant bootloaders using legacy BIOS
      • +
      • UEFI on x86_64 now successfully boots after significant redesign of early bootstrap routines
      • +
      • New custom uefi_loader tool, loosely based on the rust-osdev org's bootloader project
      • +
      • Early graphical display for basic text printing is a work-in-progress
      • +
      • UEFI is required to boot Theseus on aarch64; this is also a work-in-progress
      • +
      +
    • +
    • Almost completed porting core subsystems to aarch64 +
        +
      • Bootstrap and logging over UART
      • +
      • Memory management: page table modification, arch-agnostic PTE flags and basic memory types, etc
      • +
      • Basic context switching and task bootstrap
      • +
      • SMP multicore, plus identification of CPU cores
      • +
      • Interrupt handling via GIC
      • +
      +
    • +
    • Redesigned the drivers for PS/2 controller, keyboard, and mouse in an intralingual manner that fully leverages Rust's strong type system.
    • +
    • Started implementing a brand new graphics stack and window manager, Porthole, from scratch +
        +
      • Added support for x86's Page Attribute Table, which allows Theseus to control the caching properties of individual memory pages
      • +
      • We now map graphics video memory as write-combining instead of cache-disabled, which significantly improves performance
      • +
      +
    • +
    • Redesigned task management to give arbitrary tasks fewer privileges +
        +
      • Two new types: JoinableTaskRef and ExitableTaskRef +
          +
        • JoinableTaskRef is similar to std::task::JoinHandle, but is fully safe +
            +
          • Ensures that a task can only be joined by the "parent" task that spawned it
          • +
          • Remove distinction between joining a task and obtaining its ExitValue
          • +
          • Automatically reaps "orphan" tasks that are no longer joinable
          • +
          +
        • +
        • ExitableTaskRef statically ensures that only a task itself can mark itself as exited +
            +
          • Now, a given task can no longer invalidly mark another arbitrary task as exited
          • +
          +
        • +
        +
      • +
      • Refactored scheduler and task switching to not hold any TaskRefs during a context switch +
          +
        • Ensures that exited tasks are dropped and cleaned up expediently
        • +
        +
      • +
      • Native ELF Thread-Local Storage (TLS) variables are used to store the current task +
          +
        • Accessing the current task is much faster, albeit slightly more complicated to initialize
        • +
        +
      • +
      +
    • +
    • Implemented a new shell called hull, plus new terminal, console, and TTY components +
        +
      • Theseus can now run headlessly, e.g., interactively over a serial port instead of via a graphical display.
      • +
      +
    • +
    • Removed usage of owning_ref, a crate with unsoundness, in favor of our own types: +
        +
      • BorrowedMappedPages<T>: a pseudo-self-referential type that allows persistent, efficient borrowing of a MappedPages memory region as a specific type T +
          +
        • Accepts a Mutability type parameter for either immutable (&T) or mutable (&mut T) borrowing
        • +
        • Sister type BorrowedSliceMappedPages also supports dynamically-sized slices, i.e., &[T] and &mut [T]
        • +
        • Much more efficient than owning_ref because MappedPages is always pinned in memory, avoiding the need for Box allocation
        • +
        +
      • +
      • dereffer: a new library crate that provides DerefsTo<T>, a generic wrapper type that allows the enclosed object T to be arbitrarily dereferenced to any inner type reachable from that object T +
          +
        • Supports much more arbitrary and complex deref functions than std::ops::Deref
        • +
        +
      • +
      +
    • +
    • Canonicalized the content of Theseus's x86_64-unknown-theseus target spec +
        +
      • Codegen flags are now moved into the target spec, making out-of-tree builds easier and more repeatable
      • +
      • Target specs are now ready to be upstreamed into rustc as built-in targets
      • +
      +
    • +
    • owned_borrowed_trait: a new library crate that abstracts over Owned values vs. Borrowed refs +
        +
      • Uses traits and marker types instead of the existing enum-based designs (like Cow)
      • +
      • Doesn't require Clone or care about any characteristics of the inner type T
      • +
      • Allows you to use generics and associated consts to conditionally branch based on whether an owned value or borrowed reference was passed into a function
      • +
      • Allows you to return a different (generic) type from a function based on whether an owned value or borrowed reference was passed in
      • +
      +
    • +
    +

    Check out the Theseus OS blog for more.

    +

    Andy-Python-Programmer/Aero

    +

    (Section written by @Andy-Python-Programmer)

    +

    Aero is a new modern, experimental, unix-like operating system following the monolithic kernel design. Supporting modern PC features such as long mode, 5-level paging, and SMP (multicore), to name a few.

    +

    This month, Aero successfully managed to get mesa-demos and alacritty running.

    +

    Aero

    +

    In addition, deps.sh script was added to automate the process of installing the required dependencies on the host to build the sysroot.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following changes to the Writing an OS in Rust blog in the past two months:

    + + +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2023-01/index.html b/this-month/2023-01/index.html new file mode 100644 index 00000000..e0db31a3 --- /dev/null +++ b/this-month/2023-01/index.html @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: January 2023 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: January 2023

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Infrastructure and Tooling

    +

    In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

    + + +

    Announcements, News, and Blog Posts

    + + +

    rust-osdev Projects

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    + +

    bootloader

    +

    Maintained by @phil-opp and @rybot666

    +

    The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables.

    +

    We merged lots of improvements this month:

    +

    Features

    + +

    Fixes

    + +

    Docs

    + +

    Other

    + +

    Thanks to @jasoncouture, @Stary2001, @AlexJMohr, @Freax13, @tsoutsman, and @asensio-project for their contributions!

    +

    uefi-rs

    +

    Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

    +

    The uefi crate provides safe and performant wrappers for UEFI, the successor to the BIOS.

    +

    We merged the following changes last month:

    +

    Features

    + +

    Fixes

    + +

    Docs

    + +

    Other

    + +

    Thanks to @nsemmel and @liferooter for their contributions!

    +

    volatile

    +

    Maintained by @phil-opp

    +

    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.

    +

    We merged the following PRs this month:

    + +

    Thanks to @Freax13 for their contributions!

    +

    We are still working on a new, safer design. This month, we opened PR #29 to compare and discuss two alternative designs. The main question is whether the provided VolatilePtr type should implement Copy or Send. Only one of these trait implementations is possible, otherwise there could be data races that lead to undefined behavior. Since both variants have valid use cases, the latest proposal is to implement two different types with conversion methods between them. We haven't reached a decision yet, so if anyone has more input on this, please join the discussion.

    +

    x86_64

    +

    Maintained by @phil-opp, @josephlr, @Freax13, and @rybot666

    +

    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.

    +

    We merged the following changes in January:

    + +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    + +

    metta-systems/vesper

    +

    (Section written by @berkus)

    +

    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.

    +

    The kernel is in very early stages of development...

    +

    And for the past few months I've been on and off involved in deciphering a mystical miscompilation problem. I've managed to summarize it in a ticket to rustc.

    +

    The most minimal reproduction scenario triggers when I use a format_args!() macro in my code and a nightly version later than 2022-08-12.

    +

    Here's a key snippet:

    +
    // if you keep this line, it works when compiled
    +// via rustc 2022-08-12 and breaks on 2022-08-13 and all the versions past that.
    +// if you comment this line out, on 2022-08-13 everything else starts to work.
    +uart.write_fmt(format_args_nl!("Lets {}!", "go")).ok();
    +
    +

    There's also a QEMU-only reproduction code, which is much smaller, as it reuses armv8a_semihosting and armv8a_panic_semihosting crates for pretty much everything.

    +

    The behavior is the same though:

    +
    // if you don't comment it out, it works on 08-12 and breaks on 08-13.
    +// if you comment this line out on 08-13 everything else starts to work.
    +armv8a_semihosting::hprintln!("Lets {}!", "go").ok();
    +
    +

    "Working" here means the kernel boots and runs through to the last panic line:

    +
    [cargo-make] INFO - Running Task: qemu
    +🚜 Run QEMU -M raspi3b -semihosting with vesper/target/nucleus.bin
    +Letsgo!
    +Lets go!
    +Lets go 2!
    +panicked at 'Off you go!', src/main.rs:34:5
    +
    +

    And "not working" is the kernel either panicking on boot in arch64, for which I've extracted panic message but I have low confidence this is what actually happens - panic was in once_cell detecting it is initializing a second time, which I discounted as potentially just a bug in linker script layout and not an actual code generation bug. This code is even completely removed in the latest reproduction (no once_cells) but the kernel still crashes before it even can write anything to serial.

    +

    In the qemu repro it's even weirder:

    +
    🚜 Run QEMU -M raspi3b -semihosting with vesper/target/nucleus.bin
    +
    +
    +

    No output - because hstdout_str() function from armv8a_semihosting crate fails to open semihosting stdout handle - syscall returns -1. Why would that happen simply by a compiler version change - is the biggest question.

    +

    I'm yet to find what am I missing here - assuming this is my own mistake and not a compiler fault, because it would've been noticed by everybody else then? But who knows, maybe you can spot something - drop me a line if you see anything suspicious, I'm pretty much out of ideas here.

    +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following changes to the Writing an OS in Rust blog this month:

    + +

    Thanks a lot to @kennystrawnmusic for this contribution!

    +

    We also have an open pull request for a Chinese translation of the Paging Implementation post. +We're still looking for a reviewer, so if you're speaking Chinese we would appreciate if you could take a look. +Thanks!

    +

    Since I mostly worked on the bootloader crate this month, I haven't made much process on the upcoming third edition of the blog yet. +I'll do my best to have something ready soon!

    +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2023-02/index.html b/this-month/2023-02/index.html new file mode 100644 index 00000000..43d12257 --- /dev/null +++ b/this-month/2023-02/index.html @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: February 2023 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: February 2023

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Infrastructure and Tooling

    +

    In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

    + +

    rust-lang/rust

    + +

    Cargo: Add '-C' flag for changing current dir before build

    +

    This new flag makes cargo switch to the specified directory before building. +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.

    +

    Announcements, News, and Blog Posts

    +

    Here we collect news, blog posts, etc. related to OS development in Rust.

    + + +

    rust-osdev Projects

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    + +

    uefi-rs

    + +

    bootloader

    + +

    acpi

    + +

    Thanks to @rw-vanc for their contributions!

    +

    spinning_top

    + +

    Thanks to @jannic for this contribution!

    +

    linked-list-allocator

    + +

    Thanks to @jannic for this contribution!

    +

    Other Projects

    +

    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 with the updates of your OS project for the next post.

    + +

    phil-opp/blog_os

    +

    (Section written by @phil-opp)

    +

    We merged the following changes to the Writing an OS in Rust blog this month:

    + +

    Join Us?

    +

    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.

    + + +

    Comments

    + + +
    + +
    +
    + Join us on Zulip.
    + © -. All rights reserved. + Contact +
    +
    +
    +
    + + + + + diff --git a/this-month/2023-03/index.html b/this-month/2023-03/index.html new file mode 100644 index 00000000..0ce08bd7 --- /dev/null +++ b/this-month/2023-03/index.html @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: March 2023 | Rust OSDev + + + +
    +
    +
    +

    + Rust OSDev + Operating System Development in Rust +

    +
    +
    + +
    +
    +

    This Month in Rust OSDev: March 2023

    + + + +

    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.

    + +

    This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

    + +

    Infrastructure and Tooling

    +

    In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

    + + +

    Announcements, News, and Blog Posts

    +

    Here we collect news, blog posts, etc. related to OS development in Rust.

    + + +

    rust-osdev Projects

    +

    In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

    + +

    multiboot2

    +

    Maintained by @IsaacWoods, @phip1611, @robert-w-gries, @ahmedcharles, and @Caduser2020

    +

    The multiboot2 crate provides abstraction types for the multiboot information +structure (MBI) of multiboot2 bootloaders. The latest release of the +multiboot2-crate is now v0.15.0 (was v0.14.0), which fixed a +bug. Furthermore, the +documentation was improved. However, the biggest change is that the library now +allows the parsing of custom multiboot tags, which are not prohibited by the +spec. For a full changelog, please refer to the +GitHub repo.

    +

    CI Refactoring

    +

    In the CI, we want to run many tests that cover a big portion of the cartesian +product of the following properties:

    +
      +
    • rust version: stable, nightly, msrv
    • +
    • type: build, test, style check
    • +
    • target: default, no_std
    • +
    +

    As I (@phip1611) was annoyed by all the boilerplate configuration and +repetition, I've investigated new ways to improve that situation and created +a reusable workflow can be used like that:

    +
    jobs:
    +  build_msrv:
    +    name: build (msrv)
    +    uses: ./.github/workflows/_build-rust.yml
    +    with:
    +      rust-version: 1.56.1
    +      do-style-check: false
    +
    +  style_nightly:
    +    name: style (nightly)
    +    needs: build_nightly
    +    uses: ./.github/workflows/_build-rust.yml
    +    with:
    +      rust-version: nightly
    +      do-style-check: true
    +      do-test: false
    +
    +

    The ./.github/workflows/_build-rust.yml workflow abstracts setting up the +toolchain, setting up a cargo cache for a faster CI, and, depending on the +configuration, running cargo test|clippy|doc|build|fmt. I think that the +outcome is quite nice and might also help others. Feel free to check out the +corresponding PR.

    +

    uefi-rs

    +

    Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

    +

    Features

    + +

    Other Improvements

    + +

    Docs

    + +

    CI & Testing

    +
    show changes + +
    +

    Dependencies

    +
    show changes + +
      +

      Thanks to @hughsie, @nicholasbishop, @JohnAZoidberg, @phip1611, @JarlEvanson, and @dependabot[bot] for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      + +

      Thanks to @joycebrum for their contributions!

      +

      acpi

      +

      Maintained by @IsaacWoods

      + +

      Thanks to @A0lson, @rcerc, and @rw-vanc for their contributions!

      +

      pci_types

      +

      Maintained by @IsaacWoods

      + +

      Thanks to @devsnek for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp

      + +

      Thanks to @jasoncouture for their contributions!

      +

      vga

      +

      Maintained by @RKennedy9064

      + +

      Thanks to @bendudson for their contributions!

      +

      pic8259

      +

      Maintained by @phil-opp

      + +

      Thanks to @Virux for their contributions!

      +

      volatile

      +

      Maintained by @phil-opp

      + +

      Thanks to @joycebrum for their contributions!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      phip1611/paging-calculator

      +

      (Section written by @phip1611)

      +

      In the November newsletter, I announced the initial release of my +paging-calculator CLI utility. Recently, I released a new version, which now +covers page table indices for x86, x86 with physical address extension (PAE), +x86_64, and x86_64 with 5 levels. For example, just type $ paging-calculator 0xdeadbeef x86 +and $ paging-calculator 0xdeadbeef x86 --paeand compare the result. You can +install it from crates.io or with +the pkgs.paging-calculator attribute, +if you are a Nix user.

      +

      Screenshot: Paging Calculator CLI Utility

      +

      xiaoyang-sde/rust-kernel-riscv

      +

      (Section written by @xiaoyang-sde)

      +

      rust-kernel-riscv is an experimental operating system kernel built using Rust's asynchronous programming model to schedule threads in both kernel and user space. This approach allows for more efficient context switching and eliminates the need for allocating a separate kernel stack for each user process. In its current iteration, the kernel provides a basic shell capable of running several executables that demonstrate various kernel mechanisms.

      +

      The kernel provides a built-in executor, which manages the scheduling and execution of threads. Threads are executed for a time slice before an exception or interrupt occurs, and then the executor switches to another thread. To give you a better understanding, I included the async function that represents the lifetime of a user thread below, and I wrote a detailed design document.

      +
      async fn thread_loop(thread: Arc<Thread>) {
      +    loop {
      +        let trap_context = thread.state().lock().user_trap_context_mut();
      +        _enter_user_space(trap_context, thread.satp());
      +
      +        // Invokes related methods to handle the exception or interrupt,
      +        // which returns a variant of the `ControlFlow` enum
      +
      +        match control_flow {
      +            ControlFlow::Continue => continue,
      +            ControlFlow::Yield => yield_now().await,
      +            ControlFlow::Exit(exit_code) => {
      +                thread.exit(exit_code);
      +                break;
      +            }
      +        }
      +    }
      +}
      +
      +

      The idea behind rust-kernel-riscv was inspired by Phil's recent blog post on using async/await in the kernel. Thanks Phil for his invaluable support to the Rust community!

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/content/this-month/2023-03/screenshot-paging-calculator-x86-pae.png b/this-month/2023-03/screenshot-paging-calculator-x86-pae.png similarity index 100% rename from content/this-month/2023-03/screenshot-paging-calculator-x86-pae.png rename to this-month/2023-03/screenshot-paging-calculator-x86-pae.png diff --git a/this-month/2023-04/index.html b/this-month/2023-04/index.html new file mode 100644 index 00000000..3bae9f3f --- /dev/null +++ b/this-month/2023-04/index.html @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: April 2023 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: April 2023

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + +

      No updates were proposed for this section this month.

      +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      Features

      + +

      Docs

      + +

      Other

      + +

      Thanks to @JohnAZoidberg and @felipebalbi for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp

      + +

      Thanks to @kennystrawnmusic and @JarlEvanson for their contributions!

      +

      pic8259

      +

      Maintained by @phil-opp

      + +

      Thanks to @rasheedmhd for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      + +

      acpi

      +

      Maintained by @IsaacWoods

      + +

      Thanks to @A0lson, and @rw-vanc for their contributions!

      +

      ucs2-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      phil-opp/blog_os

      +

      (Section written by @phil-opp)

      +

      We merged the following changes to the Writing an OS in Rust blog this month:

      + +

      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 if you like.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2023-05/index.html b/this-month/2023-05/index.html new file mode 100644 index 00000000..83ccf30a --- /dev/null +++ b/this-month/2023-05/index.html @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: May 2023 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: May 2023

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + +

      No updates were proposed for this section this month.

      +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      + +

      Thanks to @RaitoBezarius and @medhefgo for their contributions!

      +

      multiboot2

      +

      Maintained by @IsaacWoods, @phip1611, @robert-w-gries, @ahmedcharles, and @Caduser2020

      + +

      Thanks to @YtvwlD for their contributions!

      +

      vga

      +

      Maintained by @RKennedy9064

      + +

      Thanks to @tsatke for their contribution!

      +

      ovmf-prebuilt

      +

      Maintained by @phil-opp

      + +

      Thanks to @nicholasbishop for this contribution!

      +

      acpi

      +

      Maintained by @IsaacWoods

      + +

      Thanks to @YtvwlD, @semiviral, and @A0lson for their contributions!

      +

      pci_types

      +

      Maintained by @IsaacWoods

      + +

      Thanks to @stlankes for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp

      + +

      Thanks to @mgr0dzicki for their contributions!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      phil-opp/blog_os

      +

      (Section written by @phil-opp)

      +

      We merged the following changes to the Writing an OS in Rust blog this month:

      + +

      Thanks to @SPuntte, @Firenezz, and @twilfredo for these contributions!

      +

      There wasn't much progress on the upcoming third edition this month, as I've been on vacation for the past few weeks. I still have a lot of catching up to do, but I'll try my best to continue writing soon :).

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2023-06/index.html b/this-month/2023-06/index.html new file mode 100644 index 00000000..df9b4cf5 --- /dev/null +++ b/this-month/2023-06/index.html @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: June 2023 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: June 2023

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + +

      No updates were proposed for this section this month.

      +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      volatile

      +

      Maintained by @phil-opp

      +

      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.

      +

      Unfortunately, the design crate had a soundness issue because it used reference types for accessing the volatile memory. This is problematic because the Rust compiler marks references are "dereferenceable", which allows LLVM to insert spurious read operations. This is fine for accessing "normal" memory, but it can lead to correctness issues when used in combination with memory-mapped device registers. These registers look like normal memory, but they are actually accessing some device-specific registers, which might change at any time. So they might change between spurious reads, which violates the assumptions of LLVM and can lead to undefined behavior.

      +

      To solve this issue, we started a full redesign of the crate that uses raw pointers only. This solves the issue because raw pointers are not considered "dereferenceable", so LLVM is not allowed to insert spurious reads. While we started working on the new design more than 2 years ago, we didn't merge it until this month because we weren't sure about the implementation details. The main discussion point was whether we should treat the proposed VolatilePointer type like Rust's reference types or like Rust's raw pointer types. The difference is that raw pointers implement the Copy trait, but are not Send to prevent aliasing. References, on the other hand, can safely implement Send because they're only Copy if the reference is read-only.

      +

      After a lot of back and forth, we decided to provide both options and finally publish volatile v0.5. So the new design has two wrapper types, VolatilePtr (behaves like a raw pointer) and VolatileRef (behaves like a reference). We hope that we support most use cases this way!

      +

      Note that there is also some ongoing discussion about a potential VolatileCell type to wrap values in-place. Most implementations of such a type would require support from the Rust compiler, which needs an RFC. However, there is one promising design based on zero-sized types and proc-macros by @Freax13 that should not require any new language features. We will continue to investigate.

      +

      multiboot2

      +

      Maintained by @phip1611

      +

      The multiboot2 and the multiboot2-header +crates got a big overhaul. The list of new features includes but is not limited to:

      +
        +
      • use DSTs for tags where applicable (#134)
      • +
      • model the MBI as DST (#155)
      • +
      • add a runtime builder for an MBI (#133)
        +Huge thanks to YtvwlD / Niklas for this great external contribution
      • +
      • added an integration test including a multiboot2 chainloader for better test coverage (#129)
      • +
      • added miri to the CI for more memory safety (#128)
      • +
      • several fixes and small improvements
      • +
      +

      multiboot2 was updated from 0.15.1 to 0.16.0 and multiboot2-header was updated from 0.2.0 to 0.3.0. Both +releases come with a large amount of breaking changes. +However, after a sensible consideration, they are all worth it for a more streamlined API and more memory safety.

      +
      +Merged pull requests: + +

      Thanks to @YtvwlD and @scholzp for their contributions!

      +
      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following changes this month:

      + +

      Thanks to @Qix-, @grant0417, and @Egggggg for their contributions!

      +

      vga

      +

      Maintained by @RKennedy9064

      +

      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. This month, we merged the following pull request:

      + +

      Thanks to @tsatke for their contribution!

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi crate provides safe and performant wrappers for UEFI, +the successor to the BIOS firmware. It empowers everyone to write EFI- +applications with Rust in a convenient way, such as your own bootloader.

      +

      In June, we added multiple small improvements for developers using +Nix(OS) and simplifications for working with device +paths. Additionally, we moved more definitions to the new uefi-raw crate.

      +

      Furthermore, we'd like to mention the new high-level File-System API. +It was merged in April +actually, but not mentioned in this newsletter so far. Feel free to give it a +try!

      +

      We merged the following PRs this month:

      + +

      Thanks to @medhefgo for their contribution!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      +

      hermitcore/rusty-hermit

      +

      (Section written by @mkroening)

      +

      The Hermit library operating system allows you to bundle a whole OS directly with your application, creating a freestanding, bootable Unikernel image. +This month, we achieved several milestones for reaching more users with Hermit:

      +
        +
      • +

        Stable Rust support.

        +

        You can now compile your programs for Hermit using the stable Rust toolchain! 🥳

        +

        While the Hermit targets (x86_64-unknown-hermit and aarch64-unknown-hermit) are still at tier 3, we now distribute pre-built artifacts of the Rust standard library for use with stable toolchains! +This means, no more -Zbuild-std, resulting in faster builds, and the bliss of the stable Rust compiler.

        +

        See hermitcore/rust-std-hermit for details on our rust-std artifacts.

        +
      • +
      • +

        Windows support.

        +

        Thanks to Rust's awesome cross-compilation capabilities, you can now compile Hermit applications from anywhere! 😎

        +

        We have resolved a longstanding issue when building Hermit applications on Windows (hermitcore/rusty-hermit#431). +The issue is all sorted out now and Windows, macOS, and Linux are tested and verified by our CI.

        +
      • +
      • +

        AArch64 (ARM64) support.

        +

        You can now run real applications on AArch64, with scheduling, network and everything! 🤯

        + +
      • +
      +

      We'd love if you gave Hermit a try. Just start with our "Hello, World!" application template: hermitcore/rusty-demo.

      + +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2023-07/index.html b/this-month/2023-07/index.html new file mode 100644 index 00000000..b67bb91b --- /dev/null +++ b/this-month/2023-07/index.html @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: July 2023 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: July 2023

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      multiboot2

      +

      Maintained by @phip1611

      +

      The multiboot2 was bumped from 0.16.0 +to 0.17.0. The new release includes the builder pattern for the MBI builder +and the ability to use custom memory types in the memory map in addition to +pre-defined ones. For more info, look here.

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + +

      Thanks to @devsnek for their contribution!

      +

      xhci

      +

      Maintained by @toku-sa-n

      +

      The xhci crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month:

      + +

      Thanks to @lemolatoon for their contribution!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PR this month:

      + +

      Thanks to @SamZhang3 for their contribution!

      +

      bootloader

      +

      Maintained by @phil-opp

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we released a new patch version to fix the build on the latest nightlies:

      + +

      ovmf-prebuilt

      +

      Maintained by @phil-opp

      +

      The ovmf-prebuilt project provides pre-built edk2 releases to make it easier to set up OVMF. We merged the following improvement this month:

      + +

      Thanks to @nicholasbishop for their contribution!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      SFBdragon/talc

      +

      (Section written by @SFBdragon)

      +

      Talc is a recently published, fast, and flexible no-std memory allocator.

      +
        +
      • It's the fastest allocator I've tested as of yet (galloc falls short, buddy_alloc is close but lacks heap efficiency).
      • +
      • It features a OOM-handling component with dynamic arena resizing.
      • +
      +

      By the time you're seeing this, hopefully v2 should be out or coming soon:

      +
        +
      • The OOM handler system has been made more powerful.
      • +
      • lock_api is used to allow for custom allocator synchronization.
      • +
      • The internals and API has been improved to pass miri's stacked borrows validation.
      • +
      • You can now move the allocator struct around freely.
      • +
      • And more :3
      • +
      +

      I hope you find it useful!

      +

      vinc/moros

      +

      (Section written by @vinc)

      +

      MOROS is a text-based hobby operating system targeting computers with a x86-64 architecture and a BIOS.

      +

      Since last month's release, I focused on adding new syscalls to interact with network sockets from userspace. The DNS and HTTP clients are now using the new UDP and TCP sockets.

      +

      I also added another syscall to poll multiple handles at the same time, to read from the console and a socket, improving the main network tool that can now be used as a simple chat program.

      +

      The VGA driver, the filesystem, and the editor got a few significant improvements as well, to support downloading and reading larger files.

      +

      valibali/cluu

      +

      (Section written by @phil-opp)

      +

      There is a new project featured in our Showcase series:

      + +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2023-08/index.html b/this-month/2023-08/index.html new file mode 100644 index 00000000..844d5afd --- /dev/null +++ b/this-month/2023-08/index.html @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: August 2023 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: August 2023

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + +

      Redox Summer of Code

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + +

      Thanks to @cmoylan and @julic20s for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs:

      + +

      Thanks to @frisoft, @devsnek, and @kuzeyardabulut for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PR this month:

      + +

      Thanks to @tsoutsman, @NathanKolpa, and @xzmeng for their contributions!

      +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @alnyan for their contributions!

      +

      uart_16550

      +

      Maintained by @phil-opp

      +

      The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month:

      + +

      Thanks to @phip1611 for their contributions!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      +

      mkroening/take-static

      +

      (Section written by @mkroening)

      +

      I published a tiny new crate, allowing you to get a mutable reference to static items safely (only once, though):

      +
      use take_static::take_static;
      +
      +take_static! {
      +    static NUMBER: usize = 5;
      +}
      +
      +assert_eq!(NUMBER.take(), Some(&mut 5));
      +assert_eq!(NUMBER.take(), None);
      +
      +

      This allows you to easily use statically allocated memory before dynamic memory allocators may be available. +Compared to cortex_m::singleton, take_static is thread-safe. +Compared to takecell::TakeCell, take_static also supports !Send types.

      +

      hermit-os/kernel

      +

      (Section written by @mkroening)

      + +

      The Hermit unikernel project allows you to bundle your Rust application with our library operating system to create a bootable unikernel image. +Hermit is a single-address-space operating system. +Since there is only one application running in the virtual machine, no isolation between applications or between user space and kernel space is necessary. +This reduces system call overhead immensely, since every system call is just a library call. +For more information, see our The Hermit Operating System showcase post.

      +

      The RustyHermit project has been renamed. +We have renamed our GitHub organization from @hermitcore to @hermit-os and reserved the http://hermit-os.org domain.

      +

      We have also renamed some of our core projects to reduce confusion:

      + +

      We have a new logo! +As hermit crabs occupy empty shells produced by other organisms, the original HermitCore occupied one or several cores on a computer. +Because we migrated to Rust in 2018, our new logo of a hermit crab occupying the Rust logo's bike gear fits quite nicely with the Rust logo as well as Rust's Ferris.

      +

      And as always, please come and try Hermit! :)

      +

      phil-opp/blog_os

      +

      (Section written by @phil-opp)

      +

      We merged the following changes to the Writing an OS in Rust blog this month:

      + +

      Thanks to @Connortsui20 and @xzmeng for these contributions!

      + +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2023-09/index.html b/this-month/2023-09/index.html new file mode 100644 index 00000000..af3e122a --- /dev/null +++ b/this-month/2023-09/index.html @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: September 2023 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: September 2023

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      multiboot2

      +

      Maintained by @phip1611

      +

      The multiboot2 was bumped from 0.18.1 +to 0.19.0. The new release includes the ability to add custom tags to the MBI +builder and a bugfix when parsing Multiboot strings, such as the command line +from a Module tag.

      +

      For more details, please have a look at the changelog.

      +

      Thanks to @A0lson for their contribution +that helped to fix the string parsing bug.

      +

      acpi

      +

      Maintained by @IsaacWoods

      +

      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, a new major version of acpi was published, offering greater control over how the crate allocates +memory. Specifically, the new allocator_api and alloc features allow you to opt-out of allocation altogether +(allowing the crate to be used from slimmer environments like bootloaders), or to provide your own allocator using +the new (and still unstable) core::alloc::Allocator API. +Enabling both features makes the crate behave very similarly to before, so migration should be relatively easy.

      +

      Because the acpi crate can now be used from environements without allocation, the rsdp crate has been +deprecated, and all functionality moved into acpi. The rsdp crate will continue to work, but will not receive +further updates. This should not affect users using rsdp to simply find the address of the RSDP, but is a +breaking change as types that have been moved to acpi will no longer be usable across the crate boundary.

      +

      Some improvements were also made to the aml crate this month, adding functionality and improving our correctness

      +
        +
      • many thanks to our contributors!
      • +
      +

      We merged the following changes this month:

      + +

      Thanks to @alnyan for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PR this month:

      + +

      Thanks to @brandonchinn178 and @mkroening for their contributions!

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + +

      Thanks to @JohnAZoidberg for their contribution!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      +

      mkroening/interrupts

      +

      (Section written by @mkroening)

      +

      I created a dependency-free interrupts crate, allowing you to temporarily disable interrupts on AArch64, 64-bit RISC-V, and x86-64. +Two different paradigms allow you to run code without interrupts and synchronize with interrupt handlers running on the same hardware thread (core):

      +

      Use disable to disable interrupts with a guard:

      +
      // interrupts may or may not be enabled
      +let guard = interrupts::disable();
      +// interrupts are disabled
      +drop(guard);
      +// interrupts are restored to the previous state
      +
      +

      Use without (similar to x86_64::instructions::interrupts::without_interrupts) to run a closure with disabled interrupts:

      +
      // interrupts may or may not be enabled
      +interrupts::without(|| {
      +    // interrupts are disabled
      +});
      +// interrupts are restored to the previous state
      +
      +

      I would appreciate you dropping by and giving it a try. :)

      + +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2023-10/index.html b/this-month/2023-10/index.html new file mode 100644 index 00000000..d734ece4 --- /dev/null +++ b/this-month/2023-10/index.html @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: October 2023 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: October 2023

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      +

      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:

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      spinning_top

      +

      Maintained by @phil-opp

      +

      The spinning_top crate provides a simple spinlock implementation based on the abstractions of the lock_api crate.

      +

      We merged the following changes this month:

      +

      Features

      + +

      Other

      + +

      Thanks to @mkroening for their contributions!

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + + + + + + + + + + +

      Thanks to @JohnAZoidberg and @JarlEvanson for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following changes this month:

      + +

      Thanks to @Wasabi375, @joycebrum, and @mkroening for their contributions!

      +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @alnyan for their contribution!

      +

      ovmf-prebuilt

      +

      Maintained by @phil-opp and @nicholasbishop

      +

      The ovmf-prebuilt project provides pre-built edk2 releases to make it easier to set up OVMF. We merged the following improvement this month:

      + +

      Thanks to @Firenezz for their contribution!

      +

      bootloader

      +

      Maintained by @phil-opp

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs:

      + +

      Thanks to @kennystrawnmusic for their contribution!

      +

      linked-list-allocator

      +

      Maintained by @phil-opp and @jamesmunns

      +

      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:

      + +

      Thanks to @00xc for their contribution!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      +

      RavnOS

      +

      RanvOS, (from norwegian; raven), is a operative system programmed in Rust. Aims to be; minimal, stable, secure and modern ( this maybe you know as; state-of-art ).

      +

      The objective of RavnOS is make an operative system minimalist, self hosted (no external crates, all programmed by me), stable and secure.

      + +

      mkroening/interrupt-mutex

      +

      (Section written by @mkroening)

      +

      Building upon last month's interrupts crate, I created a mutex for sharing data with interrupt handlers or signal handlers.

      +

      RawInterruptMutex wraps any lock_api::RawMutex, be it a parking_lot::RawMutex on Unix or a spinning_top::RawSpinlock on bare metal. +When such an InterruptMutex is locked, interrupts are disabled. +When the InterruptMutex is unlocked again, the previous interrupt state is restored. +This does not completely rule out deadlocks, since you can just enable interrupts manually when you should not. +Still, it is very convenient to just change the mutex type of data that is shared with interrupt handlers instead of disabling and enabling interrupts manually on every access.

      +
      // Make a mutex of your choice into an `InterruptMutex`.
      +type InterruptSpinlock<T> = interrupt_mutex::InterruptMutex<spinning_top::RawSpinlock, T>;
      +
      +static X: InterruptSpinlock<Vec<i32>> = InterruptSpinlock::new(Vec::new());
      +
      +fn interrupt_handler() {
      +    X.lock().push(1);
      +}
      +
      +let v = X.lock();
      +// Raise an interrupt
      +raise_interrupt();
      +assert_eq!(*v, vec![]);
      +drop(v);
      +
      +// The interrupt handler runs
      +
      +let v = X.lock();
      +assert_eq!(*v, vec![1]);
      +drop(v);
      +
      +

      mkroening/interrupt-ref-cell

      +

      (Section written by @mkroening)

      +

      Also building upon last month's interrupts crate, I created a RefCell for sharing data with interrupt handlers or signal handlers on the same thread.

      +

      On the same thread (software thread or hardware thread (core)), a compiler fence is sufficient for synchronization with signal handlers (on Unix) and interrupt handlers (on bare metal). +In these cases, the new InterruptRefCell allows easy sharing without the overhead of mutexes and without the deadlock potential of mutexes. +Similar to InterruptMutex, this is helpful for disabling interrupts on accesses but does not protect you from manually enabling interrupts while holding a reference.

      +
      use interrupt_ref_cell::{InterruptRefCell, LocalKeyExt};
      + 
      +thread_local! {
      +    static X: InterruptRefCell<Vec<i32>> = InterruptRefCell::new(Vec::new());
      +}
      + 
      +fn interrupt_handler() {
      +    X.with_borrow_mut(|v| v.push(1));
      +}
      +
      +X.with_borrow(|v| {
      +    // Raise an interrupt
      +    raise_interrupt();
      +    assert_eq!(*v, vec![]);
      +});
      + 
      +// The interrupt handler runs
      + 
      +X.with_borrow(|v| assert_eq!(*v, vec![1]));
      +
      + +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2023-11/index.html b/this-month/2023-11/index.html new file mode 100644 index 00000000..b2d72433 --- /dev/null +++ b/this-month/2023-11/index.html @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: November 2023 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: November 2023

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      +

      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:

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + +

      Thanks to @RaitoBezarius for their contributions!

      +

      linked-list-allocator

      +

      Maintained by @phil-opp and @jamesmunns

      +

      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:

      + +

      Thanks to @00xc for their contribution!

      +

      pic8259

      +

      Maintained by @phil-opp

      +

      The pic_8259 crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs).

      +

      We merged the following PR this month:

      + +

      Thanks to @zoo868e for their contribution!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      +

      No projects updates were submitted this month.

      + +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2023-12/index.html b/this-month/2023-12/index.html new file mode 100644 index 00000000..fb62323c --- /dev/null +++ b/this-month/2023-12/index.html @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: December 2023 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: December 2023

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      bootloader

      +

      Maintained by @phil-opp

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following PRs:

      + +

      Thanks to @mysteriouslyseeing for their contribution!

      +

      xhci

      +

      Maintained by @toku-sa-n

      +

      The xhci crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month:

      + +

      Thanks to @paulsohn for their contribution!

      +

      ovmf-prebuilt

      +

      Maintained by @phil-opp and @nicholasbishop

      +

      The ovmf-prebuilt project provides pre-built edk2 releases to make it easier to set up OVMF. We merged the following improvement this month:

      + + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + + + + + + + + + + + +

      pci_types

      +

      Maintained by @IsaacWoods

      +

      The pci_types library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:

      + +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @ytakano for their contributions!

      +

      multiboot2

      +

      Maintained by @phip1611

      +

      The multiboot2 crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month:

      + + + +

      Thanks to @elbiazofor their contribution!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following changes this month:

      + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-01/index.html b/this-month/2024-01/index.html new file mode 100644 index 00000000..6c34a8ff --- /dev/null +++ b/this-month/2024-01/index.html @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: January 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: January 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PR this month:

      + +

      We also merged the following changes into the next branch, which will be released as v0.15 soon:

      + +

      bootloader

      +

      Maintained by @phil-opp

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following nightly fixes:

      + +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @Spartan2909 for their contribution!

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + + + +

      Thanks to @gurry for their contribution!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      phip1611/phipsboot

      +

      (Section written by @phip1611)

      +

      I'd like to announce my project PhipsBoot. 🎉 PhipsBoot is a relocatable x86_64 +bootloader for legacy x86_64 boot written in Rust and assembly. It is intended +to be loaded by GRUB via Multiboot2, where it uncovers its main benefit: It is +relocatable in physical memory without having relocation information in the +ELF! It outsources a lot of complexity to GRUB which also better fits into +the ecosystem and makes it easier usable. The README contains more background +about why I have chosen to use GRUB instead of writing my own stage 1 +bootloader.

      +

      This project combines a lot of toolchain and binary knowledge and experience I +collected and gained in recent years about legacy x86_64 boot. The main +contribution IMHO is how the binary is assembled and that the thing boots +with all the properties described in the README, but not the high-level +functionality itself.

      +

      I am especially proud of the well-commented structure of the assembly files. +For example the whole page-table mappings are done IMHO very nicely even tho +it is assembly language. Also, I think it turned out quite cool how I configured +the linker script. I hope this can be a learning resource for others!

      +

      TL;DR: It is a learning ground and a reference for how to solve the relocation +problem with Multiboot2 and GRUB, as GRUB is not able to load DYN ELFs.

      +

      You have multiple options for testing it out:

      +
        +
      • $ cloud-hypervisor --debug-console file=log.txt --kernel ./build/phipsboot.elf64 (using Xen PVH)
      • +
      • $ qemu-system-x86_64 -kernel ./build/phipsboot.elf32 -debugcon stdio (using Multiboot 1)
      • +
      +

      phil-opp/blog_os

      +

      (Section written by @phil-opp)

      +

      We merged the following changes to the Writing an OS in Rust blog this month:

      + +

      Thanks to @acyanbird, @proudmuslim-dev, and @lachsdachs for their contributions!

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-02/index.html b/this-month/2024-02/index.html new file mode 100644 index 00000000..5f57d527 --- /dev/null +++ b/this-month/2024-02/index.html @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: February 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: February 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + +

      Thanks to @bjorn3 for their contribution!

      +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Thanks to @vinc and @tsatke for their contributions!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      No projects updates were submitted this month.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-03/index.html b/this-month/2024-03/index.html new file mode 100644 index 00000000..ae389cf9 --- /dev/null +++ b/this-month/2024-03/index.html @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: March 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: March 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @fslongjin and @rw-vanc for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @uglyoldbob, @GZTimeWalker, and @Sxmourai for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Thanks to @nicholasbishop, and @Freax13 for their contributions!

      +

      ucs2-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      + +

      pic8259

      +

      Maintained by @phil-opp

      +

      The pic_8259 crate provides abstractions for 8259 and 8259A Programmable Interrupt Controllers (PICs).

      +

      We merged the following PR this month:

      + +

      Thanks to @iTitus for their contribution!

      +

      ovmf-prebuilt

      +

      Maintained by @phil-opp and @nicholasbishop

      +

      The ovmf-prebuilt project provides pre-built edk2 releases to make it easier to set up OVMF. We merged the following improvement this month:

      + +

      volatile

      +

      Maintained by @phil-opp

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @nspin and @kadiwa4 for their contributions!

      +

      linked-list-allocator

      +

      Maintained by @phil-opp and @jamesmunns

      +

      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:

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      No projects updates were submitted this month.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-04/index.html b/this-month/2024-04/index.html new file mode 100644 index 00000000..b7c778a5 --- /dev/null +++ b/this-month/2024-04/index.html @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: April 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: April 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      volatile

      +

      Maintained by @phil-opp

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @mkroening for their contributions!

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. +Recently, we deprecated the [uefi-services] crate and removed all usages from +the uefi repository. A new drop-in +replacement exists in uefi::helpers.

      +

      The test of time showed us that having a single crate with multiple cargo +features is a better and more productive way forward with less maintenance +burden - for users/consumers as well as maintainers.

      +

      Please find more information in:

      + +

      We merged the following PRs this month:

      + + + + + + + + + + + + + + + + + + +

      Thanks to @sky5454 for their contributions!

      +

      ucs2-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      + +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @rw-vanc for their contribution!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @mkroening for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      multiboot2

      +

      Maintained by @phip1611

      +

      The multiboot2 crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month:

      + + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      RatCornu/efs

      +

      efs is a recently published no-std library which provides an OS and architecture independent implementation of some UNIX filesystems in Rust.

      +

      Currently only the ext2 filesystem is directly implemented, but I will soonly work on other filesystems!

      +

      It's still young so it may contain bugs, but it's hugely tested so that it does not happen.

      +

      Some of the features provided :

      +
        +
      • no_std support (enabled by default)
      • +
      • General interface for UNIX files and filesystems
      • +
      • read/write regular files
      • +
      • retrieve, add and remove directory entries directly from a path and a current working directory.
      • +
      +

      I hope you will find this useful! If you have any remark, idea or issue, do not hesitate to submit an issue!

      +

      phip1611/tar-no-std

      +

      tar-no-std supports a relevant +subset of Tar archives to extract multiple files from a single Tar archive in +no_std environments with zero allocations. Recently, v0.3.0 was released +with support for filenames with up to 256 characters (including the directory +path) and various bug fixes. Using fuzzing, a lot of pitfalls and sudden panics +could be removed in this release.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-05/index.html b/this-month/2024-05/index.html new file mode 100644 index 00000000..f4a7d97d --- /dev/null +++ b/this-month/2024-05/index.html @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: May 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: May 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      endian-num (new project!)

      +

      Maintained by @mkroening

      +

      The endian-num crate provides the Be (big-endian) and Le (little-endian) byte-order-aware numeric types.

      + +

      Thanks to @mkroening for creating and maintaining this crate!

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + + + + + + + + + +

      Thanks to @stillinbeta and @andre-braga for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Thanks to @fmckeogh and @Wasabi375 for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @Wasabi375 for their contribution!

      +

      multiboot2

      +

      Maintained by @phip1611

      +

      The multiboot2 crate provides abstraction types for the multiboot information structure (MBI) of multiboot2 bootloaders. We merged the following changes this month:

      + + +

      Thanks to @YtvwlD for their contribution!

      +

      linked-list-allocator

      +

      Maintained by @phil-opp and @jamesmunns

      +

      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:

      + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      mkroening/free-list

      +

      (Section written by @mkroening)

      +

      The free-list crate provides the FreeList type for managing virtual or physical memory. +Opposed to normal memory allocators, FreeList does not use pointers but page ranges. +It operates by keeping a list of free page ranges (hence the name) and allows allocating at user-provided ranges. +Instead of operating directly on the unallocated memory through a linked list, this free list uses statically allocated memory before dynamically allocating more memory to hold its elements.

      +
      use free_list::{FreeList, PageLayout};
      +
      +let mut free_list = FreeList::<16>::new();
      +
      +unsafe {
      +    free_list.deallocate((0x1000..0x5000).try_into().unwrap()).unwrap();
      +}
      +assert_eq!(free_list.free_space(), 0x4000);
      +
      +let layout = PageLayout::from_size(0x4000).unwrap();
      +assert_eq!(free_list.allocate(layout).unwrap(), (0x1000..0x5000).try_into().unwrap());
      +
      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-06/index.html b/this-month/2024-06/index.html new file mode 100644 index 00000000..df615954 --- /dev/null +++ b/this-month/2024-06/index.html @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: June 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: June 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + +

      Thanks to @LightAndLight, @andre-braga, and @JeffLi01 for their contributions!

      + + + + + + + + +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Thanks to @Wasabi375 for their contributions!

      +

      pci_types

      +

      Maintained by @IsaacWoods

      +

      The pci_types library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:

      + +

      Thanks to @IsaacWoods, @bjorn3, and @mkroening for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PR this month:

      + +

      volatile

      +

      Maintained by @phil-opp

      +

      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.

      +

      We merged the following PR this month:

      + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      nicholasbishop/ext4-view-rs

      +

      (Section written by @nicholasbishop)

      +

      I've released a new Rust crate for reading ext4 filesystems. It's easy to use, with an API very similar to std::fs. The crate is no-std compatible, but does require an allocator.

      +

      Note that by design this crate will remain read-only; writing to an ext4 filesystem is not a goal.

      +

      Thanks to @tedbrandston for doing a ton of code review on this project!

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-07/index.html b/this-month/2024-07/index.html new file mode 100644 index 00000000..c4d31d1f --- /dev/null +++ b/this-month/2024-07/index.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: July 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: July 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      +

      virtio-spec-rs (new project!)

      +

      Maintained by @mkroening

      +

      The virtio-spec crate provides definitions from the Virtual I/O Device (VIRTIO) specification. +This project aims to be unopinionated regarding actual VIRTIO drivers that are implemented on top of this crate.

      +

      The origins of this crate are in Hermit. +Due to the need for correct foundational definitions from the Virtio spec that are easily reviewable and independent of the actual driver logic, this project was created from the ground up and without any intended bias towards Hermit.

      +

      Currently, definitions are available for split and packed virtqueues, for Virtio over MMIO and Virtio over PCI, and for the network, socket and file system devices. +Feature requests for additional devices are more than welcome!

      +

      fuse-abi (new project!)

      +

      Maintained by @mkroening

      +

      The fuse-abi crate provides bindings to FUSE devices. +In motivation similar to that of virtio-spec, this project aims to provide correct foundational definitions for the FUSE kernel ABI. +It can even be used together with virtio-spec when creating a driver for the Virtio file system device.

      +

      This crate essentially brings #include <linux/fuse.h> to Rust. +The code is autogenerated using bindgen, ensuring the correctness of definitions.

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      The uefi-rs crate provides safe and performant wrappers for UEFI, the successor to the BIOS. We merged the following PRs this month:

      + + + + + + + + + + + +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @00xc for their contributions!

      +

      uart_16550

      +

      Maintained by @phil-opp

      +

      The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month:

      + +

      Thanks to @mkroening for their contributions!

      +

      endian-num

      +

      Maintained by @mkroening

      +

      The endian-num crate provides the Be (big-endian) and Le (little-endian) byte-order-aware numeric types.

      + +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PR this month:

      + +

      Thanks to @Wasabi375 for their contribution!

      + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      phip1611/bit_ops

      +

      (Section written by @phip1611)

      +

      I've recently created and published bit_ops. +It offers common bit-oriented operations on primitive integer types with a focus on +no_std and const compatibility. Unlike other crates that provide tooling to +create sophisticated high-level types with bitfields, the focus of bit_ops is +on raw primitive integer types.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-08/index.html b/this-month/2024-08/index.html new file mode 100644 index 00000000..26a6931c --- /dev/null +++ b/this-month/2024-08/index.html @@ -0,0 +1,376 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: August 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: August 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      multiboot2

      +

      Maintained by @phip1611

      +

      Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and +the contained information tags. Usable in no_std environments, such as a kernel. +An optional builder feature also allows the construction of the corresponding +structures.

      +

      🎉 We are happy to announce release v0.22 of the multiboot2 crate. This is a +major step forward as all Undefined Behaviour (UB) and a bunch of safety and +memory issues have been removed / fixed. 🎉 Now, all unit tests (and there are +many) pass Miri! This was possible due to massive internal refactorings done +in #226 and #227.

      +

      The quite complex logic to parse all these structures safe and correctly +has been moved to a new multiboot2-common +crate. This way, the multiboot2-header +crate can also leverage the new abstractions. A comprehensive writeup about why +the parsing of Multiboot2 structures and typing them correctly in Rust is much +more complex than one initially might think is written down in +lib.rs of multiboot2-common.

      +

      multiboot2-header also got a new release v0.5 and can now be considered +safe and free of UB when parsing the corresponding structures. The internal +refactorings only slightly leak to the public interfaces of multiboot2 +and multiboot2-header.

      +

      Read more:

      + +
      +Background - Read More +

      The crate grew historically without a centralized design or approach how to work +with memory and pointers. Therefore, many UB way unintentionally created. We +are happy to get lack of the technical debt. Nevertheless, thanks to everyone +who contributed over the years - sorry if we had to rewrite your code in this +one! :)

      +
      +

      uefi

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality. Recently, we released +version v0.31 with some notable changes:

      +
        +
      1. We introduced a completely new API to access boot and runtime services
      2. +
      3. We reorganized the MemoryMap-related types.
      4. +
      5. We reorganized and improved the documentation, and also added documentation +about how the std implementation for UEFI targets compares to uefi and +how both can be used together.
      6. +
      +

      1. New API: Freestanding Functions API Change

      +

      We are planning a massive API change and introduced a new replacement API in +release v0.31. The old API co-exists and will be marked as +#[deprecated] in 0.32. The new API will make it easier to call boot or +runtime services without having to pass &BootServices around all the time.

      +

      The typical use-case of our library users is to write a UEFI bootloader +application that heavily leverages boot services. Then control is handed over to +the next stage, which is typically the kernel of an OS. Boot services are +usually exited either just prior to launching the kernel or by the kernel +itself. In any case, the UEFI application spends almost all of its time with +boot services active.

      +

      Although the old API design ensures via the type system that no boot +services can be called after they have been exited, the test of time has proven +that this adds unjustified complexity without bringing much real value add.

      +

      Instead, with the new API, which we provide additionally at this point, +one can use freestanding functions which are behind the new modules:

      +
        +
      • uefi::system: is a new module that provides freestanding functions for +accessing fields of the global system table.
      • +
      • uefi::boot: +is a new module that provides freestanding functions for boot services using +the global system table.
      • +
      • uefi::runtime: is a new module that provides freestanding functions for +runtime services using the global system table.
      • +
      +

      The freestanding functions itself are close to the originals ones but without +&BootServices or &RuntimeServices parameters, as you can see for example +here.

      +

      The new API design solves API inconsistencies and restrictions already existing +so far, and makes the overall handling a lot easier. This comes with the costs +that functions may panic, if the boot services were exited but one tries to use +them. However, the massive API simplification justifies this.

      +

      Find more and follow the progress and discussions on:

      + +

      2. Memory Map Refactoring

      +

      TL;DR: What used to return MemoryMap<'buf> in the API, now returns +MemoryMapOwned. Additionally, you can parse a chunk of memory using +MemoryMapRef or MemoryMapRefMut.

      +

      We put significant effort into refactoring our abstractions for the UEFI memory +map. These started in release v0.29 and were finalized in release v0.31. +Instead of one MemoryMap<'buf> type, we now have the traits MemoryMap and +MemoryMapMut along with the implementations MemoryMapRef, MemoryMapRefMut, +and MemoryMapOwned. It is recommended to work with the specific +implementations, as the main purpose for the traits is only to enforce a +consistent API for these three implementations. This gives users the +flexibility to cover all possible use cases one can have with an UEFI memory +map. Read more:

      + +

      In any case, obtaining the memory map from UEFI is hidden behind the +public API of the crate, but we made it very easy to read/parse it in all +possible scenarios!

      +

      3. Documentation Reorganization

      +

      We put notable work into our README and lib.rs files to improve the +structure of our documentation. The main value-add and improvement is that we +clearly, directly, and precisely talk about:

      +
        +
      • What is uefi?
      • +
      • Which problems does it solve?
      • +
      • How can it be used?
      • +
      • How does it compare to the ecosystem, such as std for Rust targets?
      • +
      +

      To see an example how uefi and std can be used together, please head to +our repository.

      +

      Other

      +

      There were also a ton of other interesting fixes, changes, and additions! +Check out our Changelog.

      +

      We merged the following PRs this month:

      +
      Click to expand + + + + + + + + + + + +
      +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Thanks to @spencer3035 for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PR this month:

      + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      No projects updates were submitted this month.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-09/index.html b/this-month/2024-09/index.html new file mode 100644 index 00000000..5517b911 --- /dev/null +++ b/this-month/2024-09/index.html @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: September 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: September 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      multiboot2

      +

      Maintained by @phip1611

      +

      Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and +the contained information tags. Usable in no_std environments, such as a kernel. +An optional builder feature also allows the construction of the corresponding +structures.

      +

      Last month, we talked about the major milestone of the v0.22 +release of the multiboot2 crate, where all Undefined Behaviour (UB) and a +bunch of safety and memory issues have been removed / fixed. After a short +grace-period of one month, we now yanked all prior releases. As all of them +contain UB, sensitive low-level software can break in subtle ways.

      +

      We hope that all users can have a smooth migration to v0.22 or above +(with Rust 1.70 from June 2023 as MSRV). If there are problems, we +are happy to temporarily unyank certain versions or create a v0.22.x +with a lower MSRV. We can discuss this +here.

      +

      Further, we released v0.23 which contains dependency bumps and missing +tags. Specifically:

      +
        +
      • ApmTag
      • +
      • BootdevTag
      • +
      • NetworkTag
      • +
      +

      Please find more in the changelog.

      +

      We merged the following PRs this month:

      + + +

      Thanks to @filiplajszczak for their contributions!

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality.

      +

      We merged the following PRs this month:

      + + + + + + + + + + + + + + + +

      xhci

      +

      Maintained by @toku-sa-n

      +

      The xhci crate provides types of xHCI structures, such as Registers and TRBs. We merged the following PRs this month:

      + +

      Thanks to @dbydd for their contributions!

      +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @jokemanfire, and @Hsy-Intel for their contributions!

      +

      pci_types

      +

      Maintained by @IsaacWoods

      +

      The pci_types library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:

      + +

      Thanks to @bjorn3 for their contributions!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      No updates were proposed for this section this month.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-10/index.html b/this-month/2024-10/index.html new file mode 100644 index 00000000..c9293b1d --- /dev/null +++ b/this-month/2024-10/index.html @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: October 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: October 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality.

      +

      We merged the following PRs this month:

      + + + + + + + + + + + + + +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      pci_types

      +

      Maintained by @IsaacWoods

      +

      The pci_types library provides types for accessing and configuring PCI devices from Rust operating systems. We merged the following change this month:

      + +

      Thanks to @ZR233 for their contributions!

      +

      ovmf-prebuilt

      +

      Maintained by @nicholasbishop and @phil-opp

      +

      The ovmf-prebuilt project provides pre-built edk2 releases to make it easier to set up OVMF. We merged the following improvement this month:

      + + + + + + + + +

      multiboot2

      +

      Maintained by @phip1611

      +

      Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and +the contained information tags. Usable in no_std environments, such as a kernel. +An optional builder feature also allows the construction of the corresponding +structures.

      +

      We merged the following PRs this month:

      + + + +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @Hsy-Intel for their contributions!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      No updates were proposed for this section this month.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-11/index.html b/this-month/2024-11/index.html new file mode 100644 index 00000000..181d224f --- /dev/null +++ b/this-month/2024-11/index.html @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: November 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: November 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @mrjbom for their contribution!

      +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @pjhades, @00xc, and @Hsy-Intel for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Thanks to @Ollrogge, @ChocolateLoverRaj, and @Makonede for their contributions!

      +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality.

      +

      We merged the following PRs this month:

      + + + + + + + + + +

      Thanks to @diekmann for their contribution!

      +

      ovmf-prebuilt

      +

      Maintained by @nicholasbishop and @phil-opp

      +

      The ovmf-prebuilt project provides pre-built edk2 releases to make it easier to set up OVMF. We merged the following improvement this month:

      + + + + + + + + + +

      uart_16550

      +

      Maintained by @phil-opp

      +

      The uart_16550 crate provides basic support for serial port I/O for 16550-compatible UARTs. We merged the following change this month:

      + +

      Thanks to @kouchekiniad for their contribution!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + + +

      No projects were proposed for this section this month.

      +
      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2024-12/index.html b/this-month/2024-12/index.html new file mode 100644 index 00000000..02916e13 --- /dev/null +++ b/this-month/2024-12/index.html @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: December 2024 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: December 2024

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + +
        +
      • This Month in Redox OS - December 2024
      • +
      • Video: Intro to Embassy : embedded development with async Rust
      • +
      • 2025: The Year of COSMIC — Alpha 5 Released!
      • +
      • Funding Opportunities - with Redox OS or on your own +
          +
        • The NGI Zero Commons Fund and NGI Zero Fediversity Fund each have a call for proposals with a Feb. 1 deadline. +If the proposal is successful, it would be to start roughly in June or July (based on our experience) and run for up to 12 months, +with an amount up to 50,000 EUR. +There must be a "European component", so a EU-based developer would be an ideal fit, +or perhaps a project where the maintainer is EU-based. Here are the links:
        • +
        • NGI Zero Commons Fund
        • +
        • NGI Zero Fediversity Fund
        • +
        • Redox is looking for a part-time or short-term developer to help with implementing device drivers, ACPI support, and similar, +who would like to join our proposal. +You must be knowledgeable in Rust and drivers, and have good reputation in the open source community. +We have an existing relationship with NLnet, so we can craft the proposal, based on your skillset and our priorities. +Please join us on Matrix and let us know you are interested.
        • +
        • https://matrix.to/#/#redox-join:matrix.org
        • +
        +
      • +
      +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality.

      +

      We merged the following PRs this month:

      + + + + + + + + +

      Thanks to @crawfxrd and @JarlEvanson for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @mkroening and @adavis628 for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Thanks to @ChocolateLoverRaj for their contributions!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      roeeshoshani/genesis

      +

      (Section written by @roeeshoshani)

      +

      genesis is a bare metal firmware implementation for mips. it implements everything from the bottom up, from +initializing the cpu caches, to configuring pci devices and the interrupt controller.

      +

      i noticed that every kernel implementation is always for x86, so i decided to implement it for something a +little more esoteric - mips.

      +

      the project is currently in very early stages but the basics are there.

      +

      it is my hobby project for me to learn about embedded programming.

      +

      feel free to follow along the development of it :).

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2025-01/index.html b/this-month/2025-01/index.html new file mode 100644 index 00000000..834f8f49 --- /dev/null +++ b/this-month/2025-01/index.html @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: January 2025 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: January 2025

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality.

      +

      We merged the following PRs this month:

      + + + + + + +

      Thanks to @crawfxrd and @hannahfluch for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @hannahfluch and @adavis628 for their contributions!

      +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @IsaacWoods, @mrjbom, and @00xc for their contributions!

      +

      multiboot2

      +

      Maintained by @phip1611

      +

      Convenient and safe parsing of Multiboot2 Boot Information (MBI) structures and +the contained information tags. Usable in no_std environments, such as a kernel. +An optional builder feature also allows the construction of the corresponding +structures.

      +

      We merged the following PRs this month:

      + + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      roeeshoshani/genesis

      +

      (Section written by @roeeshoshani)

      +

      genesis is a bare metal firmware implementation for mips. it implements everything from the bottom up, from +initializing the cpu caches, to configuring pci devices and the interrupt controller.

      +

      this month, the core async executor was implemented.

      +

      this means that we can implement blocking operations (for example reading a byte from the UART) as rust futures, and we then +.await them.

      +

      this makes our lives much easier when writing code that needs to block until some I/O events happen. instead of using callbacks, +and having to pass our state all over the place, we can just .await the blocking future, and write our code using async functions, +which is much more ergonomic.

      +
      example
      +

      currently, there is only one blocking operation implemented, the operation of reading a byte from the UART.

      +

      this allows code like the following to be written:

      +
      loop {
      +    let byte = uart_read_byte().await;
      +    println!("received uart byte: {}", byte);
      +}
      +
      +

      which is a huge improvement over the previous implementation of putting the code inside the UART interrupt handler.

      +
      how does it work?
      +

      the way this works is that the core kernel's main loop looks roughly like the following:

      +
      loop {
      +    poll_tasks();
      +    wait_for_interrupt();
      +}
      +
      +

      then, the interrupt handler is responsible for waking up the relevant tasks.

      +

      futures that need interrupt handlers to wake them up should somehow register themselves, and the interrupt hanlers will then +wake the registered tasks.

      +

      then, in the next iteration, the tasks that were woken up will be polled again, which completes the loop.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2025-02/index.html b/this-month/2025-02/index.html new file mode 100644 index 00000000..909eb562 --- /dev/null +++ b/this-month/2025-02/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: February 2025 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: February 2025

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality.

      +

      We merged the following PRs this month:

      + + + + +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Thanks to @Stazer, @Wasabi375, and @ChocolateLoverRaj for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @farnz for their contribution!

      +

      acpi

      +

      Maintained by @IsaacWoods

      +

      The acpi repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS. We merged the following changes this month:

      + +

      Thanks to @jellllly420 for their contribution!

      +

      ovmf-prebuilt

      +

      Maintained by @nicholasbishop and @phil-opp

      +

      The ovmf-prebuilt project provides pre-built edk2 releases to make it easier to set up OVMF. We merged the following improvement this month:

      + + + + + + + +

      Thanks to @mkroening for their contributions!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      No projects updates were submitted this month.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2025-03/index.html b/this-month/2025-03/index.html new file mode 100644 index 00000000..a5aaa905 --- /dev/null +++ b/this-month/2025-03/index.html @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: March 2025 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: March 2025

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality.

      +

      We merged the following PRs this month:

      + + + + + + +

      Thanks to @seijikun, @ifd3f, @ptf2, and @quic-bjorande for their contributions!

      +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      phil-opp/blog_os

      +

      (Section written by @phil-opp)

      +

      We merged the following changes to the Writing an OS in Rust blog this month:

      + +

      Thanks to @dobleuber and @JINHUILYU for their contributions!

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2025-04/index.html b/this-month/2025-04/index.html new file mode 100644 index 00000000..3d423983 --- /dev/null +++ b/this-month/2025-04/index.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: April 2025 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: April 2025

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality.

      +

      We merged the following PRs this month:

      + + + + + + + +

      Thanks to @seijikun, @andersson, @kraxel, and @JarlEvanson for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      bootloader

      +

      Maintained by @phil-opp and @Freax13

      +

      The bootloader crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we merged the following improvements:

      + +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      phil-opp/blog_os

      +

      (Section written by @phil-opp)

      +

      We merged the following changes to the Writing an OS in Rust blog this month:

      + +

      Thanks to @tigeryant and @v4zha for their contributions!

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/this-month/2025-05/index.html b/this-month/2025-05/index.html new file mode 100644 index 00000000..8375fc02 --- /dev/null +++ b/this-month/2025-05/index.html @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + This Month in Rust OSDev: May 2025 | Rust OSDev + + + +
      +
      +
      +

      + Rust OSDev + Operating System Development in Rust +

      +
      +
      + +
      +
      +

      This Month in Rust OSDev: May 2025

      + + + +

      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.

      + +

      This series is openly developed on GitHub. 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 or using our comment form at the bottom of this page.

      + +

      Announcements, News, and Blog Posts

      +

      Here we collect news, blog posts, etc. related to OS development in Rust.

      + + +

      Infrastructure and Tooling

      +

      In this section, we collect recent updates to rustc, cargo, and other tooling that are relevant to Rust OS development.

      + + +

      rust-osdev Projects

      +

      In this section, we give an overview of notable changes to the projects hosted under the rust-osdev organization.

      + +

      uefi-rs

      +

      Maintained by @GabrielMajeri, @nicholasbishop, and @phip1611

      +

      uefi makes it easy to develop Rust software that leverages safe, convenient, +and performant abstractions for UEFI functionality.

      +

      We merged the following PRs this month:

      + + + + + + + + + +

      Thanks to @seijikun, @fox0, and @JarlEvanson for their contributions!

      +

      x86_64

      +

      Maintained by @phil-opp, @josephlr, and @Freax13

      +

      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.

      +

      We merged the following PRs this month:

      + +

      Thanks to @zyuiop for their contribution!

      +

      Other Projects

      +

      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 with the updates of your OS project for the next post.

      + +

      No projects updates were submitted this month.

      +

      Join Us?

      +

      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.

      + + +

      Comments

      + + +
      + +
      +
      + Join us on Zulip.
      + © -. All rights reserved. + Contact +
      +
      +
      +
      + + + + + diff --git a/static/uefi-book/index.html b/uefi-book/index.html similarity index 100% rename from static/uefi-book/index.html rename to uefi-book/index.html