When people ask me why I contribute to Open Source software, I often have a hard time putting it into words. It becomes a "You know, it feels good to give something back to the world" and "I get to work with all sorts of people" or even "Um... I enjoy it?"
Eloquent, I know.
None of these statements are dishonest, but they really fail to capture it. They fail to capture the magical feeling of seeing something I've built become larger than just me. They fail to capture the rush I get when people care enough about something I've helped build to drop me a message... or when they like it so much that they are motivated to add on to it. It's amazing when something changes from being "mine" to being "ours". It's a feeling of accomplishment and a feeling of camaraderie. It's pretty dang awesome.
So when isn't it? Is it the angry users? The endless complaints about favorite pet features? The users getting furious over releases that break or remove features? Is it the big feuds and community forks?
I've heard those horror stories too, but (so far, anyway) I have been lucky. The vast majority of people I have encountered since I started working on Open Source projects are just looking for something to fill a need. They understand they're getting something for $0.00 and they realize the developers are doing their best to make it bug free. They realize it's rarely a full time job for most of us. If they make any noise at all, it's polite. It's appreciative. Often, when they are reporting problems or concerns, it's apologetic. I have encountered far more people who are willing to step up and submit ideas and patches than I have people with negativity to sling.
So what has been the hard part of Open Source for me?
I am happily married. I have two awesome kids who occasionally are uncool enough that they are willing to hang out with their dad.
Time is a precious commodity. A large part of my time goes to my family. A large part of it goes to supporting my family (bills happen). The remaining time gets chopped into bits (nibbles? bytes?), some of which are Open Source projects.
The impact of these slices of time are subtle, but significant.
Yup. Guilt is the result. Projects aren't worth working on unless I can do a good job, right? But bugs and feature requests pile up. Questions wait unanswered in forums. When my next nibble of time shows up, I spend the first hour or so doing triage. What needs immediate attention? What things are quickly answerable? What things have been sitting there for months?
It's amazing how patient and polite some of these people are. The things they are asking for are often simple... but it might take weeks or months to get back to them. The other primary developers and I try hard to tackle these things quickly, but time slips by.
And the guilt piles up. You know where that goes?
Egad! It's hard to get motivated to focus on a problem when you can only work in little bites (bytes?) here and there. It's hard to keep moving through these dips in motivation.
When motivation is low, the bug reports hurt. I feel awful for having a project that is nearly ten years old, and still has bugs. This starts to form a positive feedback loop (unfortunately not in a positive direction), dragging motivation down. It's hard to pull back out of that sometimes.
When I finally find myself climbing back up the other side of the dip, though, it feels triumphant. There is a flurry of activity. Commits. Posts. Emails. Updates. The passing test count rises. It's glorious!
Until reality reasserts itself. Has anyone ever noticed that the largest flurry of feature requests always arrives after a flurry of feature commits? Maybe it's enthusiasm? Maybe it's strategic? (Oh look! Mark is finally working on this again! I should tell him about BLAH ). The cycle eventually repeats.
I suspect it's the dream of many Open Source developers to actually get paid to develop the Open Source projects they're working on. I'm no different. I've probably made a poor choice of projects in that regard. Unit testing tools for embedded software, exception frameworks for C, odd datastore alternatives for flash devices... these aren't the things that empires are built upon. Oh I have a head full of other project ideas too... all equally likely to impress tens of people, not tens of thousands.
I'm working on them because they interest me. I'm working on them because I feel like this is a niche that I can contribute a small kernel of usefulness to "the world". Which brings us back to WHY, doesn't it?
I'll keep working on these projects because they feel right and they fill in need within me. I'll ride the rollercoaster of motivation, try to ignore the guilt, and focus on the gems.
And while I'm doing that... a bajillion other developers are doing the same, contributing in their own niches, adding their own kernels of usefulness.
And THAT is pretty amazing.