作者 | 王鑫
策划 | 蔡芳芳
2019 年 11 月,Mozilla、英特尔、RedHat 和 Fastly 公司宣布成立字节码联盟(Bytecode Alliance),英特尔的 WebAssembly Micro Runtime(WAMR)和 Mozilla 主导的 WASMTIME 成为转入字节码联盟的第一批核心开源项目。字节码联盟的目标是基于 WebAssembly 和 WebAssembly System Interface(WASI)等标准创建一个安全、高效和模块化的新运行引擎(Runtime)环境和语言工具链,同时推广让尽可能多的平台和设备使用它们。
字节码联盟自诞生起就得到了业界大量关注。本专题将围绕字节码联盟的 WAMR 开源项目展开,通过一系列文章依次介绍 WAMR 项目的背景、使命、技术特点、最新应用场景、使用技巧、技术内幕以及社区发展等各方面情况,借此帮助更多开发者了解 WebAssembly(简称 WASM)技术在浏览器之外的应用潜力,并在自己的领域用上这项技术。本文作为专题的第一篇文章,将对 WAMR 进行概要性的介绍。
1 为什么要在浏览器之外使用 WebAssembly?
很多人心中可能有一个疑问:我把 C/C++ 或者 Rust 程序直接编译成目标机器码就可以了,为什么还要用 WebAssembly?这里首先要介绍 WebAssembly 的沙箱功能。当程序编译成 WASM 模块,再加载到运行引擎中时,实际上你的模块运行在其私有的沙箱中。沙箱中的程序不能访问沙箱以外的地址空间,否则将被运行引擎终止并返回异常,同时 WASM 程序调用 API 来访问系统资源时也会受到运行引擎的监管。这样的沙箱功能可以在许多场景下提供传统的原生编译程序无法支持的功能。
WebAssembly 的许多特性在不同环境下可以带来各种价值,下面简单列举一二:
2 WebAssembly Micro Runtime 开源项目的诞生
2019 年 5 月,英特尔公司在 GitHub 上开源了 WebAssembly Micro Runtime 项目(简称 WAMR)。
创建 WAMR 项目的是英特尔一支计算机语言运行时(runtime)技术团队,在英特尔内部称为“北海”团队。“北海”这个名称源自北京北海公园,这也是从 2010 年开始开发的一个可以兼容 Java 语言的轻量级虚拟机项目的内部代码。因为英特尔公司习惯使用地名作为产品内部代码,所以这支位于北京的中国团队就选择了北海作为产品代码,后来这个名字逐渐变成了这个团队的名称。“北海”团队成员从最早在 Apache Harmony 项目上做 JVM 开发开始,一直深耕托管运行时技术领域,目前更多关注 Web 领域的 WebAssembly 和 V8 运行引擎技术。
WAMR 最早是“北海”团队的一个内部创新项目,其目标是为英特尔广泛的产品线提供一个通用的托管代码运行环境。它在许多场景都能起到关键作用,例如在 SGX 可信运行环境中提供第三方程序安全运行沙箱,支持第三方在平台的受控运行环境里进行场景创新,在边缘服务器上构建高性价比的托管代码运行环境,或利用硬件加速用户程序等。
3 WAMR 的设计目标
在开始 WAMR 项目之前,怎么定位该项目是一个关键问题。项目团队分析了 WASM 的几个关键特点,包括该标准在 Web 领域的巨大动能、前端语言 C/C++/Rust 的支持情况、LLVM 对 WASM 的后端支持、极佳性能和较小的资源消耗等,认为 WASM 未来在嵌入式设备到云端都将具有极其广泛的应用空间。但是从另外一方面来看,目前 WASM 能提供比较成熟的支持的前端语言以 C/C++/Rust 为主,不易吸引 Java、JS 和 Python 开发者。同时,当前缺乏编程语言层 API 标准接口,导致短期内基于 WASM 之上不太可能出现一个像 J2SE 或者 Node.js 一样的系统性平台。
基于以上分析,我们预期短期内 WASM 的应用很可能将分布在非常广泛的碎片化领域,这就要求 WAMR 的设计能充分应对各种可能的需求。在 WAMR 的最初设计中,定义了以下主要设计目标:
经过漫长的开发迭代过程,WAMR 项目最终达到了一开始的设计目标:
4 WAMR 功能与特性一览
WAMR 项目包括以下三部分功能:
WAMR 支持许多非常有价值的特性,便于开发者使用,并且支持更广泛的应用场景。主要特性列举如下:
5 WebAssembly 规范支持情况
WAMR 已经达到 100% 符合 W3C 发布的 WebAssembly MVP (Most Viable Product)版本。WebAssembly 在 W3C 的发展非常活跃,从 MVP 至今已经又推出了许多新特性,通常称为 Post-MVP 特性。
WAMR 正在积极开发以支持 Post-MVP 特性, 目前已经对下列特性提供了支持:
6 WAMR 的应用与未来展望
从开源到现在的一年多时间内,WAMR 项目已经得到了长足的发展,社区的力量不断增强。该项目在 GitHub 上目前已经有超过 1500 个关注,130 个 fork。中国开发者也非常活跃地参与到社区贡献中,比如阿里巴巴团队就在 WAMR 上贡献了对 AliOS Things、MacOS 等平台的支持,风河公司中国团队也贡献了对 VxWorks 系统的移植。我们可以期望不久后有更多中国头部互联网企业加入社区常规开发工作。在字节码联盟内,WAMR 正在和其他兄弟项目合作推动 WebAssembly 和 WASI 技术在浏览器以外创建一个新的安全软件栈。
在应用场景方面,社区里已经展开对 WAMR 的广泛探索,到目前为止已经覆盖如下应用场景:
WASM 新的应用领域还在不断涌现,WAMR 未来发展空间让人感到非常兴奋。
在开发计划方面,WAMR 项目 2020 年的主要目标是继续提升软件的易用性,目前源码调试功能已经进入开发阶段。对可信执行环境的支持(如 SGX 的支持)将继续增强, SGX 环境下的 WASI 支持正在开发之中。另外,提供对 SIMD 的支持,增强对多模块的支持,以及提供更好的在 WASM 应用和 Runtime 原生环境之间的复杂结构数据交互也将是项目接下来要解决的问题。
在社区建设方面,我们接下来将在 InfoQ 陆续推出一系列 WAMR 专题文章,本文是该专题的第一篇概要性介绍文章,后续文章还将介绍 WAMR 的应用、内部设计等各方面细节。同时在 W3C 中国组织的 WebAssembly 主题研讨会 WAMR 的主题交流也在计划之中,时间点可能在八、九月份。最后也是很重要的一个规划,WAMR 社区将组织开展定期的社区开发者会议,欢迎感兴趣的朋友一起交流与分享,共建更好的开源社区。
作者介绍:
王鑫,目前就职英特尔中国北京公司。近十年主要专注于计算机语言运行时(managed runtime)技术领域,主要包含 Java、WebAssembly 和 JavaScript 等语言运行引擎,以及编译、可信执行环境、物联网、Web PWA 等技术。曾带领团队开发兼容 Java 语言的轻量级虚拟机 Intel Micro Runtime,创建开源项目 WebAssembly Micro Runtime,参与推动英特尔、Mozilla 等公司成立 WebAssembly 技术字节码联盟 (Bytecode-Alliance)。
对 WAMR 感兴趣以及希望参与更多技术交流的开发者,可以在 InfoQ 官网上打开文章(https://www.infoq.cn/article/PjjSD5W6XzT5X6Fw1ZRc)或点击阅读原文,通过文末链接加入交流群。
WAMR 项目 GitHub 地址:
https://github.com/bytecodealliance/wasm-micro-runtime