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¶
- Graph query results —
librdf_query_results_is_graph,librdf_query_results_as_stream, and related finished/next reuse for graph rows materialized as statement streams. - SPARQL Update — execute update strings through the model (safe
Updatefacade); Redland-shaped entry via query language or model helper. - Term / statement / URI accessors — string forms, type predicates, subject/predicate/object get/set used by language bindings.
- I/O variants — counted-string and file parse/serialize helpers needed by consumers.
- Digests —
librdf_new_digestfamily over safeutilitydigests. - UTF-8 / file URI — helpers over safe utility modules.
- Logging —
librdf_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.shallowlist- Inventory
c_testsfor everyimplemented/verifiedentry - Downstream matrix under
compatibility/downstream/