Mozilla、Fastly、英特尔和红帽将 WebAssembly 推广为通用平台

Mozilla、Fastly、英特尔和红帽 团结的 它致力于开发技术,使 WebAssembly 成为跨任何基础设施、操作系统或设备安全执行代码的通用平台。 已经形成了一个联合开发运行时和编译器的社区,该社区不仅允许在 Web 浏览器中使用 WebAssembly 字节码联盟.

要创建以 WebAssembly 格式交付并可在浏览器外部执行的可移植程序,我们建议使用 API 瓦西 (WebAssembly 系统接口),提供与操作系统直接交互的软件接口(用于处理文件、套接字等的 POSIX API)。 使用 WASI 的应用程序执行模型的一个显着特征是,它们运行在与主系统隔离的沙箱环境中,并使用基于能力管理的安全机制来对每个资源(文件、目录、套接字、系统调用)进行操作。等)必须向应用程序授予适当的权限(仅提供对声明的功能的访问)。

其中之一 目标 创建的联盟是针对具有大量依赖项的分布式现代模块化应用程序问题的解决方案。 在此类应用程序中,每个依赖项都可能成为漏洞或攻击的潜在来源。 控制依赖项使您能够控制与其关联的所有应用程序。 对应用程序的信任自动意味着对所有依赖项的信任,但依赖项通常是由其活动无法控制的第三方团队开发和维护的。 字节码联盟成员打算提供一个整体解决方案,用于安全执行本质上不值得信赖的 WebAssembly 应用程序。

为了保护,建议使用纳米进程的概念,其中每个依赖模块被分成一个单独隔离的 WebAssembly 模块,其权力仅与该模块相关(例如,用于处理字符串的库不会能够打开网络套接字或文件)。 与进程分离不同,WebAssembly 处理程序是轻量级的,几乎不需要额外的资源 - 处理程序之间的交互并不比调用普通函数慢多少。 分离不仅可以在单个模块的级别上完成,还可以在模块组的级别上完成,例如,需要使用公共内存区域的模块组的级别

请求的权力既可以在依赖项本身的级别上确定,也可以通过父模块沿链委托给依赖项(WASI 中的资源与特殊类型的文件描述符 - 能力)相关联。 例如,可以委派模块访问特定目录和系统调用的能力,如果模块的开发基础设施受到损害或发现漏洞,在攻击期间,访问将仅限于这些资源。 模块创建者的资源声明可能是可疑活动的指示器,例如当文本处理模块请求打开网络连接的权限时。 检查最初设置的权限,如果它们发生更改,则依赖项加载将被拒绝,直到更新本地模块签名。

在字节码联盟的支持下共同开发 已翻译 一些与WebAssembly相关的 проектов,之前由联盟创始公司单独开发:

  • 消遣时间 — 用于将具有 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,但是 不同 因为它是一种不与 JavaScript 绑定的二进制格式,允许在浏览器中执行从各种编程语言编译的低级中间代码。 WebAssembly 不需要垃圾收集器,因为它使用显式内存管理。 通过将 JIT 用于 WebAssembly,您可以获得接近本机代码的性能水平。 WebAssembly 的主要目标之一是确保可移植性、可预测的行为以及在不同平台上相同的代码执行。

来源: opennet.ru

添加评论