Mozilla、Fastly、英特爾和紅帽將 WebAssembly 推廣為通用平台

Mozilla、Fastly、英特爾和紅帽 團結的 它致力於開發技術,使 WebAssembly 成為跨任何基礎設施、作業系統或裝置安全執行程式碼的通用平台。 已經形成了一個聯合開發運行時和編譯器的社區,該社區不僅允許在 Web 瀏覽器中使用 WebAssembly 字節碼聯盟.

要建立以 WebAssembly 格式交付並可在瀏覽器外部執行的可移植程序,我們建議使用 API 瓦西 (WebAssembly 系統介面),提供與作業系統直接互動的軟體介面(用於處理檔案、套接字等的 POSIX API)。 使用WASI 的應用程式執行模型的一個顯著特徵是,它們運行在與主系統隔離的沙箱環境中,並使用基於能力管理的安全機制來對每個資源(檔案、目錄、套接字、系統呼叫)進行操作。等)必須向應用程式授予適當的權限(僅提供對聲明的功能的存取)。

之一 目標 創建的聯盟是針對具有大量依賴項的分散式現代化模組化應用程式問題的解決方案。 在此類應用程式中,每個依賴項都可能成為漏洞或攻擊的潛在來源。 控制依賴項可讓您控制與其關聯的所有應用程式。 對應用程式的信任自動意味著對所有依賴項的信任,但依賴項通常是由其活動無法控制的第三方團隊開發和維護的。 字節碼聯盟成員打算提供一個整體解決方案,用於安全執行本質上不值得信賴的 WebAssembly 應用程式。

為了保護,建議使用奈米進程的概念,其中每個依賴模組被分成一個單獨隔離的 WebAssembly 模組,其權力僅與該模組相關(例如,用於處理字串的庫不會能夠打開網路套接字或文件)。 與進程分離不同,WebAssembly 處理程序是輕量級的,幾乎不需要額外的資源 - 處理程序之間的交互並不比調用普通函數慢多少。 分離不僅可以在單一模組的層級上完成,還可以在模組組的層級上完成,例如,需要使用公共記憶體區域的模組組的級別

請求的權力既可以在依賴項本身的層級上確定,也可以透過父模組沿鏈委託給依賴項(WASI 中的資源與特殊類型的文件描述符 - 能力)相關聯。 例如,可以委派模組存取特定目錄和系統呼叫的能力,如果模組的開發基礎設施受到損害或發現漏洞,在攻擊期間,存取將僅限於這些資源。 模組創建者的資源聲明可能是可疑活動的指示器,例如當文字處理模組請求開啟網路連接的權限時。 檢查最初設定的權限,如果它們發生更改,則依賴項載入將被拒絕,直到更新本機模組簽署。

在字節碼聯盟的支持下共同開發 翻譯的 一些與WebAssembly相關的 項目數量,之前由聯盟創始公司單獨開發:

  • 瓦斯姆時間 — 用於將具有 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,但是 不同 因為它是一種不與 JavaScript 綁定的二進位格式,允許在瀏覽器中執行從各種程式語言編譯的低階中間程式碼。 WebAssembly 不需要垃圾收集器,因為它使用明確記憶體管理。 將 JIT 用於 WebAssembly,您可以獲得接近本機程式碼的效能等級。 WebAssembly 的主要目標之一是確保可移植性、可預測的行為以及在不同平台上相同的程式碼執行。

來源: opennet.ru

添加評論