ADR-0014 — Rust-Native Reasoners Only (No JVM)¶
Status¶
Accepted
Context¶
Earlier specs assumed ELK and HermiT JVM adapters for v1.0 (ADR-0008, prior REASONER_SPEC.md). That conflicts with OntoIndex’s Rust-first, local-first goals: Java install friction, packaging complexity, and a hard dependency outside the shipped binary.
Rust OWL reasoners exist today, but none is a drop-in HermiT replacement with identical coverage and battle history:
| Crate / component | Profile | Notes |
|---|---|---|
| whelk-rs | OWL EL | Horned-OWL ecosystem; experimental; ideal for OBO-scale TBoxes |
| reasonable | OWL 2 RL | Datalog materialization; fast; not full DL |
| Horned-OWL reasoner interface | — | Trait defined; no bundled DL engine (Horned-OWL paper) |
Full OWL 2 DL classification, consistency, and unsatisfiability explanations are provided by OntoLogos ontologos-dl (1.0.0 workspace, HermiT parity in progress), integrated via ontoindex-reasoner per ADR-0015.
Decision¶
- Never depend on Java or JVM reasoners (ELK, HermiT, Pellet, etc.) in OntoIndex or OntoCode — not at v1.0, not as optional adapters.
- Ship Rust reasoner adapters behind the existing
ReasonerAdaptertrait (REASONER_SPEC.md), delegating to OntoLogos (ADR-0015): el—ontologos-elfor OWL EL classification (default for OBO / large terminologies).rl/rdfs—ontologos-rl/ontologos-rdfswhere RL/RDFS semantics suffice.dl—ontologos-dl(requires OntoLogos 1.0.0 crates.io publish).auto—ontologos-facadeprofile routing (1.0.0+).- Plugin reasoners must be native binaries or WASM — not JVM subprocesses (PLUGIN_SPEC.md).
- ROBOT remains an optional external CLI for OBO release pipelines; it is not used for in-IDE classification (OBO_ROBOT_SPEC.md).
Consequences¶
Positive:
- Single-language stack; no Java bootstrap wizard or JAR management.
- Reasoning works offline in the VSIX /
ontoindexbinary. - Aligns with Horned-OWL + Oxigraph dual stack (ADR-0013).
Negative:
- OntoCode v1.0 DL timeline depends on OntoLogos 1.0.0 HermiT parity, not only OntoIndex UI work.
- EL-only ontologies may classify faster via
elthandl; users need profile guidance in UI. - Parity with every Protégé + HermiT edge case is validated by OntoLogos conformance tests, not assumed.
Implementation notes¶
- v0.6:
ontoindex-reasoner+el/rl/rdfsadapters; pinontologos-* = "0.9". - v1.0: enable
dlandautoadapters; bump toontologos-* = "1.0"; real clash-trace explanations (P0 in PROTEGE_PARITY.md). - Do not block on JVM cross-checks in CI; align with OntoLogos HermiT parity.