+++
title = "Updates in May 2019"
date = 2019-06-03
+++

This post gives an overview of the recent updates to the _Writing an OS in Rust_ blog and to the used tools. I was quite busy with my master thesis this month, so I didn't have the time to create new content or major new features. However, there were quite a few minor updates.

## x86_64

- [Use cast crate instead of usize_conversions crate](https://github.com/rust-osdev/x86_64/pull/70) (released as version 0.5.5).
- [Make FrameAllocator an unsafe trait](https://github.com/rust-osdev/x86_64/pull/71) (released as version 0.6.0).
- [Change Port::read and PortReadOnly::read to take &mut self](https://github.com/rust-osdev/x86_64/pull/76) (released as version 0.7.0).
- [@npmccallum](https://github.com/npmccallum) started working on [moving the type declarations to a separate crate](https://github.com/rust-osdev/x86_64/issues/72) to make them usable for more projects. We created the experimental [x86_64_types](https://github.com/rust-osdev/x86_64_types/) crate for this.

## Cargo-Xbuild

- [Make backtraces optional](https://github.com/rust-osdev/cargo-xbuild/commit/bd73f5a1b975f1938abd5b4c17a048d2018741b7) to remove the transitive dependency on the `cc` crate, which has additional [compile-time requirements](https://github.com/alexcrichton/cc-rs#compile-time-requirements) (e.g. a working `gcc` installation). These requirements caused [problems for some people](https://github.com/phil-opp/blog_os/issues/612), so we decided to disable backtraces by default. Released as version 0.5.9.
- [Error when the sysroot path contains spaces](https://github.com/rust-osdev/cargo-xbuild/pull/32): This pull request adds a special error message that points to [rust-lang/cargo#6139](https://github.com/rust-lang/cargo/issues/6139) when a sysroot path contains spaces. This should avoid the regular confusion, e.g. [here](https://github.com/phil-opp/blog_os/issues/464#issuecomment-427793367), [here](https://github.com/phil-opp/blog_os/issues/403#issuecomment-483046786), or [here](https://github.com/phil-opp/blog_os/issues/403#issuecomment-487313363).
- [Add a `XBUILD_SYSROOT_PATH` environment variable to override sysroot path](https://github.com/rust-osdev/cargo-xbuild/pull/33): This feature is useful when the default sysroot path contains a space. Released as version 0.5.10.
- [Fix the new `XBUILD_SYSROOT_PATH` environment variable](https://github.com/rust-osdev/cargo-xbuild/pull/34). Released as version 0.5.11.
- [Update Azure Pipelines CI script](https://github.com/rust-osdev/bootimage/pull/40)
  - Build all branches instead of just `master` and the [bors](https://bors.tech/) `staging` branch.
  - Rustup is now included in the official Windows image of Azure Pipelines, so we don't need to install it again.

## Bootloader

- [@rybot666](https://github.com/rybot666) started working on [porting the 16-bit assembly of the bootloader to Rust](https://github.com/rust-osdev/bootloader/issues/24).

## Bootimage

- [@toothbrush7777777](https://github.com/toothbrush7777777) landed a pull request to [pad the boot image to a hard disk block size](https://github.com/rust-osdev/bootimage/pull/39). This is required for booting the image in VirtualBox. Released as version 0.7.4.
- [Set `XBUILD_SYSROOT_PATH` when building bootloader](https://github.com/rust-osdev/bootimage/pull/41). Released as version 0.7.5.

## Blog OS

- [Update to version 0.6.0 of x86_64](https://github.com/phil-opp/blog_os/pull/600), which made the `FrameAllocator` trait unsafe to implement.
- [Use `-serial stdio` instead of `-serial mon:stdio`](https://github.com/phil-opp/blog_os/pull/604) as QEMU arguments when testing.
- [Update x86_64 to version 0.7.0](https://github.com/phil-opp/blog_os/pull/606), which changed the `Port::read` method to take `&mut self` instead of `&self`.
- [@josephlr](https://github.com/josephlr) [replaced some leftover tabs with spaces](https://github.com/phil-opp/blog_os/pull/609).
- [Rewrite `CompareMessage` struct to check the whole string](https://github.com/phil-opp/blog_os/pull/611).