+++
title = "Updates in December 2019"
date = 2020-01-07
+++

Happy New Year!

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:

- Update `x86_64` dependency to version 0.8.1. This included the [dependency update](https://github.com/phil-opp/blog_os/pull/701) itself, an [update of the frame allocation code](https://github.com/phil-opp/blog_os/pull/703), and an [update of the blog](https://github.com/phil-opp/blog_os/pull/704).
- [License the `blog/content` folder under CC BY-NC](https://github.com/phil-opp/blog_os/pull/705)
- [Reword sentence in first post](https://github.com/phil-opp/blog_os/pull/709) by [@pamolloy](https://github.com/pamolloy)

Further, we're still working on adding [Experimental Support for Community Translations](https://github.com/phil-opp/blog_os/pull/692) to the blog, starting with [Simplified Chinese](https://github.com/phil-opp/blog_os/pull/694) and [Traditional Chinese](https://github.com/phil-opp/blog_os/pull/699). Any help is appreciated!

## `bootloader`

There were no updates to the bootloader this month.

I'm currently working on rewriting the 16-bit/32-bit stages in Rust and making the bootloader more modular in the process. This should make it much easier to add support for UEFI and GRUB booting later.

## `bootimage`

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

## `x86_64`

We landed a number of breaking changes this month:

- [Replace `ux` dependency with custom wrapper structs](https://github.com/rust-osdev/x86_64/pull/91)
- [Add new UnusedPhysFrame type and use it in Mapper::map_to](https://github.com/rust-osdev/x86_64/pull/89)
- [Make Mapper trait object safe by adding `Self: Sized` bounds on generic functions](https://github.com/rust-osdev/x86_64/pull/84)
- [Rename divide_by_zero field of IDT to divide_error](https://github.com/rust-osdev/x86_64/pull/108)
- [Introduce new diverging handler functions for exceptions classified as "abort"](https://github.com/rust-osdev/x86_64/pull/109)

These changes were released an version 0.8.0. Unfortunately, there was a missing re-export for the new `UnusedPhysFrame` type. We fixed it in [#110](https://github.com/rust-osdev/x86_64/pull/110) and released the fix as version 0.8.1.

There was one more addition to the `x86_64` crate afterwards:

- [Add support for cr4 control register (with complete documentation)](https://github.com/rust-osdev/x86_64/pull/111) by [@KarimAllah](https://github.com/KarimAllah) (released as version 0.8.2).

There were also a few changes related to continuous integration:

- [Remove bors from this repo](https://github.com/rust-osdev/x86_64/pull/103)
- [Run 'push' builds only for master branch](https://github.com/rust-osdev/x86_64/pull/104)
- [Remove Travis CI and Azure Pipelines scripts](https://github.com/rust-osdev/x86_64/pull/105)
- [Add caching of cargo crates to GitHub Actions CI](https://github.com/rust-osdev/x86_64/pull/100)

## `cargo-xbuild`

The `cargo-xbuild` crate, which cross-compiles the sysroot, received the following updates this month:

- [Add `--quiet` flag that suppresses "waiting for file lock" message](https://github.com/rust-osdev/cargo-xbuild/pull/43) by [@Nils-TUD](https://github.com/Nils-TUD) (published as version 0.5.19)
- [Fix wrong feature name for memcpy=false](https://github.com/rust-osdev/cargo-xbuild/pull/50) (released as version 0.5.20)
