2019年11月,Mozilla、英特尔、RedHat和Fastly公司宣布成立字节码联盟(Bytecode Alliance),英特尔的WebAssembly Micro Runtime(WAMR)和Mozilla主导的WASMTIME成为转入字节码联盟的第一批核心开源项目。字节码联盟的目标是基于WebAssembly和WebAssembly System Interface(WASI)等标准创建一个安全、高效和模块化的新运行引擎(Runtime)环境和语言工具链,同时推广让尽可能多的平台和设备使用它们。
字节码联盟自诞生起就得到了业界大量关注。本专题将围绕字节码联盟的WAMR开源项目展开,通过一系列文章依次介绍WAMR项目的背景、使命、技术特点、最新应用场景、使用技巧、技术内幕以及社区发展等各方面情况,借此帮助更多开发者了解WebAssembly(简称WASM)技术在浏览器之外的应用潜力,并在自己的领域用上这项技术。本文作为专题的第一篇文章,将对WAMR进行概要性的介绍。
很多人心中可能有一个疑问:我把C/C++或者Rust程序直接编译成目标机器码就可以了,为什么还要用WebAssembly?这里首先要介绍WebAssembly的沙箱功能。当程序编译成WASM模块,再加载到运行引擎中时,实际上你的模块运行在其私有的沙箱中。沙箱中的程序不能访问沙箱以外的地址空间,否则将被运行引擎终止并返回异常,同时WASM程序调用API来访问系统资源时也会受到运行引擎的监管。这样的沙箱功能可以在许多场景下提供传统的原生编译程序无法支持的功能。
WebAssembly的许多特性在不同环境下可以带来各种价值,下面简单列举一二:
2019年5月,英特尔公司在GitHub上开源了WebAssembly Micro Runtime项目(简称WAMR)。
创建WAMR项目的是英特尔一支计算机语言运行时(runtime)技术团队,在英特尔内部称为“北海”团队。 “北海”这个名称源自北京北海公园,这也是从2010年开始开发的一个可以兼容Java语言的轻量级虚拟机项目的内部代码。因为英特尔公司习惯使用地名作为产品内部代码,所以这支位于北京的中国团队就选择了北海作为产品代码,后来这个名字逐渐变成了这个团队的名称。“北海”团队成员从最早在Apache Harmony项目上做JVM开发开始,一直深耕托管运行时技术领域,目前更多关注Web领域的WebAssembly和V8运行引擎技术。
WAMR最早是“北海”团队的一个内部创新项目,其目标是为英特尔广泛的产品线提供一个通用的托管代码运行环境。它在许多场景都能起到关键作用,例如在SGX可信运行环境中提供第三方程序安全运行沙箱,支持第三方在平台的受控运行环境里进行场景创新,在边缘服务器上构建高性价比的托管代码运行环境,或利用硬件加速用户程序等。
在开始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项目最终达到了一开始的设计目标:
WAMR项目包括以下三部分功能:
WAMR支持许多非常有价值的特性,便于开发者使用,并且支持更广泛的应用场景。主要特性列举如下:
WAMR已经达到100% 符合W3C发布的WebAssembly MVP (Most Viable Product)版本。WebAssembly在W3C的发展非常活跃,从MVP至今已经又推出了许多新特性,通常称为Post-MVP特性。
WAMR正在积极开发以支持Post-MVP特性,目前已经对下列特性提供了支持:
从开源到现在的一年多时间内,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感兴趣以及希望参与更多技术交流的开发者,可以在钉钉里打开此链接加入WAMR开发者群;或在微信中扫描此链接中的二维码,添加WARM开源社区官方微信并加入交流群。
WAMR项目GitHub地址: https://github.com/bytecodealliance/wasm-micro-runtime
领取专属 10元无门槛券
私享最新 技术干货