The original post can be found on my blog: https://hackaway.blog/2021/08/15/5-systems-programming-project-ideas/
Ever wondered how Windows, MacOS, or Linux work under the hood? You could try creating your own Operating System! Be warned, creating your own OS can be a huge undertaking. Most hobby OS developers have been hacking on their projects for years.
Luckily, there are a lot of good tutorials and resources available to you if you wish to create your own OS. Here are some examples:
OSDev: A wiki and forum for hobby OS developers. The amount of information on the wiki is incredibly impressive, and should you find yourself stuck, you can always turn to the forums.
Bare Bones: This is an incredibly popular kernel tutorial in the OSDev community, and is intended for complete beginners.
Writing an OS in Rust: This tutorial is still a work-in-progress, but it is incredibly high quality and a good option if you wish to write your OS in a more modern language like Rust.
If you’re interested in learning more about OS theory, I recommend you read the book Operating Systems: Three Easy Pieces, which you can find online for free here.
Do you miss the days of firing up your Gameboy Advance and playing Pokemon for hours? Creating an emulator could be a fun project for you.
There are many different types of platforms that you could choose to emulate, but there are only a few that are suitable for your first project. If you are a beginner, it is my opinion that you should choose a relatively simple system like the CHIP-8, NES, or Gameboy.
Out of these three options, I recommend the CHIP-8 as it is the simplest system and there is a plethora of good resources and tutorials online. Here are my recommendations:
Building a CHIP-8 Emulator [C++]: This is a fantastic and comprehensive CHIP-8 tutorial with the source code included.
Guide to making a CHIP-8 emulator: If you don’t want your hand held through this project, this blog post walks you through a CHIP-8 implementation without giving you the code!
Cowgod’s Chip-8 Technical Reference: If you want your hand held even less, you can use this amazing technical reference to learn about how the platform works.
If you have questions, or are looking for other resources, or just a little bit of inspiration; there is an entire community of emulator developers over at Reddit on /r/EmuDev.
If you are interested in how technologies such as Docker work under the hood, you could build your own container software.
Doing this type of project will teach you about some of the core concepts that go into container software like kernel namespaces and cgroups.
Here are some good resources:
Containers From Scratch • Liz Rice • GOTO 2018: This is a very popular presentation that walks through how to implement containers in the programming language Go.
Linux containers in 500 lines of code: This is an incredibly in-depth literate program on how to create containers in C.
If you’re interested in data persistence, making your own database software or key-value store could be a cool exercise. If you’re looking to keep this project simple, a key-value store would probably be the easier of the two.
Let’s Build a Simple Database is a fantastic tutorial that walks you through building your own sqlite clone using C. One interesting thing about this tutorial is it presents the code as diffs, rather than chunks of finished code. That way the tutorial takes an iterative approach to writing the code.
Ever wondered how typing in a url like https://hackaway.blog takes you to this site? Implementing your own DNS server could be a fun project for you.
I highly recommend the Building a DNS server in Rust guide by Emil Hernvall on GitHub. This guide will walk you through how to implement the DNS server and recursive resolve.
If you have suggestions for alternative resources for any of the projects listed above, please feel free to leave a comment!