Summer of Code 2006 Ideas for GNU GRUB
The application term has been finished. GRUB has accepted one application LVM and RAID support for GRUB by Jeroen Dekkers, mentored by Yoshinori Okuji, as announced at here. The information below is only for feeling sentimental.
This page is dedicated to providing our ideas for GNU GRUB in Google's Summer of Code 2006. 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 getting 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.
CDROM boot support
Boot up a CDROM drive from GRUB. Technically, this contains three cases:
- the BIOS supports CDROM access correctly.
- the BIOS supports CDROM access, but buggy.
- the BIOS does not support CDROM access at all.
First of all, you should try to implement the easiest case where the BIOS works gracefully. In this case, you can simply calls some BIOS functions, then should work. This part can be done with a free emulator, such as bochs or qemu.
For the second case, you should try to figure it out if it would be feasible to avoid bugs but still use the BIOS calls. If you don't have access to such a BIOS, you can skip this task.
For the last case, you need to implement El Torito and device drivers to access CDROM drives. There are several types of CDROM drives, such as ATAPI, SCSI and USB, but we don't expect you to write code for hardware you don't have.
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.
Support for LVM and/or RAID
Implement good support for LVM and RAID. This task can be divided into parts:
- Recognizing and reading LVM and RAID devices.
- Installing GRUB into an LVM or RAID device.
- Booting from an LVM or RAID device.
The first item is rather trivial. You only need to detect LVM/RAID devices automatically by using the same technique as Linux does, based on the signatures of partitions. The second item requires more effort, because you need to take care of distributed physical disks. For RAID 1 and 5, it is desired to support redundant installations, so that GRUB can boot even if some disks get broken.
You need to extend the bootstrap code for the third item, so that GRUB can read data from multiple physical disks when booting up.
Full support for every type of LVM or RAID device is probably too large a job for a Summer of Code project, but good support for a useful subset is a reasonable project.
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.
*BSD support
We are looking for people who want to support FreeBSD, NetBSD and OpenBSD. This includes:
- Compile and install GRUB on *BSD.
- Boot *BSD directly (preferred) or indirectly.
You can select one of FreeBSD, NetBSD and OpenBSD, but we hope that you will work on multiple ones, because they are more or less similar from GRUB's point of view, and you should be aware of the code sharing between them.
New ports
GRUB 2 is already ported to the x86 PC, to the PPC (Open Firmware), sparc and an x86 EFI 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:
- Please describe the goal of your project clearly.
- Please include your background, your motivation, etc. to help our understanding of your skill and will.
- Please define a roadmap for your project. For example, write down every step required for the final code with an estimated time frame.
- Please consult the GRUB Wiki, the source code, and the archive of the mailing list to understand our project better.
- Please do not hesitate to contact us through email or on the IRC channel. If you have any question with regard to the Summer of Code, feel free to ask us.
Return to the GNU Project home page.
Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006 Yoshinori K. Okuji
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
Site maintained by Allen Riddell (contact at allenriddell dot com).
Updated: $Date: 2006/06/04 17:04:46 $ $Author: okuji $