Was This Trip Really Necessary?
Schism and Reconciliation in the Node Community
Anybody with even the most superficial awareness of Node will know that there was fork in the Node.js project at the end of last year that resulted in the creation of the io.js project. There have been numerous articles and blog posts written about why this occurred and there is little we really need to add to the historical record—especially since it’s now a foregone conclusion that the projects will finalize a merger in the near future. As NodeSource has been participating in both the Node.js and io.js projects through this process, we feel that we are in a position to draw some conclusions about the future of Node based on the recent past.
io.js was formed because many active contributors to the Node.js project wanted:
- More rapid iteration and more frequent releases
- Closer tracking of V8 releases
- Contributor & community ownership and governance and an end to the BDFL model
One could argue that the issue of open governance was the key to all of the other reforms that io.js advocates desired. There are other factors involved that are well covered in Isaac Schlueter’s blog post on the subject. One thing that you really can’t doubt is the release of an avalanche of pent-up creative energy and code that was delivered with the io.js fork, made abundantly clear by this graph.
One narrative that exists in some quarters around the fork goes something like this: the slowing trend of commits in the corporate governed Node.js project ("suits") followed by a dramatic lurch forward in community governed io.js commits ("geeks") suggests a fabulous tale where the suits want to stabilize the platform for enterprise predictability and the geeks want unfettered innovation. This, of course, is a ridiculously simplistic reading of the situation as there are suits, geeks and enterprise users in both camps.
io.js was a reluctant fork from the very beginning. There is a trail of negotiation and discussion for most 2014, much of which was hidden from public view out of fear of causing ripples, that resulted in the node-forward project and eventually the ultimate ripple: a fork. There always existed a hope within the io.js community that a path to reconciling the philosophical and practical differences could be found. While some of us have become very attached to the brand, io.js only exists because of differences that appeared irreconcilable at the time.
Many community members were sceptical that reconciliation was possible and harbored doubts until very recently. Today, with the creation of The Node.js Foundation—that will adopt the open governance model in use in the io.js project—there is little standing in the way of the two projects completing a reconciliation, and that process is already well under way.
The io.js project and its working groups have all moved to the new "nodejs" organization on GitHub (thanks to Felix Geisendörfer
for squatting that name for 6 years). There also exists a new nodejs/node repository that represents the current unified codebase. Starting from io.js, changes introduced in joyent/node since the fork that were not introduced to io.js are being painstakingly picked over for merging, rejection or amending.
Activity in "Node" core now centers around three projects:
- joyent/node and maintenance of the 0.12 branch,
- io.js and a continuation of the release and development cycle including adoption of new V8 versions; and
- the new convergence repository that is pulling the two together.
Eventually that convergence work will be complete and the nodejs/node repository will be producing releases. The current plan for those releases is for it to take over the next major release version after the io.js release that exists at that time. So if io.js makes it to version 4.x.x by the time the convergence project is ready, we’ll see a new Node.js v5.0.0 that will represent the new Node.js. A long-term support (LTS) strategy for Node.js 0.10, 0.12 and io.js will be adopted so that continuity is maintained and the versions of Node that are in production today receive the level of support that the community has come to expect, and more.
What happens to the "io.js" brand is yet to be decided but it may live on in some form within The Node.js Foundation.
What was lost along the way?
It's hard to say that anything significant was lost as a result of the fork-and-merge. Short-term certainty and stability, perhaps. Also, on the face of it, the original Node.js project may have lost an argument about open source governance. But, members of the original Node.js project were, in fact, interested in an open governance model. Perhaps they were just unable to get there without seeing it in action with io.js.
What was gained?
In a real sense, the entire Node community gained. The creative impulse and open source ethos that underlies the essential spark of Node.js has been reinforced. The firm technical and organizational foundation of Node as a growing commercial entity is strengthened by the reconciliation. Community members and customers can gain confidence in the platform that will emerge stronger for having—and quickly moving past—a moment of crisis. The change in governance has underlined the idea that contribution and community are highly valued in the Node world, and that a sense of ownership comes from contribution.
In fact, I would go further to contend that this process has only further reinforced what I believe to be the creation of new models of open source. We are seeing radical new perspectives on openness becoming the new norm and the walls to our protected little gardens of code are being broken down while collaboration is celebrated. An exciting and vibrant future awaits as we form processes that encourage openness while providing the level of safety for those who need it—both developers and consumers of the end product.
Was this trip really necessary?
Ultimately, one has to ask whether all of this effort and turmoil was worth it? To this we can say, unequivocally, yes. From the perspective of the io.js community, the open governance model and all that came with it outweighed the risks of a fork. It has been the non-negotiable part of the reconciliation process and its success has found new support in many of the corporate backers of the new foundation. For the original Node.js project, a unified, stable and healthy Node.js Foundation was valuable enough to embrace the changes needed to achieve this new status quo.
NodeSource has been involved in both sides of this schism/reconciliation because we have been trying to drive toward a positive and successful future for Node. To achieve this future, Node needs an energized and engaged community and a governance model that will keep it moving and innovating. Node also needs the stability and certainty demanded by users who are investing significant resources in embracing the platform—many of whom are our customers.
Open source isn’t meant to be easy, the complex interactions of personalities and corporate forces create a messy process. However, it’s through that mess and the compromises that must be reached that we find the optimal path to success. In this case, the wisdom of the crowd can only be found when you engage with that crowd and give them a voice. That’s where we are aiming and we hope to have you as a companion on this journey.