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

Introduction

Every summer, Google sponsors a Summer of Code project in which students are paid to work on open source projects. We applied 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 5000 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 10-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 DOCUMENTATION page.

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.3 million visitors to the new Website (which has been up about 3 years). Currently about 12,000 people a month download the CD-ROM image file to install it.

Last Year's Star

We participated in the Google Summer of Code in 2008 and would like to mention one project that stood out: the Software RAID project. The goal of this project was enhance MINIX 3 with support for filter drivers that could be transparently inserted between the file system and block-device driver. In particular, we requested the student to implement a server process that checksummed all data and could mirror data to a backup partition. In this way, it became possible to detect and recover from data corruption due to bit rot on disk or a buggy driver. The student not only implemented the functionality, but also measured the performance of the resulting framework. The project was highly successful and even resulted in a publication that was coauthored by the student and has recently been submitted to an international conference.

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 want to impress us, download and install MINIX 3 and all the application programs on the CD-ROM image you have downloaded and all the software on the Website. Then port or write some program we don't have that you like to MINIX 3 and package it in the packman format and send it here. Or write a relevant article for the MINIX 3 Wiki. Or do something else that shows you have some skills and you have backed your application with some real effort.

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. To do the kernel projects, you must be an experienced kernel hacker. To do the drivers, you need solid programming experience and at least some exposure to kernel hacking. The third group does not require kernel hacking experience.

Accepted students get $500 right off the bat. If you pass the "midterm" you get $2000 from Google and a rare MINIX 3 T-shirt from us. Upon successful completion of the project, you get another $2000 from Google.

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.

Kernel Projects

  • Using Virtual Memory. We have recently implemented virtual memory, but it isn't used for much yet. In this project you could build on it, for example, providing support for the POSIX model of shared memory. This project is not for beginners.

  • Support Floating-Point Hardware.We don't currently support the use of the floating-point hardware. Instead we use software floating point. To support the hardware, we have to save and restore the registers and do some other things. This project is about supporting the floating-point hardware. To do this, you need extensive kernel hacking experience.

Device Driver Projects

  • NDIS wrapper. All open source operating systems have a problem getting drivers written. One approach is to take binary drivers from other operating systems and wrap them to make them usable in the target system. This has been done for drivers for wireless cards for Linux but not for MINIX 3. In this project the student will do the same thing for MINIX 3. This project should not be attempted unless you have extensive experience with Linux, BSD, or Windows drivers.

  • Implement AHCI Commands. MINIX 3 supports IDE disks but not AHCI disks, so when installing MINIX 3 on a new machine you often have to change the BIOS settings to use IDE emulation instead of the native AHCI interface. We would like you to modify the disk driver to use the native AHCI command set instead of the IDE set. Experience with I/O devices and their drivers is needed 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. Our highest priority is a gigabit Ethernet driver (e.g., Intel Pro/1000). You should have some background in this area to do this project.

  • Handle for remote debugger. MINIX 3 is moving into the embedded systems world. This means we need to debug it running on machines with no display and no keyboard. What we need is a small module that can take commands over the serial port from a remote debugger, such as gdb and execute them. Your job is to write this code.

Other Projects

None of the following projects require any kernel hacking experience, but you still need to be a good C programmer.

  • Writing /proc and /dev File Systems. This project consists of two closely related subprojects. First, MINIX 3 does not yet have a /proc file system that provides information about processes. In this project, you will have to implement a new file-system server that populates the /proc directory with per-process information, allowing 'ps' to query it. Other functionality could include, for example, /proc/meminfo for memory usage statistics and /proc/modules for a list of servers and drivers in the system. Second, MINIX 3 currently allocates all device nodes statically on the root device. A better solution would be to use a /dev file system where device drivers can dynamically register their devices. We would like you to implement a new /dev file-system server that provides an interface for the drivers and modify the system to use it.



  • Performance tuning. We have made little effort to measure the performance of the system and tune it. We have some tools though, and porting and using the BSD Pmc tools might also be possible. This project requires you to measure the performance and find bottlenecks and, if possible, fix them. You should start out by finding and porting existing benchmarks used on other systems and writing scripts to run them and collect the results automatically.

  • Porting the BSD Utilities to MINIX 3. We have hundreds of standard utility programs we wrote ourselves and which were contributed by MINIX users. We also have the GNU utilities. However, some people prefer the BSD versions of the utilities, which we don't have. Your job is to port them.

  • Stress Testing MINIX 3. People have written various stress test suites for other systems that push the system very hard and try to make it collapse. Your job here is to port some of them to MINIX 3 and write scripts to automate the stress testing. If you manage to crash MINIX 3, then we would like you to figure out how it happened.

  • 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. Some examples are:
       
  • The Dillo Web browser
  • The Lighttpd Web server
  • The Qt software framework
  • Networking programs like Tcpdump, Traceroute, Netcat, nslookup, and so on
  • etc.
    We are open to suggestions for programs to port. In some cases, the ports may be easy enough that you should do multiple ports.

  • Enhancing Portability. Trying to run MINIX 3 commands on Linux or FreeBSD (for comparison purposes) turns out to be surprisingly difficult despite their being written in ANSI Standard C and being POSIX conformant. The problems are often related to the structure and content of header files (e.g., precisely what is defined in types.h) and how Makefiles are organized. In this project you will work on the MINIX 3 headers and Makefiles of the application programs to make it easy to use gcc and to move MINIX 3 software simply to Linux or FreeBSD.

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 3. 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 recently started 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