Today I had a great email discussion with Artur Bergman about the work he’s been doing on riakfuse. We compared notes on dealing with rename, writing a FUSE driver in C/C++ vs. Perl/Python, etc. It was most enjoyable, and I said so on Twitter. I also said that “open communities rock” and made a comment about open communities vs. open source. That piqued a few people’s interest, so I’ll try to explain.

Open source means that somebody can get the source code for something without having to pay a license fee or sign an NDA, and may pass it on to others likewise without getting into copyright trouble. There are finer distinctions to be made between various kinds of open source and free software, but that’s close enough for current purposes. An open community, by contrast is one in which “outsiders” are able to ask questions and contribute ideas, possibly even contribute code, without having to deal with unnecessary barriers. Both are departures from the (now slightly dated) corporate norm where only employees have any access whatsoever to either the code or the process of its development.

It’s important to note that the two forms of openness almost always go together. The vast majority of open-source projects also represent open communities. However, there are places where the connection breaks down. Sometimes code is available, but the development process is utterly closed. This is clearly the case with code that’s released as open source by a company (and often abandoned soon afterward but that’s another topic). There are also many personal or small-group projects where the code is released without even an intent of building a community around it, and of course complaints about this or that project being too cliquish/elitist to accept outside contributions are legion. I’m not talking about necessary limitations on who can modify the code, or about individual developers being jerks. One could hardly work at Red Hat and be unaware of either phenomenon. I’m talking about institutionalized hostility toward “outsiders” from top to bottom, with no reason beyond a desire to keep the circle small. On the flip side, many academic research projects never release code or even have code as an intended artifact, but nonetheless are entirely open and willing to engage in dialog about technical details. Some standards groups such as IETF also operate on such a basis at least some of the time.

In many cases, an open community is more important than open source. Why? Because code is often useless. Even as a coder myself, I’d often prefer a short textual description of an algorithm or configuration detail to a brusque “read the f-ing code” from the developers. Sure, you can build from the code, but if it’s written in a language you can’t reasonably be expected to know or frameworks and conventions that are themselves completely unspecified then you can’t do much of anything else with it. In particular its presence doesn’t further the exchange of ideas and improvement in overall state of the art. I’ve had to delve into such code hundreds of times, even to the extent of what most would call reverse engineering, but the exercise is more akin to criminal forensics than to an open exchange of ideas . . . and that’s likely to be even more true for someone less fluent in code than I am. To the extent that the brief note is more useful for some purposes than the complete code, it can also be a better indicator of true openness.

Ideally, of course, both code and community should be open. Again, this is already the case most of the time. I’m not trying to make any grand philosophical point here, but I do think it’s important to remember that the two kinds of openness are not necessarily coincident. If openness is a goal, then both forms have to be considered separately and not squashed together as though they were one.