I can only speak for myself, but I think I represent a sizeable chunk of the open source developer community when I say that part of the attraction of having your code flapping in the wind for all to see is that you often get credit for a job well done. Often nobody notices or cares, and you can always end up making yourself look silly, but part of the motivation for me is the community acceptance and encouragement. That said, a story:
I have an old 486 that I'm using for a cool project. It's going to be a web-based mp3 jukebox for my apartment. My two roommates and I all have our mp3s on our individual computers, and I thought it would be neat for us to collaborate our tunes while hanging out or partying in the living room. So I took this old 486 and took out the hard drives (they're LOUD, and too small for my purposes anyway). I figure I can throw together a linux system on a floppy disk and boot that sucker up with enough tools to mount our mp3 directories over the network, and then grab a jukebox package from sourceforge (tough to find one that doesn't rely on Perl, MySQL, or PHP). Totally doable, I'm thinking.
Well, my story is about a kernel bug and not so much about my ongoing struggle with getting uClibc, busybox, udhcp, nfs, boa, and musicqueue to run (let alone cooperate) on a diskless 486 with not much RAM. I've had to custom hack just about every piece of software going into this thing. We take it for granted that everyone will link our code against the same C libraries that we developed it with...
So anyway, this project is cool. But it so happens that even getting a bootable linux kernel was a pain. If I recall, the 2.4 series would mysteriously not be able to find init (didn't play well with busybox, I guess?). The 2.5 series would panic at some point during the boot process. I couldn't even compile earlier kernels on my main machine as it's set up. Fuck it, I thought, I'm gonna do this and nothing can stop me. So I crack open the kernel source and start debugging. A shitload of prink()'s, several traversals of the source tree, and about a billion reboots later, I had simply commented out the offending line (arch/i386/kernel/cpu/common.c, "this_cpu->c_init(c)") and was booting happily. From what I could figure it was some kind of bug initializing some x86 CPU junk. I was in over my head a bit and was in no position to fix it, per se, but it occurred to me that maybe I should submit a bug report to the mailing list. But I couldn't find any reference to the problem anywhere already, and I thought that a problem like "2.5.x won't boot on a 486" would have been a well publicized (and already fixed) issue. Anyway, I was more concerned about getting my jukebox running, so I put it off for the time being. Worry about kernel stuff later.
So anyway, today I read a post from Linus giving the details on the latest 2.5.x release, and showering praise upon those who reported the problem:
And special mention for Brian Gerst, who figured out and fixed a x86 page table initialization fix that would leave old machines unable to boot 2.5.x. That might explain a number of the "I can't run 2.5.x" that weren't seen by developers (most developers tend to have hardware studly enough that they'd never see the problem).
Actually, I should also mention Mikael Pettersson, who actually debugged and chased the problem down to the initialization. Sometimes finding where the problem happens is harder than fixing it once found.
So kudos to those guys, nice work. I admit I sat for a moment imagining how great it would be to be the recipient of such congratulations - if only I had just sent out that email! - but hey, I'm no egomaniac. The bug was fixed, we all benefit.
I don't need somebody's approval to feel like a valuable, contributing member of the open source community, but sometimes a pat on the back lets you know you're appreciated. Next bug is mine...