Round 6 (June 2013) OPW Linux kernel projects
After being accepted into the program, OPW interns worked on real-world kernel projects, ranging from parallelizing the x86 boot process to updating TTY drivers that were created in 2005 and getting them merged into the staging tree. During the internship period, interns worked remotely, communicating with mentors via email, IRC, phone conversations, and Google hangout. Interns had to manage their own time efficiently and learn how to seek help from their mentors and the community when they got stuck. These skills will prove invaliable as interns move into jobs working with the global Linux kernel community.
Lidza Louina worked with Greg Kroah-Hartman on improving drivers in the staging tree. Lidza started out by doing driver cleanup, then went on to merge two TTY drivers into the staging tree that had been out-of-tree since 2005. That involved getting them to compile, updating the drivers to work with new kernel API, and cleaning them up to match kernel coding style. Lidza contributed 18 patches to the 3.11 kernel, and 62 patches to the 3.12 kernel (as of 3.12-rc2).
Lidza presented about her project at LinuxCon North America on September 18, 2013. Slides are [attachment:lidza-linuxcon-na-slides.pdf here].
Lisa Nguyen worked with Konrad Wilk on the Xen block layer. The goal was to extend the Xen block drivers by implementing DIF/DIX, a protocol to add extra checksum information. Lisa will work beyond her kernel internship period to get the block layer code merged. Lisa contributed 23 patches for the 3.10 and 3.11 kernels.
Lisa presented about her project at LinuxCon North America on September 18, 2013. Slides are [attachment:lisa-linuxcon-na-slides.pdf here].
Xenia Ragiadakou worked with Sarah Sharp on the USB 3.0 host controller driver (xHCI). The byte-sized initial project was to eliminate the compile-time option to turn on xHCI driver debugging and use dynamic debugging instead. Xenia moved on to create trace events to lower the runtime-overhead of collecting debugging information, and allow debuggers to filter information based on what they wanted to trace. Xenia created 9 separate trace events, with more on the way for 3.12. She also fixed 3 bugs, and moved on to contribute to both the USB core and the EHCI host controller driver. Xenia contributed 100 patches to the 3.11 kernel, and 26 patches for the 3.12 kernel (as of 3.12-rc2).
Old project descriptions
The Linux kernel ethernet drivers communicate with network hardware, to give you access to the Internet. Ethernet devices can be as simple as the 1 gigabit ethernet controllers in your laptop, to much faster ethernet controllers in servers.
Interns would work on the Intel 1 gigabit ethernet driver, igb and/or ethtool, the networking configuration userspace application that works with the drivers. Wired ethernet devices supported by igb are found in some laptops and most servers, but hardware will be provided if you don't have access to it. What will be required is a PCIe slot to put the any hardware you need into and at least one other system (laptop is fine, as long as it has an RJ45 network drop) to use as a link partner and a network cable to link them.
Required skills: Experience with Linux network configuation and basic C programming stills
Optional but learnable skills: Knowledge of networking and networking features found in most ethernet devices.
Mentors: Carolyn Wyborny [:CarolynWyborny:(contact info)] Anjali Jain [:AnjaliJain:(contact info)]
The Linux kernel includes a USB stack that communicates with the hardware behind your USB ports (USB host controller drivers), and includes USB device drivers that talk to your USB devices (USB device drivers).
Interns would work on the USB 3.0 host controller driver. The Linux kernel USB 3.0 host driver works 10 times faster than USB 2.0 host driver. The USB 3.0 driver still needs a lot of work, so there are plenty of small bug fixes that interns can tackle. If time permits, interns could also work on small to medium features.
USB 3.0 hardware will be provided to accepted interns if you don't have access to it.
Another project would be to [http://marc.info/?l=linux-usb&m=137787545330845&w=2:work on refactoring] the USB core hub.c.
Required skills: Experience with manipulating linked lists in C, knowledge of basic boolean algrebra (bit masks and manipulating bits)
Optional but learnable skills: Knowledge of USB or other low-level busses
Mentor: Sarah Sharp [:SarahSharp:(contact info)]
Suggested reading for accepted interns: [http://lwn.net/Kernel/LDD3/ Linux Device Drivers] and [http://www.beyondlogic.org/usbnutshell/usb1.shtml USB in a Nutshell]
In the heart of the Linux kernel is code that runs directly on x86 processors. This includes early boot code, etc.
This part of the kernel is usually considered one of the more complex areas of the operating system. However, with a bit of guidance, it's really fascinating to see how a computer begins the journey from powered off to a blinking cursor at your login prompt.
Interns would work alongside PJ on central boot code in the Linux kernel. Today, the kernel brings CPU's online one by one in a serial fashion. We can do better. Several stages of changes are planned to go from a completely serial approach to a fully parallel approach to bringing CPU's up. Interns would work on some of these planned changes.
Required skills: Knowledge of how to use and manipulate pointers and function pointers in C is a must.
Optional but learnable skills: Knowledge of computer architecture, x86 assembly
Mentors: Peter Waskiewicz Jr (PJ) [:PeterWaskiewicz:(contact info)]