> A minimal bootable image, including bootloader, operating system components and a complete C++ standard library is currently 693K when optimized for size. WOW. That's just nuts! I mean I know linux can be slim, but thats less than a meg! Really very exciting stuff. I don't know if I should play JC3 or tinker with this.
I'm pretty sure you can find MIPS Linux images with Busybox et. all. that weigh less than that. A lot of routers run Linux on 2M eproms including user space.
IncludeOS: C++ unikernel now free and open source
21–30 of 43 posts
Re: IncludeOS: C++ unikernel now free and open source
#22Earlier quoted context omitted.
Not strictly, no. While currently they only support the "hardware" in KVM/QEMU/VirtualBox, there's nothing stopping anyone implementing drivers for whatever hardware they want to run on, even bare metal. This probably means integrating whatever Ethernet adapter you have, and some way of sending/receiving stdio, probably over serial or something. Sideline: I'm particularly intrigued by the idea of implementing drivers…
> I'm particularly intrigued by the idea of implementing drivers for AWS EC2, so you can run this as your AMI. Yup. Kind of like a skimpy version of OSv.
Re: IncludeOS: C++ unikernel now free and open source
#23Earlier quoted context omitted.
I have a port of Alan Cox's Fuzix for the MSP430 where the entire bootable ROM image is 27kB. (That's actually quite big for a tiny-computer OS, although it's the smallest Unix I know of.)
I seem to recall the QNX kernel is pretty slim as well.
Re: IncludeOS: C++ unikernel now free and open source
#24Earlier quoted context omitted.
When using a unikernel design there is no isolation between a single node software components like an OS can provide. All the code share the same memory space. Isolation can be useful. For example the Postfix email server (running on a Unix, not unikernel) is decomposed into several processes with different privileges. That allows running the most sensitive parts with limited access rights, to protect against attacks…
> That allows running the most sensitive parts with limited access rights, to protect against attacks, while still running those parts on the same server for efficiency. This process isolation is typically not provided with unikernels. Unikernels also don't have notions of access rights. To make that model work, more than memory safety, you need declarative ways of asserting constraints, which... C++ arguably can pul…
Re: IncludeOS: C++ unikernel now free and open source
#25Earlier quoted context omitted.
It still needs a 'real' OS (e.g. Linux) running as the Hypervisor. The entire concept appears to me like a fancy ELF, cause we couldn't solve the problem of packaging software in a portable way before, apparently.
Not strictly, no. While currently they only support the "hardware" in KVM/QEMU/VirtualBox, there's nothing stopping anyone implementing drivers for whatever hardware they want to run on, even bare metal. This probably means integrating whatever Ethernet adapter you have, and some way of sending/receiving stdio, probably over serial or something. Sideline: I'm particularly intrigued by the idea of implementing drivers…
Exokernels (https://en.wikipedia.org/wiki/Exokernel) essentially implement this. Hardware has been adding more support for virtualization though, so I imagine unikernels are better able to take advantage of things like virtualized page tables, virtualized io-mmu, etc...
I'd be curious to see benchmarks for something generally IO bound like PostgreSQL or HyperTable. IO scheduling isn't trivial, so it might give a good idea of what some of the trade-offs might be.
Re: IncludeOS: C++ unikernel now free and open source
#26Earlier quoted context omitted.
It still needs a 'real' OS (e.g. Linux) running as the Hypervisor. The entire concept appears to me like a fancy ELF, cause we couldn't solve the problem of packaging software in a portable way before, apparently.
> It still needs a 'real' OS (e.g. Linux) running as the Hypervisor. It runs against hardware virtualization... I'm not sure I understand why it needs a "real" OS underneath. At least in theory it should be able to run on bare metal as long as you include logic for whatever device drivers you might need.
Re: IncludeOS: C++ unikernel now free and open source
#27Earlier quoted context omitted.
When using a unikernel design there is no isolation between a single node software components like an OS can provide. All the code share the same memory space. Isolation can be useful. For example the Postfix email server (running on a Unix, not unikernel) is decomposed into several processes with different privileges. That allows running the most sensitive parts with limited access rights, to protect against attacks…
> That allows running the most sensitive parts with limited access rights, to protect against attacks, while still running those parts on the same server for efficiency. This process isolation is typically not provided with unikernels. Unikernels also don't have notions of access rights. To make that model work, more than memory safety, you need declarative ways of asserting constraints, which... C++ arguably can pul…
No, it's not. The memory unsafety in C++ is fundamental to the language (think iterator invalidation). It has nothing to do with C compatibility and comes up all the time in well-written C++ code in practice.
Re: IncludeOS: C++ unikernel now free and open source
#28So anyone know how small the L4 kernel is compared to this?
L4Re was the first attempt I believe at an environment for apps on L4:
Re: IncludeOS: C++ unikernel now free and open source
#29Earlier quoted context omitted.
> That allows running the most sensitive parts with limited access rights, to protect against attacks, while still running those parts on the same server for efficiency. This process isolation is typically not provided with unikernels. Unikernels also don't have notions of access rights. To make that model work, more than memory safety, you need declarative ways of asserting constraints, which... C++ arguably can pul…
Possible, but not necessarily easy; what tools do you use to sweep C++ code for 'unsafe' constructs?
Now, there has been work on type-safe or memory-safe version of C++. They're non-standard. They also get smashed when a memory error occurs and that will happen. So, suggesting to rely on language-based isolation in C++ is a more a joke than something worth trying.
Good example of work on C++ safety:
https://www.cis.upenn.edu/~eir/papers/2013/ironclad/paper.pd...
Re: IncludeOS: C++ unikernel now free and open source
#30> A minimal bootable image, including bootloader, operating system components and a complete C++ standard library is currently 693K when optimized for size. WOW. That's just nuts! I mean I know linux can be slim, but thats less than a meg! Really very exciting stuff. I don't know if I should play JC3 or tinker with this.
Now, wanting strong separation mechanisms and so on would complicate things. The old security kernels, like STOP OS and GEMSOS, used MMU's, segments, MAC policies, covert channel suppression... you name it. STOP was still only 21,000 Kloc in total:
http://www.cse.psu.edu/~trj1/cse544-s10/slides/cse544-lec9-1...
So, monolithic or micro-kernel route, you can get things way smaller at the foundation than what we use today. Add basic TCP/IP stack, Ethernet driver, and runtime it should still be way smaller than 693K unless that's tons of error or security handling code to increase robustness.