Simix (2010)

Simix is Minix compatibility layer for Linux. It makes it possible to run Minix userspace binaries within Linux. Minix is a Unix microkernel OS used for education, high reliability or embedded/low power applications.

POSIX system calls are translated from the Minix binary interface to Linux’s. The system calls are intercepted with ptrace() running in a separate supervisory process.


Motivation : I read Andy Tanenbaum’s Operating Systems book, probably one of the few CS books I’ve ever read in full. And was looking for a project to learn and build larger pieces of software.

I think the idea for being able to divert system calls to simulate one POSIX system on top of another was natural after reading the book. What remained was for me a technical challenge at the time, as my work was more concerned with bug fixing (relatively small, self contained pieces). I was looking for something of another nature for my evenings/weekends project.

The resulting software works pretty much as I envisaged. However, getting features such as networking to work proved to be an excessive challenge, at least within the (time) scope of this exercise. If I recall correctly, it is because the networking APIs in Minix and Linux are just too different, and these syscall won’t translate easily at all.

I subsequently discovered that similar ideas had been implemented in the commercial world ; a similar Solaris/Linux bridge exists, lxrun.

And, a few years later, came a huge wave of hype around the idea of virtualization, with the arrival of Docker.