Remix.run Logo
burnt-resistor 20 hours ago

Sometimes ultra-minimal is really too simple, and it lacks the userland and kernel bits that can be tweaked and built upon for course assignments that resemble things in the rest of the POSIX world.

MINIX 2.0 is mostly published in the text of Operating Systems: Design and Implementation (1997) by Tanenbaum. It's a superior OS for teaching UNIX philosophy and OS concepts rather than starting with a contrived OS that has no relevance to anything. It runs on vintage x86 machines (QEMU/etc.) no problem. About the first hack I added to it was upping the keyboard repeat rate to maximum and delay to minimum.

Some schools have drifted away by using more complicated OSes like FreeBSD as their generic UNIX and OS teaching platform, but this throws out the simplicity of MINIX <3.0. The MINIX kernel and basic userland fit in very little code, it can almost all fit in your head, there's a book that goes into detail about most of the important concepts, and it can be rebuilt on modern machines in seconds.

mrsvanwinkle 11 hours ago | parent [-]

plus 1 for Minix. that's how Linus learned OS, from Tanenbaum, and how their public monolithic vs microkernel rift began. iirc xv6 while monolithic also allows for a microkernel implementation (maybe not the ideal way to learn about microkernels) and also has a POSIX layer which fits your "resembles the POSIX world" req. unsure if one still requires learning compiling for strong type checking for IPC with microkernels (if learning for a diy build)

burnt-resistor 2 hours ago | parent [-]

Yeah, it was neat. Like "add a new process scheduling algorithm" as a class assignment. Good luck doing that in a complex, real OS or figuring it out in a contrived one that won't have relevancy to real OSes. At least MINIX is nominally UNIX/POSIX/C more or less and is somewhat related to ye olde UNIX design, internals, and software dev concepts, algorithms, and philosophy such that classic UNIX books are often helpful.

When seL4 came around, it helped me rethink microkernel architecture and limitations, especially IPC, security, and correctness. What is a mostly unsolved problem is coordinating a transaction and possible rollback of actions that touch multiple areas of responsibility without becoming a monolithic hybrid.