独立内核的信息 (in Chinese)
首先
我决定写这篇文章作为推广活动的一部分,因为当我在日本(或者其他国外地区)问「你听说过Unikernel吗?」时,大多数人都会冷漠地回答「不知道」。
大约在从事服务器虚拟化的超级管理程序员工作5年左右后的时候,当我在寻找下一个有趣的话题时,突然在某些圈子里开始热烈讨论Unikernel的话题,这发生在2016年上半年。
从那时起,我一直以超个人的热情关注着未来的计算方式会被Unikernel改变。
Unikernel是什么?
稍微搜一下”Unikernel”,就能找到很多英文文章。经常看到的一篇文章是关于”Docker公司在2016年1月收购了Unikernel Systems公司”的内容,这表明了知名企业开始关注Unikernel技术并产生了一定的影响力。不过技术方面的内容并未被充分涵盖。- Unikernel Systems加入Docker @ Docker公司博客
作为技术领域中被广泛引用的内容,可以提到2013年在ASPLOS国际会议上发表的论文《云中的库操作系统:Unikernels》,或者是刊登在2014年ACM QUEUE上的文章《虚拟库操作系统的崛起:Unikernels》。
好吧,关于Unikernel的介绍如下…
特定的应用程序,只为其运行而设计的小型操作系统,其中包含一份合并的配置文件。

然而,如上所述的两篇文献中所示(例如第二篇文献的Figure.1),Unikernel的操作系统镜像文件很小。除非进行了怪异的操作,即使最大也不会超过10MB左右。例如,假设需要启动50个应用程序服务,即使需要50个Unikernel操作系统镜像,总共也最多只有500MB。即使考虑到包括hypervisor区域在内的估算,也能够保持在1-2GB之间。相比用于虚拟机的Linux操作系统镜像,Unikernel更加高效。
在Unikernel中,這個「小型操作系统」是關鍵。基本上,這個操作系统並不是直接使用像是Linux這樣的主流操作系统。它可能是專有實現的,或者是基於Mini-OS的,種類多種多樣(雖然也可以整合各種開源軟體)。根據操作系统層的實現,決定了上面運行的應用程序和服務可以使用的功能。例如,某些Unikernel可以使用虛擬PCI設備,而其他Unikernel則提供POSIX等功能。換句話說,Unikernel的特點與操作系统層的實現密切相關。
关于Unikernel需要注意的一点是,虚拟化技术并非必需。尽管在上述图中描绘了使用虚拟机的情况,但实际上也可以将Unikernel作为主机操作系统上的一个进程来运行。例如,我极力推荐的MirageOS Unikernel就可以采用这种配置。在这种情况下,Unikernel将作为“Linux或MacOS上的一个进程”运行,“也就是说,在进程内部运行着另一个操作系统”,但并不使用服务器虚拟化。还可以在使用了名为spt tender的seccomp功能之上运行MirageOS Unikernel,从而增强安全环境。
Unikernel 的优点是什么?
在unikernel.org的首页(请参考本页底部)上写着以下四点:
1. 提高了安全性
2. 占用空间小
3. 高度优化
4. 快速启动
1. Unikernel的操作系统镜像与2.有着密切的关联。Unikernel的操作系统镜像之所以尺寸小,即源代码量少。这样一来,受攻击的部分(即产生漏洞的部分)会自然减少。此外,Unikernel专门为特定应用程序而启动,因此在常规的操作系统层中,不存在用户的概念。也就是说,像root这样的超级用户也不存在,因此不会发生权限的夺取。通常也没有像execve()或system()这样的函数,因此结合CPU的NX位,在堆栈区域执行代码段将阻止类似Shellcode的非预期代码执行变得相当困难。尽管如此,仍需注意到Unikernel实现的漏洞可能引发缓冲区溢出的问题。
2. 这句话的意思是Unikernel的OS镜像的确非常小。对此起到很大贡献的因素包括:(i) 减少可用设备类型(例如,停止在物理服务器上直接运行,而仅在特定的虚拟化平台上运行);(ii) 不将不需要的OS功能(例如Linux内核模块等动态的OS配置更改)加入到OS镜像中。因此,我认为Unikernel非常适合用作小型物联网设备的操作系统。
3. 这是建立应用程序和操作系统的构成决策尽可能在编译时执行的原因。通过这样做,可以增加静态分析的部分,并扩大优化的范围。
4. 文字直译意味着启动时间很短。而且,即使是在虚拟机上运行的Unikernel,只要是实现了在BIOS初始化之后的OS/虚拟机层,启动Unikernel应用程序所需的时间就与普通应用程序的启动时间相差无几。作为实现在虚拟机框架中运行隔离安全功能并实现FaaS(即“函数即服务”)的一种方法,Unikernel有望成为候选方案。
Unikernel的挑战
知识零散…或者说绝对数量不足。
Unikernel仍处于前沿阶段,缺乏完善的手册,所以即使有兴趣也需要相当长时间才能真正使用。每个Unikernel的维护者们正在努力完善类似教程的网页,但还没有达到像Docker容器那样即刻可用的阶段。
这不仅仅是适用于Unikernel,特别是在Hypervisor上运行的Unikernel的调试和优化是复杂的。对此,NEC Europe成员在2017年推出了Uniprof,并且已经开始逐渐改进,让人期待。
各种不同的Unikernel
在世界上有很多不同用途的Unikernel实现。它们的应用程序服务层描述语言可能不同,也可能专门用于特定的应用场景。并且运行的平台也各不相同。
言語种类:
Clive(基于Go语言编写的应用程序,在裸金属环境下运行)
HaLVM(基于Haskell语言编写的应用程序,在Xen环境下运行)
IncludeOS(基于C++语言编写的应用程序,在KVM环境下运行)
LING(基于Erlang/OTP编写的应用程序,在Xen环境下运行)
MirageOS(基于OCaml语言编写的应用程序,在裸金属、Xen和KVM环境下运行)
OSv(基于C、Java、Ruby、Node.js语言编写的应用程序,在Xen、KVM、Virtualbox和VMware环境下运行)
runtime.js(基于Javascript语言编写的应用程序,在KVM环境下运行)
特定用途:
ClickOS(适用于NFV,可在Xen环境中运行)
Hermitcore(适用于HPC,可在裸金属和KVM环境中运行)
重视兼容性: Rumprun 可在符合 POSIX 标准的应用程序、裸机、Xen 和 KVM 环境下运行。
Linux:
UKL(由波士顿大学和RedHat开发的面向Linux应用程序的Unikernel)
UniLinux(在Ring0和单一进程上运行的Linux)
Windows:
Drawbridge(在Windows应用程序中以裸金属环境运行)
各种功能模块经过Unikraft库的封装,使用Konfig创建Unikernel。
如果你想将自己的应用程序作为Unikernel运行,我认为试用特定语言的Unikernel是最快捷的方法。如果目标是NFV或HPC这样的特定用途,可以选择ClickOS或Hermitcore。如果你想将现有的应用程序作为Unikernel运行(虽然不是所有应用都可运行),Rumprun是一个考虑的选择(有Apache Cassandra的例子)。此外,UKL是红帽参与的项目,并且具有将现有程序简化为Unikernel化的重要优势。虽然目前还处于初级阶段,但根据论文标题中提到的“Linux主导的下一个阶段”,未来的动向非常令人期待。
由于有一些活动正在缩小的Unikernel,如果考虑长期和全面的利用,需要注意。这可以从官方网站和Github的更新频率推测出来。尽管微软研究部的Drawbridge似乎还不公开可用,但它的成果似乎被应用于Windows Subsystem for Linux(在Windows上运行Linux程序)和SQL Server on Linux(在Linux上运行SQL Server)。
就个人而言,我会选择在应用程序层面使用OCaml(一种函数式语言)来增强安全性,并且推荐具有活跃开发社区的MirageOS。
综合的Unikernel开发和运维环境
上述介绍的Unikernel因具备各自独特的开发环境,因此要逐个进行适配处理是困难的。为了解决这个问题,一个名为Unik的工具被开发出来。存储供应商EMC参与了该开发(SlideShare),这在“存储供应商参与Unikernel相关工作”这一点上非常有趣。
与Unikernel相关的公司
我认为还有更多,一旦了解情况立即进行添加。
Docker
上記で言及したように、英ケンブリッジ大のスタートアップであるUnikernel Systemsを買収した会社です。Unikernel SystemsはMirageOSを手がけており、MirageOSでの成果がDocker社製品にフィードバックされています。
Tarides
フランスのベンチャー企業であり、元々Docker社でMirageOSやDocker for Mac/Windowsに従事していた方が起こした企業です。MirageOS本体などの開発と、企業向けサポート&開発を手がけています。
robur
MirageOSをベースにソフトウェアを開発している非営利組織です。組織設立前からMirageOSの開発に携わっているメンバが所属しています。
nanovms
元々Deferpanicという名前で設立されたスタートアップで、Unikernel IaaSのプラットフォームを提供しています。
Zededa
IoT向けプラットフォームへのUnikernel適用を考えているスタートアップです(sdxcentralの記事)。
ARM
MirageOSはARMアーキテクチャでの動作をサポートしていたり、Unikernel専用仮想マシンモニタであるhvtのARMプロセッサ対応にARM社のエンジニアが携わっています。
NEC Laboratories Europe
上記のClickOSやUnikraft、Uniprofの研究をしています。
EMC
上記で述べたように、UnikというUnikernel開発・管理ツールを開発しています。
VMWare
中国のR&Dチームの方がUniLinuxに取り組んでいます。
Boston University & RedHat
Collaboratoryという形でUKLの研究開発に取り組んでいます。
SAP
SAPはご存じの通りERPやHANAで有名な企業です。クラウドアプリのコンテキストでReasonMLという言語(JavascriptとOCamlのいいとこ取り言語)に取り組んでいるらしく、OCamlを採用しているMirageOSに携わる人材採用を行っていて今後の進展に期待です。
更多认识和了解Unikernel。
Unikernel的网关网站是unikernel.org,收集了各种Unikernel的信息。
此外,关于Unikernel的讨论会在Unikernel Devel上进行。
如果您喜欢某个特定的Unikernel实现,可以尝试订阅该Unikernel的邮件列表或参加IRC,以获取深入的信息!
将以下内容改为中文:
Linuxkit
许多人可能认为虽然Unikernel有点难,但现在是容器的时代呢。在Moby project(用于轻松开发特定用途容器的框架)中,发展出了一个称为Linuxkit的工具,它可以将Docker容器映像的占用空间减小,并创建包含仅用于运行该容器的小型Linux操作系统的VM映像。
在DockerCon17上,有一个示例展示了如何创建运行Redis容器的虚拟机镜像(SlideShare)。
虽然与Unikernel的思想相似,但由于基于Linux操作系统,因此仍然存在用户这一概念,并需要注意尚未达到与Unikernel相同的安全性保障。
当然,MirageOS开发人员参与了Linuxkit项目,并致力于提升安全性(在Linukit安全专家组会议上介绍MirageSDK)。
Unikernel的新闻 (Unikernel news)
希望能随时添加与Unikernel相关的最新消息。
2020年10月19日:
美国DoE的SCADA研究项目在五月份发布了一个公告,据说nanovms公司涉及其中。这里有一篇文章报道了这个事情。
2020年5月21日:
在美国能源部(DoE)采纳的研究项目中,包含了Unikernel相关内容。据说他们将在SCADA(Supervisory Control And Data Acquisition)中集成Unikernel以实现“安全化数据采集和设备控制”的软件。由于工厂中的IoT(物联网)一词变得越来越常见,这似乎是一个有趣又前瞻性的话题。
网络安全、能源安全和应急响应办公室
针对SCADA系统的Unikernel隔离保障
总结来说
由于Unikernel技术仍处于早期阶段,我认为它将继续发展。在Unikernel领域有动态出现时,我将尽力更新本页面!!