The first fully converged io.js/node.js release coming soon.

Last week was a typical San Francisco summer, sunny with occasionally hostile winds. This was the setting for 40 node.js contributors to gather for the first ever Collaborator Summit, organized by the new Node.js Foundation.

A year ago we didn’t have 40 contributors to gather but today this represents only a fraction of the total contributor base (359 GitHub org members as of 8/12). This is due in large part to Joyent’s migration of node.js to a foundation and the merger of io.js into that foundation. As a unified project node.js has seen more progress than ever and will soon see Node.js v4.0 — the first unified release of the io.js and node.js codebases.

Timeline

February — Joyent announces formation of the Node.js Foundation at Node Summit.

— Joyent announces formation of the Node.js Foundation at Node Summit. March — Foundation By-law drafts are circulated.

— Foundation By-law drafts are circulated. May — io.js TC votes to enter the Node.js Foundation and merge with node.js.

— io.js TC votes to enter the Node.js Foundation and merge with node.js. June — Official launch of the Node.js Foundation w/ founding members.

— Official launch of the Node.js Foundation w/ founding members. July — Node.js Foundation Board of Directors established.

— Node.js Foundation Board of Directors established. August — First ever Node.js Collaborator Summit.

— First ever Node.js Collaborator Summit. September — Node.js v4.0 (first fully converged release).

— Node.js v4.0 (first fully converged release). December — World Domination.

For the last few months governance and development of io.js and node.js have happened jointly. While everyone involved would like to see a converged release happen as quickly as possible the TSC has also been dedicated to continuing regular releases of io.js and node.js 0.12.x which are in use by the developer community.

Along the way we discovered a few problems with the development and release process we were operating under and have also struggled with a recent sizable change to V8.

Native Modules

The module ecosystem is one of the best parts of being a Node developer. A tiny portion of these modules are what we call “native modules” meaning that they rely, in some way, on V8's C++ API and are not purely JavaScript. This has meant that every major release of node.js broke these native modules and they would each have to be updated to work with a newer v8.

In mid-2013 Rod Vagg released NAN (Native Abstractions for Node), a module which can be used by native module developers to simultaneously support multiple versions of V8 found in node.js (0.8, 0.10, 0.12, etc). This meant that developers didn’t have to write lots of code to handle varying versions of V8 but it didn’t stop native modules from being broken by new versions of V8.

For most of the history of NAN native module developers have been able simply upgrade their version of NAN to one that includes support for the latest version of node.js. Unfortunately, the deep dependency chains found in node.js modules means that it still takes quite a bit of time for the dependencies of a native module to be updated (and the deps of deps, and deps of deps of deps, and so on).

How many modules are we talking about? Less than 600 modules currently depend directly on NAN (less than half a percent of the total modules in NPM) but if you factor in all the deep dependencies on those modules up to 30% of the modules in npm depend indirectly on NAN. Being that it takes a while for these modules to all catch up to new versions the TSC developed a new release process which leaves a longer period of time for modules to upgrade before major releases go out that affect the native module ecosystem.

What does “io.js v3 is node.js v4 alpha” mean?

When io.js was first released it upgraded to a newer version of V8 (node.js was a few years out of date) and a new version of NAN was released to support it. Recent changes to V8 which are included in io.js v3 are much more profound and require not only a newer version of NAN but a breaking API change in NAN itself which requires code changes in all dependent native modules.

Knowing that this is a big change and that native module authors need time to catch up io.js v3 has been released, and will continue to be released in the coming weeks, for module authors to test and upgrade against. Node.js v4 will contain an even newer V8, but one that is already supported by the current version of NAN. This means that everyone who upgrades NAN to work on io.js v3 will also work with node.js v4 which is why we are calling io.js v3 an “alpha series” for node.js v4.

Node.js v4 will contain all the improvements made in io.js as well as features from node.js 0.12 that have not yet been present in an io.js release.

Having a converged project means converged release numbers which is why Node.js is jumping to v4.0 and avoiding overlap with any existing io.js version numbers.

Now, go ahead and download io.js v3 and start preparing for our next big release :)