38.20.1. Design goals

This project was created to help me understand, modify and test low level system components by using system simulators.

System simulators are cool compared to real hardware because they are:

  • free

  • make experiments highly reproducible

  • give full visibility to the system: you can inspect any byte in memory, or the state of any hardware register. The laws of physics sometimes get in the way when doing that for real hardware.

The current components we focus the most on are:

  • Linux kernel and Linux kernel modules

  • full systems emulators, currently qemu and gem5

  • Buildroot. We use and therefore document, a large part of its feature set.

The following components are not covered, but they would also benefit from this setup, and it shouldn’t be hard to add them:

  • C standard libraries

  • compilers. Project idea: add a new instruction to x86, then hack up GCC to actually use it, and make a C program that generates it.

The design goals are to provide setups that are:

  • highly automated: "just works"

  • thoroughly documented: you know what "just works" means

  • can be fully built from source: to give visibility and allow modifications

  • can also use prebuilt binaries as much as possible: in case you are lazy or unable to build from source

We aim to make a documentation that contains a very high runnable example / theory bullshit ratio.

Having at least one example per section is ideal, and it should be the very first thing in the section if possible.