Clive OS: Go applications that can run without an operating system (2016)
lsub.org
lsub.org
Are there security benefits? Probably. Better performance? Could be. But why did they come up with their solution? What about differences with other Unikernel approaches? I mean its a research lab, not a hobby project.
To answer your question:
> Better performance? Could be.
That's one aspect. If you follow the link from the Clive page to its predecessor Nix[3], its tagline is "high performance cloud computing is nix". A current (2018) justification for that project can be found in the form of an abstract for a paper with the same name[4].
But then the other part is given away in the abstract for Clive itself: "Clive introduces new file system technology and novel interfaces for the construction of networked system"[5], which is another way of saying that this is blue sky research, which is itself a codeword for we decided to try out a bunch of things purely _because_ they're different and want to see if anything will come out of it. Notice how the screenshot here shows the OS shell is some sort of acme-like[6] made to run in a web browser, for example.
To repeat my earlier remark, the author's other pages are well worth a look. For example, don't miss this[7] page chock full of links to research OSes (although many of them are dead). Or there's Picky[8], which looks like what you'd get if you took Pascal/Oberon and more or less did a transliteration so that the grammar gives you a curly brace language instead of a wordy, shouty one with BEGIN, END, etc.
1. https://news.ycombinator.com/item?id=16253193
2. http://lsub.org/ls/nix.html
3. http://lsub.org/ls/nix.html
4. http://lsub.org/ls/nixbltjabs.pdf
5. http://lsub.org/export/clivesys.pdf
6. http://syssoftware.blogspot.com/2016/02/clives-ink-screensho...
- [1] https://jisajournal.springeropen.com/articles/10.1186/s13174...
disclosure: I'm one of the authors
For context, Clive Sinclair is most famous for the ZX Spectrum computer https://en.wikipedia.org/wiki/ZX_Spectrum
if you work in a model where you never upgrade servers, just bring up new ones and turn down old ones, doesn't it seem cleaner? obviously they both work.
Typical docker is just a glorified chroot under a shared Linux kernel. With namespaces it asymptotically approach a bsd jail.
But the "easy" way to get some real isolation, is to use hw support for virtualization - but now you need a kernel (software that enable programs to talk via a fixed abstraction to hardware; drivers for real and emulated hw).
And you've reinvented 5% of the magic dust that IBM put into mainframes.
There are still a lot of kinks to be worked out. For one, what is the debugging story when you can't SSH onto a VM? Or do you compile into your application something analogous to SSH? If so, does that mean you're bringing in much of the "unnecessary baggage" that makes unikernels so compelling in theory?
I'm excited, but cautiously so.
If we could bring all of the benefits of containers to the VM world (including subsecond boot times), I think that could revolutionize at least cloud computing (if not other forms).
I do know I sometimes get annoyed with something like a web app or service needing a whole OS, to largely do nothing except use resources unnecessarily. Something that can see storage and that has an IP Stack would free up a lot of resources.
I don't think the OS is consuming a whole lot of resources on the scale of a web service. You might get some performance improvements from static linkage vs syscalls, but I'm guessing the "performance improvement" story is mostly one of latency (startup times) and not throughput.
Mostly the nice bit of getting rid of the OS is improved startup times, reduced attack surface, and an easier-to-reason-about system.
This probably impacts tooling as well--you can actually compile your entire image from source code instead of needing to fire up an instance, script changes to it, shut it down, then copy it.
You get proper isolation at the "hardware" level, with performance and efficiency probably not very far from containers, or at least good enough for most use cases (with VT-x, etc.).
Some of the issues of containers disappear (cross-platform support, for one), but we gain others instead, which prohibits me from attempting to use this in production for the immediate future. (Side note: is anyone actually using unikernels in production today? Please share your experience.)
It took us quite a while to get the orchestration part right for containers, and even today, a lot of companies struggle with it. Not to mention writing tools for storage management, debugging, etc.
We need similar tooling for unikernels+VMs, and I haven't seen such initiatives yet. That's OK, it's still a young platform, but I'll definitely be keeping my eye on it.
https://galois.com/project/cyberchaff/
The TCP/IP stack from Docker is based on MirageOS code.
https://blog.docker.com/2016/05/docker-unikernels-open-sourc...
You would lose language interchangeability on the system until someone wrote compilers for the other language software that they want to support.
And who doesn't like to write compilers in their favorite language.