I was asked an interesting question by friend of mine a few days ago. He says simply, “Are there any Cloud Operating Systems?”
I then proceeded to argue that no, there really were not any because all of the necessary pre-requisites for being both cloud native while providing the basic services an operating system should provide were not available in the current crop of software claiming to be a cloud operating system upon which I could build cloud native applications.
Let’s think about what an Operating System gives you. An OS is essentially an abstraction layer over hardware that provides the necessary interfaces(drivers) to get the work done that is needed by computer programs. At its most basic an operating system provides storage, networking, and compute and the management of those things in a fairly transparent way. It also provides a tremendous amount of flexibility to it’s user.
Wikipedia defines an Operating System as, “software, consisting of programs and data, that runs on computers, manages computer hardware resources, and provides common services for execution of various application software. The operating system is the most important type of system software in a computer system. Without an operating system, a user cannot run an application program on their computer, unless the application program is self booting.” -wikipedia
If I was to write the definition for wikipedia using the definition for an operation system as the bse then I would say, “A cloud operating system (COS) is software, consisting of programs and data, that runs on IaaS providers, manages IaaS resources, and provides common services for execution of various application software and SaaS. The cloud operating system is the most important type of system software in a cloud computing system. Without a cloud operating system, a user cannot run a cloud native application program on the cloud computer, unless the application program is self booting.
To me, this sounds most like what we currently often call Platform as a Service (PaaS).
The problem I have with current PaaS systems is that they dictate heavily and take away far too much from the programmer from the underlying services. This is a compromise of course. But, a true operating system is far more flexible than the existing crop of PaaS services. Just imagine if your newest operating system upgrade wouldn’t let you access ½ the CPU cores or the networking services for some reason and your manufacture just said, tough cookies because that’s just how it is. You’d probably try to return it if you could.
Where this got interesting for me in thinking about it later was the concept of “self-booting” that was mentioned in the wikipedia defintion above. If you build the necessary intelligence into your PaaS such that it can bootstrap an application, the storage, networking, and compute necessary to run and then manage that moving forward then you do, in fact, have something more resembling a cloud operating system as defined above.