User Tools

Site Tools


soc:2011:projects

Google Summer of Code 2011

Introduction

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, and 2010, and we are applying again this year to be a mentoring organization. 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. 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 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.

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 porting the NetBSD userland, for instance, try to port some userland utilities 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.

Although Minix currently uses SVN, we are in the middle of migrating to Git. We expect to have switched before GSOC coding starts, 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.

Possible Projects

  • Porting the NetBSD userland. We would like to have the NetBSD userland utilities as they are more capable than the current MINIX utilities. Additionally, having these utilities would make it easier for MINIX to conform to newer POSIX revisions. Your job, if you choose to accept it, is to replace the MINIX userland with NetBSD's. Since we already have the NetBSD C library, build infrastructure, and some utilities, you will have a head start. Candidates for this project should be very familiar with C programming and the UNIX environment.
  • Debugger Support. We would like to have a fully-functional GDB port for MINIX. We currently have mdb, the MINIX debugger, but it is not quite as capable as GDB and it doesn't support debugging of ELF executables. Also, as part of this project, we would like you to add core dumping support. This will make it easier to debug programs that have crashed. The core dumping feature will require careful design.
  • FUSE support. We would like to have support for more filesystems, and the FUSE (Filesystem in Userspace) project supports many filesystems. Since our filesystem servers already run in user space, FUSE is a natural fit for MINIX.
  • Cross-compiler support. It would be convenient to have the ability to build MINIX on platforms other than MINIX itself. Additionally, we would like to target architectures other than i386. MINIX has adopted much of the NetBSD build infrastructure, but we would like to add support for NetBSD's build.sh to seamlessly build cross-toolchains and host/target tools. As a part of this project, you would also add support for release building (using release.sh) on non-native platforms. If you apply for this project, you should be familiar with building cross-toolchains and the BSD Makefile infrastructure.
  • Porting application programs to MINIX 3. Thanks to GSoC 2010 and the great work of Gautam, MINIX 3 supports the pkgsrc package management infrastructure. Unfortunately, not all packages have been migrated over from packman, our old package manager. Your job would be to add these packages to pkgsrc.

    Additionally, you would also work on porting more 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. 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.
  • 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. In order to be selected for this project, you must have past experience with writing drivers and you must own any required hardware.

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 8. 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. sig.jpg

soc/2011/projects.txt · Last modified: 2015/03/09 16:03 by lionelsambuc