Larry Sanger wrote a history of Wikipedia on Slashdot today. Interesting insights into the origins of the project.
One point that Larry hit on that I've also come to conclude after a variety of open source projects:
Wikipedia became what it is today because... we proceeded to make a series of free decisions that determined the policy of the project and culture of its supporting community. Wikipedia's system is neither the only way to run a wiki, nor the only way to run an open content encyclopedia. Its particular conjunction of policies is in no way natural, "organic," or necessary. It is instead artificial, a result of a series of free choices, and we could have chosen differently in many cases.
All too often, I find that people look at Open Source, and see all manner of benefits and cool aspects and whatnot, but totally miss or dismiss the culture. They focus on the people, or the procedures, or the technology, or whatever, but completely ignore the sociological aspects. I find this extremely ironic, because in my mind the culture is the most important thing.
People have been working together for noble purposes since time immemorial. Sometimes they do it for money, sometimes because they don't have any other choice, but occasionally it's just because they *want* to. People see that it's possible, and for whatever reason (belief, need, obsession...) are self-motivated to work on it. Maybe it's standing impossibly huge rocks on their ends in a big circle, or maybe it's writing a complete encyclopedia of everything in the world translated into a bunch of languages and distributed everywhere across the planet.
Anyway, for whatever the cause, you've got a bunch of people compelled to work together. One might assume that the cause is enough, and that *poof* everything else just magically falls into place inevitably. Out pops a successful project.
Nope. Doesn't work like that. Good ideas are cheap. Noble causes are many. The plain fact is that by and large people are ornery, irritating, opinionated sots who'll argue the sun should set in the east, given the chance. What you need to make the whole thing go are a set of working principles and rules of thumb for how to work together. In other words, they need a culture.
You need some basic stuff. What are the primary ways we should communicate with each other - IRC? Email? Powerpoint? Song and dance? How do we organize our outputs - milestones on a Gantt chart? Weekly releases? When there's enough features? What is our overall mission - to make a complete encyclopedia? To make an editor that implements the complete SVG spec? To create a world dominant operating system?
Then you also need a whole host of more intricate interpersonal rules. How are stupid questions handled - answered? ignored? flamed into oblivion? How are decisions achieved - by fiat of The Leader? by group concensus? by technical merit? by first-come-first-served? How is off-topic discussion accepted/handled? How are disagreements resolved? How are plans made? How are bugs/problems tracked? How is knowledge shared from person to person?
Like Larry points out, I've also noticed that a lot of these things get solidified pretty early on in a project. Right at the beginning of a project the rules are extremely informal and anarchical.
I think our society likes to simplify things down to a single root cause for everything, but for many things it's not so simple and really depends on a lot of different factors. Open Source projects are one of these things; establishing an effective community is hard and depends on a lot of different things. A good idea, plus good people, plus good processes, plus a good culture, plus good timing and a little luck... Miss any one of those and you're sunk.
When we started Inkscape, I had a lot of the above philosophy in mind. I knew we'd have one shot at establishing a good culture and wanted to make the best of it. We quite deliberately set up processes for handling bugs, social guidelines for getting along, rules for how releases are done, and so forth, that were ingrained in the community and remain to this day. Because of this, we've avoided a lot of the typical problems of many projects: We've had very little developer burnout for as much growth as we've seen, our users have been universally appreciative and supportive, progress has been steady, and we've had relatively few flamewars.
I'm pretty proud of how things turned out; I'm certainly far from the most knowledgeable or prolific coder, but I feel that the work I put in early on to try to help set the tone for the project's culture has paid off many times over. Today we have a project where knowledgeable and prolific coders feel comfortable working together making a great program.