Обычно Java запускают внутри Linux, а тут автор вывернул всё наизнанку: загрузил полноценное ядро Linux прямо из Java-приложения, без JNI и QEMU.
Проблема: JNI требует C-прослойку, а FFM вроде бы даёт вызывать native-код прямо из Java — но есть подвох. Автор наткнулся на EINVAL при вызове KVM_GET_API_VERSION и через strace выяснил, что FunctionDescriptor должен описывать ABI целиком, а не только «значимые» аргументы: variadic ioctl ждёт третий параметр, и KVM ругается, если он не ноль.
Если тебе любопытно, как устроена виртуализация под капотом и зачем в Java 25 завезли FFM — заходи в статью.
🔥Ссылка на статью
Заметки Бэкендера & Max
