菊苣:编写WebAssembly,克服JVM的不足

菊苣:编写WebAssembly,克服JVM的不足

💡 原文英文,约1500词,阅读约需6分钟。
📝

内容提要

Java Virtual Machine (JVM)和WebAssembly都有自己的能力。JVM几十年来一直被广泛使用,用于运行Java代码和应用程序。WebAssembly是一种新兴的方式,可以将应用程序打包成任何宿主环境都兼容的CPU指令集。Chicory是一个将Wasm的优势带到JVM的项目,它是一个JVM本地的Wasm运行时。Chicory可以在任何JVM可以运行的地方运行Wasm程序,具有简单和安全的设计。Chicory的一个有趣的用例是用于身份管理软件,可以通过导入JVM库来使用任何编译为Wasm的语言编写插件。Chicory还在开发中,目前可以进行基本的编码和测试,并计划在夏季完成更多功能。

🔎

延伸解读

Chicory 的定位:JVM 内的 Wasm 运行时

Chicory 是一个 JVM 原生的 WebAssembly 运行时,旨在让 Wasm 程序在 JVM 上运行,无需原生依赖或 JNI。它利用 JVM 的安全性和沙箱机制,为 Wasm 模块提供双重沙箱保护。这种设计使得 Wasm 程序可以在任何 JVM 可运行的环境中执行,同时保持简单和安全。

Wasm 的沙箱模型与主机函数

Wasm 默认在沙箱中运行,无法直接影响外部环境,这既是限制也是优势。若需与外部交互,模块必须通过导入声明所需能力,这些能力由主机函数提供。在 Chicory 中,开发者可以用 Java 编写主机函数,供 Wasm 模块调用,从而扩展其功能。这种方式类似于系统调用或标准库,但完全由 Java 实现。

实际应用:身份管理软件的插件扩展

Chicory 的一个有趣用例是身份管理软件 Keycloak。传统上,为其编写插件需使用 Java,但通过导入 JVM 库,现在可以用任何编译为 Wasm 的语言(如 Rust、C、Go)编写插件。这使企业应用更灵活,易于扩展,而无需重写复杂的遗留集成代码。一个概念验证在两小时内完成。

开发进展与当前限制

Chicory 仍处于开发中,目前实现了基本的字节码解析器和解释器,并建立了测试模式。计划在夏季完成所有测试通过、验证逻辑和 v1.0 API 草案。它尚未克服 Java 固有的性能问题,但 ahead-of-time 编译已投入生产,比解释模式快得多。项目受到 Wazero 启发,旨在简化多语言运行时的编写。

❓

Q&A

Chicory是什么?

Chicory是一个JVM本地的WebAssembly运行时,旨在将Wasm的优势引入JVM环境。

Chicory的主要应用场景是什么?

Chicory的一个主要应用场景是身份管理软件,允许通过导入JVM库使用任何编译为Wasm的语言编写插件。

Chicory如何提高Wasm的安全性?

Chicory提供了双重沙箱,确保Wasm程序在JVM环境中运行时的安全性和内存安全。

Chicory的开发进度如何?

Chicory目前已实现基本的字节码解析器和测试,计划在夏季完成更多功能。

Chicory与JVM的关系是什么?

Chicory是一个在JVM上运行的WebAssembly运行时,允许Wasm程序在任何JVM可以运行的地方执行。

Chicory的设置和运行需要哪些步骤?

用户需要在依赖管理系统中添加Chicory的运行时依赖,并按照文档中的说明进行设置。

🏷️

标签

➡️

继续阅读