Stephen Hemminger is a Linux kernel developer who specializes in networking and maintains the bridging and iproute2 utilities. In this Q&A, part of the ongoing 30 Linux Kernel Developers in 30 Weeks series, he shares one of his favorite moments in kernel development: when a relatively small project leads to big opportunities.
What role do you play in the community and/or what subsystem(s) do you work on?
I am one of the contributors to the networking subsystem. My contributions have been all across the map from writing new device drivers and fixing bugs to integrating contributions from research projects. As a side effect of these project efforts, I also maintain the bridging and iproute2 utilities.
Where do you get your paycheck?
I work for Vyatta which is a Linux distribution specialized for networking. Because we are a small company, I end up playing lots of roles including kernel maintainer and performance engineer. It has provided me with the excuse to learn about Perl, routing protocols and Debian.
What part of the world do you live in? Why there?
Although I grew up on the East Coast, we moved to Portland, Oregon many years ago so I could work on Unix workstations at Tektronix. That didn't last very long, but the opportunities here have allowed me to work for both big companies and several startups.
What are your favorite productivity tools for software development? What do you run on your desktop?
The most productive tool right now is KVM. It lets me spin up a new machine (or even a whole network) with a minimum of fuss. I still spend way too much time moving hardware and cables around, but now it's much less than just a few years ago.
Since Vyatta is Debian based, it is easiest to just run Debian on the desktop. My secret addiction is upgrading all of the time. Maybe it is because of my the optimistic belief that the world will always get better, but as a result I end up testing (and trying to fix) new releases all the time.
How did you get involved in Linux kernel development?
When I started at OSDL, I was hired as manager of the Data Center Linux initiative. DCL was a project in search of a problem, since Linux was already suceeding without any additional marketing or technical efforts. This was during the middle of the 2.5 development cycle when many things were changing all at once. Pat Mochel was working on sysfs, and I went ahead and implemented it for network devices.
The next turning point was when Linus asked "Can we get rid of the brlock?"; which led me to changing all the network protocol. Then David wanted to fix network device startup which meant changing every network device driver. These are examples of where Linux developers have no fear of doing refactoring that other projects refuse to do.
What keeps you interested in it?
On the technical level, I love being able to keep up-to-date and implement new hardware and protocols. My list of projects (like the stuff in my garage) keeps growing. More importantly, the community is very supportive and active. Being able to work with people all around the world is great.
What's the most amused you've ever been by the collaborative development process (flame war, silly code submission, amazing accomplishment)?
What amazes me the most is how much traction relatively small projects can get. I did some refactoring to isolate the TCP congestion control (the part of TCP that decides how much to send at once). Each module was changing the same places in the kernel, and at the suggestion of another developer, I added a virtual function interface. This had the side effect of adding even more TCP congestion control modules. It led me to work with researchers at several universities, including a one-month sabbatical at Hamilton Institute in Ireland.
The same interface was integrated into other projects. It was ported into the network simulator used during the research process. This let students try out algorithms in a simulator without writing any kernel code. Then the BSD developers copied the same idea.
What's your advice for developers who want to get involved?
Although Linux looks like a huge monolithic community, it is actually partitioned into many small groups. Get involved and read the
mailing lists for the areas where you have some expertise.
For a first project, choose something that you can test fairly easily. I.e don't tackle something huge like scheduling or TCP algorithms. Don't get discouraged easily; keep trying and learn from your mistakes.
What do you listen to when you code?
My old Nexus phone has been repurposed as an Internet radio. My music tastes vary from alternative, swing music, Celtic music
and even J Pop. My current favorite is a station from Australian Triple J because it fun to listen to and has no advertising or
maybe I can't help think about LCA. The phone works great for podcasts, too. One standout is the networking operations podcast "Packet Pushers".
What mailing list or IRC channel will people find you hanging out at? What conference(s)?
I used to hang out on IRC a lot, but it was too distracting. Now I stick to netdev and other project mailing lists. Linux Plumber's was
the best conference (most technical) over the last couple of years. Japan has always been great; I got to meet the Vyatta users
group last year.