Original URL: http://www.theregister.co.uk/2006/10/23/netkernel/
NetKernel - taming XML and Web 2.0
Out with the app server, in with a REST
After seven years in the making, and three years quietly simmering in production environments, 1060 Research's NetKernel is set to take on the corporate middleware mess.
No one can deny that enterprise middleware is in a crisis. Each silver bullet has failed to stem the growing complexity and ever-rising cost of incremental development. Not to mention the cost of learning new languages and frameworks. How does NetKernel solve this problem? Through ground-up abstraction.
At its core, NetKernel is a robust language-agnostic messaging-passing environment based around manipulating resources. Former HP Labs guy Peter Rodgers, who helped design NetKernel at the Labs and negotiated the rights to continue developing it in 2002, describes it as "the child of a union between Unix and the web".
Because NetKernel starts from the basis that everything is a resource, which can be encapsulated in a URI (Uniform Resource Identifier) address space, the choice of language or framework is secondary - that's just another pluggable resource. The other important concept is that it's stateless. So not only can the URI express the full result of the computation, but it can cache all the values of all the computations on the system (by contrast, Java can't cache the result of a method call). These are often cited as characteristics of a REST (Representational State Transfer)-like system.
"Maybe it's my background in physics, but I have this pathological compulsion to generalise," jokes Rodgers.
"Abstraction has its cost, but the payback is massive. We're only beginning to discover the consequences of doing software this way.
"One of the concepts we take from Unix is of execution contexts. The services at the end of a URI can be six line function calls, or they can be big services that are execution environments."
Rodgers agrees that "resource-centric" development is a huge mental leap for many programmers.
"Traditional developers are taught about code first, not about the information first. Code has its place in NetKernel, and lives inside little isolated islands like traditional software containers - but you link them together using this web-like addressing model.
"It also means you can start to use information in its most valuable economic form - as opposed to binding it into the code - where the only economic value is to the developer."
That'll cause a wry smile for a few software development managers. The most significant payback NetKernel has demonstrated in production is lowering the cost of change, says Rodgers.
"In traditional object-oriented systems all you can do is link to an API... so the cost of change is very high, and it ripples right through the whole system. You have to tear it down to accommodate change. In Net Kernel you step up from the objects: the database is a resource server, the web front-end is a resource consumer, and NetKernel is routing the requests."
This might have something to do with the O-O"ness" of today's tools. Ask many a Smalltalk-era veteran of what they think of Java and the polite answer might rhyme with "pig's ear". Its objects go as far the marketing literature, and not much further.
So was there much of culture shock for O-O developers?
"Only at first. Every one of them has made the transition, though, and they're building systems that are more tolerant and adaptive than before."
Rodgers doesn't blame developers for their prickly mindset, but rather the brutal economics they're presented with. Developers need to justify a big investment to learn a new language or framework, so it's natural they get very defensive. But languages all even out in the wash - they're not really significantly different once they reach a certain level of maturity.
NetKernel currently runs on a system with 12MB of memory and the Java 1.4 runtime. Performance results have in some cases shown dramatic improvements over a J2EE implementation, with a typical system running three to four times faster than a traditional app server.
Rodgers has some robust views on the state of software development. Although NetKernel grew out of XML (its project name at HP was 'Declarative XML Tranform Engine'), it isn't XML specific, let alone web-specific.
"Back in 1998 and 1999, we began building messaging and banking systems with XML and found it worked and gave us a lot of flexibility - the 'X' in XML is there for a reason. But as soon as you bind the XML to the object model, it becomes as brittle as the object model. XML is the most tedious brittle environment, and developers hate it."
And Web 2.0?
"It's as if people were comfortable with telegraph, then someone invents the telephone - but people carry on doing Morse Code over the telephone.
"A lot of this is baked up by people with agendas - and books to sell. What AJAX does change, however, is the characteristics of the web server - it's busier. But the web doesn't end at the edge, at the web server, it goes right down to the data. Think resources, and REST, and you can begin to inject caching at every level."
NetKernel is licensed under both the GPL and a commercial license. If you make your NetKernel-based source code available then you use the 1060 Public License, a reciprocal license. If you use it in a commercial application, then you pay. This is similar to the model for the BerkeleyDB database which Oracle recently acquired from SleepyCat. ®