Google Summer of Code 2009

We're participating in the Summer of Code program this year! Students are invited to apply for project ideas based on Glendix under the auspices of Plan 9 from Bell Labs, which is a qualified mentoring organization for 2009. You are also encouraged to take a look at their project ideas. The program provides a stipend of 4500 USD to students to work on open source projects. If you're interested in working on Glendix under this program, here's what you need to know:

  • In order to participate as a student in the program, make sure you meet all the eligibility requirements. Also, please read the FAQ! We will not attempt to reiterate any information already present there :)

  • Glendix is an operating system project. We aren't your run-of-the-mill Linux distro. For more information on what we're actually trying to do, look around this site. If challenging systems programming in C sounds like something you would like spend your summer on, you've certainly come to the right place!

  • Send your application via Google's interface, submitting it to the Plan 9 from Bell Labs organization. For the "skeletal distribution" project alone, you also have the option of submitting it to the Gentoo foundation.


In addition to the eligibility requirements placed by Google, we place some additional requirements on students so that we may evaluate your application:

  • An informal and quick (we promise!) chat over the phone or IRC, where we will run through some basic questions of whether you've understood the project correctly and check if you possess the technical skills required to pull off the project. A side note: By "required technical skills" we mean pure programming prowess. If you've never contributed to an open source project before and aren't familiar with version control tools and such, we will NOT count that against you. One of the goals of the Summer of Code program is to bring in new contributors to open source, so we will take the time to teach you the basic tools and methodology with which we work on Glendix. This is also a great chance for you to discuss any aspects of Glendix that may not be clear to you, and interact with your potential mentor for the summer on a more personal basis.

  • Discussion of your application must have been done beforehand. If you'd like to apply for any of the project ideas below or on one of your own, please discuss your application on this mailing list or via IRC! Please keep in mind that we will simply not evaluate any student applications that have not undergone prior discussion with us.

If your project has been selected (subject to if and when Glendix is accepted as a mentoring organization), we will additionally require the following from you:

  • Weekly status reports. This must be in the form of email to the the Glendix mailing list. You are allowed two "slacker marks", i.e. we will tolerate missing status reports for 2 weeks (consecutive or non-consecutive) ONLY. After that, if we do not receive weekly status reports from you, WE WILL FAIL YOU!

  • Another chat over the phone with your mentor just before the mid-term evaluation is due, discussing your progress so far. In our experience, many of the goals laid out initially will be modified, sometimes drastically (esp. with respect to project ideas marked with a 'low' specificity below); this is a great oppotunity for recalibrating the project as required.

  • A final project report describing your experiences, and a summary of what has been done. This may be submitted as one final document, or as a series of blog entries that you may have made through the summer.


Still reading? Following are a few ideas that will give you a feel for what projects we would like you to work on. However, don't consider this as an exhaustive or comprehensive list - we would love to hear new ideas from you on what you think would make a great addition to Glendix! We'll also be adding new ideas to this page in the near future, so do keep checking back.

Remember, all our project ideas require you to already possess good C programming skills. Experience with systems programming or kernel hacking is an added bonus (but not a requirement)!

Write System Calls

Difficulty: Moderate; Specificity: High

Plan 9 provides 51 system calls to application programs. We've only written equivalents of an essential few (read, write, exit etc...), so there's plenty more to be done. In this project, you will be in charge of implementing at least 20 of the remaining system calls.

Some will be easy, some will be hard, but all of them are guaranteed to be fun!

These calls have already been implemented: chdir, close, dup, brk_, remove, seek, pread, pwrite. There are implementations of other system calls in the repository, but they are incomplete or buggy; which means a student is welcome to rewrite them. Send a mail to the group mailing list to discuss which system calls you will be implementing.

Deliverable: Working implementations of atleast 20 system calls (with tests)

Implement a Significant Pseudo-Filesystem

Difficulty: Varied; Specificity: High

There are several pseudo-filesystems, provided either by the Plan 9 kernel or userspace programs that applications may rely on. In this project, you will pick on a such a filesystem and write an equivalent of it on Linux. Examples are /net and /dev/draw. Alternatively, you can pick out a bunch of (say, 4 to 5) moderately sized filesystems (like /proc) and port them instead.

Deliverable: Working implementation(s) of the pseudo filesystems (tested against native Plan 9 programs that use it)

Get rid of suid from apps that don't need it

Difficulty: Easy; Specificity: High

Recently, some code for Plan 9 style capabilities was written. Your job for this project would be clean that up and get rid of suid + root user requirements from applications that don't need them.

Deliverable: Working implementations of atleast 3 applications that currently require suid and use capabilties instead.

Implement Per Process Namespaces

Difficulty: Hard; Specificity: Low

Two of the system calls provided by Plan 9 (mount and bind) are especially tricky to implement in Linux because they depend on each process maintaining it's own namespace. Though Linux has some rudimentary support for this (CLONE_NEWNS, only usable by root), your job will be to extend this support throughout the entire system, Plan 9 style. You will then use this support in order to correctly implement the mount and bind system calls.

Deliverable: Independently namespaced programs with correct implementations of mount and bind.

Create a skeletal Distribution

Difficulty: Easy; Specificity: Low

The final goal of Glendix is to provide a lightweight, easy to use Linux distribution replacing the usual GNU userland with alternatives from Plan 9. This project entails you creating this distribution, helping us push out a beta release. Glendix is currently just a set of patches for the Linux kernel, we want to extend this to create a full-fledged distribution.

You can get creative here - on the choice of a seed distribution, package manager and so forth. Show us your magic!

Note: If you plan to use Gentoo as a base for creating the distribution, you can apply for this idea under the Gentoo foundation.

Deliverable: An Installer and LiveCD

Add Union Mount Support

Difficulty: Hard; Specificity: High

Even though Linux supports some form of union mounts, they aren't exactly the way they are in Plan 9 (i.e. the way they are meant to be (TM)). Your job will be to implement Plan 9 style union mounts so that everybody in the Linux world can enjoy it :)

Deliverable: Plan 9 style union mounts on Linux (with test programs)

Implement Graphics Filesystem

Difficulty: Medium; Specificity: Low

Eventually, Glendix would like to be able to run Rio, and to do that, there has to be a filesystem providing /dev/draw and the like. This can be done in one of two ways: via the Linux framebuffer device, or via userspace with the help of FUSE and X11. The latter option has already been started, and you can see the code for the project, called xorgfs, on github

Deliverable: A suitable filesystem on which to run Rio, and if possible, a port of Rio to this substrate