Writing your own operating system from scratch can help you understand how an operating system works, and provides valuable knowledge for computing fundamentals and niche applications. An operating system is a program that is capable of executing arbitrary user programs within a hardware context. Most operating systems are written in C.

Motivated by learning about the interplay between software and hardware, I created an operating system using C and assembly. For testing, I primarily used the QEMU emulator, with GDB for debugging. I used GRUB as my bootloader, because the process of writing a bootloader is very complex and can be hardware specific.

My operating system is capable of running usermode programs, and has a filesystem abstraction layer that integrates unix-like device files. It works with x86 and x86-64, and supports ATA disk drives. I plan to eventually run the operating system on real hardware.  

When I was writing the operating system I learned more about how x86 works, how to write larger applications in C, as well as how to create more advanced data structures, and I learned how to write assembly. Writing your own operating system brings a sense of independence and accomplishment and it paves the way for larger projects. In this talk, I will discuss fundamental OS concepts, lessons learned from my experiences, and explain how you might also create an OS from scratch.