Endive — это JVM-native рантайм для WebAssembly от организации Bytecode Alliance. Он умеет запускать Wasm-программы вообще без нативных зависимостей и без JNI. Endive работает везде, где есть JVM. В основе — простота и безопасность. Проект — форк Chicory от Dylibso, Inc., и разработчики благодарят Dylibso за инкубацию и фундамент.
Зачем вообще нужен ещё один Wasm-рантайм? Существуют зрелые варианты: v8, wasmtime, wasmer, wasmedge, wazero и другие. Они отлично запускают Wasm, но встраивать их в существующее Java-приложение проблематично. Все они написаны на C/C++/Rust и работают как нативный код. Это создаёт две проблемы.
Первая: если вы распространяете Java-библиотеку (jar, war), приходится прилагать к ней нативный объект под каждую целевую архитектуру и операционную систему. Матрица сборок разрастается, пропадает главное преимущество Java-кода — его простота доставки. Вторая: на рантайме приходится использовать FFI для выполнения модуля. Это фактически выход за пределы безопасной среды JVM — теряются гарантии памяти, безопасности и все штатные инструменты мониторинга.
Чистый JVM-рантайм решает обе проблемы. Все гарантии и инструменты остаются на месте.
У проекта четыре цели. Стать стандартным рантаймом для Wasm на JVM. Быть максимально безопасным. Работать в любом JVM-окружении без нативного кода, включая самые строгие окружения. Полностью поддерживать Core Wasm Spec. И делать интеграцию с Java (и другими языками хоста) простой и идиоматичной.
Разработка началась ещё в сентябре 2023 года в рамках проекта Chicory. Сейчас Endive — самостоятельный проект Bytecode Alliance. Если есть желание поучаствовать, разработчики зовут в Zulip-чат. Полный список организаций и проектов, которые уже используют Endive, — в файле ADOPTERS.md.