What do Assholes do?
Rusty just wrote a post titled “If you didn’t run code written by assholes, your machine wouldn’t boot” [1] about some of the anti-social tendencies demonstrated by programmers, including some that are implied to be fairly important. His post seems to imply that there are really great programmers who are anti-social and that we should just put up with it because of their great code.
One of the problems with his post is that he doesn’t define “asshole”. Holocaust deniers and all other Nazi supporters seem to clearly by assholes by any definition. People who have silly ideas about medicine and tell others seem to be merely misguided (although my dictionary gives “stupid or irritating or ridiculous” in the definition of “asshole” so technically they can meet the criteria).
In the comments Rusty states that “nuttiness is relative”. While that is correct it doesn’t seem to have much bearing on whether someone is an asshole. For example I know some very nice people who are utterly convinced by creationism.
Is Anyone Essential to Free Software?
Most projects have one person or several people in leadership positions, usually there seems to be a combination of project management and lead-programmer positions. Such people are obviously quite important to a project. But we have seen examples of people dying, being employed by Microsoft, retiring, relicensing the source in a bad way, and just losing interest without the project ceasing.
It seems clear that in most cases when a project which has a significant amount of use has significant bugs and no maintainer then someone will step in. The cases where no-one takes over the project are often resolved by someone creating a competing project. If no-one takes over an abandoned Free Software project then it’s a strong indication that the project wasn’t particularly important anyway.
I have no doubt that if any bug or missing feature made Linux systems stop booting then someone would fix it quite quickly.
In a more general sense it seems that every time someone takes a position in a project that is of wide interest they are displacing someone else who might have done the job. When you volunteer to do significant work for a project you may be displacing someone who is more skillful than you – this isn’t necessarily a bad thing as there are plenty of other projects to work on, some of which require more skill.
Growing More Programmers
It seems to me that a large part of becoming a great programmer is facing great challenges. People who could be described as “optimistic” or “arrogant” will tend to take on more challenging tasks and therefore learn more. I’m sure that there are a lot of people out there who have the potential to be great programmers apart from not taking on the challenging work, this seems to be an unfortunate waste of talent. Given a large enough population if someone leaves a senior position there should be someone else who can obtain the skills needed to take over. One advantage of this for Free Software development is that even if the best person to take on the challenge isn’t living in the most convenient continent that won’t be an obstacle, while with proprietary software development projects the teams are small and it’s common that no-one else is capable of stepping up to a lead position. Another advantage is that when the lead developer leaves there are generally many candidates to replace them, all of whom can start work and be judged on the work that they do.
I think that the best claims that can be made regarding essential people are not in regard to technical skill alone but to a combination of technical and people skills. Getting a group of programmers to work together is really hard but it’s something that needs to be done for any significant project. Also the larger projects tend not to stand alone, being able to get changes included in other projects requires some skill.
Ben Collins-Sussman and Brian Fitzpatrick gave an insightful talk at Google IO 2008 titled “How to Protect Your Open Source Project From Poisonous People” [2]. The first half of their talk is mostly about people who are misguided or difficult rather than what most people would consider “poisonous” and the second half is more about people who are actively poisonous and need to be removed. They advocate a community based on Politeness, Respect, Trust, and Humility. They describe in detail how the methods they advocate result in the members of their community being more productive, it seems obvious that those principles will lead to better career growth for people within the community and more friendly people wanting to join.
When is being an Asshole OK?
I once worked for a company that apparently had a team consisting solely of assholes. Apparently one asshole got promoted to management and after some internal transfers they ended up with all the assholes in the company on one team. I guess that when someone has negative interactions with everyone they won’t notice the difference if they are put in a team where everyone is difficult. For a corporate environment that lacks a “no jerks” hiring policy this is probably a good way of improving productivity overall. I am not aware of any significant Free Software project that was comprised of mostly jerks – although I have seen a few with dysfunctional environments that encourage the worst behavior from their members.
The smaller Free Software projects have less need for people who can relate to other people. There are many useful Free Software projects which have only one developer, in most cases anyone can take the source code and use it without dealing with the author. But even for a single-developer project an asshole can cause some serious problems. One example I know of concerns a developer who had unclear licenses and started making legal threats in response to a request for a clear license. Another example is of a developer who released code that was designed to not work when one particular user compiled it and redistributed the binaries. Both of them caused some significant amounts of time to be wasted by people who were unfortunate enough to develop systems that interacted with the code in question, and even more time was wasted when some misguided people defended them in the inevitable flame-wars.
Even for a project with only one developer it’s still better for everyone if that developer isn’t an asshole.
One comment I’ve seen related to this issue suggesting that some types of asshole behavior shouldn’t be a problem – an example that was cited is a colleague who cheats on a romantic partner. Jeremy Clyman (who is currently doing a Ph.D in Psychology) has written an interesting article about this for Psychology Today [3]. He reviews the movie “The Dilemma” which deals with someone catching their colleague’s wife cheating. Jeremy analyses the psychological issues involved and how they can (among other things) impact the ability for such people to work. I once worked in an office where two married employees were very open about having an affair and we were all apparently expected to lie on their behalf if necessary, it really affected the quality of the working environment.
Extreme Assholes
There are lots of people involved in Free Software development who are difficult and many who are to some extent assholes. But some of them take being an asshole to the extreme, such as Holocaust deniers (an example which Rusty used). In the comments on his post the Westboro Baptist Church is also mentioned.
It is possible to entirely disagree with someone on a contentious issue such as abortion but still be able to get along with them. But when someone supports a hate-based organisation such as the WBC or supports Nazis in any way then there will be many people who just can’t tolerate them – and no-one should be expected to tolerate such people.
I have seen two instances where Free Software developers advocated pro-Nazi positions (one had an archive of neo-Nazi propaganda and the other claimed that Nazis were not responsible for the Holocaust). Neither of the pro-Nazi programmers was evicted for defending Nazis, but both of them ended up leaving the community in adverse ways – after causing other damage in the mean time.
I don’t think it takes any great ability to predict the future to determine that someone who defends Nazis will eventually end up doing something that requires expulsion and drive away users and developers in the mean-time. There is no possibility that someone can support the Nazi or WBC ideology only when not associated with your project, it will affect all aspects of their life.
When a Holocaust denier is allowed to be a member of a community it also sends out a message that members of the groups which were persecuted by Nazis aren’t particularly welcome in the community.
Helping Minor Assholes
There are a lot of people who don’t have malevolent aims but who unintentionally cause some difficulty (it seems that the truly malicious are a tiny minority). I don’t think that excusing the bad things that they do on the basis of writing good code helps them in the long term. Many of the suggestions that Ben Collins-Sussman and Brian Fitzpatrick make seem likely to help people who don’t want to be assholes and direct them towards positive involvement in the community.
One trend that seems apparent is the non-linear response to certain types of bad behavior. There is often little difference in severity between something that gets almost no attention and something that results in a large and extremely hostile reaction. If someone persists in acting like an asshole for long enough it seems to be inevitable that they will eventually exceed some threshold for what is tolerated and get a very significant negative response. It would be good if things didn’t need to get to that stage.
I think that the most unfortunate aspect of Rusty’s blog post is that most people will probably interpret it as encouragement to write better code as a way of getting a free pass for being an asshole. I know that this isn’t what Rusty intended, but most people on the Internet don’t know Rusty as well as I do.
Conclusion
Ben Collins-Sussman and Brian Fitzpatrick seem to have some of the best ideas for how to deal with these issues when you control a project, but most of us aren’t in that position.
Everyone can advocate better behavior.
Extreme assholes need to be removed quickly and without a great debate about their contributions, freedom of speech, or other issues.
Since considering this issue I’ve been wondering about when one should avoid the lesser assholes and asshole-positive environments. People tend to adapt to their environment, so if you associate with assholes a lot then there’s a good chance you will start to become like them.