IncludeOS – A minimal, resource efficient unikernel for cloud services
I have never really got unikernels, maybe someone could educate me?<p>- There is the argument of reduced attack surface&#x2F;typechecked safety.  I get that, but I don&#x27;t see how this is different from compiling custom Linux&#x2F;NetBSD kernels per VM?<p>- There is the argument for increased performance.  I don&#x27;t get that at all -- I&#x27;ve done experiments on unikernel system for MirageOS vs IncludeOS vs Kernel on a web and memcache server and the performance results were worse (15%), 0.4% better respectively for MirageOS respectively but for a tonne more effort and really painful debugability.<p>- There is the argument for isolation but I don&#x27;t see how it&#x27;s different because the biggest cause of churn is the hypervisor?  My results with Xen 4.x didn&#x27;t show any difference in isolation performance with both Include and Mirage.<p>- There is the argument that OSes don&#x27;t map to existing hardware as well, e.g. in the InfoQ talk in the comments the speaker talks about PCIe VFs for example.  All of these VFs map to physical resources, and you end up doing a much worse job when you can&#x27;t centrally manage these -- that&#x27;s one of the main reasons SR-IOV hasn&#x27;t been adopted (including the fact that migration is non-existent).  Similarly with CPU hardware threads or NVMe device drivers -- they are abstractions provided for convenience and reducing the burden of porting existing drivers to work in hypervisor environments but surely the same issues that appear with VM contexts (hardware scheduling and isolation) still exist in unikernel environments? I feel I&#x27;m missing something in particular about this point as I see it made often and it doesn&#x27;t make sense to me.<p>- How do unikernels work in a world of containers? This has always puzzled me as I thought people moved away from VMs due to the heavyweight nature but of course the flip side is the underlying isolation abstractions are more lightweight -- so in essence are unikernels in containers user-level processes or are they replacing the kernel bits too?