Skip to content

Design: 0.9 C ABI expansion

Status: accepted for milestone 0.9 Related: ADR-023, 0.8-cabi.md, milestones/0.9.md

Goal

Expand oxiland-capi beyond the frozen 0.8 preview allowlist so selected downstream consumers can compile and run, with inventory c_state closed (verified / implemented or justified not-applicable / excluded).

Claims

Claim 0.9 meaning
Source compatibility Programs using the published header compile and link against Oxiland
Oxiland ABI Layout, calling convention, and lifecycle for Oxiland handles are tested on each CI platform
Redland binary drop-in Not claimed unless a downstream matrix row proves .so interchange

Symbol cohorts

  1. Graph query resultslibrdf_query_results_is_graph, librdf_query_results_as_stream, and related finished/next reuse for graph rows materialized as statement streams.
  2. SPARQL Update — execute update strings through the model (safe Update facade); Redland-shaped entry via query language or model helper.
  3. Term / statement / URI accessors — string forms, type predicates, subject/predicate/object get/set used by language bindings.
  4. I/O variants — counted-string and file parse/serialize helpers needed by consumers.
  5. Digestslibrdf_new_digest family over safe utility digests.
  6. UTF-8 / file URI — helpers over safe utility modules.
  7. Logginglibrdf_world_set_logger / log message accessors with callback lifetime tests.

Headers declare implemented symbols only (same omission policy as 0.8 for unsupported APIs). Symbol version script advances to OXILAND_0.9.

Handle matrix additions

Handle Owns Notes
librdf_digest digest state free with librdf_free_digest
Graph results statement stream alias same stream rules as model find

Existing 0.8 handle rules (allocator, panic containment, model-bound streams) remain in force under ADR-023.

Evidence

  • FFI lifecycle tests per new handle type
  • ASan on Linux for expanded paths
  • scripts/check-capi-symbols.sh allowlist
  • Inventory c_tests for every implemented / verified entry
  • Downstream matrix under compatibility/downstream/