Mozilla、Fastly、英特尔和红帽
要创建以 WebAssembly 格式交付并可在浏览器外部执行的可移植程序,我们建议使用 API
其中之一
为了保护,建议使用纳米进程的概念,其中每个依赖模块被分成一个单独隔离的 WebAssembly 模块,其权力仅与该模块相关(例如,用于处理字符串的库不会能够打开网络套接字或文件)。 与进程分离不同,WebAssembly 处理程序是轻量级的,几乎不需要额外的资源 - 处理程序之间的交互并不比调用普通函数慢多少。 分离不仅可以在单个模块的级别上完成,还可以在模块组的级别上完成,例如,需要使用公共内存区域的模块组的级别
请求的权力既可以在依赖项本身的级别上确定,也可以通过父模块沿链委托给依赖项(WASI 中的资源与特殊类型的文件描述符 - 能力)相关联。 例如,可以委派模块访问特定目录和系统调用的能力,如果模块的开发基础设施受到损害或发现漏洞,在攻击期间,访问将仅限于这些资源。 模块创建者的资源声明可能是可疑活动的指示器,例如当文本处理模块请求打开网络连接的权限时。 检查最初设置的权限,如果它们发生更改,则依赖项加载将被拒绝,直到更新本地模块签名。
在字节码联盟的支持下共同开发
-
消遣时间 — 用于将具有 WASI 扩展的 WebAssembly 应用程序作为常规独立应用程序运行的运行时。 它支持使用特殊的命令行实用程序启动 WebAssembly 字节码和链接现成的可执行文件(wasmtime 作为库内置到应用程序中)。 Wasmtime 具有灵活的模块化结构,允许您扩展各种应用程序的运行时,例如,您可以为资源有限的设备创建精简版本; -
卢塞特 — 用于执行 WebAssembly 格式程序的编译器和运行时。 特色鲜明特征 Lucet 使用成熟的预期编译(AOT,提前)而不是 JIT 生成适合直接执行的机器代码。 该项目由 Fastly 开发,经过优化,可消耗最少的资源并非常快速地启动新实例(Fastly 在云边缘计算引擎中使用 Lucet,该引擎使用 WebAssembly 来处理每个请求启动的处理程序)。 作为联合项目的一部分,Lucet 编译器计划转换为使用 Wasmtime 作为基础; -
WAM 扩展 (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,但是
来源: opennet.ru