Notes from Isaac Schlueter's Node Retrospective

 

These are my notes from Isaac Schlueter's talk at NodeConf 2012. These slides are online at http://j.mp/2012-state-of-the-node

This will be the most boring talk. This is where we're at and how we got here, and a little about where we're going.

node 0.2

  • First time Node promised not to change API for a little while.
  • A pretty big deal at the time, as 0.1.x had virtually no stability between releases.
  • No streams, inconsistent APIs, etc.

node 0.4

  • node_modules, localized module dependencies
  • Relatively well-tested functionality
  • util.pump() to connect streams
  • Unix-only (window=cygwin=pain)
  • Node's arrival as a Unix systems programming platform worth using

node 0.6

  • libuv - Proper windows support
  • zlib, cluster, Stream.pipe()
  • Easier: Fancy binary installers (pkg/msi), bundled npm
  • Microsoft involvement. Most APIs "just work" on win32, Azure, etc

node 0.7

  • Ryan Dahl names Isaac lead gatekeeper, moves to new role as advisor / mad scientist
  • Isolates: initially promising but ultimately not good
  • Domain module experiments
  • Tremendous growth in the node community. Wild, amazing growth

node 0.8

  • Significant improvements in stability and performance
  • Gyp is a first-class citizen (Waf is frowned upon)
  • Libuv is much more stable
  • Cluster is much more powerful
  • File-descriptors work again, which in node 0.4 was a common way to do a lot of things

require('domain')

The basic idea is that it's a way to bundle different I/O streams and different types of actions (things that can fail) so that when they do fail you have some context about what they were doing. It's a way to bundle up different event emitters. It's still very very experimental at this stage, and through the course of 0.7 we implemented it in a few different ways, and what we ended up with is pretty minimal but it's worth checking out. Please do experiment with it.

npm-www

This is a big deal and I'm working on it right now. You can go use this right now! It doesn't do a lot: http://new.npmjs.org and of course it's on github at http://github.com/isaacs/npm-www This addresses the core problem, which is that there are way way way too many modules! Last year I gave a talk about the npm registry, and in a year we've gone from 1800 to 12,000 projects! We're now at version 1.1.35 and the increase is speeding up. There are 3800 active package authors. Oral tradition got us this far ("this guy I know wrote this thing,") but as we hit this "hockey stick" effect it's really starting to break down, and what you have is people creating duplicates of things just because they didn't know that one was there already. The modules site should help us with this. My goal is to have it be something like what github is for git, but for npm.

node 0.9

We're limiting the scope dramatically:

  • HTTP refactor. TCP is really nice, but with HTTP layered on top of it, you have no idea what they were thinking when they invented this. Any HTTP client shows the horror that is HTTP. That needs to get cleaned up and factored a little better.
  • Libuv Streams refactor
  • Node Stream API cleanup
  • Faster SSL/TLS init

Deprecation

The days of Node breaking APIs on purpose are pretty much over, and we're growing up. If your program works today, we will try hard to make sure it works next year. No one expected Node to be this mature right now! This is why we've kept the core small. Sys is with us to stay, unfortunately.

Node 1.0

We haven't really decided what this means yet. Let's take this to the mailing list. Really, version numbers are like a form of marketing, and it's a way you give a particular message out to the world. It works, and people believe you, but it's unclear what 1.0 is.

Did you enjoy this post? Please spread the word.