These libraries are then compiled with the application and configuration code to build sealed, fixed-purpose images (unikernels) which run directly on a hypervisor or hardware without an intervening OS such as Linux or Windows.
簡單來說,打包出來的 images 檔就稱為「Unikernel」。這個打包的過程,會將 library OS 編譯到應用程式裡,因此,製作 unikernel image 也需要配套工具。
Unikernel 並不是要去除作業系統。所謂的「無核化」的「核」,更精準的解釋應該是去掉 conventional OS 的「核(kernel)」,改採 library OS 的「核」。
已發佈至 Jollen's Blog
Unikernel 是一個很有趣的概念。不久前 Docker 收購 Unikernel Systems[1] 是很多人對它的第一印象,台灣的新聞媒體將 Unikernel 翻譯為「無核化」或「去核化」;不過,Unikernel 並「不是」要消滅作業系統核心,當然也不是要去除作業系統核心;相反地,作業系統核心技術,將更顯重要。
相較傳統的作業系統核心(conventional OS),Unikernel 的作業系統核心是以「Library」的形式實作 。技術上來說,Unikernel 可以說是一個「Library OS」的概念。
Unikernel 的做法(implementation)是將應用程式(applications)、相關模組(modules)與 library OS 打包(construct)成一個 image 檔。這樣做的目的,是希望將目標系統(target image)儘量簡化;簡化的目的,是縮小 images 的大小(image size)。
根據維基百科上的解釋[2]:
簡單來說,打包出來的 images 檔就稱為「Unikernel」。這個打包的過程,會將 library OS 編譯到應用程式裡,因此,製作 unikernel image 也需要配套工具。
Unikernel 並不是要去除作業系統。所謂的「無核化」的「核」,更精準的解釋應該是去掉 conventional OS 的「核(kernel)」,改採 library OS 的「核」。
專研作業系統與編譯器的工程師,不但沒有身價眨值的問題,還可能會倍數增值呢。為什麼學習作業系統又更重要了呢?因為 Unikernel image 是一種特定用途的 image file,這種 image file 也稱為 immutable VM image。
Immutable image 裡面的 library OS 讓 unikernel image 能直接(directly)在虛擬機上(hypervisor)運行,而不需要透過像是 Linux 或 Windows 的 conventional OS[2]。實作這個 library OS 需要對作業系統、微處理器、虛擬機、編譯器與 software stacks 有綜合的知識。
Unikernel 是一個 image file,也是一種 immutable image。它的用途單一不變(immutable),Unikernel 的「Uni」正能表達它的理念。Unikernel 自然有許多不同的實作;針對不同的應用程式(applications)甚致是不同的雲端佈署架構,也需要更多單一的 library OS。
受到 jserv 一直在自幹編譯器[3]的激勵,新的一年(2016 猴年)就幫自已定了一道作業:期許在新的一年,也可以自已做一個 Unikernel。不過,因為 Unikernel from scratch 的目標有點遠大,所以:
近幾年一直是 JavaScript 的愛好者,所以找了 runtime.js 做為研究目標。Runtime.js 提供一個稱為 * runtimeify* 的編譯器,可以將 JavaScript 應用程式,打包為 ramdisk image,並透過 initrd 啟動。第一階段的學習紀錄,都會發佈在 jollen/simple-iot-runtime
沒想到 Embedded Linux 也能有這樣的面貌,這是一種有點熟悉又有些陌生的奇妙感覺。隨著 Node.js 的發展,以及 frontend 模組化(JavaScript modules)技術的進步,出現了 Browserify 技術,今天還被運用在 Unikernel 概念上,只能說 JavaScript 無極限。
Runtime.js 是一個開源的 library OS 實作,裡面包含二個 component [4]:
Runtime.js 的 OS kernel 採用 V8 JavaScript engine,整體來看,Runtime.js 提供了一個優雅的 JavaScript Unikernel 技術方案。
[1] Unikernel Systems Joins Docker, https://blog.docker.com/2016/01/unikernel/ [2] Unikernel, https://en.wikipedia.org/wiki/Unikernel [3] 從無到有開發 C 編譯器, https://goo.gl/aqBw9R [4] Runtime.js, https://github.com/runtimejs/runtime [5] https://github.com/jollen/simple-iot-runtime