On November 26, one of the most prolific contributors to popular JavaScript platform Node.js went public with a divergent copy of the project—or a fork, as it’s known in the open-source world—called IO.js.
Since then, the future of Node.js has been brought into question as Node contributors and clients alike debated which version of the project they ought to use from now on.
This debate is possible because open-source licenses give developers the ability to copy and modify all of the software code for a given project. Most of the time, open-source communities try to sort out disagreements and keep one standardized version of the code. When they can’t agree, a fork results, with two or more versions of the code base developing separately.
And the debate matters, because big companies like Microsoft, Yahoo, LinkedIn, and Uber use Node for applications used by hundreds of millions of people. Developers at those companies will want to know which version of Node they can rely on.
See also: Popular Coding Framework Node.js Is Now Seriously Forked
Some open-source forks have made life difficult for developers. In this case, while the Node.js/IO.js fork is real, it hasn’t yet developed into the kind of contentious situation that will force developers to pick sides.
ReadWrite spoke to two big names in the Node.js community: Scott Hammond, CEO of Joyent, Node’s corporate steward, and Isaac Schlueter, the former Node project lead at Joyent who’s now CEO of NPM, maker of a Node package manager, and the second most prolific contributor to Node.
What we learned is that even if the fork has left users understandably confused, Node community leaders are on the same page on the biggest issues.
Here are some facts gleaned from the interviews that Node developers ought to know.
It Was A Surprise To Everyone
Previous to the November fork, there were tensions in the Node.js community. Earlier that month, we predicted there could be a schism. Since October, Node contributors had been using Node Forward, a community effort to improve the open source project, to air their grievances about Joyent’s stewardship.
According to Schlueter, six of the most high-ranking Node contributors had hoped to create a fork of Node named Node Forward, which would be a “collaborative fork,” a supplement to the work going on at Node.js. However, the fork was quickly made private after Hammond told the contributors there would be a legal issue if they used the Node name, on which Joyent holds the trademark.
Issues over the trademark were slowing down work, so in the last week of November, Fedor Indutny, one of the top contributors, decided to give it a different name, IO.js, and continue with his work. Since it was Thanksgiving break in America, the other contributors didn’t see that the new fork had become public until Hacker News picked it up. When that happened, even Indutny was surprised by the repercussions of the fork.
“The guy is allergic to politics,” Schlueter said. “When somebody pinged Fedor to tell him the fork was on Hacker News, he was like, ‘Oh, right, that’s what happens when you do something like this.’ He was surprised it was such a big deal.”
Hammond said that he doesn’t believe IO.js was intended as a bargaining chip for negotiations with Joyent about existing tensions.
“This was not premeditated, it was not some political coup,” he said. “It was a unilateral action by one individual to do some experiments with code.”
IO.js Wasn’t The First Name Choice
Schlueter noted sardonically that if they had kept the Node Forward name instead of choosing something unique, it would have been obvious that it was a collaborative fork. With the new name, however, even Joyent leaders were taken aback. Schlueter said that when the newly formed Node.js advisory board met after the fork, he fielded concern from Hammond.
“Scott was concerned and genuinely wanted to know, ‘Hey what is this? Are you giving up on this project?’” Schlueter said. “I reiterated that it is exactly the same as Node Forward, only we couldn’t use the name.”
Hammond said all the major IO.js contributors were invited to the advisory meeting, and after it was over, he felt that everyone was on the same page again.
“[Indutny] was just anxious to run some experiments with really early code,” said Hammond. “Fedor’s actions were interesting, but I think everybody has come back together unanimously. We’re still very committed.”
Interestingly, Ryan Dahl, the original creator of Node.js, wanted to call it IO.js. So Indutny’s name is a bit of a throwback to the project’s roots.
The Kernel Is Just A Small Part Of Node
It’s easy to see why people would assume a fork like IO.js is meant to replace Node.js. Yet that’s not the intent, according to Schlueter. In the Node community, there are two competing motivations that cause tension in the Node.js project that could be relieved by having two different yet collaborative forks.
“We have this really interesting structure with Node: a really small kernel that enables a really huge ecosystem,” said Schlueter. “Most people who use Node don’t know much about what the core runtime is. They use Express.js or Grunt—services built on Node and distributed with NPM. What’s interesting about that is that it makes Node anti-fragile. Unlike monolithic systems where too drastic a change will make the entire ecosystem fall apart, this sort of upset can actually make Node improve.”
Users need a consistent and stable Node.js in order for their dependencies to work. As a result, Node contributors complain that development is extremely slow and overly cautious. Since the Node kernel, which top contributors work on, is divorced from most people’s Node implementations, IO.js is supposed to be a place where contributors can work more quickly on the kernel and get things done without having to tiptoe over customer needs.
Because IO.js popped up in an unexpected manner, this wasn’t obvious to members of the Node community. To the aforementioned tensions in the Node community, news of IO.js wasn’t completely unwelcome in the community, even if nobody knew why the fork had occurred.
See also: What The Node.js Fork Really Means: A Dissident Speaks
“Basically whatever [a community member’s] personal beef was, they decided to hang it on IO.js,” said Schlueter. “We didn’t have our stuff together to actually tell them what the motivations were.”
Schlueter wrote a blog post as a first step to correcting those misapprehensions.
Node’s Problem Is Communication, Not Collaboration
In short, Node.js has a communication problem. Node Forward—now IO.js—was never meant to be separate from or incompatible with Node.
Since Schlueter is a former Joyent employee and the former leader of the Node.js project, he said he sympathizes with Hammond, who joined the company as CEO this summer. He believes Node.js and IO.js will merge again—but that Joyent has to be on board with the idea that Node can no longer be controlled by any one single interest.
“There’s this interesting transition that happens with an open source project where it goes from just one person, to needing some kind of organization heading it, to truly being owned by the community,” said Schlueter. “Node is shifting from step two to three this year. It can be difficult for a corporation to see the benefit of handing control to over to a community, but my hope is that Joyent is coming around to this.”
Hammond had similar sentiments about Node’s shift. Since 2009, the open source project has grown quickly. Today it has thousands of users, clients, and contributing developers.
“Node is a living project and it will continue to grow and evolve and mature,” said Hammond. “It blew past middle school without any structure to deal with these issues, so it’s not surprising there was discontent. Every project goes through growing pains.”
Hammond said that he still has trust in the Node community:
“Everyone wants a community-driven project, an environment with passionate, engaged software developers who can contribute to code and we have that. We can heal this fork.”
Update Dec. 10 5 PM – A quote by Isaac Schlueter has been clarified at his request.
Photo by zeevveez