The definition of operating system in this article is so broad as to be meaningless. Words have meanings, and while the area of systems software on the whole is indeed quite nebulous, an operating system is a relatively specific subset that does not extend to Kubernetes or the a bytecode VM that runs as an application program.
The edges are still fuzzy of course, but I would expect at least a few things to be true generally:
an operating system takes over sole control of CPUs in a machine, from boot onwards
the operating system directly interfaces with features of the CPU for switching tasks and scheduling things
if the operating system was not present, or has broken somehow, the machine would be a brick
an operating system manages hardware resources like memory and network interfaces and storage devices, virtualising those resources and providing a mixture of sharing and isolation depending on policy choices the user makes
the operating system generally runs at some elevated privilege level beyond regular user software
most of the software that’s running on the machine is not the operating system, it’s application software that does something the user actually cares about
Kubernetes is ultimately application software that runs on top, using OS facilities and providing complex orchestration to co-ordinate a fleet of machines.
If your software uses the Berkeley sockets API to co-ordinate with other instances of itself over a regular TCP/IP network, it’s not the operating system.
This is, honestly, the reason that the typical definition of “operating system” doesn’t really make sense anymore. Layers of operating systems. Will the real operating system please stand up?
The hypervisor is the OS for the hardware, Linux is then the OS for the guest, virtual machine… in the traditional sense.
Like I said, the edges are a bit fuzzy, but there have been virtualised machines with hypervisors for a very long time, and I don’t think it defrays the meaning of the term. Generally the OS software that runs in a virtual machine is capable of operating the whole hardware, it’s just been constrained to a partition of sorts. That constrained slice could just as well have been made by a hardware partitioning technology instead of a software one. I think what makes the hypervisor and virtual machine concept so legible is that the idea of the OS inside retains its meaning.
I’m hugely sceptical of the value of unikernels, but it’s pretty clear that the library or framework you jam into an image alongside whatever application payload is an operating system. In this case it seems most correct to say that LING is a toolkit for making a complete operating system with an Erlang-based application payload included in the image, rather than that “Erlang is an operating system”.
I’m not sure “it’s pretty clear that the library for framework you jam into the image alongside whatever application payload is an operating system” is so clear. If that’s the case, then Linux running on Xen isn’t an operating system (based on your definition above), only the implementation of the Xen ABI is, which is just a small part of Linux as a whole.
The situation is more visibly clear with Erlang on Xen, which is why I brought that up specifically. Erlang has its own process isolation model, scheduler, and memory management. Typically, it uses the abstraction that the OS provides to provide these things, and on Xen, presumably Erlang’s implementation of these things is of much greater importance, in terms of how effective the underlying hardware is used, since the Xen ABI implementation is likely much less primitive than Linux itself.
But sure, all of this might be “fuzzy edges” and “fuzzy middles,” too, me thinks.
But now you have to classify Erlang as an operating system
I initially reacted negatively to this based on instinct, but have changed my mind especially because of this description:
Erlang has its own process isolation model, scheduler, and memory management.
If Erlang - or to be more specific, the Erlang VM - isn’t an operating system (especially with LING attached), then what do you call the software that ran Lisp Machines?
If Erlang - or to be more specific, the Erlang VM - isn’t an operating system (especially with LING attached), then what do you call the software that ran Lisp Machines?
To be clear, I’m merely arguing that the definition of an “operating system” is no longer as simple as it once was.
The Lisp Machines ran custom hardware and were designed to run Lisp efficiently. I assume the operating system was almost completely written in Lisp, minus likely, a small set of “assembly” routines to bootstrap a basic reader and compiler, to bring up a more capable system.
I forget the exact quote but it went something like “a programming language consists of all the bits they forgot to include in the operating system” so yeah, why not?
what’s your take on unikernels then? specifically thinking of mirage, although I don’t have a lot of knowledge in that domain, just read about it a while ago.
If your software uses the Berkeley sockets API to co-ordinate with other instances of itself over a regular TCP/IP network, it’s not the operating system.
This is possibly a way to define operating systems, and I think it’s one a lot of people understand.
I think I want a general term for a system that accepts code to run. orchestration tool is a contender, but that to me does feel more focused on aspects that make up a clustered system.
an operating system takes over sole control of CPUs in a machine, from boot onwards
I guess at that point that you would consider DCOS misnamed https://dcos.io/
I guess at that point that you would consider DCOS misnamed https://dcos.io/
This is called an “OS” because “distributed orchestration system” isn’t as recognizable from a marketing perspective. We can’t allow technical definitions to be redefined for marketing purposes.
Imagine the insanity of someone selling square roots of numbers, but marketing decided to call them qwijibos instead. Absolutely ridiculous! They are square roots!
Weird that they include Android but not iOS. I wouldn’t call either a distinct operating system; at that level they’re just distros of Linux / Darwin. And where are the BSDs? OP does mention embedded systems later on, and there are a ton of those.
IMO, a meaningful definition of “OS” requires that it interface with the bare metal of the machine it runs on. (Where the “machine” could be virtual, but virtual hardware.) Otherwise anything with an “eval” function is an OS.
There have been a few good talks (posted here!) recently about fostering OS experimentation and taking back control of the entire system (not just a part of the chip that Linux can nest in), and this is not one of them. A low point was the author credulously asking a chatbot to define basic terms for them.
Not trying to dogpile, but there isn’t a non-corpo contact option listed under the contact section… please remove text-align: justify. The rivers + lakes are so large on my phone & take it from someone with an art degree that there is not aesthetic value in justified text on the web.
Part of the reason is that for many classes of computer hardware, people just port Linux to it instead of writing a de novo OS. Being able to reuse substantial amounts of code from Linux saves a lot of time and effort, and results in Linux being an extremely versatile OS that encompasses a bunch of functionality that could reasonably live in multiple OS projects.
There is a whole world of realtime kernels for IoT/embedded devices the author may not be aware of. There is no mentioning of redox, the bsds, haiku or reactos. If kubernetes counts as an os then solutions like gokrazy surely must as well, but now the line between an os and a distro is starting to blur
I’ll give my heretical opinion: there are more, but they don’t matter in the slightest[1]. Because outside of our hyper insular tech-obsessed echo chamber where we argue endlessly about angels on pinheads, the vast majority don’t care in the slightest what OS they run. They run A Browser, or Word/Excel, or an App, or a Game. And we have a (relatively) small number of ecosystems to deliver what the users want, because why would we want to build a whole new delivery ecosystem from scratch when “butbutbut it’s a better OS” doesn’t sell anything[2]? No one is still using Posix because it’s the best gosh darn abstraction ever created.
Sure, once a ‘generation’, there’s a big change. Minis died for the PC, Windows->WinNT, MacOS->MacOS X, CP/M->MS-DOS, Novell->Windows. But usually, there was 1) a real reason that compelled users to change horses (often, it was “we’re changing horses, deal with it”) and 2) there was a bridge for at least the ‘big’ apps to the new platform. All those ‘better’ OSes that are going to destroy the old paradigms and change the world? You mean like BeOS? OS/2? Good times.
[1] Embedded is kinda different, there are lots of them and people reinvent the wheel constantly, but only because the ‘App’ in this case is inclusive of the OS. You don’t look at that Smartbulb and say ‘do I want to run VRTX or Linux on this bad boy’, you think ‘will this bulb work in the automation app I like’.
[2] Unless we’re Google or Apple. And we want an ecosystem where we get a cut of every one of those apps. And we can build a wall around it. But even there, while things have evolved a lot since introduction, at the beginning, from a dev perspective, Android looks enough like Linux and iOS looks like other Apple things. So it’s wasn’t completely rip-n-replace; they just slapped some new dev tools and APIs on top.
If an operating system is a platform for multiple apps to coordinate on, then the answer is there are, but they’re cloud-based systems that we aren’t even recognizing as operating systems. Like, dropbox should be considered part of an operating system. Part of your OS is on Dropbox’s servers (if you use dropbox). You might say “dropbox isn’t necessary for the computer to work”, to which I would respond that nothing past DOS is necessary, and yet we consider virtual memory to be an OS feature.
Most people have multiple devices, and the most important feature for an OS to have these days is to handle syncing etc between their devices - a feature which has seemingly been defined as not an OS feature. Anyone who starts a new “OS project” that doesn’t focus on that, is solving the wrong problem.
Honestly it’s wild that when you install an OS, the first thing it asks isn’t “what’s the address of your home server?”.
The definition of operating system in this article is so broad as to be meaningless. Words have meanings, and while the area of systems software on the whole is indeed quite nebulous, an operating system is a relatively specific subset that does not extend to Kubernetes or the a bytecode VM that runs as an application program.
The edges are still fuzzy of course, but I would expect at least a few things to be true generally:
Kubernetes is ultimately application software that runs on top, using OS facilities and providing complex orchestration to co-ordinate a fleet of machines.
If your software uses the Berkeley sockets API to co-ordinate with other instances of itself over a regular TCP/IP network, it’s not the operating system.
Timothy Roscoe defines an OS as
video slides
On a cloud VM, is the hypervisor the OS or is the guest OS the OS?
This is, honestly, the reason that the typical definition of “operating system” doesn’t really make sense anymore. Layers of operating systems. Will the real operating system please stand up?
The hypervisor is the OS for the hardware, Linux is then the OS for the guest, virtual machine… in the traditional sense.
Like I said, the edges are a bit fuzzy, but there have been virtualised machines with hypervisors for a very long time, and I don’t think it defrays the meaning of the term. Generally the OS software that runs in a virtual machine is capable of operating the whole hardware, it’s just been constrained to a partition of sorts. That constrained slice could just as well have been made by a hardware partitioning technology instead of a software one. I think what makes the hypervisor and virtual machine concept so legible is that the idea of the OS inside retains its meaning.
But now you have to classify Erlang as an operating system since it can run on xen.
I feel like a broken record, but, fuzzy edges?
I’m hugely sceptical of the value of unikernels, but it’s pretty clear that the library or framework you jam into an image alongside whatever application payload is an operating system. In this case it seems most correct to say that LING is a toolkit for making a complete operating system with an Erlang-based application payload included in the image, rather than that “Erlang is an operating system”.
I’m not sure “it’s pretty clear that the library for framework you jam into the image alongside whatever application payload is an operating system” is so clear. If that’s the case, then Linux running on Xen isn’t an operating system (based on your definition above), only the implementation of the Xen ABI is, which is just a small part of Linux as a whole.
The situation is more visibly clear with Erlang on Xen, which is why I brought that up specifically. Erlang has its own process isolation model, scheduler, and memory management. Typically, it uses the abstraction that the OS provides to provide these things, and on Xen, presumably Erlang’s implementation of these things is of much greater importance, in terms of how effective the underlying hardware is used, since the Xen ABI implementation is likely much less primitive than Linux itself.
But sure, all of this might be “fuzzy edges” and “fuzzy middles,” too, me thinks.
I initially reacted negatively to this based on instinct, but have changed my mind especially because of this description:
If Erlang - or to be more specific, the Erlang VM - isn’t an operating system (especially with LING attached), then what do you call the software that ran Lisp Machines?
To be clear, I’m merely arguing that the definition of an “operating system” is no longer as simple as it once was.
The Lisp Machines ran custom hardware and were designed to run Lisp efficiently. I assume the operating system was almost completely written in Lisp, minus likely, a small set of “assembly” routines to bootstrap a basic reader and compiler, to bring up a more capable system.
I forget the exact quote but it went something like “a programming language consists of all the bits they forgot to include in the operating system” so yeah, why not?
This quote just makes my point more relevant! The typical definition of “operating system” is no longer makes much sense.
what’s your take on unikernels then? specifically thinking of mirage, although I don’t have a lot of knowledge in that domain, just read about it a while ago.
This is possibly a way to define operating systems, and I think it’s one a lot of people understand.
I think I want a general term for a system that accepts code to run. orchestration tool is a contender, but that to me does feel more focused on aspects that make up a clustered system.
I guess at that point that you would consider DCOS misnamed https://dcos.io/
This is called an “OS” because “distributed orchestration system” isn’t as recognizable from a marketing perspective. We can’t allow technical definitions to be redefined for marketing purposes.
Imagine the insanity of someone selling square roots of numbers, but marketing decided to call them qwijibos instead. Absolutely ridiculous! They are square roots!
why are there not more illustrations on techblogs that aren’t meaningless neural net junk? 🙄
A combination of three factors:
Weird that they include Android but not iOS. I wouldn’t call either a distinct operating system; at that level they’re just distros of Linux / Darwin. And where are the BSDs? OP does mention embedded systems later on, and there are a ton of those.
IMO, a meaningful definition of “OS” requires that it interface with the bare metal of the machine it runs on. (Where the “machine” could be virtual, but virtual hardware.) Otherwise anything with an “eval” function is an OS.
There have been a few good talks (posted here!) recently about fostering OS experimentation and taking back control of the entire system (not just a part of the chip that Linux can nest in), and this is not one of them. A low point was the author credulously asking a chatbot to define basic terms for them.
Not trying to dogpile, but there isn’t a non-corpo contact option listed under the contact section… please remove
text-align: justify. The rivers + lakes are so large on my phone & take it from someone with an art degree that there is not aesthetic value in justified text on the web.Part of the reason is that for many classes of computer hardware, people just port Linux to it instead of writing a de novo OS. Being able to reuse substantial amounts of code from Linux saves a lot of time and effort, and results in Linux being an extremely versatile OS that encompasses a bunch of functionality that could reasonably live in multiple OS projects.
There is a whole world of realtime kernels for IoT/embedded devices the author may not be aware of. There is no mentioning of redox, the bsds, haiku or reactos. If kubernetes counts as an os then solutions like gokrazy surely must as well, but now the line between an os and a distro is starting to blur
I’ll give my heretical opinion: there are more, but they don’t matter in the slightest[1]. Because outside of our hyper insular tech-obsessed echo chamber where we argue endlessly about angels on pinheads, the vast majority don’t care in the slightest what OS they run. They run A Browser, or Word/Excel, or an App, or a Game. And we have a (relatively) small number of ecosystems to deliver what the users want, because why would we want to build a whole new delivery ecosystem from scratch when “butbutbut it’s a better OS” doesn’t sell anything[2]? No one is still using Posix because it’s the best gosh darn abstraction ever created.
Sure, once a ‘generation’, there’s a big change. Minis died for the PC, Windows->WinNT, MacOS->MacOS X, CP/M->MS-DOS, Novell->Windows. But usually, there was 1) a real reason that compelled users to change horses (often, it was “we’re changing horses, deal with it”) and 2) there was a bridge for at least the ‘big’ apps to the new platform. All those ‘better’ OSes that are going to destroy the old paradigms and change the world? You mean like BeOS? OS/2? Good times.
[1] Embedded is kinda different, there are lots of them and people reinvent the wheel constantly, but only because the ‘App’ in this case is inclusive of the OS. You don’t look at that Smartbulb and say ‘do I want to run VRTX or Linux on this bad boy’, you think ‘will this bulb work in the automation app I like’.
[2] Unless we’re Google or Apple. And we want an ecosystem where we get a cut of every one of those apps. And we can build a wall around it. But even there, while things have evolved a lot since introduction, at the beginning, from a dev perspective, Android looks enough like Linux and iOS looks like other Apple things. So it’s wasn’t completely rip-n-replace; they just slapped some new dev tools and APIs on top.
If an operating system is a platform for multiple apps to coordinate on, then the answer is there are, but they’re cloud-based systems that we aren’t even recognizing as operating systems. Like, dropbox should be considered part of an operating system. Part of your OS is on Dropbox’s servers (if you use dropbox). You might say “dropbox isn’t necessary for the computer to work”, to which I would respond that nothing past DOS is necessary, and yet we consider virtual memory to be an OS feature.
Most people have multiple devices, and the most important feature for an OS to have these days is to handle syncing etc between their devices - a feature which has seemingly been defined as not an OS feature. Anyone who starts a new “OS project” that doesn’t focus on that, is solving the wrong problem.
Honestly it’s wild that when you install an OS, the first thing it asks isn’t “what’s the address of your home server?”.