A simple kernel, written predominantly in C, with a small amount of assembler, designed to make kernel programming easier and safer.
To this end, the kernel provides:
- Exception handling - setjmp/longjmp based exceptions provides simpler error management, with a separation of error detection (throw the exception) and error handling (catching the exception).
- Slab persistent allocation - With garbage collection.
- Temporary memory arenas - Require no management to clean.
- Simple pointer based monitor locking - Mutex and read/write semantics.
- Simple abstract data collections - From simple doubly linked list macros for embedding into structures, to hash and tree based map, managing collections of data should be easier and less error prone.
- User level processes - Multiple threads per process, and per-process accounting.
- Containers - User level processes are associated with a container, which provides the user level semantics required (UNIX or other) and also allowing multiple containers per personality (container based virtualization.)
The kernel is written to provide minimal user level services, deferring implementing policy to the container personalities.
The kernel builds with a cross-compiler built under the
tools directory. The file
build/tools.mk file contains the name and location of the compiler, and you can provide your own if you wish, but the build system can download and build what it needs.
The build uses the fantastic
makeincludes tool to generate headers on the fly, so the code contains minimal headers that
makeincludes is not able to handle. Also, a simple single Makefile, with include based subdirectories, makes for a quick build, and simple grouping of like file. Dependencies are automatically generated from the source C files.
To build, in the root of the project, use:
$ make cross $ make includes $ make
This will leave a kernel in
arch/i386/kernel and a simple boot ISO in