The recent conversations around the difficulties in finding a sustainable open source business model are close to my heart. I have spent the last decade plus of my life working to build an open source company at Chef Software. Over that time, I've made plenty of mistakes, experimented with various models, and watched with keen interest as others did the same. I believe that the biggest thing lacking from the conversation right now is a focus on where the power of an open source business really lies: its community.
Instead, we're focused on ways to eliminate bad actors - large service providers (Amazon, Microsoft, Google, etc.) building services out of your product, consultants making money but not giving back, large companies using your software in mission critical ways, but refusing to see value in supporting its continued development, etc. All of the ways I've seen suggested so far involve eliminating or curtailing the communities rights to the software.
I would like to propose another way, one which I think supports the creation of a sustainable community, with a sustainable business to support it, in harmony with one another. I call it the Community Compact. It mixes together a modern understanding of social contracts, copyright licensing, software licensing, distribution licensing, and terms of service, to create:
I believe the result is a sustainable business model, not in conflict with its community, but in harmony with it. One that allows us to open source all of the software we produce, create large businesses around them, but which binds us together with rules of behavior we all agree to up front.
It produces software that complies with the Open Source Definiton and the Free Software Foundations Four Freedoms.
For the impatient, here is how it works:
The intent is that this becomes a model for individual communities to build on top of. If you are interested in working with me to refine this idea, we've got it up in a github repository here - you're all welcome to come. I post this without any real editing, either - my intent is to start a discussion that leads a community process towards a final draft.
Nobody at Chef Software had anything to do with this, and it certainly doesn't apply to Chef's open source communities. It's just my thoughts, after a lot of pondering.
There is a long history of the idea of a social contract - starting with Hobbes, and revived by John Rawls. For the purposes of thinking about how we can build sustainable open source communities, lets boil it down to saying that the "Social Contract" is the set of moral and political rules a society (the community) will follow.
An important thing to realize when talking about these rules is that the justification for the rules does not need to come form some external force - there isn't some master set of moral positions that are at play here. Instead, the fact that everone in a given society agrees to the rules, based on their own individual reasoning, is enough to justify the existence of the rule.
So for example, if we all agree that in our community it is unacceptable to say the word "kitten", then even though we would struggle deeply to find a universal, rational reason for arriving at that rule, for the terms of our social contract it's enough. That we agree to the rules is the justification for them.
My belief is that we can apply this line of thought to our open source communities. That we are forming intentional societies, with rules of behavior and morality, and as such we are free to define those rules as we wish.
Others will join if they agree to those rules - if they do not agree, well, they are free to create a new set of rules. This is one of the ways software diverges from, say, political philosophy. :)