During the summer season of 2012 (northern hemisphere) I've had the pleasure of being the coordinator of the iPXE network boot loader's participation in the Google Summer of Code program. This is a summary of what happened during the summer.
What is iPXE?
iPXE is a network boot loader. What does that actually mean? Normally when you boot your computer, control is handed over to the boot sector on a local hard drive in your computer and an operating system is loaded. But that is not the only option you have. For a lot of years a standard called PXE (developed by Intel), has been available which allows x86-based computers to boot from the network (using DHCP and TFTP). iPXE's main goal is to extend that ability to not only boot from TFTP (which is quite slow), but allow computers to boot from HTTP, FTP, iSCSI, AoE and other more esoteric sources. We also have a goal of being the main network boot loader for EFI-based systems (almost working, get in touch for details). We already support more than 60 different network cards, and cards without a native driver are also supported using a feature called chainloading.
First time participating in GSoC
This is the first year iPXE participates in the GSoC program as an organization. Most of the mentors involved have participated earlier years as part of other organizations, such as kernel.org and Etherboot. It was the first time for me, though, and it was quite fun! My job was to keep all the students and mentors on track and ensure no deadlines were forgotten and that communication between everyone flowed smoothly. In total we had three students, which I understand is quite a lot for a first year organization. Thank you to Google for believing in us.
Students and projects
Marin Hannache from EPITA University in France wrote protocol support for downloading boot files using NFS. His work is awaiting review and integration into mainline. From what I've tested it still has some issues, but it is working, and I'm most eager to get it in, as it will allow booting directly from an NFS3 server, not even needing a web server. This should be great news for people using small NAS boxes to do their booting, as they don't always have a way to serve files using HTTP.
Adrian Jamróz from Jan Kochanowski University in Poland reimplemented the drivers for the VIA Rhine and VIA Velocity family of network cards. The existing drivers were using a deprecated API and was much bigger in size than they really needed to be. Code size is always a big challenge for a project like iPXE, which commonly is burned into ROM chips that have a limit of 64KB. His code was very good and is just awaiting final review and integration. I've personally tested it on one of my Rhine2-based cards, and it seems to work reliably.
Daniel Wyatt from Lord Fairfax Community College in the United States reimplemented the driver for the Broadcom NetExtreme II family of network cards. The problem with the old bnx2 driver was the same as the VIA driver. It used a very large proprietary firmware blob to run the MIPS-based microcontrollers on the card. Most of the summer was used to understand how we could minimize this firmware without losing any functionality. In the end the student got something working, but we're still having issues with the legality of including the firmware inside the iPXE project. The integration with mainline is currently on the fence awaiting some kind of confirmation from Broadcom that we can actually distribute the firmware blob with iPXE. Luckily we have people from Broadcom participating in the community, so it shouldn't be too impossible to get this kind of approval. I guess this student got a crash course in how licensing affects what you can do within an open-source project.
All of the pages linked to above were maintained by the students as they were working on their code during the summer. You can also find links to specific Git repositories that include all of their code if you're interested in testing it out before it is integrated into mainline. Most of the day-to-day collaboration was done using IRC on the #ipxe channel on irc.freenode.net. Below you can read some of the interesting things said during the summer by the students:
20120608-010814 <Mareo>wow, I'm in the black magic part of iPXE codebase :D
20120703-121824 <Mareo>this gsoc is awesome :D
20120712-203713 <dewyatt>the bnx2 datasheet is horrible :(
20120720-233044 <dewyatt>mcb30: okay...I'm eager to get started on the fun stuff
20120728-160956 <budrys>meteger: but I think it can't be left as is, it's a dirty hack for me
20120815-172646 <dewyatt>mcb30: mouse sent me some ROMs that have firmware in them. This made me take another look at the newest PXE ROM I have and I found compressed firmware. I hackishly extracted this by pausing the broadcom PXE ROM during DHCP and reading from the Debug UART. I can't do this for RV2P and I don't really know the bounds of the MIPS firmware so it's still a work in progress.
20120816-083313 <dewyatt>I don't know if I can legally commit this code really :/
Thanks to everyone
It is great to have taken part in this journey and seen how much the students have learned over the summer. I want to thank our three mentors, Michael Brown, Joshua Oreman and Thomas Miletich and all the other knowledgable people on the #ipxe IRC channel for the great work they've provided during the summer. Participating in GSoC has been a great experience for us all, and I hope we'll be able to participate next year as well.
If I've whet your appetite to learn more about network booting, I invite you to join us on IRC, participate in the iPXE forums or join the mailing-list.
Until next time,
iPXE GSoC 2012 coordinator