+++
title = "Updates in February 2020"
date = 2020-03-02
+++

This post gives an overview of the recent updates to the _Writing an OS in Rust_ blog and the corresponding libraries and tools.

## `blog_os`

The repository of the _Writing an OS in Rust_ blog received the following updates:

- [Mention potential bump allocator extensions](https://github.com/phil-opp/blog_os/pull/722)
- [Don't panic on overflow in allocator; return null pointer instead](https://github.com/phil-opp/blog_os/pull/738)
    - [Update Allocator Designs post to signal OOM instead of panicking on overflow](https://github.com/phil-opp/blog_os/pull/739)
- [Update to Zola 0.10](https://github.com/phil-opp/blog_os/pull/747)
- [Experimental Support for Community Translations](https://github.com/phil-opp/blog_os/pull/692)
    - [Add translations from rustcc/writing-an-os-in-rust](https://github.com/phil-opp/blog_os/pull/694)
    - [Some fixes to generated translations](https://github.com/phil-opp/blog_os/pull/748)
    - [Add metadata to translations and list translators](https://github.com/phil-opp/blog_os/pull/749)
    - [Add a language selector for browser-supported languages](https://github.com/phil-opp/blog_os/pull/752)
- [Use zola check to check for dead links; fix all dead links found](https://github.com/phil-opp/blog_os/pull/751)
- [Convert all external links to https (if supported)](https://github.com/phil-opp/blog_os/commit/0619f3a9e766c575ba1a4f2c6825049c177f8c70)
- [Mention in "Paging Introduction" that a CPU with 5-level paging is available now](https://github.com/phil-opp/blog_os/pull/732)
- [Double Faults: A missing handler leads to a #GP exception (not a #NP)](https://github.com/phil-opp/blog_os/commit/b532c052add9d3eac18663f1836bc9eee11007af)
- [Updated pc-keyboard to `0.5.0`](https://github.com/phil-opp/blog_os/pull/756) by [@RKennedy9064](https://github.com/RKennedy9064)

## `x86_64`

The `x86_64` crate provides support for CPU-specific instructions, registers, and data structures of the `x86_64` architecture. There were lots of great contributions this month:

- [Add User Mode registers](https://github.com/rust-osdev/x86_64/pull/119) by [@vinaychandra](https://github.com/vinaychandra) <span class="gray">(released together with [#118](https://github.com/rust-osdev/x86_64/pull/118) as v0.9.0)</span>
- [Improve PageTableIndex and PageOffset](https://github.com/rust-osdev/x86_64/pull/122) by [@m-ou-se](https://github.com/m-ou-se) <span class="gray">(released as v0.9.1)</span>
- [Remove the `cast` dependency](https://github.com/rust-osdev/x86_64/pull/124) by [@m-ou-se](https://github.com/m-ou-se) <span class="gray">(released as v0.9.2)</span>
- [Fix GitHub actions to run latest available rustfmt](https://github.com/rust-osdev/x86_64/pull/126) by [@m-ou-se](https://github.com/m-ou-se)
- [Enable usage with non-nightly rust](https://github.com/rust-osdev/x86_64/pull/127) by [@haraldh](https://github.com/haraldh) <span class="gray">(released as v0.9.3)</span>
    - [asm: add target_env = "musl" to pickup the underscore asm names](https://github.com/rust-osdev/x86_64/pull/128) by [@haraldh](https://github.com/haraldh) <span class="gray">(released as v0.9.4)</span>
- [Add `#[inline]` attribute to small functions](https://github.com/rust-osdev/x86_64/pull/129) by [@AntoineSebert](https://github.com/AntoineSebert) <span class="gray">(released as v0.9.5)</span>
- [Fix clippy warnings](https://github.com/rust-osdev/x86_64/pull/130) by [@AntoineSebert](https://github.com/AntoineSebert)
    - [Resolve remaining clippy warnings and add clippy job to CI](https://github.com/rust-osdev/x86_64/pull/132)

## `bootloader`

The bootloader crate received two small bugfixes and one new feature this month:

- [Objcopy replaces `.` chars with `_` chars](https://github.com/rust-osdev/bootloader/pull/94) <span class="gray">(released as v0.8.6)</span>
- [Fix docs.rs build by specifying an explicit target](https://github.com/rust-osdev/bootloader/commit/af4f1016aa19fec3271226f8bfc2145521cf0c98) <span class="gray">(released as v0.8.7)</span>
- [Add basic support for ELF thread local storage segments](https://github.com/rust-osdev/bootloader/pull/96) <span class="gray">(released as v0.8.8)</span>

## `bootimage`

There were no updates to the `bootimage` tool this month.

## `cargo-xbuild`

The `cargo-xbuild` crate provides support for cross-compiling `libcore` and `liballoc`. It received the following contributions this month:

- [Added new option to the configuration table](https://github.com/rust-osdev/cargo-xbuild/pull/56) by [@parraman](https://github.com/rust-osdev/cargo-xbuild/pull/56) <span class="gray">(released an v0.5.22)</span>
- [Pick up xbuild config from workspace manifest](https://github.com/rust-osdev/cargo-xbuild/pull/57) by [@ascjones](https://github.com/ascjones) <span class="gray">(released as v0.5.23)</span>
- [Make `fn build` and `Args` public to enable use as lib](https://github.com/rust-osdev/cargo-xbuild/pull/59) by [@ascjones](https://github.com/ascjones) <span class="gray">(released as v0.5.24)</span>
- [Fix: Not all projects have a root package](https://github.com/rust-osdev/cargo-xbuild/pull/61) <span class="gray">(released as v0.5.25)</span>
- [Improvements to args and config for lib usage](https://github.com/rust-osdev/cargo-xbuild/pull/62) by [@ascjones](https://github.com/ascjones) <span class="gray">(released as v0.5.26)</span>
- [Add `cargo xfix` command](https://github.com/rust-osdev/cargo-xbuild/pull/64) by [@tjhu](https://github.com/tjhu) <span class="gray">(released as v0.5.27)</span>
- [Update dependencies](https://github.com/rust-osdev/cargo-xbuild/pull/65) by [@parasyte](https://github.com/parasyte) <span class="gray">(released as v0.5.28)</span>

## `uart_16550`

The `uart_16550` crate, which provides basic support for uart_16550 serial output, received the following updates:

- [Switch CI to GitHub Actions](https://github.com/rust-osdev/uart_16550/pull/6)
- [Cargo.toml: update x86_64 dependency](https://github.com/rust-osdev/uart_16550/pull/5) by [@haraldh](https://github.com/haraldh) <span class="gray">(released as v0.2.3)</span>
- [Enable usage with non-nightly rust](https://github.com/rust-osdev/uart_16550/pull/7) by [@haraldh](https://github.com/haraldh) <span class="gray">(released as v0.2.4)</span>

## `multiboot2-elf64`

The `multiboot2-elf64` crate provides abstractions for reading the boot information of the multiboot 2 standard, which is implemented by bootloaders like GRUB. There were two updates to the crate in February:

- [Add MemoryAreaType, to allow users to access memory area types in a type-safe way](https://github.com/rust-osdev/multiboot2-elf64/pull/61) by [@CWood1](https://github.com/CWood1)
- [Add some basic documentation](https://github.com/rust-osdev/multiboot2-elf64/pull/62) by [@mental32](https://github.com/rust-osdev/multiboot2-elf64/pull/62) <span class="gray">(released as v0.8.2)</span>
