Summer of Code Ideas for GNU GRUB

This page is dedicated to providing our ideas for GNU GRUB in Google's Summer of Code. GNU GRUB takes part in this event, as a part of the GNU Project. Please look at GNU guidelines for Summer of Code projects for more information on the participation of the GNU Project. If you are going to apply this project, please take a look at Advice for students.

GRUB, the GRand Unified Bootloader, has been rewritten from scratch for more portability and more flexibility. The next major version of GRUB will be GRUB 2. All of our ideas are for GRUB 2 to replace the older GRUB, which we've dubbed GRUB Legacy.

USB support

A commonly-found problem when using GRUB is that it can't access USB devices (storage or keyboard) due to BIOS limitations.

Because adding support for all types of USB controllers is a lot of work, perhaps too much for a single Summer of Code project, we prefer if UHCI is supported first, because this is the one that can be emulated with QEMU, and therefore easier to work with (and to verify the results).

Once we have a driver for the UHCI controller, we need support for either USB keyboard or storage device (or both, if time permits), so that we can verify completeness of the resulting work.

ATA (parallel and serial)

A commonly-found problem when using GRUB is that bugs in disk access facilities provided by the BIOS prevent it from operating correctly. Often this can be worked around, but sometimes it can't.

GRUB already has a (parallel) ATA driver, although it is incomplete, and currently only supports devices in legacy mode (such as the ones emulated by QEMU). We need to extend it so that it can interact with our PCI bus driver and support all kind of ATA drives.

Additionally, we need specific support for AHCI in order to use SATA drives, since not all of them provide legacy compatibility with purely PATA drivers.

Regression testing framework

It would be convenient to have a regression test framework to detect regressions automatically and report them to the developers.

Dejagnu support could be integrated in the build system, so that different tests can be performed. Some features could be tested right away by using grub-fstest or grub-emu. Other tests could be performed using QEMU, etc. It is up to the student to propose ideas to build an extensive testsuite.

In addition, a monitoring system could be developed (or adapted) to check periodically that GRUB can build and pass the testsuite on the different platforms it supports, reporting to the developers when a regression is found, together with details on who caused it and when.

Accessing encrypted partitions

Crypted partitions are an increasingly common feature provided by GNU/Linux distributions. GRUB users would benefit from the ability to access them from the GRUB shell (for example, so that it can load kernel images or other add-ons from a crypted partition).

The LUKS specification describes a platform-independant method for laying out these partitions, and is today widely used. This would be the preferred encryption scheme to support, although others could be added if time permits (as long as they aren't encumbered by Treacherous Computing devices such as TPMs).

Localization infrastructure

GRUB is already capable of displaying UTF-8 characters by means of the gfxterm interface. Based on this, we could add support for string localization without big readjustments. We need support for the utility components via gettext, and additionally some mechanism to support localization in GRUB itself. It would probably be a good idea to use the same interface as gettext, possibly even the same binary format.

Fancy menu interface

We are looking forward to seeing a very fancy menu implementation, which supports animations, colorful effects, style sheets, etc. This work should be based on the GRUB's Video API, and should share as much code as possible with the text-based menu interface.

This feature is really important for GRUB 2, because GRUB Legacy has been patched by third parties frequently, as the official version never support a graphical interface, but such an interface attracts more casual users. Support for a fancy menu - even better than an unofficial patch for GRUB Legacy - would attract more people to GRUB 2, thus this is critical in a long term to accelerate the development.

Parted integration

Integrate GNU Parted's library (libparted) with GRUB so that we can make use of the full power of the Parted's functionality at boot time.

Parted supports creation, deletion, resizing of partitions and filesystems. These features are extremely useful when you get troubled or have a complicated boot environment. Because libparted uses some external libraries, you will have to think how to make things run on the GRUB's environment, where you cannot use POSIX or Unix system calls.

This should be implemented as an optional dynamic module by using the module loading feature in GRUB 2.

Please note that there are also separate suggestions for projects relating to GNU Parted itself.

New ports

GRUB 2 is already ported to a few architectures, including PC/BIOS, Open Firmware (on both PowerPC and x86), EFI (x86) and coreboot/LinuxBIOS (on x86). A sparc64 port is in progress. The student is free to suggest a new port with a rough estimation what it will look like on this architecture. In this case the student should have such system to be able to work on this.

A new port is often a lot of work. Other suggestions can be working on ports for which some work already has been done. Like the Old World Apple, sparc, etc.

Advise for students

For the submission of your application, please click on Student Signup. Please note that it would be better for you to make your idea very specific, so that we can assure that your job would be feasible within the two months supported by the Summer of Code. Furthermore, it would be nice to extend our ideas with your own ideas in your application. Completely new ideas are also welcome.

When writing an application form, we recommend that you would follow the following guideline: