Mozilla、Fastly、英特爾和紅帽
要建立以 WebAssembly 格式交付並可在瀏覽器外部執行的可移植程序,我們建議使用 API
之一
為了保護,建議使用奈米進程的概念,其中每個依賴模組被分成一個單獨隔離的 WebAssembly 模組,其權力僅與該模組相關(例如,用於處理字串的庫不會能夠打開網路套接字或文件)。 與進程分離不同,WebAssembly 處理程序是輕量級的,幾乎不需要額外的資源 - 處理程序之間的交互並不比調用普通函數慢多少。 分離不僅可以在單一模組的層級上完成,還可以在模組組的層級上完成,例如,需要使用公共記憶體區域的模組組的級別
請求的權力既可以在依賴項本身的層級上確定,也可以透過父模組沿鏈委託給依賴項(WASI 中的資源與特殊類型的文件描述符 - 能力)相關聯。 例如,可以委派模組存取特定目錄和系統呼叫的能力,如果模組的開發基礎設施受到損害或發現漏洞,在攻擊期間,存取將僅限於這些資源。 模組創建者的資源聲明可能是可疑活動的指示器,例如當文字處理模組請求開啟網路連接的權限時。 檢查最初設定的權限,如果它們發生更改,則依賴項載入將被拒絕,直到更新本機模組簽署。
在字節碼聯盟的支持下共同開發
-
瓦斯姆時間 — 用於將具有 WASI 擴充功能的 WebAssembly 應用程式作為常規獨立應用程式執行的執行時間。 它支援使用特殊的命令列實用程式啟動 WebAssembly 字節碼和連結現成的可執行檔(wasmtime 作為庫內建到應用程式中)。 Wasmtime 具有靈活的模組化結構,可讓您擴展各種應用程式的執行時間,例如,您可以為資源有限的設備建立精簡版本; -
盧賽特 — 用於執行 WebAssembly 格式程式的編譯器和執行時間。 特色鮮明特徵 Lucet 使用成熟的預期編譯(AOT,提前)而不是 JIT 產生適合直接執行的機器碼。 該專案由 Fastly 開發,經過最佳化,可消耗最少的資源並非常快速地啟動新執行個體(Fastly 在雲端邊緣運算引擎中使用 Lucet,該引擎使用 WebAssembly 來處理每個請求啟動的處理程序)。 作為聯合專案的一部分,Lucet 編譯器計劃轉換為使用 Wasmtime 作為基礎; -
WAMR (WebAssembly Micro Runtime)是另一個用於執行 WebAssembly 的運行時,最初由 Intel 開發,用於物聯網設備。 WAMR 針對最小資源消耗進行了最佳化,可在 RAM 量較小的裝置上使用。 該專案包括一個用於執行 WebAssembly 字節碼的解釋器和虛擬機器、一個 API(Libc 的子集)和用於動態應用程式管理的工具; -
起重機升降機 - 程式碼產生器,將獨立於硬體架構的中間表示轉換為針對特定硬體平台最佳化的可執行機器碼。 Cranelift 支援函數編譯的並行化,以非常快速地產生結果,這使得它可以用於建立 JIT 編譯器(基於 Cranelift 的 JIT 用於 Wasmtime 虛擬機中); -
WASI常見 — WASI(WebAssembly 系統介面)API 的單獨實現,用於組織與作業系統的互動; -
瓦西貨運公司 — Cargo 套件管理器的模組,它實作了使用 WASI 介面將 Rust 程式碼編譯為 WebAssembly 字節碼的命令,以便在瀏覽器外使用 WebAssembly; -
笏 и瓦斯姆解析器 — 用於解析文字(WAT、WAST)和 WebAssembly 字節碼的二進位表示的解析器。
回顧一下,WebAssembly 很像 Asm.js,但是
來源: opennet.ru