close


大家好,我是 ConardLi。

最近在 Github 上看到了一個挺有意思的項目:運行在瀏覽器環境中的虛擬機:WebVM。

傳統意義上的虛擬機(VM)是一種創建於物理硬件系統(位於外部或內部)、充當虛擬計算機系統的虛擬環境,它模擬出了自己的整套硬件,包括 CPU、內存、網絡接口和存儲器,它依然需要運行在一個服務器上。

而 WebVM 和我們平時看到的傳統的 WebShell 是完全不一樣的,這個 WebVM 是沒有服務器的,它單純依賴於 HTML5/WebAssembly 就可以獨自在瀏覽器客戶端中運行一個基於 Debian 的完整虛擬機。

WebVM 是基於 CheerpX 實現的,CheerpX 是基於 Cheerp 編譯器實現的... 別着急,我們先從 Cheerp 開始看, ~

Cheerp

WebAssembly 我們都知道,是一種二進制指令格式,簡稱為 Wsam,它可以運行在適用於堆棧的虛擬機上。WebAssembly 存在的意義就是成為編程語言的可移植編譯目標,讓在 Web 上部署客戶端和服務端應用成為可能。簡單來說,它可以讓我們在 Web 環境中運行服務端代碼。

而 Cheerp 就是一個可以生成 WebAssembly 的 C/C++ 編譯器。

CheerpX

CheerpX 是一種 x86 到 WebAssembly 的虛擬化技術,聲稱可以完全在客戶端運行任意的 x86 應用程序。

CheerpX 構建了一個基於 WebAssembly 的虛擬機來在瀏覽器中運行 X86 二進制文件。您可以使用它運行任何 REPL 環境。示例:https://repl.leaningtech.com/?python3

WebVM

而 WebVM,是一個在瀏覽器中運行的基於 Debian 的完整虛擬機,由 CheerpX 提供支持,由以下幾部分組成:

CheerpX 作為 JavaScript API 執行引擎,特別是 cx.run(…) 這樣的代碼,用於啟動 bash 進程。然後 bash 可以在用戶鍵入命令時啟動其他進程。
Xterm.js 作為主要的 UI 組件:Xterm.js 負責解釋 vim 等應用程序使用的終端轉義,並將用戶輸入發送回 CheerpX。輸入通過應用程序的標準輸入文件描述符提供給應用程序。
一個 Debian buster 磁盤映像,採用 ext2 格式並安裝了一堆軟件包。它們被放在 CDN 上,這可以最大限度地提高可擴展性。

WebVM 的使命和願景是讓程序運行:

無需修改;
無需重新編譯;
完全客戶端模式。

你可以在 WebVM 上嘗試下面這些操作:

#運行一個簡單的python程序python3examples/python3/fibonacci.py#使用gcc編譯一個簡單的C示例gcc-ohelloworldexamples/c/helloworld.c#運行!./helloworld#轉儲代碼,驗證這實際上是一個x86二進制objdump-d./helloworld#編輯helloworld.c文件,然後再試一次vimexamples/c/helloworld.c

目錄中提供了各種語言的示例文件 examples 。

最後

這個應用雖然離生產還有很大一段距離,但它確實讓我看到了 Web 的無限可能。

Web 平台正在成為應用程序分發的主導平台。特別是自從 WebAssembly 標準化以來,這樣的確實趨勢已經越來越明顯了,想象一下:一種新的編程語言一旦被開發出來,就會被所有現代瀏覽器支持,這可以持續滿足大型 Web 應用程序的性能需求。

WebAssembly 為瀏覽器世界帶來了真正的創新,以及視角和責任的轉變。

對此,你怎麼看?

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()