Introduction to MINIX 3 in the 2012 Google Summer of Code

Every summer, Google sponsors the Summer of Code program in which students are paid to work on open source projects. MINIX 3 participated in 2008, 2009, 2010, and 2011. We had some great students and are hoping for great students again this year if we are accepted by Google. If you are interested in working on our project, read on.

MINIX 3 is a small, modular, multiserver operating system aimed at being highly reliable, fault tolerant and self healing. We are particularly interested in embedded systems. Only about 9000 lines of code run in kernel mode. The rest runs as a collection of user processes, e.g., for each device driver and server. If a driver fails, it is automatically replaced by a fresh copy, without user intervention (or even knowledge) and without affecting running programs. Few other systems can survive fatal errors in some critical system components without even missing a beat. The goal of reliable systems will have been achieved when no computer has a RESET button and no user has ever experienced a crash and does not know anyone personally who has ever experienced a crash.

MINIX 3 supports the POSIX interface and has a userland orientation towards NetBSD, including the NetBSD headers, libraries, pkgsrc, etc. The default compiler is clang/LLVM, although gcc is also available. Hundreds of UNIX programs are available, including X11, perl, python, mplayer, and many more. Nevertheless there is much more to do.

We would like to continue the development to demonstrate that building a system out of small replaceable components leads to a highly robust design that is far easier to understand and maintain than systems with millions of lines of kernel code. While good performance is important, it is hardly the overriding criteria it once was. If most ordinary users were given a choice between the fastest possible system and one that was 20% slower but never crashed, we believe a large number of users would choose the latter. For many companies (e.g., banks, e-commerce sites), having their systems run 24/7 with no failures ever is a top priority.

Embedded systems are another area where high reliability is important. People do not expect their TV sets, digital cameras, and camcorders to exhibit blue screens, except when images of the sky are being shown.

In short, we are trying to build a modular, reliable (and secure) operating system out of small components that can be replaced on the fly and we would like you to help. Here is a paper describing MINIX 3 and its architecture in more detail. More papers are listed on the Publications page. You might also watch Andrew Tanenbaum's talk at FOSDEM 2010 on MINIX 3.

As an aside, MINIX 3 is not your grandfather's MINIX. It started out as an educational system but has evolved greatly since then into a tight system with a focus on high reliability (and security). As open-source projects go, it is quite popular. We have had over 2.3 million visitors to the Website (which has been up about 5 years). Currently about 12,000 people a month download the CD-ROM image file to install it.

About You

The project ideas below range from straightforward to challenging. All require you to be an experienced C programmer. For some of them it would be helpful if you have already read the MINIX book for example, in a course you took at your university. Given the difficulty of these projects, we expect you to work full time all summer on them. That means not having a job and not taking classes.

Since this is an open-source project, many other people will study the code later. It is therefore essential that you are someone who takes pride in his or her work and wants to produce code that is clean, efficient, elegant, and well documented so that other people will marvel at its beauty. Just hacking it together quickly so it mostly works some of the time doesn't cut it. We want people to admire the code, even to envy your ability to write truly great code.

If you are an experienced C programmer who knows something about operating systems and can write clear, well-documented code check out the ideas below and then our application template. Please answer all these questions in your application. If you don't we will conclude you aren't very good at following simple directions.

Sheep-Goat Separation

Every year we receive many project proposals. To stand out in the crowd, you are going to have to do something more than fill in our template. Here's our handy-dandy sheep-goat separator. Download and install MINIX 3. Then, try to do some useful subtask of your proposed project. If you're applying for the "Porting Application Programs to MINIX 3" project, you should try to port an application to MINIX 3.

Or do something else that shows you have some skills and you have backed your application with some real effort. If doing part of your most-desired project is not feasible, then look for a NetBSD package that we don't currently have and port it to MINIX 3. A list of packages known to work is in the current minix/limited_list.pbulk file in the Minix pkgsrc repository (see this guide to set up the pkgsrc source environment). Try any of the other ones. If you can get it to build and work, make a git commit out of it, put it into a publically accessible git repo and point us to it to take a look at.

We like people who put their keyboards where their mouths are. Students who do that will be considered "sheep" and have a good chance. Students who think this is too much trouble will be considered "goats," and are unlikely to be picked.

You are encouraged to interact with us before applying via the Google Newsgroup. This will help your application and help you pick some small project to do in advance to show us you are serious, as mentioned above.

During the project we want you to interact with our community via the Google Newsgroup. Also, you will get your own page on the Wiki and will be expected to use it as a blog posting your progress, at least weekly, but also when you reach a milestone.

MINIX uses git as its version control system, so you will be expected to do your work in your own Git repository. Familiarity with git branching, merging, and rebasing will be important to be optimally productive.

Ideas

Here are some ideas, but we are open to suggestions for other projects. Accepted students get $500 right off the bat. If you pass the "midterm" you get $2250 from Google. Upon successful completion of the project, you get another $2250 from Google and a rare MINIX 3 T-shirt from us.

MINIX 3 is open source and uses the BSD license. By applying, you agree that we can distribute your code under this license. However, you also retain your right to reuse it as you wish.

  • Fault injection tool. We would like you to implement a new compiler-based fault injection tool which can be used for reliability testing on MINIX 3 . This should improve the existing Software Implemented Fault Injection (SWIFI) tool included in the MINIX distribution, which is based on tracing and can only be used for a limited number of OS components. We would like the new tool to be implemented as an LLVM transformation pass, to inject faults in predetermined program locations at compile- or link-time. Candidates for this project should be familiar with static program instrumentation techniques. Experience with the LLVM compiler framework is recommended. A successful project can lead to a publication in an international conference, which can be very helpful if you want to apply to a graduate school later this year.

  • GCC, binutils, and GDB. Although we use clang/LLVM as our default toolchain, we also support the GNU toolchain. We would like to have newer versions of GCC, binutils, and GDB for MINIX. Your initial goal is to port GCC 4.7.0, binutils 2.22, and GDB 7.4 to MINIX. After that, we would like you to work on upstreaming your MINIX toolchain changes to GNU. Candidates should have some familiarity with toolchains and experience building gcc, binutils, and gdb.

  • lwIP support. MINIX has basic support for the lwIP TCP/IP stack. We would like you to port a newer version of lwIP (1.4.0) and integrate it into our system, so that it's possible to make lwIP our default network stack. We will want both IPv4 and IPv6 support. Candidates for this project should be strong C programmers with a good understanding of TCP/IP and network stacks.

  • Port NetBSD userland utiltities. We have ported many NetBSD userland utilities to MINIX, but we would like to have more as they are more capable than the current MINIX utilities. Your job, if you choose to accept it, is to replace more of the MINIX userland with NetBSD's. Since we already have the NetBSD C library, build infrastructure, and many utilities, you will have a head start. In some cases, you may be required to extend MINIX functionality, so you can make a cleaner port. Candidates for this project should be very familiar with C programming and the UNIX environment. You will find the Porting NetBSD Userland status page useful.

    A high-level goal of this project might be to replace as many as possible of the current utilities in the commands/ directory by NetBSD equivalents.

    Part of this project can also be to update the version of the NetBSD code we are currently based on.

  • Porting Pkgsrc packages. On this project, you would work on porting software to MINIX. Pkgsrc has several thousand packages, and MINIX supports only a fraction of them. It is important to note that some programs are easier to port than others. For example, MINIX does not support kernel threads, shared libraries or mapped files, so applications that require these might be difficult to port. You might take a look at the Wishlist for some candidate packages, but feel free to propose your own.

    A part of this project would be to clean up our pkgsrc repository, by

    • sending package-specific patches upstream to the package maintainers so that future versions won't need minix-specific patches in the pkgsrc database
    • updating the pkgsrc database version that our repository is based on, forward-porting patches as necessary

  • Automated Test Framework. For this project, you will port the kyua and ATF automated testing frameworks from NetBSD. You will port applicable tests from NetBSD, and you will also write new tests to verify the functionality of MINIX system components. Candidates for this project should be comfortable with C and C++ and they should love breaking code.

We are open to suggestions for alternative projects. You might first look at the Wishlist on the MINIX 3 Wiki.

Resources

There are several pages available with helpful information. These include:

Keep in mind that the deadline for applications is April 6 19:00 UTC. No exceptions.

Conclusion

Thanks for your interest. But even if you do not want to participate in the Google Summer of Code, give MINIX 3 a try. And if you want to help on the project outside the framework of the Google Summer of Code, you are most welcome. We have a Google newsgroup: Google newsgroup where your input is welcomed. We also have a MINIX 3 Wiki so users can help document the system.

Thanks for reading so far. We hope you will apply to GSoC to help us. Again, here is our application template.

Andrew S. Tanenbaum ( ast "at" cs "period" vu "period" nl)