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
DurableBackendtrait
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_resultsAPI yet. - Optional backends remain known-but-not-compiled until 0.9 adapters land.