I’ve been working with IBM i going on 10 years now, and it’s amazing to me how far things have come in this time. I’ve always got my eye open for the latest news around our platform, and one of the most exciting developments I’ve seen from IBM in a long time came back in October, when IBM published a feature list for IBM i 7.1 TR9. Among many other things, it was announced that a port of Node.js would be included with IBM i.
What is Node.js?
Node.js is an open source JavaScript runtime environment for executing JavaScript code on a server. The basic JavaScript engine is provided by Google’s high-performance V8 engine, the same that powers their popular Chrome web browser.
Node.js uses an event-based, asynchronous I/O model, and runs the application code in a single thread. This design allows Node.js to perform and scale extremely well while handling a large number of concurrent connections. It is also very well suited for creating more interactive web applications that push notifications to web browsers without waiting on the user to click a link, submit a form, etc. Think of the Instant Messengers and Notification systems that are built into many browser applications these days. Multi-threading and clustering are also supported.
For this reason, many big names in web technology and e-commerce are adopting Node.js to help with huge volumes of web transactions. Companies like PayPal, Yahoo, EBay, and many others that you can see here:
So What?
What is the news here, you may ask? You’ve heard this type of thing many times before, I know. Java was going to revolutionize IBM i, and IBM has long pitched WebSphere Application Server as “the” scalable and efficient enterprise application server for IBM i. I’d argue that “efficiency” has arrived only very recently (if you have a new high-end system, too), but that is another story. Then Zend came along, and we were supposed to be doing everything with PHP by now.
Both of these are open, popular, capable, and proven technologies. So, who needs yet another programming language, and yet another way to serve web applications? This brings us to another aspect of Node.js that I think is incredibly overlooked and under-hyped.
The World’s Brightest Development Talent, at Your Disposal (and their code actually runs on IBM i?!)
A large, talented, and excited community of software developers from around the world has grown around Node.js. These developers have put their passion and energy into creating a huge amount of quality and open-source software components or modules for Node.js. Many of these can be freely used by anyone, for any purpose. Available modules range from the latest in emerging web/networking technologies, to you name it.
These modules are organized into a public online registry and Node.js includes a simple command-line tool ‘npm’ (Node Package Manager) that can be used to install any them instantly. Much of this software is written purely in JavaScript. Modules can also be written in C/C++ (which actually runs in PASE in our case). These are also supported on IBM i, through the GNU Compiler Collection (GCC) which can be easily installed in PASE.
To me, this is incredibly huge for IBM i. Innovation in software development is accelerating tremendously, as developers are capitalizing on the huge wealth of quality open source software packages which are available. Until now, much of this has been happening on the ‘popular’ OS platforms, Windows, Linux, Unix, etc., while technology on IBM i has always seemed to lag behind. If this were to continue, it would be a serious problem for the future of the platform, as developers targeting IBM i and stuck with outdated technology could not hope to keep up for long.
To be fair, IBM has taken some big steps to improve on this in recent years, though more aggressive and frequent updates and technology refreshes. But still, IBM could never hope to adapt as quickly or deliver the variety of technology that a large, passionate, and world-wide community can produce. Now, all of this technology is at our finger tips, and can be installed in a second with a single command!
Node Package Registry is a Potential Game-Changer
How easy is it for us to leverage all this technology on IBM i today? A couple of examples…
Want to implement a WebSockets Server to create web applications that push notifications to the client? Before Node.js, you would have wait on IBM to roll out an implementation for IBM I – assuming they even plan to. Or, more likely, you would develop your application for another platform. Today, there is not just one, but actually several implementations that can be installed and running on IBM i in minutes and used freely for any purpose. Take your pick, a command like this run at the PASE shell will install one:
npm install engine.io
Need a full-featured API for manipulating image files in your programs? No problem, this will fetch one:
npm install imagemagick
I could go on and on here, but I think you get the idea. To me, this is the “big news”, it has the potential to revolutionize innovation on IBM i by bringing web technology more in line with what is available on other platforms, while allowing us to benefit from all of IBM i’s own advantages. This could be huge!
I see this technology as being more geared towards ISVs and tools vendors than your typical corporate IT shop using IBM i, but there is certainly a lot of potential to affect innovation on IBM i in a big way.