← 返回信息流
AI 资讯Hacker News·6 天前

Endive:一个原生支持 JVM 的 WebAssembly 运行时

原标题:Endive: A JVM native WebAssembly runtime

速览

Endive 是一个创新的 WebAssembly 运行时,原生支持 Java 虚拟机(JVM),允许 Java 代码与 WebAssembly 模块进行无缝交互。该工具旨在简化在 JVM 环境中集成 Wasm 模块的复杂性,提升开发效率。它对于构建高性能、跨平台的云原生应用和边缘计算场景具有重要意义。

AI 深度解读

Endive:一个 JVM 原生的 WebAssembly 运行时

背景

WebAssembly (Wasm) 作为一种旨在实现安全、高性能和可移植性的二进制指令格式,近年来在服务器端和边缘计算领域迅速崛起。目前市场上存在多个成熟的 Wasm 运行时,如 v8、wasmtime、wasmer、wasmedge 和 wazero 等。然而,这些运行时大多由 C/C++/Rust 等语言编写,旨在作为独立进程或嵌入到非 JVM 生态中运行。

对于 Java 开发者而言,将现有的 Wasm 运行时嵌入到 Java 应用中面临着显著的工程挑战。由于这些运行时依赖原生代码(Native Code),在分发 Java 库(如 jar、war 文件)时,必须同时分发针对特定架构和操作系统的原生对象。这种“平台矩阵”极大地增加了分发复杂度,削弱了 Java 代码“一次编写,到处运行”的简洁性优势。此外,在运行时通过 FFI(外部函数接口)执行 Wasm 模块意味着程序执行流会跳出 JVM 的安全沙箱和可观测性范围,导致安全保证和内存管理的断裂。

为了解决这一痛点,Dylibso, Inc. 孵化并开源了 Chicory 项目。随后,该项目被 Fork 并演变为 Endive。Endive 是一个由 Bytecode Alliance 托管的项目,旨在成为 JVM 上运行 Wasm 的首选原生运行时。

核心内容

Endive 是一个完全用 Java 编写的 JVM 原生 WebAssembly 运行时。其核心设计理念是“零原生依赖”和“零 JNI(Java Native Interface)”。这意味着 Endive 可以在任何支持 JVM 的环境中运行 Wasm 程序,无需安装额外的原生库或配置复杂的 FFI 接口。

解决的核心痛点

  1. 简化分发:Endive 消除了对特定操作系统和 CPU 架构的原生二进制文件的依赖。开发者只需分发标准的 Java 库,即可在任何 JVM 环境中运行 Wasm 模块,保留了 Java 生态系统的简洁性。
  2. 保持 JVM 安全性与可观测性:由于 Endive 是纯 Java 实现,Wasm 的执行完全在 JVM 内部进行。这使得现有的 JVM 安全机制、内存管理、垃圾回收(GC)以及监控调试工具能够无缝覆盖 Wasm 代码,避免了因跨语言边界(FFI)导致的安全盲区和性能损耗。

项目起源与定位

Endive 是 Chicory 项目的继任者。Chicory 始于 2023 年 9 月,由 Dylibso 发起,旨在探索在 JVM 上实现零依赖 Wasm 运行的可能性。Endive 继承了 Chicory 的衣钵,并得到了 Bytecode Alliance 的官方托管,标志着该项目在开源社区中的成熟与规范化。

技术特性与路线图

Endive 致力于成为 JVM 上 Wasm 的默认运行时,其技术特性涵盖了从基础解析到高级语言特性的广泛支持:

  • 核心引擎:包含 Wasm 二进制解析器、简单的字节码解释器,以及解耦的解释器和编译器引擎。
  • 标准兼容性:完全支持核心 Wasm 规范,包括 WASIp1 和 WASIp2 支持。
  • 高级特性支持
    • SIMD(单指令多数据)支持。
    • 尾调用(Tail Call,包括解释器和编译器支持)。
    • 异常处理。
    • 线程支持(Threads Support)。
    • 扩展常量表达式(Extended Constant Expressions)。
    • 垃圾回收支持(GC support)。
    • 多内存支持(Multi-Memory Support)。
  • 开发与测试
    • 提供 v1.0 API,注重稳定性和开发者体验(DX)。
    • 构建时编译器通过的解释器验证逻辑,确保正确性。
    • 能够从 Wasm 测试套件生成 JUnit 测试,确保测试覆盖率。
    • 编译器在构建时通过所有相同的规范检查。

社区与生态

Endive 鼓励开发者通过 Zulip 聊天室进行交流,分享使用 Endive 构建的应用。项目文档提供了详细的入门指南,并维护了一份 ADOPTERS.md 文件,列出了使用 Endive 的组织和项目列表。

关键要点

  • 纯 Java 实现:Endive 是 JVM 原生的 Wasm 运行时,无需任何原生依赖(Native Dependencies)或 JNI 调用。
  • 无缝集成:解决了将 Wasm 嵌入 Java 应用时面临的复杂分发问题(无需处理多平台原生二进制文件)和安全/可观测性断裂问题。
  • 项目渊源:Endive 是 Chicory 项目的 Fork 版本,由 Dylibso 孵化,现由 Bytecode Alliance 托管。
  • 全面的功能支持:不仅支持核心 Wasm 规范,还涵盖了 SIMD、线程、GC、WASIp1/WASIp2 等高级特性。
  • 设计目标
    • 成为 JVM 上 Wasm 的默认运行时。
    • 提供尽可能高的安全性。
    • 在受限环境中也能轻松运行 Wasm。
    • 提供简单且符合 Java 习惯的 API 集成方式。
  • 活跃的社区与文档:拥有完善的官方文档、Zulip 社区支持以及丰富的技术文章和演讲记录(涵盖 Devoxx、FOSDEM、QCon 等顶级会议)。

意义与影响

Endive 的出现填补了 Java 生态系统中原生 Wasm 运行时的关键空白。在云原生、边缘计算和微服务架构日益普及的今天,Wasm 因其启动速度快、资源占用少和安全隔离性强等特点,被视为容器技术的有力补充或替代方案。

对于 Java 开发者而言,Endive 的意义在于:

  1. 降低 Wasm 采用门槛:通过消除原生依赖,Java 开发者可以像使用普通 Java 库一样使用 Wasm 功能,无需具备底层系统编程知识或处理复杂的跨平台编译问题。
  2. 增强安全性与稳定性:在 JVM 内部运行 Wasm 意味着可以利用 JVM 成熟的安全模型和监控工具,这对于企业级应用至关重要。
  3. 促进技术融合:Endive 使得 Java 应用能够更灵活地集成由 Rust、Go 或其他语言编写的 Wasm 模块,促进了不同语言生态之间的互操作性。
  4. 推动 JVM 生态现代化:通过支持 WASIp2、SIMD 和线程等现代 Wasm 特性,Endive 帮助 Java 生态跟上 Web 和边缘计算领域的发展趋势,为构建下一代高性能、可移植的 Java 应用提供了新的可能性。

随着 Endive 在 Bytecode Alliance 的支持下不断发展,它有望成为 JVM 领域 Wasm 事实上的标准运行时,推动 Wasm 技术在企业级 Java 应用中的广泛落地。

查看原文 →github.com