InfoQ|Micro Runtime,跨越嵌入式到云端的新型容器:WebAssembly

2019年11月 , Mozilla、英特尔、RedHat和Fastly公司宣布成立字节码联盟(BytecodeAlliance) , 英特尔的WebAssemblyMicroRuntime(WAMR)和Mozilla主导的WASMTIME成为转入字节码联盟的第一批核心开源项目 。 字节码联盟的目标是基于WebAssembly和WebAssemblySystemInterface(WASI)等标准创建一个安全、高效和模块化的新运行引擎(Runtime)环境和语言工具链 , 同时推广让尽可能多的平台和设备使用它们 。
字节码联盟自诞生起就得到了业界大量关注 。 本专题将围绕字节码联盟的WAMR开源项目展开 , 通过一系列文章依次介绍WAMR项目的背景、使命、技术特点、最新应用场景、使用技巧、技术内幕以及社区发展等各方面情况 , 借此帮助更多开发者了解WebAssembly(简称WASM)技术在浏览器之外的应用潜力 , 并在自己的领域用上这项技术 。 本文作为专题的第一篇文章 , 将对WAMR进行概要性的介绍 。
1为什么要在浏览器之外使用WebAssembly?很多人心中可能有一个疑问:我把C/C++或者Rust程序直接编译成目标机器码就可以了 , 为什么还要用WebAssembly?这里首先要介绍WebAssembly的沙箱功能 。 当程序编译成WASM模块 , 再加载到运行引擎中时 , 实际上你的模块运行在其私有的沙箱中 。 沙箱中的程序不能访问沙箱以外的地址空间 , 否则将被运行引擎终止并返回异常 , 同时WASM程序调用API来访问系统资源时也会受到运行引擎的监管 。 这样的沙箱功能可以在许多场景下提供传统的原生编译程序无法支持的功能 。
WebAssembly的许多特性在不同环境下可以带来各种价值 , 下面简单列举一二:
安全运行第三方代码:这个功能在云端或者边缘计算中非常有意义 , 也是现代容器技术如Docker的核心价值之一 。 在移动设备、物联网设备、智能小家电以及可信运行环境上对这样的功能也有非常强烈的需求 。
跨平台与环境的应用:考虑到WebAssembly是由W3C定义的标准化字节文件格式 , 当某些产品需要提供类似浏览器方式来装载第三方模块时 , 使用WebAssembly作为媒介格式是一个非常有吸引力的方案 。 假设你有一个很好的图像识别算法 , 你可以把你的算法以WASM模块的方式发布 。 其他人通过集成WAMR这样的引擎就可以在不同架构、不同平台、不同环境调用这个算法 , 比如在云端容器、可信执行环节(TEE)、物联网设备上都可以调用 。
超轻量级:WASM规范的设计充分考虑了在浏览器上需要通过网络从服务器端下载并即时运行的需求 , 操作码的设计相当精简 。 通过开发阶段的编译不再需要对下载程序进行文本解析 , 实例的对象与内存模型也较为简单 。 这些特点使WASM模块可以非常快地完成加载进入执行状态 , 创建一个执行实例只需要很少量的资源 。
高性能:WebAssembly的字节码设计充分考虑了即时编译的友好性 , 不仅可以达到很快的编译速度 , 还可以获得很高的运行速度 。
动态模块加载:这个功能在小设备上尤其有用 , 过去固件必须统一编译、统一更新 , 如今通过固件中的WASM运行引擎 , 可以动态加载和执行WASM模块 。
重用海量C/C++库资源:你也许需要在JS、Java或者Python程序中调用一些C/C++库 , 传统方式只能使用各种语言自身的绑定接口来集成这些第三方C/C++库 。 现在我们可以把第三方C/C++库源程序编译成WASM模块 , 然后通过先绑定WAMR或者其他WASM引擎来执行WASM模块 。 例如在JVM上通过JNI绑定了WAMR , 就不用再使用JNI去绑定其他C/C++库了 。
InfoQ|Micro Runtime,跨越嵌入式到云端的新型容器:WebAssembly
文章图片
2WebAssemblyMicroRuntime开源项目的诞生2019年5月 , 英特尔公司在GitHub上开源了WebAssemblyMicroRuntime项目(简称WAMR) 。
创建WAMR项目的是英特尔一支计算机语言运行时(runtime)技术团队 , 在英特尔内部称为“北海”团队 。 “北海”这个名称源自北京北海公园 , 这也是从2010年开始开发的一个可以兼容Java语言的轻量级虚拟机项目的内部代码 。 因为英特尔公司习惯使用地名作为产品内部代码 , 所以这支位于北京的中国团队就选择了北海作为产品代码 , 后来这个名字逐渐变成了这个团队的名称 。 “北海”团队成员从最早在ApacheHarmony项目上做JVM开发开始 , 一直深耕托管运行时技术领域 , 目前更多关注Web领域的WebAssembly和V8运行引擎技术 。


推荐阅读