November 6, 2017linux os abstraction opinion
Well, I’ve had some time to digest my thoughts, and I think it is time for, a second blog post.
Whenever I think something needs redefining, the first thing I like to do is look for a definition (shocking right?). The Merriam-Webster dictionary defines and Operating System as:
Software that controls the operation of a computer and directs the processing of programs (as by assigning storage space in memory and controlling input and output functions)
The problem with this definition is that it is too anchored in the challenges of early computing that involved managing the hardware nuances of different machines and creating a predictable environment in which to work at a higher level.
Fast forward a few decades, and we are living in a world where the challenges of computing, solved each in a separate way, are taming the unique complexities of different devices for the purpose of operating different classes of predictable environments for different types of users.
We spread the gospel of Linux, because it has done so much to advance the state of operating systems and put everyone on the same page when it comes to bringing systems from a hardware level, into the world of software. But companies like Apple, Google, and Samsung build different layers of systems on top of unix/linux. Are these systems not also “operating systems?” Does a system really have to be dealing in bits to be called an operating system?
If you really do need to be managing a physical computer to be an operating, what does an OS become when it is on a virtual machine? It clearly has a purpose since we use virtual machines all the time, but it isn’t an operating system by our old definition, it is in fact, a brilliant hack.
Here is an even more controversial one, is a desktop manager like GNOME or KDE an operating system? I would argue that it is. When you hear my definition of an operating system, you will understand why. In my mind, an Operating System is:
A collection of components that work together atop a general purpose machine to make a consistent interface that is more conducive to a particular purpose.
You may be wondering why I care so much about what constitutes an OS. The answer is pretty simple. If we redefine an OS like this, an OS gains a property that I believe to be essential to the challenges of computing that lie ahead.
Operating Systems become composable.
Composability is a very important topic in software engineering. In fact, it is a major component of the Unix philosophy that embodies the spirit of most of the successful operating systems in use today.
As the number of different devices grows, so will the number of things we do with those devices. In the same vein, the things we do with those devices, we will inherently want to be able to reproduce on other devices, from slight changes in marketed products, to full on simulations in different environments.
Moving our definition of an Operating System away from the metal, will allow us to define clear, standard interfaces that our operating systems provide along with clear, standard interfaces that our operating systems consume. The technology world will benefit greatly if we put an end to hacking together virtual machines, container solutions, and Operating Systems built on stripped down modified versions of other operating systems.
*As usual, views expressed are my own, and do not represent those of my employer.