This is an old revision of the document!

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:

  • :-/ :-/ Update some of the old Etherboot drivers to work with the new gPXE driver API. All drivers are written in C, and you will need to have hardware (network cards, server and client computers) to test driver changes. (We may be able to provide some of the required cards for development and testing.)
  • :-/ Add support for newer network card variants to an existing gPXE driver.
  • :-/ :-/ :-/ Add a device driver for a new, currently-unsupported network card to gPXE.

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

  • :-/ :-/ :-/ :-/ Add a driver for a wireless network card. There is some out-of-date support for one type of 802.11b wireless card; you could expand this into a general framework for wireless networking, and add drivers for one or more modern wireless NICs.
  • :-/ :-/ :-/ Add a non-Ethernet driver, e.g. a driver for an Infiniband card. (gPXE does have a working Infiniband subsystem.)
  • :-/ :-/ Fix up the support for legacy bus types such as ISAPnP. These devices are allegedly supported, though most have not been tested for many years, and it is unlikely that the current code is in a working state.
  • :-/ :-/ :-/ :-/ Add support for a new bus type, e.g. PCMCIA or USB.


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:

  • :-/ :-/ Fibre Channel over Ethernet (FCoE)
  • :-/ :-/ Novell's Remote Program Load (RPL)
  • :-/ :-/ iSCSI extensions for RDMA (iSER)

A null-modem cable

GDB remote debugging

:-/ :-/ :-/ Debugging gPXE can be a difficult task, since it runs on bare metal with no operating system facilities. The GNU debugger (GDB) supports a remote debugging protocol that allows source-level debugging of a program running on a remote system. You could implement the server portion of this protocol (the “GDB stub”) within gPXE, which would allow most parts of gPXE to be debugged using GDB or any other debugger supporting the GDB protocol. You would probably want to support both serial (null-modem) and TCP/IP-based connections to the GDB stub.

COMBOOT support

:-/ :-/ :-/ At present, gPXE has an interactive command line, but no menuing facility. SysLinux has a comprehensive menuing system, and a widely-used configuration file format. By adding support for COMBOOT executables to gPXE, you would be providing the ability for people to use boot menus to control gPXE. You will also be enabling the use of any other COMBOOT programs with gPXE.

You would need to implement the functions described in the SYSLINUX API documentation, along with support for the COMBOOT image format itself. This will require a reasonable familiarity with the gPXE codebase, and some knowledge of x86 assembler.

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.

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.

What you will need

A disk

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

  • A development machine, running Linux, that you have root access to. You will edit and compile gPXE on this machine, and you may also need to set up software such as a DHCP server etc. (We will talk you through getting your machine set up for development; the important thing is that you must have a machine available.)
  • A testing machine, which you can reboot very frequently. You will test gPXE on this machine. This machine cannot be the same as your development machine; it must be a separate computer.
  • A working network between the two machines.
  • Access to IRC (Internet Relay Chat), so that you can talk to us.

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

  • One or more specific network cards, if you are writing a driver for that card. We may be able to provide these.
  • Support for specific bus types (e.g. PCI express, PCMCIA) on the testing machine, if your project idea involves working with these buses.

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

  • Serial ports on both the development and testing machines, and a null-modem cable to connect them.
  • A digital camera (for taking screenshots; we have found situations in which this is the only sensible way to report diagnostic information!)

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, and a rough overview of how you would approach the problem. We will interview all applicants (via IRC), and our decision on who to accept will be based primarily on the interview (and on any other contact we've had with you via IRC).

Hints and tips

  • Do get in touch with us. Unlike the larger projects, we will take the time to talk to you personally. If we haven't spoken to you, we're very unlikely to accept you as a student.
  • Do ask for help when you need it. You're not in class, and you won't be penalised for not knowing the answer immediately.

Google Summer of Code

Etherboot IRC Channel

  • #etherboot on the FreeNode network (

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

QR Code
QR Code soc:ideas (generated for current page)