A lot of people have asked me lately about io.js and its place among Node Forward, the Advisory Board, and npm.
This is my own personal point of view. However, I have shared early drafts of this post with the io.js technical committee to ensure that it’s at least a reasonable approximation of how the team sees things.
What is io.js?
Io.js is a collaborative fork of joyent/node. Io.js is created by Fedor Indutny, a long-time active node core team member responsible for some of the most important parts of the Node.js runtime.
Io.js continues the work that was previously being done by Node Forward in the
node-forward/node repository. We hope to merge with the original Node.js project at some point in the future.
What is Node Forward?
Node Forward is an effort by Node.js core contributors, community members, and corporate interests, united in the desire to improve the Node.js project.
On July 11, Mikeal Rogers created a private
node-forward repository under his personal GitHub account to discuss the future direction of Node.js. Many of us felt that it was time to pursue a consensus-seeking contributor-governed process for the project, in a neutral foundation.
What is “node-forward/node”?
After a month in Mikeal’s private node-forward repository, the discussion was moved to the Node Forward organization in August, where it could be continued in public. The Node Forward organization included a (GitHub fork-button-style) “fork” of Node.js at node-forward/node, created with the express intent of merging changes with the joyent/node repository.
At that time, Mikeal wrote:
The first goal of the foundation is to house core development at a neutral organization that can support Node. Nobody prefers that work to be released as a fork and we will continue to work with Joyent to make them a member and even a leader of this foundation. Joyent may decide that the best thing for Node is to continue their own work in parallel to the work other contributors are taking under the foundation in a symbiotic manner that has propelled projects like Linux and BSD. In that case the contributors in the TC are committed to releasing as a “fork” although they do not find it preferable.
In the Node Forward repository, the core contributors involved in this effort formed a Technical Committee (TC), and came to consensus on governance process and broad technical direction. The TC consists of 6 of the top 8 Node.js core contributors. (Ryan Dahl has no current involvement with Node.js. TJ Fontaine was invited but declined to participate.)
Does Node Forward compete with Joyent or Node.js?
Joyent is a corporation that provides container infrastructure as a service solutions, including the Joyent Container Service, the Manta data storage and analytics platform, and the SmartDataCenter orchestration system. In 2010, Joyent purchased the Node.js copyright and trademark from Node’s original author, Ryan Dahl.
Node Forward is a group of community members and core committers who want to continue to work on improving Node.js as effectively as possible, using open self-governance in a neutral community foundation.
The goal of Node Forward is to work with Joyent and the rest of the Node.js community in order to improve Node.js. We respect Joyent’s significant investment in Node.js over the years, and we believe that a combined effort is beneficial to Joyent and to Node.
What is the Joyent Node Advisory Board?
On August 13, Joyent’s CEO Scott Hammond called to speak with me about the direction of Node.js. He indicated that he was also speaking to many other Node business, technical, and community leaders.
On September 26, he held a meeting to discuss the creation of an advisory board. He said he wanted to address the issues surrounding the Node project, and the board would be a way to get that process started.
The first official meeting of the Advisory Board occurred on October 23.
More information about the Joyent Node Advisory Board can be found on Joyent’s website.
Why was node-forward/node made private?
On October 9th (that is, after the initial bootstrapping meeting and before the first official Advisory Board meeting), Scott Hammond called Mikeal Rogers and told him that the node-forward/node repository was a violation of Joyent’s trademark on Node.js.
Hammond expressed that he saw this as a sign of bad faith, undermining his efforts in the creation of an advisory board. We agreed to make the repository private in order to show our commitment to working with Joyent on improving Node.js.
I brought up the issue in the third Joyent Node Advisory Board meeting on November 20. Scott Hammond reiterated that it is a violation of Joyent’s trademark to release code “based on Joyent Node.js which is also called node”, and that he intended to ensure that their trademark was protected “by any and all legal means”. He requested that we choose a name other than “node” if we make this project public.
By that time, there was also clear indication of forward progress at the JNAB meetings. We had taken steps towards a consensus-based open governance model not dictated by any one corporation. There had been several discussions of relaxing use of the “Node.js” trademark by businesses providing products related to Node. There was a clearer understanding of the role that the community might play in future Advisory Board meetings.
I am optimistic that the JNAB meetings will continue to be productive.
Why was io.js created?
On November 26, Fedor Indutny, an extremely prolific Node.js core contributor, and an active participant in Node Forward, decided that he would create a fork of Node.js with a different name, so that the technical work started in Node Forward could continue in public without violating Joyent’s trademark.
The Technical Committee that had previously been working on node-forward/node decided to move to the io.js repository. The other non-technical discussion repositories remain on the Node Forward organization at this time.
Does io.js compete with Joyent or Node.js?
The intent of io.js is to provide a space for the Node core team to continue to do the work of improving Node.
Io.js continues the efforts of Node Forward. We are committed to making forward progress and serving the Node.js community, both in technical and non-technical issues.
The work being done in the Joyent Node Advisory Board appears to be heading towards shared goals for the good of the Node community. I expect that this will continue.
The Node community as whole is endeavoring to make a change. The transformation is in progress and we expect to come out better for it. io.js is an ingredient in the process of change, a spark. The future is large, and we continue exploring it.
What are the goals of io.js?
In no particular order:
- Continuous integration
- 100% passing tests as a normal state of affairs
- Strict SemVer-compliant versioning
- Contributor ownership, outside of corporate control
- Transparent consensus-seeking governance
- Weekly releases
- Supported versions of V8
- Active development
- Predictable roadmap
- Community engagement
Assuming the Joyent Node Advisory Board continues to make progress towards these goals, we expect to merge the projects in the future.
What is npm’s position on Node forks?
Node’s community has always been its best feature. With over 100,000 modules today, covering a breathtaking array of use cases, used every day by millions of developers around the world, it is clear that the primary value Node provides is a small core enabling userland innovation.
Will npm be renaming to “ipm” since it’s the io.js package manager?
“npm” does not stand for Node Package Manager. It is officially an abbreviation for “npm is not an acronym”. We do enjoy novel pun-making though.
Edit 2014-12-11 – At the decision of the last TC meeting, it’s “io.js” or “Io.js” when capitalized, but not “IO.js”.