# What is Ferrum VM?

Ferrum VM is a KVM based Virtual Machine Manager that I have built in Rust and C. The main thing that separates it from other hobby VMM's is that I have built custom UEFI Firmware in C for the virtual machine to use.

Now, I admit that a virtual machine is not the most common project. The reason that i was drawn to it was the chance to write my own firmware for a computer. When normally writing firmware, you need developer assess to hardware and lots of documentation about how the hardware functions. When working on a virtual machine, this is not an issue because you control all of the hardware, making firmware development much more manageable and achievable for a single person.

Not only this, but firmware development is often made easier because of protocols like virtio which are much simpler than the protocols that are often implemented by real hardware devices. In addition to firmware development, Building a virtual machine will give you direct experience with aspects of computer science that are not normally covered.

An example of this is learning about how PCI builds on MMIO and makes it faster. While a lot of people would know what PCI is and what its used for, building a virtual machine means that you get to build it yourself from scratch and implement the protocols that are being used.

Throughout this blog I hope to explain how I have built a virtual machine and thus make it more accessible for other people who also want to build a similar project!
