pieterh wrote on 08 Feb 2016 12:47
Projects and companies die for different reasons. Sometimes it's money, and sometimes it's pride. In this post I'm going to expand on Drew Crawford's "nanomsg postmortem and other stories".
It was about four years ago that the ZeroMQ community ejected its main contributors, who forked it as Crossroads, and then rebooted that as Nanomsg. Our motivation for that coup was almost exactly the pain and angst that Drew describes in his article, which we'd suffered for years in ZeroMQ.
The contract that binds the ZeroMQ community is, increasingly, not a technical one. It is C4.1, RFC 22, which has as its core principle:
Everyone, without distinction or discrimination, SHALL have an equal right to become a Contributor under the terms of this contract.
If you send a correct patch (as defined by the RFC), it shall be merged. Period. This simple, brutal rule had several effects:
- It silenced the arguments over ideology that used to pollute zeromq-dev.
- It removed the discriminatory "I don't like you so I don't like your code" power of dominant maintainers.
- It opened the door to new waves of contributors, who have turned ZeroMQ into a much larger and more aggressive collective project.
RFC 22 is revolutionary. No other project has defined the rights of contributors in such a way before, using the language of contracts and protocols. It established a bill of rights for contributors that focused on recruiting contributors. As Drew writes,
Open source projects hinge entirely on contributors.
The main argument against inclusive diversity is a tired and clichéd appeal to exceptionalism. "I'm smarter than average so I write good code, alone," is the way it usually goes. It is provably wrong. Good code is code that survives. This is how the market works, there is no other basis for value judgments on code except "people use it, people invest in it, and it survives"
Nanomsg was designed to fail. There are powerful lessons here that anyone starting, using, or contributing to an open source project can profit from.
Let me list the vulnerabilities, if they're not already clear to everyone:
- The lack of a bill of rights for contributors, allowing the maintainers to discriminate.
- Starting with a core maintainer who had a long record of working poorly with others. In 2011 we had four incompatible versions of the core ZeroMQ library (2.x, 3.0, 3.1, 4.0), due to endless and chaotic changes coming from Martin Sustrik.
- The use of a MIT license, which encourages "dark forks," as Drew calls them.
Mix this together and the results were predictable. In ZeroMQ we had the same ideological hostility towards contributors, which we massaged away with endless diplomacy. Much of my time went just to that, for years. The license made it hard for people to create dark forks. So, we worked hard to get consensus, and mostly we succeeded.
The lessons here are clear:
- First, please do not use a leaky license. MIT/BSD is not "business friendly," so much as "community hostile." MPLv2 is broadly accepted by businesses and discourages dark forks.
- Second, please use a strong bill of rights for contributors. Use C4.1, as-is, and you will avoid the pain that Drew and others went through. We learned this lesson in 2012.
- Third, when things hurt, stop and fix them far earlier. We seem to be so patient with pain. Learn to recognize that pain is not a good sign.
In conclusion I'm going to quote Doron Somech: "Crazy Idea: Clone nanomsg, move to zeromq organization, relicense as MPL, support ZMTP, only new socket types and expose CZMQ API."
Comments
开杭州市发票-杭州开票-杭州代开票 - 杭州开普通发票http://web-loan.info
上海代开票_上海开票_上海财税咨询 - Home http://lasparrandas.com
Ima let you finish, but the Pugs project beat you to the "commit bits for everyone" philosophy by a few years. Granted, not defined in a contract. :-)
Yes, even in ZeroMQ we were doing this in other projects. Like the Guide documentation, which from late 2010 was accepting all pull requests (and we got hundreds, with examples).
The critical part is IMO writing it as a reusable contract between parties. "Do you support C4?" is a simpler question than "is your contribution policy written down, and can I review it?"
By early 2012 we knew this process worked, didn't need speculation. Up until libzmq we'd not used it on a major project with a complex codebase. The first major project to use C4 was CZMQ.
Portfolio
I think strong individual right or strong individual protection is important in every social system.
In a company, open allocation supports and is supported by strong contributor rights.
In a nation state, universal basic income(UBI) supports strong individual rights and prevents lots of abuse from employers. Also, UBI incentivizes people to stop hurting others to just make living. Lots of psychopaths will stop abusing people just to make living, too. UBI recognizes unpaid contributions from people.
In open source projects, C4.1 makes it easy to work with others by undermining power inequality and boosting right of contributors.
Arguably, a strong bill of right for contributors achieves its good effects by lowering inequality of power among contributors and protecting contributors from concensus and vulnerabilities.