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: it’s 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 as a way to stop these behaviors.
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
- 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 it’s
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 communities official
distribution, a-la “Red Hat Enterprise Linux”. It also can create a Network
Service (SaaS) and a Consulting Business. It uses it’s trademark policy and
a distribution license to do so, not the software license.
- The business produces a “non-community” build, identical to the official one. However, it lacks any of the business restrictions. It does have moral
and ethical ones — if you use it in a commercial context, the community
may add you to a FREELOADERS file in the software repository.
- Contributors can get an exception to the FREELOADERS clause.
- 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, I’ve got
it up in a github repository here — you’re all welcome to come. I post this
without any real deep 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
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 everyone 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
My belief is that we can apply this line of thought to our open source communities and the businesses that sustain them. 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. Some of them might be legal, contractual ones — others might be moral and ethical ones.
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. :)
The Community Compact 0.1
This document describes the social contract which defines the community around the “[SOFTWARE]” piece of open source software. It lays out the moral and ethical rules the community agrees to in order to ensure a long, healthy, sustainable life for that software.
It is not a legal agreement, although sections of it likely reference legal
agreements. It is a moral and ethical one — it is the foundation upon which all
communities are built.
By joining the community, you agree to the rules outlined in this compact.
Code of Conduct
This community follows the [CODE OF CONDUCT LINK]. Violations should be reported to [COC EMAIL ADDRESS].
This software was originally created by [AUTHORS]. It was their original intent to create a vibrant, sustainable, diverse open source community. To that end, they intend to have a business, [BUSINESS], which sells goods and services related to the software, in order to further sustain and grow the community and the software.
[BUSINESS] will sell a distribution of [SOFTWARE] with commercial terms,
enforced by its trademark on [SOFTWARE]. It will also, at it’s option, provide a Network Service (SaaS) or Consulting and Support. Competitive Network Services or Consulting offerings require a special license. An exception is granted to significant contributors to the software, as an alternate means of community support.
Right to Fork
At any time, any member of the Community is allowed to exercise their right
to take the [SOFTWARE] and create a new community, subject to the software license, copyright license, and trademark policy of this community.
If [BUSINESS] decides to restrict the use of [SOFTWARE] in a way that members of the community disagree with, they have the right to exercise their freedoms under the software license, and create a new distribution of the software without any mention of [SOFTWARE] trademark or branding.
This is not a hostile act — it is a recognition of the symbiotic relationship
between the [BUSINESS] and the Community. Ultimately, both exist to serve the [SOFTWARE], and if that cannot be reconciled, it is our collective
desire that new communities form. Such communities require a new name,
along with a new, independent support model.
[BUSINESS] must remain a good, true, and honest steward of the Community, or loose all the privileges outlined in this compact, through the community abandoning them.
The software covered by this Community Compact is licensed under the [OSI
Each contributor to the software retains ownership over their contribution,
but licenses it under the same terms as the original authors. This creates an
environment where all contributors share ownership, and ensures that no single entity, including [BUSINESS], can unilaterally change the licensing terms.
This is a foundational moral and ethical right of the community — we have all
voluntarily joined together in the creation of [SOFTWARE], and therefore no
single entity can own the [SOFTWARE].
The community accepts contributions according to the [MAINTENANCE POLICY]. A list of named Maintainers will be kept with the source code. Maintainers may be called upon to vote from time to time, according to the [VOTING POLICY].
The [SOFTWARE] belongs to the community, and as such, the Maintainers have the final say on the source code.
[BUSINESS] retains the rights to the [SOFTWARE] trademark, and has the full ability to decide how that trademark may be applied. The [LINK TO THE TRADEMARK POLICY] can always be found here.
As a policy, [BUSINESS] does not license the Trademark for use by any other
organization for any commercial purposes, except through specific license
agreements with [BUSINESS].
Any Patents that pertain to [SOFTWARE] exist to be used defensively, to
protect the [SOFTWARE] and the [COMMUNITY] in the event of patent litigation.
[BUSINESS] will create and maintain the communities official distributions of
the [SOFTWARE]. As part of the creation of a business to sustain the community, [BUSINESS] will have separate licensing terms for use of it’s
distribution of the [SOFTWARE].
This is to ensure [BUSINESS] has a viable option for monetization of the
[SOFTWARE]. Combined with [BUSINESS] control of the [SOFTWARE] trademark, it ensures that [BUSINESS] remains in control of how the Community’s official build of the software is distributed.
In addition, the [BUSINESS] will produce a separate, identical, “non-community” (or “nc”) build. This build will have no legal restrictions on it’s use. It will, however, have a moral and ethical restriction: use of this build of the software for commercial purposes is seen as a direct violation of the community compact, as the organizations profiting from the communities labor do not support the communities continued health and existence.
On a 3/4 vote from the Maintainers, known violators of this clause of the
Compact will be added to a FREELOADERS file in the software repository.
Organizations who believe they have been wrongly added to the FREELOADERS file may request removal from the maintainers, and all requests will be granted. Removal is not permanent.
[BUSINESS] may create network services around or in support of the software, subject to various Terms of Service. [BUSINESS] may use these Terms of Service to further monetize the [SOFTWARE].
If other parties wish to run network services around the [SOFTWARE], we ask
that they contribute to the community through the purchase of a network
services subscription from [BUSINESS].
As the community grows, the desire for consulting businesses may also grow. The communities desire is that, if you intend to make money on the [SOFTWARE] through consulting and support, you contribute to the community through purchasing a consulting license subscription from [BUSINESS].
We ask that all members of the community utilizing consulting businesses do so from only those organizations committed to the communities growth and health.
Contributors to the software or community may request an exception to the
FREELOADERS clause. It will be granted by by a 3/4 vote of the Maintainers.
Contributors to the software or community may request a reduced price ($1 USD, or equivalent) Network Services Subscription or Consulting License from the Maintainers. It will be granted by the [BUSINESS] on a 3/4 vote by the Maintainers.
Why is the commercial version the community version?
Because the commercial version exists to enable the sustained operation of the software, and to keep it completely open source. Since the community itself formed around the idea that the business exists to fund the software community, it *is* the community version.
What if people get added to FREELOADERS and they don’t belong?
If 3/4 of the Maintainers of a major open source project agree, there is probably something up. At the very least, the community thinks so — and that’s all that matters. To avoid an investigation process, all requests to be removed from FREELOADERS will simply be granted immediately. Of course, the maintainers might decide to put you back in, if you are later found in violation.
What if I want to use the software commercially, but I can’t afford the price the business is asking?
Then you need to find another way to get a license — in particular, you need to contribute to the community, either with resources, money, or code. Convince the maintainers you are genuine, and they can waive the fee. What you can’t do is nothing at all, without opting out of supporting the community.
Note: contributing might not mean source code. You might answer questions in a forum, you might triage bugs, etc.
This won’t work with software license X!
That’s not a question, but I’ll answer it anyway. I’m pretty sure it will work with the GPL and its variants, along with the Apache License and the MIT and BSD licenses. Certainly, I’m an Apache human — so it will work great with the Apache License.
Is this some new Chef, Habitat, or InSpec thing?
No. This is me in my free time, thinking about ways we can create more honest and sustainable businesses while still creating the open source communities we love.
I like what you’re thinking — can I help?
Of course you can! Come on over to the Community Compact Github repository, and start filing issues or sending a pull request. Lets see if we can’t make something real.