design principles ----------------- Use strict ANSI C99. This means no inline-assembly. This means we have to write assembly routines if we need things not available in C (lgdt, in, out, etc.). Make sure it compiles with every ANSI C99 compiler (gcc, clang, tcc, ...). Use only very simple makefile rules. Make sure we could also just use a simple shell script to compile the kernel. Avoid implementation and using of unsafe C functions. Provide safe counterparts wherever possible. There are of course exceptions like scrolling the VGA buffer with a memmove.