[logo]     MINIX 3 - Google Summer of Code Ideas 2010 [logo]

Introduction

Every summer, Google sponsors a Summer of Code project in which students are paid to work on open source projects. We applied in 2010 and were accepted. 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. Only about 6000 lines of code run in kernel mode. The rest runs as a collection of user processes, mostly separate processes 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 about 500 of the standard UNIX programs have been ported to it, including X11, gcc, perl, python, ghostview, mplayer, the GNU core utilities, and many more. There is also a a simple GUI (EDE). 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 the FOSDEM 2010 talk 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 1.6 million visitors to the new Website (which has been up about 4 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 going to school.

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 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.

Last year we had 100 applicants for 4 slots. 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 porting the NetBSD libc, for instance, try to port some libc functions to MINIX 3. Or do something else that shows you have some skills and you have backed your application with some real effort. We like people who put their keyboards where their mouth is. 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.

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.

Possible Projects

  • Porting the NetBSD C Library
  • We are starting to work on a kernel threads implementation. For this we will need a reentrant libc, something the current one is not. Additionally, having the NetBSD libc will also simplify the process of porting applications to MINIX, as it includes functionality that our current C library lacks. This project consists of porting the NetBSD libc to MINIX 3. Ideally, you should have some experience using NetBSD and you should be familiar with the MINIX internals. You should also be very familiar with C and assembly. If you choose this project, for your sheep/goat project, porting part of the NetBSD libc would really impress us.

  • Porting a Package Manager
  • Our current package manager, packman, has a number of limitations. In particular, it does not manage dependencies, which is becoming a bigger and bigger problem as out software base grows. We need a proper package manager. The one we prefer is pkgsrc. It seems to do what we want and it is BSD licensed, which makes it compatible with the rest of the MINIX 3 license. So this project consists of porting pkgsrc to MINIX 3. Ideally, you will have some experience with pkgsrc and porting software to MINIX 3. You will also be familiar with shell scripting, writing Makefiles, C development, and the UNIX environment. A description of the sheep/goat project for this idea can be found here.

  • UNIX Domain Sockets
  • Although we have sockets, we don't have UNIX domain sockets. This project is writing the code for them. We will provide you with a general design, but some details are to be solved by yourself. When you want to apply for this project you have to successfully finish this sheep-goat project. It will probably take you a couple of days of hard work to do it.

  • A MINIX 3 Firewall
  • Currently we don't have a firewall. This project is about writing a simple firewall. The first phase would consist of writing a stateless firewall that can be easily configured by people who are scared of computers (for example, port 80 OK, everything else blocked). The next phase might be a more sophisticated firewall that was configurable with tables. Finally, if there is time, the firewall could be extended to deal with connections. Porting a BSD firewall is probably too hard because all the MINIX 3 networking code is in user space and the interface with the network stack would be totally different from systems with the networking in the kernel. If you wish to apply for this project, you should be familiar with firewalls and the TCP/IP protocols. A description of the sheep/goat project for this idea can be found here.

  • Making MINIX 3 Multiboot Compliant
  • Currently, MINIX 3 has its own boot loader, but it is quite old and has some serious limitations. We would like to change the booting structure to use a modern boot loader such as GRUB 2 (without chainloading). To do this project, you should have experience working with booting, for example, writing the boot code for an embedded system. You should also be a very good at writing C and assembly code.
    More information, including requirements and a suggested sheep/goat project are available in the project description. Please check out this document and the newsgroup threads it links to if you want to sign up for this project.

  • Porting or writing device drivers. We need all kinds of device drivers. Almost anything you can think of would be useful. It might be possible to port drivers from other operating systems, but our experience is that it is extremely difficult because each of our drivers runs as a separate user process, outside the kernel. It is usually best to study an existing driver to see how it works, but then write a new one from scratch. We are open to proposals about which driver. You should have some background in this area to do this project.

  • Porting application programs to MINIX 3. We have over 500 application programs, but more are welcome. Porting Linux or FreeBSD software takes some effort because although we have cc and gcc and are POSIX conformant, we don't support all the Linux or FreeBSD system calls and the header tree is organized differently, etc. The only caveat is that we already have all the easy stuff. The things left are bigger and more complicated. Functionally useful programs that are small and lightweight are especially valued, particularly for (mobile) resource-constrained environments, but good desktop programs, frameworks, and libraries are also useful. Note: we don't currently have kernel threads so if you want to port something, make sure it does not require them.

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 9. 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. You might be surprised. For example, it can compile itself, kernel, all servers, drivers, etc.--125 compilations--in about 6 seconds on a modern PC. 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