Originally Minix, just like Xv6, was designed for educational purposes. As years went by, Minix became more complex and more like a real OS, so that at version 3 being educational was not a goal anymore. So much that Tannebaum officially changed its focus to being fully functional. As a result, its codebase does not help beginners any more. Thankfully we still have Xv6, which remained a simple educational OS.
Xv6 is a re-implementation of the classic Dennis Richie's and Ken Thompson's UNIX V6 for MIT Operating System course. UNIX was originally written in K&R C for the PDP-11. Xv6 is a modernized version of that, written in ANSI C for the Intel x86 processor, keeping the original UNIX philosophy of simplicity.
- Very small codebase. As being educational, it focuses on how an OS should work instead of implementing everything. A single programmer can easily overview it's entire codebase.
- K.I.S.S. Uses clear and simple algorithms only, most sources are no longer than few hundred lines.
- Minimal Assembly. Most of the code is written in ANSI C.
- Uses protected mode. It abstracts the x86 architecture away with minimal lines of code, and it does not rely on BIOS.
- Fairly modern. It supports IOAPIC, LAPIC etc. It does not use obsolete devices such as floppies like other tutorials do.
- Fairly sophisticated. It uses paging for virtual address spaces, and it is a multitasking OS with multiprocessing (SMP) support.
- Fully functional. Unlike most tutorials and bare-bones, Xv6 really implements everything that has to be implemented in a working kernel.
- Easy to understand. Has a great commentary book, that also points out which parts of the kernel should be refactored for a real-life OS and how.
- Unlike Minix, Xv6 is a monolithic kernel, which means OS layers are not separated.
- Source is not separated either, furthermore kernel space code is mixed with user space code. Thankfully there's a list of files grouped by which module they belong. Everything not listed there is user space code.