User Tools

Site Tools


soc:2013:projects

Google Summer of Code 2013

Introduction

Every summer, Google sponsors the Summer of Code program in which students are paid to work on open source projects. MINIX 3 has participated every year since 2008, and we are applying to be a mentoring organization for GSoC 2013. In past years we've had excellent students who have made major contributions to MINIX, and we are hoping for more great students 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.5 million visitors to the Website (which has been up about 6 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 that you will not be working another job.

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. All the prospective GSoC mentors will be reading the Google Group and fielding questions. 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.

We want you to write great code this summer, but we also want you to become part of the MINIX community. You'll find that our community is friendly, knowledgeable, and eager to help. Over the summer, you'll rely on the community to help answer your questions and to help test your code. You will interact with the community primarily via the Google Newsgroup, but you can also chat on Freenode at #minix. Also, you will get your own page on the Wiki; you will use it to update the community and your mentors on your status weekly.

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.

  • I2C support for ARM.

    MINIX 3 currently can't make use of some of the onboard devices of the Beagleboard-xM. Many of them require I2C access. Your job is to write a generic I2C bus driver that runs on the Beagleboard-xM. Next, you will write two drivers using the i2c bus:

    Driver 1: The TPS65950 is the power management companion chip for the the Beagleboard-xM. You will make its functionality available and make the following accessible: Controlling the GPIOs on the PMIC, controlling the LEDs, and controlling the different power rails (especially the MMC one).

    Driver 2: The Display Data Channel or DDC (sometimes referred to as EDID Enhanced Display ID) is a digital connection between a computer display and the processor that allows the display specifications to be read by the processor. Your job is to read out the EDID data and configure the framebuffer driver to make good use of the screen real estate.
  • Improve MMC support for ARM.

    The MMC driver of MINIX 3 is still in a rudimentary state. It currently only support SDHC based devices and reads/writes single blocks at once. Your task is to improve the driver to support SDSC, implement multi-block write operations, and generally speed up the driver to make better use of the available features and data line.
  • Pkgsrc cross-compilation support for ARM.

    Now that MINIX has ARM support, we would like you to help bootstrap pkgsrc for the ARM platform. Pkgsrc is the package manager that MINIX uses to install third-party software such as Git and Perl. We would like you to add cross-compilation support for pkgsrc targeting MINIX/ARM, and we would like you to help us port more applications to MINIX/ARM. You do not need kernel experience for this project, but you should be very comfortable using and building software for UNIX-like operating systems.
  • 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, so applications that require them 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
    • implementing missing system calls
    • 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
    • You do not need kernel experience, but you should be very comfortable writing and building software for UNIX-like operating systems.
  • Implement job control support.

    The TTY subsystem is central to the design of UNIX in general. Your job is to implement tty job control. MINIX has a basic form of job control (putting jobs in the background), but this is not good enough for many programs we would like to run on MINIX. You can read up on job control here.
  • Code coverage for our POSIX tests.

    Getting good code coverage statistics for the kernel and its servers is not as easy as getting code coverage for an application program. Your goal is to use the qemu trace functionality to implement code coverage of our POSIX tests. This will require inserting trace points in the kernel and servers so as to provide a holistic view of what the system is doing. You might want to have a look at couverture. We are also open to proposals based on LLVM using path profiling.
  • Enhance lwIP support.

    We are in the process of switching to lwIP as our default network stack. We would like you to help standardize our networking code by:
    • Porting standard network utilities from NetBSD: netstat, route, ifconfig, dhclient, ping, traceroute, bind for named and libc resolver code
    • Exposing more lwIP features to userland to help applications build cleanly, e.g. SO_LINGER
    • Switching to using the NetBSD libc code for networking instead of the legacy Minix libc networking code
  • Haskell for OS Development.

    MINIX 3 has a multiserver architecture in which the vast majority of the OS runs as a collection of user-mode processes, including drivers and system services. Since drivers and system services are normal user-mode processes, we can implement them in any language. Haskell is a purely functional language with a powerful static typing system. Haskell has also been used in recent research into the formal verification of OS kernels. As such, Haskell has some interesting properties for OS development. For this project, you will port the Glasgow Haskell Compiler (GHC) runtime to MINIX and you you will implement a MINIX component of your choice in Haskell. Applicants for this project should be comfortable with Haskell and low-level systems programming.
  • Your creative idea here.

    We encourage suggestions for alternative projects, but we recommend you discuss your ideas with us before applying. You might first look at the Wishlist on the MINIX 3 Wiki for inspiration.

Resources

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

Keep in mind that the deadline for applications is May 3 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)

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