Skip to content

0.8 compatibility report — C ABI preview

Status: complete for milestone scope (tip); registry publish pending tag
Milestone: 0.8
Decisions: ADR-022, ADR-023
Design: 0.8-cabi.md, 0.8-redb-spike.md

Claim

Oxiland 0.8.0 tip ships an auditable C source-compat preview (crates/oxiland-capi) over the safe Rust facade, plus a sealed durable-store adapter with Fjall behind it. This is preview allowlist evidence (headers, pkg-config, sanitizer/symbol CI, representative C example)—not ABI drop-in compatibility for existing Redland binaries and not complete librdf symbol closure.

crates.io and PyPI publish remain pending the v0.8.0 tag; until then registries still serve 0.7.0. Milestone-scope completion on tip is separate from registry publish.

Evidence

Gate Evidence
ADR-022 / ADR-023 accepted docs/DECISIONS.md
Sealed DurableStore + Fjall extraction src/storage/{durable,fjall,format_v1,mod}.rs
Backend conformance harness tests/backend_conformance.rs
Backend registry OpenOptions::new, compiled_backends(), StorageBackend::from_name known-uncompiled errors; CLI/Python/C aligned
oxiland-capi crate cdylib + staticlib, include/librdf.h, oxiland.pc.in, symbols.version
Preview allowlist Milestone frozen list; FFI lifecycle tests in crates/oxiland-capi/tests/
Representative C example crates/oxiland-capi/examples/preview_workflow.c
CI C ABI job example build, symbol allowlist, ASan
Inventory redland-1.0.17-oxiland-0.8.json with c_abi / c_state
User docs C ABI guide, limitations
redb spike record docs/design/0.8-redb-spike.md (evaluation for 0.9)

C accounting (0.8)

Header-derived public librdf_* functions (383): preview allowlist symbols are c_state=verified (45); remaining applicable symbols are mapped (deferred to 0.9) or retain safe-API not-applicable / excluded dispositions. See the 0.8 inventory notes.

Non-goals confirmed

  • No ABI layout/calling guarantees for existing Redland shared libraries
  • No complete C symbol inventory without unexplained gaps (0.9)
  • No downstream Redland language-binding / application matrix (0.9)
  • No optional durable adapters (redb, RocksDB, SQLite, LMDB) in the default or preview build
  • No public user-supplied DurableBackend trait

Version alignment

Rust crate oxiland, oxiland-cli, oxiland-capi (unpublished preview; publish = false), and the Python package are versioned 0.8.0 on tip. The Rust public API additions for this milestone are additive (compiled_backends, OpenOptions::new / backend). Registry publish of crates.io/PyPI 0.8.0 is gated on the release tag, not on tip milestone evidence alone.

Residual risks

  • Preview headers omit unsupported Redland APIs; linking against a fuller Redland program requires 0.9 symbol work.
  • Handle double-free after allocator reuse remains undefined; the preview detects some second-frees of unregistered pointers only.
  • Query result preview covers ASK/SELECT bindings paths; CONSTRUCT/DESCRIBE graph results are not exposed on the C query_results API yet.
  • Optional backends remain known-but-not-compiled until 0.9 adapters land.