In purely technical terms, io.js is a fork of Node.js—they are both JavaScript runtime environments that streamline the process of developing server-side applications. However, the relationship between these two open source projects is more complex than the term ‘fork’ might imply. The split is a clear lens into the way that many open source projects are managed, and the response communities can have to commercial stewardship.
The separation of the io.js community from Node.js and its subsequent return mark a major change in the question of how open source projects are best run. While these two projects are now merged, understanding the future of Node.js and the governance of open source projects requires a good understanding of io.js’s history.
A Quick History of Node.js
Node.js launched in 2009. Ryan Dahl and other developers working at Joyent invented the framework, leading Joyent to act as a commercial steward for the open source project. The JavaScript community quickly embraced Node.js, especially as new tools (like the npm package manager) arrived. While Node.js was initially created for Linux use, Microsoft worked with Joyent to create a native Windows version of Node.js in 2011.
Ryan Dahl stepped aside as the ‘gatekeeper’ of Node.js in 2012, handing over management duties to a fellow Joyent employee, Isaac Schlueter. Timothy Fontaine (another Joyent employee) took on the same role in 2014. Throughout this time, Joyent effectively held the reins of Node.js, making choices that frustrated some outside contributors. One of the key issues was the sense that Node.js was falling behind.
Joyent’s business model is based on using open source technology across the board. The company offers public and private cloud services, along with consulting and support. When Joyent released its SmartDataCenter and Manta Object Storage platform under open source licenses, the company immediately added to its stewardship responsibilities. Additionally, Joyent also leads the SmartOS open source project. This business model allows Joyent to make certain choices about the management of the various open source projects it controls—choices that those communities might not always choose for themselves. That element of self-interest is controversial at best.
The Dividing Question of Open Governance
In late 2014, Fedor Idutny, a Node.js contributor but not a Joyent employee, started the fork of Node.js that became io.js. Rather than relying on a commercial steward to provide management of the project (and therefore putting that steward in a position to make decisions not supported by the majority of the community), io.js was immediately organized under an open governance structure. A technical committee handled all decisions for the project.
According to an JavaWorld interview with Mikeal Rogers at the time, Idutny, and other Node.js contributors wanted to focus more on building a community around Node.js, rather than following Joyent’s top-down approach. Rogers said, “We’ve been working with Joyent since July to try and move the project to a structure where the contributors and community can step in and effectively solve the problems facing Node [including the lack of active and new contributors and the lack of releases]. My guess is that Fedor was tired of waiting and set io.js up. He didn’t promote it or anything, but those of us who were close enough saw it and jumped on. Then we moved all the Node core-related Node Forward work over, which has been building for some time but can’t do a release due to trademark restrictions.”
The initial members of the technical committee were:
Idutny
Schlueter
Trevor Norris
Ben Noordhuis
Bert Belder
with Rogers acting as moderator and secretary.
Even during the earliest days of the fork, however, the technical committee discussed an interest in rejoining the core Node.js project, provided Joyent be willing to hand Node.js over to a foundation with open governance.
The Technical Differences Between io.js and Node.js
One of the key issues cited for the fork was Joyent’s failure to push Node.js to stay current with the latest features of the V8 JavaScript engine. io.js was able to move quickly forward to create a more up-to-date tool. The speed at which io.js moved drove serious adoption.
On io.js’ website, the developers behind the project listed their mission as “Bringing ES6 to the Node Community.” The framework did exactly that, building in ES6 functionality almost immediately—winning over a host of users and creating a public sense that Node.js’ slow progress was unacceptable.
In May 2015, Raygun conducted a series of bench-marking tests comparing the then latest versions of both io.js and Node.js. The difference was substantial: there was a 14 percent increase in speed for io.js over Node.js when sending raw JSON responses. io.js had even managed a 5 percent speed increase over their previous release at that point.
The improvements that io.js brought to the table were drastic enough that there was some concern about speeding up a reunification in order to be sure that the two code bases weren’t too different when the time came to merge them.
A Reunification Under a New Organization
In mid-June 2015, the io.js and Node.js communities reintegrated under the leadership of the Linux Foundation. The Node.js Foundation is hosted by the Linux Foundation and has taken ownership of both the Node.js and io.js projects.
The press release issued by the Linux Foundation at the time described the new organization’s structure: “The Node.js Foundation today is also announcing its ratified open governance structure. The open, technical governance model that will guide the project was determined with input from the public, including contributors from both the Node.js and io.js communities. The model includes a Technical Steering Committee that will direct technical decisions, oversee working group projects and manage contributions to the node code base, and a Board of Directors to guide business decisions. The Node.js and io.js Technical Committees are merging to form the Node.js Foundation Technical Steering Committee, demonstrating the formal collaboration these communities will pursue to advance the code bases. Additionally, there will be an individual membership class, which will have representation on the board.”
The current technical steering committee for Node.js contains some familiar names, including Noordhuis, Indutny, Belder, and Norris. The project governance is arranged to offer as much transparency as possible, as well as to require consensus before moving forward. The Node.js Foundation will follow io.js’ lead in publishing regular updates, rather than leaving most information behind closed doors.
Rogers, then listed as the representative of io.js, said in an interview with InfoWorld at the time of the merge, “The goals of Node.js and io.js have never differed. We just had different ideas about how to achieve those goals and we’ve been able to reconcile those ideas into a much stronger merged project now.”
Belder, a contributor to both io.js and Node.js, followed up with an expectation of how the merger would impact day-to-day work: “From now on, the people formerly working on node.js and io.js will be working together again. To a certain extent, this was already the case, but we’ll now have our weekly meetings jointly and make decisions together.” He also added that technical improvements made in io.js would become available in Node.js.
The Future of Node.js and io.js Together
The newest release of Node.js (version 4.0.0) combines both the Node.js and io.js code bases into a single release. The new version essentially retires io.js as a separate code base. Improvements focused on merging in io.js’s advances and include:
V8 version 4.5 (the same version of V8 currently shipping with the Chrome web browser)
New ES6 features by default (including block scoping, classes, typed, arrays, and template strings)
Security improvements
Improved platform test coverage
Coverage of all major ARM variants
Arrow functions (a key feature that was not previously available in io.js)
Node.js v4 also establishes a plan for long-term support and a regular release cycle. The project has also moved to a new GitHub repository.
Node.js’s road map includes several key improvements that will make the framework easier use, including:
A debugging and tracing ecosystem
Automation tools
Improving installation and upgrades
Improving stream performance
Supporting internationalization and localization
More information about Node.js is available at the project’s website. The website for io.js remains live but has little activity—which ultimately shows the success of the fork. Because io.js existed, the Node.js community has been reinvigorated and has adopted new features. With the retirement of io.js as a separate framework, the developers behind both projects can combine resources and focus on building a lasting community around Node.js.
Furthermore, the existence of io.js drove a crucial conversation about the roles of commercial entities in the open source world. While there are some open source projects where commercial stewards make sense, the nature of open source development requires an open and transparent governance process wherever possible. The ramifications of Joyent handing Node.js over to a foundation will have ripples across the world of software development for years to come.