github 地址 https://github.com/icexin/eggos
这是一个使用 Go 编写的运行于 x86 机器的 unikernel,全部用 go 编写(除了 bootloader 和一些汇编)
Go 的 runtime 提供了一些基本的操作系统抽象,goroutine 对应进程,channel 对应进程间通信,另外 go 有自己的虚拟内存管理,所以萌生了在裸机上运行 Go 程序的想法。
实际证明,Go 有操作硬件资源的能力,得益于 Go 可控的内存布局,以及不需要虚拟机直接翻译硬件指令的能力,还有类 C 的语法。这些都让 Go 编写运行于裸机的程序有了可能。
然而也有一些挑战,Go 在很多指令里面打桩来进行协程调度以及内存 GC,在一些不能重入的地方,如中断处理和系统调用,都带来了一些麻烦。
功能 list
- 基本的 go 功能,goroutine,channel,GC 等
- 大部分标准库
- TCP/IP 网络栈
- VFS 抽象
- nes 模拟器,js 解释器等
一些快照
支持 http get 的 js 解释器
nes 模拟器
欢迎学习交流!