Table of Contents

This is an archived version of the Ideas page for 2009. You may want to look at our 2010 Ideas.

Etherboot Project GSoC Ideas

This list is not exhaustive, and we welcome new suggestions. Some of these ideas are not in themselves complete projects; feel free to ask us how much work is likely to be involved, and how many ideas you might sensibly attempt as a Summer of Code project. The approximate difficulty level of each idea has been marked with one or more :-/ symbols; the more :-/, the more difficult the project is expected to be.

A network card

Device drivers

gPXE is always in need of more device drivers. In the case of network card drivers, existing drivers and Linux kernel drivers are available as starting points. Data sheets are also generally available for most NIC variations, though such documentation is sometimes unreliable. You could:

If you are feeling more adventurous, and have access to appropriate hardware, you could:

A null-modem cable

Automated regression testing

:-/ :-/ :-/ :-/ :-/ gPXE has a relatively large feature set given the code size. Many features are rarely used, and there has been a tendency for parts of the code to suffer from bit-rot. The measures we have taken so far will ensure that we never end up with unbuildable code; we now avoid the use of #ifdef wherever possible, and have automated tests in place to identify missing or redundant symbols. However, we do not have any systematic method for functional testing.

We would ideally like to be able to run a series of tests to verify different functional units (e.g. http download, Linux kernel booting, PXE booting, serial console support, etc.). Most of these tests can be carried out inside a virtual machine such as bochs or qemu. Some tests (e.g. specific device driver tests) will need to be carried out on real hardware. The tests should be fully automated, and should produce a clear pass/fail status indicator. It should be possible for a developer to simply run “make test” and, some time later, receive an overall pass/fail status, together with a list of any failed tests.

You would design and create an infrastructure for automated testing of gPXE. Your test harness would have to set up the environment required for the particular test (e.g. building the gPXE image to be tested, configuring the DHCP server), initiate the test (which may involve starting up an emulator such as qemu, or powering-on a test machine), identify and record the test result, then move on to the next test. Test results should be collated and reported to the developer.

Having such an automated test suite would enable us to offer quality control guarantees; we could then be confident that upgrades would not break existing functionality.

Linux Distribution network installation

:-/ :-/ Most Linux distributions include some support for installation over the network. In most cases, this is designed to work with a standard PXE stack supporting only TFTP, but requires only a few small tweaks (and several days of testing) in order to work directly over HTTP. Installation via HTTP would provide a much smoother and simpler experience for the user.

Some distributions also provide support for installation directly to an iSCSI target. This support tends to be fragile and difficult to use, and the instructions necessary to get it to work tend to be complex. It would be nice if installation to an iSCSI target worked at least as well as it currently does in Windows Server 2008.

You would work to improve the network installation and iSCSI target installation capabilities of several of the major Linux distributions (Fedora/CentOS/RHEL, Ubuntu, etc). The installers tend to vary substantially between distributions, so work done on one distribution will not usually be directly usable on another. You would liaise with the relevant distribution maintainers to get your changes merged upstream into the next releases of each distribution.

Having this support would make life easier for users attempting to install Linux over the network, and would provide an incentive for NIC and motherboard vendors to ship gPXE in place of a legacy PXE ROM.

IPv6 Support

:-/ :-/ :-/ gPXE currently contains an aborted attempt at an IPv6 implementation. Several other attempts have been made over the past few years; none have been of sufficient quality to be merged into the main tree.

gPXE is structured to allow easy addition of IPv6: the IPv4 layer is cleanly separated from both the transport layers (TCP and UDP) and the link layers (Ethernet and others). Adding IPv6 support would require implementation of the basic IPv6 network layer protocol plus any ancillary protocols required for IPv6 operation such as NDP. The existing DNS protocol support should be extended to cover IPv6 AAAA records, and it would also potentially be useful to support DHCPv6.

Protocols

gPXE already supports several common (and less common) protocols, including TFTP, FTP, HTTP, HTTPS, DNS, iSCSI and AoE. There are several more (mostly fairly esoteric) protocols that people may find useful. You could add support for:

ProxyDHCP server for Linux

:-/ :-/ ProxyDHCP provides a mechanism for supplying DHCP options to clients independently of IP addresses. It is a PXE extension to DHCP, and is already supported by gPXE. It is potentially useful in situations such as adding a network booting infrastructure to a network that already has a DHCP server that cannot be reconfigured. (This is a fairly typical problem in corporate networks.)

There is currently no open source ProxyDHCP server software. It would be desirable to extend ISC dhcpd to provide this functionality. ISC dhcpd already has a rich configuration file syntax including the ability to perform conditional behavior depending on the contents of packets it receives. It currently lacks the ability to offer DHCP options without simultaneously offering an IP address.

You would extend ISC dhcpd to be able to support operation as a ProxyDHCP server. This would include designing appropriate extensions to the dhcpd.conf syntax, implementing and testing the changes, and working with the dhcpd maintainers to get your changes integrated upstream.

Having this ability would make it easier for users to deploy gPXE in large corporate networks with restrictive policies on changes to the DHCP infrastructure.

Enhanced scripting language

:-/ :-/ :-/ gPXE has a command language that allows users to boot interactively and is also used for scripts. Scripts allow users to customize gPXE behavior for site-specific network and boot configurations.

There is currently no support for looping, conditional branches, or the arithmetic and string manipulation operators that allow powerful scripts to be written. Enhancing gPXE scripting with these language constructs will make it possible for users to implement advanced boot policies without modifying gPXE's source code.

You would design a scripting language with input from the gPXE community to make advanced boot use cases possible. You would then implement, test, and document the language so it can be included in mainline gPXE. This task will require good C programming skills, an interest in the design and implementation of languages, and an appreciation for real-world challenges such as fitting a powerful language into an environment with a tiny code size budget.

Having a powerful scripting language would make it possible to customize network boot behavior without being an expert in low-level C programming and gPXE internals.

See this brainstorming page for an idea of how such a language could look.

R.O.M. - Rom-O-Matic

:-/ Rom-O-Matic is the web / graphical fronted to creating Etherboot & gPXE roms, there are several things that need to be worked on within the code base to make it better & more user friendly

Knowledge of gPXE building & configuration, ability to read and understand C and programing in PHP are required.

boot.kernel.org - Universal remote network booting for the masses

Note: This is a cross posting on both Etherboot.org and Syslinux as the project is, literally, a cross disciplinary project. Please also see Syslinux's SOC idea's page as an applicant will be working closely with both projects.

:-/ :-/ The basic idea for boot.kernel.org is to provide a universal location for basic computer system tasks such as:

The work that would need to go into making this happen is going to be based on an existing project called PXE Knife which is already in the process of breaking up it's components into various states to allow for a subset to be included on Kernel.org

boot.kernel.org will need to provide a simple and easy mechanism to generate a custom CD, floppy or usb stick image that can be trivially loaded by an end user. This custom CD will be based on the Etherboot project's gPXE code and may include additions from the Syslinux project as well.

This is a very interdisciplinary project, needing and involving an understanding of the entirety of Syslinux (configuration of both text and graphical interfaces including menu.c32 and vesamenu.c32, memdisk, etc), Web programing for customized menuing options (preference for php or perl), a solid understanding of gPXE and how network booting works, along with a good understanding of Linux network booting.

What you will need

A disk

For almost all gPXE development work, you will need to have:

Depending on the project idea that you choose, you may also need:

It is useful, though not always essential, to have:

How to apply

First, take a look at the above list of project ideas and see if anything takes your fancy. If you have an idea of your own that isn't listed above, that's great. Take some time to think about your idea; how might you approach the problem, how long do you think it would take, how interesting do you find it, how useful will it be to other people, etc.?

Second, introduce yourselves to us. Preferably via the IRC channel, though e-mail is perfectly acceptable. We will want to spend some time talking to you about your proposal. We will base our decision mostly on the interactions we have with you, rather than on the project proposal you submit via the GSoC web interface.

Thirdly, once you've talked to us on IRC or via e-mail, submit a project proposal via the official Summer of Code web interface. Your proposal should clearly state the project idea you'd like to work on, and should give some background information on your experience (including code samples if possible), and a rough overview of how you might approach the problem.

We will interview all applicants via IRC in a private channel. The interview will start with a discussion about your past coding experience, including a brief review of any code samples that you submitted along with your proposal. We will then move on to two or three coding exercises for you to complete during the interview; you can view a sample of one exercise used in last year's interviews. We will also talk with you briefly about your proposed project.

Our primary interest in the interview is to establish whether or not you are capable of writing clean, efficient C code (or another language, if appropriate for your project). We will also want to see how you react to criticisms, hints, and suggestions. Our decision on whom to accept will be based primarily on the interview, rather than your written proposal.

Hints and tips

Google Summer of Code

Etherboot IRC Channel

Mentor Email

We hope you have enjoyed reading about the Etherboot Project, and we look forward to meeting you and discussing your project ideas.