We like to say NetKernel does Resource Oriented Computing (ROC). But what is ROC? One way to help understand is to ask “What drove us to create NetKernel?” The answer is simple; to take the properties of the World Wide Web and apply at the micro-scale to the inner workings of software systems. The motivation being to better manage the ever increasing scale and complexity with the vision of enabling the next generation of more ambitious systems.
Consider something as huge and complex as the Death Star. You don’t even want to imagine the number of interconnected systems which must inter-operate on it, everything from the nuclear reactor to the tactical command systems and from life support systems to storm trouper shift rostering. They all need to work pretty well together when you are relying on it to keep quarter of a million people alive in the depths of space whilst a battling against the Rebel Alliance. Think of use-cases like diverting power from the canteen to boost the shields or the forecasting from the battle intelligence systems feeding into the staffing allocations. It is clear that there is big difference between what is required here and the most complex systems of today. Complexity grows almost to the power of 2 with the number of interconnecting parts. There are a number of dimensions to the problem including the time to design, implement and test as well as managing and maintaining the systems in production but the key to many of them is finding ways to manage the complexity.
It is widely acknowledged that the web works well. It has scaled way beyond expectation in terms of number of nodes and in generations of technology it supports. However it’s remit ends once it dips just below the surface of the clients and servers which constitute much of it’s mass. This is intentional and is not a criticism. What lives below the surface and also in the multitude of other systems is software and lots of it. This is where we looked to apply the properties of the web. I’m not going to criticize what happens down here - a lot of smart people have worked hard for a long time. However if you feel paralyzed by layer after layer of complex and unfathomable APIs and you wonder why you now need a gigabyte of RAM to run anything non-trivial then you’ll understand our motivations.
The principles and constraints of the web are well documented in Fielding’s Representational State Transfer thesis. It turns out, maybe surprisingly, that all these constraints and principles apply equally well when applied at the micro scale within software. In our work we also discovered further refinements to the approach due the differences of scale. In future posts I’m going have a go elucidating them.