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.

Similar ideas have been implemented in the commercial world ; a similar Solaris/Linux bridge exists, lxrun.

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