Microsoft announced that it is going to fork and extend Node.js, leading to concern over what the move means for the long term future of Node.js.

Microsoft has announced that it is going to fork and extend Node.js. Node.js is a platform for developing server-side applications based on the Javascript language. It was originally developed by Ryan Dahl and the open source community and later adopted by Joyent and runs on Google's V8 Javascript engine.

The new fork from Microsoft is based on Microsoft's Chakra Javascript engine and is said to facilitate the running of Node.js-based apps on Microsoft's Windows 10 IoT Core on ARM processors. In that environment, a typical Node installation won't work because the environment only supports JIT compiling with Microsoft's Common Language Runtime (CLR) and Chakra. Among the Windows extensions that Microsoft is including in the fork; the ability to access universal Windows Platform APIs.

The forked version of Node will work on other versions of Windows as well, raising concerns among developers about whether Microsoft's extensions are designed to lock-in developers as well as the users of those developers' apps into Microsoft's operating systems.

Given MIcrosoft's history of forking and extending other technologies like Java (where it also offered availability to Windows APIs), it's hard to tell at this point if this is good or bad news for the Node community. Microsoft's fork of Java, then a technology from Sun Microsystems (now a part of Oracle), sparked significant industry controversy and culminated in a $20 million legal settlement in Sun's favor.

On one hand, many of Microsoft's recent moves under its new CEO Satya Nadella seem to have it leaning away from the "all roads lead to Windows" approach it has taken in the past with Java and browser technology. For example, not only is Microsoft contemplating the open sourcing of Windows, it is developing mobile versions of Office for non-Windows operating systems like Android. So, this could be a good thing if Microsoft's motivations aren't about locking developers into Windows and truly guaranteeing portability across Javascript engines over the long run.

Microsoft appears to be calling this a "temporary fork" implying one of two long term outcomes; (1) somewhere down the line, its fork will be merged back into the official distribution of Node, or (2) it will fix the incompatibility between the official distribution of Node and Windows IoT Core running on ARM. Of the two choices, the former is highly unlikely, particularly if it involves extensions that require a Windows operating system.

Leaning in the direction of the first choice however, the authors of Microsoft's announcement --- Microsoft Chakra Senior Program Manager Arunesh Chandra and Microsoft Chakra Principal PM Manager Gaurav Seth --- wrote "We will be submitting a pull request to Node.js after stabilizing this code, fixing key gaps and responding to early community feedback."

Still, some developers like Dave Winer, a software developer that does Node apps, have expressed concern over what the move by Microsoft means for the long term future of the Node.js community and others are responding.

Said Winer in a blog post,

Until now Node has been a pretty stable thing. You can move Node apps from one system to another without much concern about compatibility. Now all of a sudden, that's not true. If you're running on Microsoft's Node you might get a different result than running on some other Node.

Responding to Winer's Facebook post regarding the matter (which was deleted after this article was published), the fear and loathing was palpable as evidenced by the posts displayed below:



In a statement that was clearly designed to assuage the concerns of the developer community, Chandra and Seth also wrote "The current set of changes not only enable developers to use Node.js on all devices running Windows 10, but also provide them an option to choose their preferred app model – Classic Windows v/s Universal Windows apps. Going forward, we plan to work closely with the Node Foundation, the Node.js Technical Committee(s), IO.js contributors and the community to discuss and participate in conversations around creating JavaScript engine agnostic hosting APIs for Node.js, which provide developers a choice of JavaScript engine that they would want to use in their Node.js workflow – all with the goal of making Node.js succeed across all platforms and devices."

Of course actions speak louder than words and so the developer community will no doubt be keeping a close eye on Microsoft as it develops its interests in Node.js.