LWN: Comments on "IncludeOS: a unikernel for C++ applications" https://lwn.net/Articles/728682/ This is a special feed containing comments posted to the individual LWN article titled "IncludeOS: a unikernel for C++ applications". en-us Mon, 01 Sep 2025 19:50:48 +0000 Mon, 01 Sep 2025 19:50:48 +0000 https://www.rssboard.org/rss-specification lwn@lwn.net IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/729841/ https://lwn.net/Articles/729841/ perbu <div class="FormattedComment"> It is worth noting that port of IncludeOS to ukvm/solo5 that IBM has done boots, executes and exits in 4-5 ms. So it definitely possible for a unikernel to go way faster than Linux.<br> </div> Fri, 04 Aug 2017 07:01:07 +0000 Do Unikernels even have real value? https://lwn.net/Articles/729763/ https://lwn.net/Articles/729763/ perbu <div class="FormattedComment"> The amount of legacy shit we currently have to deal with in order to boot virtual machines is incredible. If virtual machines didn't have to pretend it's 1982 development would be a lot quicker.<br> <p> The reason unikernels need to run in ring 0 is only because of legacy. At some point I expect IncludeOS to start in ring 0, set up page tables and hardware and then chain-load a second includeos unikernel that is running in ring 3. As they are single process the need to restrict access to things like virtual network adaptors is not needed.<br> <p> But even if we're running in ring 0 trying to compromise a virtual machine with an unknown memory layout and no system calls is .,. challenging. And contrary to what you're indicating there is nothing magical about running in ring 0. Code doesn't automatically get insecure by escalating its privileges. If your application is running on ring 3 on a Linux server that application has a lot more control over the vm than a unikernel has. If I compromise your linux application I can execute the shell, write files, execute processes, call home and do all sort of crazy stuff. If I compromise a Unikernel I can ... well, there isn't really much you can do as everything that isn't explicitly used by the application gets left out by the linker. <br> <p> Even if there is functionality to say, connect home, how would you call that function? Trying to guess 64 bit addresses?<br> </div> Thu, 03 Aug 2017 14:59:38 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/729759/ https://lwn.net/Articles/729759/ perbu <div class="FormattedComment"> The dev branch of IncludeOS does support SMP. For an upcoming delivery we need to do TLS at scale and we're using SMP to handle a large amount of incoming TLS connections.<br> <p> So multicore is supported. Sort of, at least.<br> </div> Thu, 03 Aug 2017 14:43:12 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/729514/ https://lwn.net/Articles/729514/ smckay <div class="FormattedComment"> That's my take as well. If what you want is to ignore OS administration as much as possible, there are multiple cloud vendors working very hard on that. You even get logging!<br> </div> Wed, 02 Aug 2017 02:14:24 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/729491/ https://lwn.net/Articles/729491/ viesti <div class="FormattedComment"> I might be totally off, but to me services like AWS Lambda provide some of the unikernel idea (narrowly scoped services), but with a very convential infrastructure. I'd think that these services would be a tough competition for unikernels.<br> </div> Tue, 01 Aug 2017 19:26:04 +0000 Do Unikernels even have real value? https://lwn.net/Articles/729301/ https://lwn.net/Articles/729301/ robbe <div class="FormattedComment"> For hypervisors in general, you are right. But unikernels eschew user space, so you are only left with rings -1 and 0…<br> </div> Mon, 31 Jul 2017 14:29:29 +0000 Do Unikernels even have real value? https://lwn.net/Articles/729243/ https://lwn.net/Articles/729243/ paulj <div class="FormattedComment"> The one difference is hardware protection. You now have the hypervisor in ring -1, the guest kernel(s) in ring 0 and userspace(s) in respective ring 1s. Each with different hardware privilege levels.<br> <p> </div> Sun, 30 Jul 2017 10:05:38 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/729167/ https://lwn.net/Articles/729167/ epa <div class="FormattedComment"> Moreover, remember that a Linux process's execution environment can also be considered a virtual machine. It certainly isn't running on the physical hardware with physical addresses...<br> </div> Fri, 28 Jul 2017 20:31:12 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/729143/ https://lwn.net/Articles/729143/ flussence <div class="FormattedComment"> It sounds like there's some logic to the design choice: not bothering to support multiple cores neatly sidesteps having to think about or write code for whole classes of problems - no need to handle scheduling, synchronisation or IPIs in every program, just pure computation and bit-banging virtio devices.<br> <p> The downside is that ignoring the problems won't make most of them go away; to avoid side-channel attacks you'll need a whole air gap between instances, not a hypervisor.<br> </div> Fri, 28 Jul 2017 16:22:21 +0000 Do Unikernels even have real value? https://lwn.net/Articles/729095/ https://lwn.net/Articles/729095/ alonz I'm in the camp that considers the entire idea of unikernels to be a net <em>regression</em> in almost all meaningful metrics. <p> When you ignore the hype, a hypervisor is no different than a run-of-the-mill kernel. It has precisely the same tools at its disposal for dividing resources among tasks (sorry, &ldquo;domains&rdquo; is the new buzzword for those) and protecting them from interfering with each other. The only true difference is that hypervisors expose a lower-level API (virtual hardware) vs. kernels' richer interfaces, which actually gives the hypervisor <em>less</em> power to regulate behavior. <p> When this is combined with unikernels, we have <em>userspace</em> code running in the CPU's protected mode&mdash;which means vulnerabilities in this code give attackers even more powerful tools to play with. And this code talks to hardware via minimally-protected interfaces. Nothing to worry about, right? <p> In short: I hope this remains as an academic exercise. And I doubt any serious cloud providers will allow such magical-thinking solutions near their hardware. Fri, 28 Jul 2017 07:22:27 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/729015/ https://lwn.net/Articles/729015/ clugstj <div class="FormattedComment"> An OS that only supports a single CPU core?<br> </div> Thu, 27 Jul 2017 12:07:59 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/728901/ https://lwn.net/Articles/728901/ drag <div class="FormattedComment"> I think that sometimes people have a wrong perspective on virtual machines vs containers vs applications. <br> <p> The virtual machine itself really is just a special case application. The virtual machine is not 'emulated PC' anymore. There is no interpretation of cpu instructions going on. The application code running in a virtual machine is executing on the CPU just like any normal application. Just has a couple extra layers of memory address abstraction and whatnot. <br> <p> Modern VMs depend heavily on paravirtualization to be efficient. They are aware of the cpu types and make all sorts of efforts to reduce software layers between applications and physical network and physical storage to as minimal as possible. As time goes on the VM becomes more and more aware that it is a VM. <br> <p> So what we end up with is really much closer to Java virtual machines then anything else. Major difference is that instead of executing Java bytecode they use x86_64 machine code. <br> <p> After all this really isn't that much different then the same sort of transition that happened when you went from 'single user' application environments like a DOS.. which was little more then a fancy program loader.. to multi-user multi-process environments. Throw in some memory address abstractions and there you go. <br> <p> And if a attacker is able to seize control of a virtual machine, which shouldn't be very difficult, then <br> it's not much more difficult to attack the hosting system then it is if you took over any other userland process like Firefox. If you want substantial improvements in security you are still going to need to depend on available DAC and MAC controls in the host OS to aid in the natural sort 'sandboxing' that VMs offer.<br> <p> All these things... running virtual machines, containers, or executing applications... really should be thought of as pretty much the same things. There isn't a really good reason, other then historical happenstance and tradition, why they are treated so differently. <br> <p> </div> Wed, 26 Jul 2017 15:36:47 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/728900/ https://lwn.net/Articles/728900/ Tara_Li <div class="FormattedComment"> The biggest advantage I see is the reduced attack surface. You can turn off services, you can block them from not connecting to the outside world - but if they're never compiled into existence in the first place, they *cannot* be turned back on, or unblocked. And if it were running on bare metal instead of in a VM, your responsiveness would likely be a lot more predictable.<br> </div> Wed, 26 Jul 2017 15:06:16 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/728895/ https://lwn.net/Articles/728895/ jhoblitt <div class="FormattedComment"> There are some novel uses for ulta-fast boot times. Imagine a service that follows a pre-fork style pattern but instead of fork()ing, spawns a new unikernel to handle each incoming request. That probably earns the service some extra tin-foil points.<br> <p> My continuing ignorant and naive concern about the basic concept is debugging. In particular, some sort of valgrind analog... <br> </div> Wed, 26 Jul 2017 14:45:18 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/728886/ https://lwn.net/Articles/728886/ josh <div class="FormattedComment"> <font class="QuotedText">&gt; Booting up in 100 ms instead of two seconds is surely nice, but is really VM startup time an important metric in a cloud deployment?</font><br> <p> VM startup time is important, but these days, you can boot a Linux VM in around 150ms. See the Clear Containers work.<br> <p> I do see value in these kinds of unikernels for other purposes, such as experiments in reduced overhead between the application and network. (On the other hand, you can also do that with Linux, and bypass its network stack. One of these days I hope we improve the Linux network stack to the point that nobody feels the need to.)<br> <p> But for boot time, no, I don't think this helps.<br> </div> Wed, 26 Jul 2017 14:14:09 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/728873/ https://lwn.net/Articles/728873/ mato <div class="FormattedComment"> <font class="QuotedText">&gt; You also lose multiple major benefits of normal OSes. The unikernel is almost certainly not as scalable, tested, or featureful as the kernel it replaces (definitely true here!)</font><br> <p> That's only partially true. Modern green-field unikernels can provide better implementations of existing features (e.g. MirageOS' type- and memory-safe TCP/IP and TLS stacks). And the implementations will mature with time and use, as does all software.<br> <p> <font class="QuotedText">&gt; and you are essentially taking yourself back to the 1960s, when all OSes were distinct monsters tied to specific preferred languages with unique APIs, and if you wanted to introduce something in a different language you were suddenly writing lots of bridging layers</font><br> <p> I'd argue that you'd face the same problem (bridging language "worlds" and competing runtimes) in any conventional application where you use multiple languages in the same *process*.<br> <p> <p> </div> Wed, 26 Jul 2017 12:59:08 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/728860/ https://lwn.net/Articles/728860/ nix <div class="FormattedComment"> You also lose multiple major benefits of normal OSes. The unikernel is almost certainly not as scalable, tested, or featureful as the kernel it replaces (definitely true here!), and you are essentially taking yourself back to the 1960s, when all OSes were distinct monsters tied to specific preferred languages with unique APIs, and if you wanted to introduce something in a different language you were suddenly writing lots of bridging layers: as for switching away from IncludeOS if you found you needed something a real kernel can provide, forget it.<br> </div> Wed, 26 Jul 2017 10:47:19 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/728858/ https://lwn.net/Articles/728858/ mnowak@suse.com <div class="FormattedComment"> Agreed. Maybe if Linux (SELinux-less) containers actually contained, we would not have to bother with this concept at all. For every such article should mandatory to answer concerns from <a href="http://dtrace.org/blogs/bmc/2016/01/22/unikernels-are-unfit-for-production/">http://dtrace.org/blogs/bmc/2016/01/22/unikernels-are-unf...</a>, I believe.<br> </div> Wed, 26 Jul 2017 10:05:40 +0000 IncludeOS: a unikernel for C++ applications https://lwn.net/Articles/728856/ https://lwn.net/Articles/728856/ Sesse <div class="FormattedComment"> So, a question I never really see answered in this kind of context is: Is it really worth it? Sure, the OS is 1/100 the size of a full Linux installation, but so? Is really 64 MB extra of RAM per instance (and some disk space) an issue if your software uses gigabytes of it anyway, and is it worth giving up significant amounts of debuggability and compatibility for? Booting up in 100 ms instead of two seconds is surely nice, but is really VM startup time an important metric in a cloud deployment? How do the TCP stacks of these things stack up against modern OSes anyway, and what happens if you actually need to use multiple cores in a non-trivial way?<br> <p> /* Steinar */<br> </div> Wed, 26 Jul 2017 09:45:48 +0000