WebAssembly规范
1 - 规范概述
Wasm规范内容:
为了支持将WebAssembly嵌入到不同的环境中,它的规范被分割成不同的层,并在不同的文档中指定。
核心规范
定义了独立于具体嵌入的WebAssembly模块的语义。WebAssembly核心在一个单独文档中指定了WebAssembly Core。
-
WebAssembly:定义了WebAssembly模块的结构、指令集、二进制和文本格式的表示方式以及验证、实例化和执行的语义。
嵌入器规格
定义应用程序编程接口(API),使WebAssembly模块能够在具体的嵌入环境中使用。目前,制订了两个API:
-
JavaScript Embedding:定义了从JavaScript中访问WebAssembly的JavaScript类和对象,包括用于验证、编译、实例化的方法,以及作为JavaScript对象表示和操作导入和导出的类。
-
Web Embedding:定义了专门在Web浏览器中提供的JavaScript API的扩展,特别是一个用于流式编译和从源绑定的Response类型实例化的接口。
2 - 核心规范
2.1 - 核心规范概述
https://webassembly.github.io/spec/core/
内容
WebAssembly Specification
Release 1.1 (Draft, May 08, 2020)
Editor: Andreas Rossberg
- Latest Draft: http://webassembly.github.io/spec/core/
- Issue Tracker: http://github.com/webassembly/spec/issues/
3 - WASM Image规范
3.1 - WASM Image规范概述
简介
WASM OCI映像规范定义了如何将WASM模块打包成OCI镜像。WASM OCI镜像由一个WASM二进制文件、配置文件和目标WASM运行时的元数据组成。
该规范是通用的,允许任何类型的WASM模块,无论它是用来扩展任何Envoy、OPA还是浏览器。
该规范可以被认为是OCI Image Spec的扩展,专门为生产和消费WASM模块(相对于应用容器而言)的应用程序而设计。它旨在提供一个标准机制来管理WASM模块的构建和运行。
本文档将WASM Envoy过滤器考虑为OCI镜像存储的主要用例。
描述
WASM OCI镜像规范定义了一种存储WASM模块的方法,它使WASM模块易于构建、拉取、发布和执行。
由于WASM模块的每个执行环境(运行时)可能有运行时特定的配置参数,因此WASM镜像由内容层(WASM模块本身)和配置层(包含描述模块的元数据)组成,这些元数据与目标运行时相关。
分层
内容层总是由WASM模块二进制组成。
配置层由JSON格式化的字符串组成,其中包含目标运行时的元数据。通过解析config层可以推导出镜像的运行时和ABI版本。
根据目标运行时的不同,config层还可能包含额外的数据。例如,WASM Envoy过滤器的config包含过滤器上可用的root_ids。
为了简单起见,本规范只支持每个映像的单个模块。
使用Envoy运行OCI镜像
Envoy支持通过本地磁盘上的文件或 “Http datasource “加载和运行WASM模块。
Envoy WASM过滤器可以按照规范存储,并在本地缓存的帮助下,从远程注册中心中拉取镜像,从而运行Istio和Gloo。
然后控制平面配置Envoy实例通过本地缓存加载过滤器,如果可用的话,使用镜像配置中提供的必要的root_id参数来加载。