The Community Compact
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:
- A community of peers, who voluntarily agree to work together for the creation, use, and maintenance of the software.
- A business model predicated on the growth and sustainability of the community, who assists in the creation and enforcement of the sustaining business model.
- The right for any member of the community to decide they no longer wish to abide by the Compact, and start a new, competing community or business
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.
For the impatient, here is how it works:
- All the software is licensed under an OSI approved license.
- All copyrights are licensed to each other, not assigned.
- A business is formed for the sustainability of the software and the community.
- That business registers the trademark for the software.
- The business puts commercial terms on the community's official distribution, a-la "Red Hat Enterprise Linux". It also can create a Network Service (SaaS) and a Consulting Business. It uses its trademark policy and a distribution license to do so, not the software license.
- The business also produces a "non-community" build, which is identical to the official build but has no commercial restrictions.
- Licenses can be sold by the business allowing the trademark to be used in competing Network Services or Consulting organizations.
- An exception to the Network Services or Consulting license requirement for contributors can be made, dropping the price of the license to $1 USD/year, on a 3/4 vote of existing maintainers.
- If the business becomes a bad steward, the community exercises its right to fork. They cannot take the Trademarks with them - they must rename.
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.
A note on Social Contracts
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. :)