Programmers like to think that software is the purest form of meritocracy. We like to consider ourselves scientists; what we do is entirely impersonal. I’m at Lone Star Ruby right now, and the first two talks are entirely about software as a science.
But this is a fallacy. There’s a human element to open source that’s often totally forgotten, and it drives people away.
We sort of acknowledge this, in a way. There are most certainly software celebrities, even if their celebrity is localized to the community in which they operate. I heard someone say this today:
If I can go to one Ruby conference and not hear anyone mention Zed Shaw or _why, I can die happy.
If I say “jnicklas” you say “Capybara.” If I say “DHH” you say “Rails.” If I say “matz” you say “Ruby.” We have our heroes, villains, and foils, just like anybody else. But we forget that in every celebrity, there is a real person in there. Actual people, who have real thoughts, feelings, ideas, emotions, and that spend all of their time working for free just to make your lives better out of the goodness of their heart. Often after working at day jobs, often at the expense of a personal life, often straining relationships with people they care about.
I used to think that Git was great because it made forks trivial. It changed what we mean by ‘fork.’ This is largely a good thing. But ‘the eff word’ used to be a last resort. The nuclear option. You’re fed up, can’t take it anymore, and so this is what they’ve driven you to do. Forking was Serious Business.
Now, GitHub has made it so easy to fork a project and distribute it to tons of people, people just fork things willy-nilly. And, from the outside, competition is good: in theory, it means that the good ideas work and the bad ideas don’t.
(A small aside: forking in git is different than ‘forking’ in svn. This overloading of terminology is unfortunate. The fork button is actually one of my favorite features of GitHub, because it makes contribution easier. But as it’s easier to publish new software, it’s easier to ‘fork’ in the svn sense. It used to be a pain to start a new project, and GitHub’s made that so easy that it happens more often than I think it should.)
But guess what: competition sucks. Cooperation is much better. One of the biggest problems with competition is that it means that somebody has to lose. For every winner, someone is a loser. That person is going to be hurting. In the case of open source, someone has spent (possibly) years of their life working on something, and now, all of that is gone. That shit stings.
Sometimes, forks are necessary. Sometimes, there are approaches that are fundamentally different. Forking is still an option, even if it’s a last resort. I’m also not saying that feelings should totally trump technical merit. All I’m saying is this: consider the blood, sweat, and tears of others before you act. Just in general.
It’s also not a zero-sum game, either. The pie can be grown. But that also doesn’t mean that it’s grown in a way that makes anyone feel good about it. There’s a difference between “We represent two sides of some coin” and “Those fuckers make shitty software.” Both approaches can grow the pie. One is far better than the other.
What’s the human cost of rapid competition between software projects? Is this cost worth it?
The Pareto Principle: 80% of the effects come from 20% of the causes. This is absolutely true in OSS, and it might be more imbalanced. A few people contribute, and lots of people use. Sometimes, this is a good thing: it’s actually what draws me to open source. I can help people in a scalable way. My code is currently being used by tens of thousands of people. This is awesome. Some documentation that I’ve written is being read by millions of people. This is way more awesome.
But I rarely get any help with my projects. It’s really easy to let that get to a person.
Do you know how many people have told me that what I do is important? I got given a Ruby Hero award for my work on Hackety and Shoes. Do you know how many commits I have in on them? Probably less than 200. Do you know why? I’ve spent weeks of my life trying to track down bugs, but some of them are too hard for me, at my current stage of programming-fu. And it gets depressing. And everyone that’s ever offered to help has flaked on me. And all the recognition for something that was largely done by someone else gets to me, really deeply. And I get tons of people screaming about Lion support, and ‘this doesn’t work,’ and all sorts of things… and no patches. It’s why the ‘patches accepted’ saying was coined: this shit grinds on you after a while.
Today, this situation with rbenv and rvm made me realize something: everyone that I truly, deeply respect in open source has either burned out or left. I’ve said once before that there are four people that I truly respect in software: Zed Shaw, _why, Yehuda Katz, and (more recently) Wayne Seguin (and also Aaron Patterson. Dammit. This list is getting long). All of these developers are brilliant, work hard, and are tirelessly supporting their communities. That is, until they were driven away. This isn’t totally applicable to Yehuda, but it happened to Zed. It happened to _why. And I can see it happening, right now, to Aaron and Wayne. And Yehuda isn’t really doing Ruby…
But seeing this happen makes me deeply sad. For them personally, for my own selfish reasons, and that that’s the state of our communities.
I don’t have any answers. I only have a bunch of questions:
If you don’t contribute to Open Source: please consider thanking someone that does open source, in a project that you love. Consider helping out, in even the smallest of ways.
My next post is a bit of a follow-up to this.