Interop.Contracts primitives need a single C profile authority for tier-1 hosts.
C ABI profile — Link-time linking
Platform spec article
C ABI profile — Link-time linking
Spec standingStandard
-
C/System V binding rules defer to this hub.
Context
Decision
This feature hub must own normative MUST/SHOULD for C-compatible foreign libraries. Sibling articles add detail without redefining hub MUST tables.
Consequences
Cranelift lowering and foreign library import tooling align to this profile.
Verification anchors
/platform-spec/language-meta/interop/c-abi-profile/
-
dlopen is not Standard conformance for tier-1.
Context
Dynamic resolution complicates reproducible builds and CI conformance.
Decision
v0.3 Standard tier-1 conformance must use link-time library binding (link-time linking).
Consequences
Engine may retain Proposed
extern_dlopenpaths separately from Standard claims.Verification anchors
compiler/crates/beskid_codegen; Foreign library import. -
Dynamic resolution profile is non-Standard.
Context
Some hosts want late binding; tier-1 reference path standardizes link-time.
Decision
Runtime
dlopen/dlsymresolution is demoted to the dynamic resolution profile (Proposed appendix, not Standard).Consequences
Documentation and conformance matrices must not require dlopen for Standard tier-1.
Verification anchors
compiler/crates/beskid_engine/src/engine.rs(extern_dlopen, Proposed). -
Windows user-extern linking not tier-1 Standard in corelib.
Context
WinAPI/stdcall surfaces belong in platform packages with distinct conformance tiers.
Decision
WinAPI / stdcall as a stdlib concern is out of scope for tier-1 Standard conformance; platform packages may document Proposed mappings separately.
Consequences
Platform tier matrix records host-specific tiers.
Verification anchors
/platform-spec/language-meta/interop/c-abi-profile/
-
Delivery bands separate Standard views from Proposed layout structs.
Context
Implementers need a spec-first schedule when codegen trails text.
Decision
Band Content Status v0.3.0 Interop views, link-time import, symbol overrides Standard (spec; impl may trail) v0.3.1 CLayoutprimitive structsProposed Later Nested FFI structs, enum ABI, foreign-thread entry Planned Consequences
Articles tag Proposed vs Standard explicitly; CI strict mode can gate premature Standard claims.
Verification anchors
/platform-spec/language-meta/interop/c-abi-profile/ and child articles.
- C ABI profile — C layout types (v0.3.1) repr(C) records for FFI after interop views ship; nested complex types deferred.
- C ABI profile — Dynamic resolution profile Non-Standard appendix for runtime dlopen/dlsym extern resolution (legacy v0.1 path).
- C ABI profile — Extern contracts and linking Library and symbol metadata, JIT dlopen resolution, and policy gates for user extern contracts.
- C ABI profile — Interop view types (v0.3.0) CStringView, CBuffer, and CArrayView layouts for user Extern boundaries.
- C ABI profile — Link-time linking Normative link-time binding for user Extern libraries (v0.3 Standard).
- C ABI profile — Platform tier matrix Tier-1 Standard hosts vs Proposed platforms; WinAPI out of stdlib scope.
- C ABI profile — Types and call conventions Permitted C ABI representations for Beskid extern contract parameters and returns in the reference compiler.
0 revisions (git unavailable at build; counts may be empty)
No commits recorded for this path.
| Section id | Required | Found |
|---|---|---|
what-this-feature-specifies | yes | yes |
implementation-anchors | yes | yes |
Full tree: run pnpm verify:platform-spec-layout (writes src/generated/platform-spec-layout-report.json).
Standard conformance path
Section titled “Standard conformance path”For Standard tier-1 conformance (System V AMD64 ELF hosts), user Extern symbols must be resolved at link time using:
Librarystrings on contracts (logical names).- Project
linkmanifest metadata (see project link libraries). - Driver-supplied linker inputs from
beskid link/ build commands and optional foreign library import mapping.
JIT and AOT backends must emit undefined symbols compatible with the platform linker for imports collected in ExternImport.
Symbol identity
Section titled “Symbol identity”Link symbols use the method Symbol override when present; otherwise the Beskid method name. Name mangling must not apply to user extern symbols.
Security
Section titled “Security”Link drivers may enforce BESKID_EXTERN_ALLOW / BESKID_EXTERN_DENY against resolved (library, symbol) pairs before producing a runnable artifact.
JIT note
Section titled “JIT note”Reference JIT paths that relied on runtime dlopen are not the Standard story in v0.3. See dynamic resolution profile for the non-Standard appendix.
AOT parity
Section titled “AOT parity”AOT object emission must surface the same import set as JIT for a given artifact. Unresolved imports must fail at link time with actionable diagnostics listing missing symbols/libraries.
Reference compiler status
Section titled “Reference compiler status”On Linux tier-1, the AOT driver passes project link.libraries and discovered ExternImport.library values through AotBuildRequest::external_libraries (compiler/crates/beskid_aot/src/api.rs) and appends -l<library> / -L<path> in compiler/crates/beskid_aot/src/linker.rs. The engine consumer merges manifest link metadata in compiler/crates/beskid_engine/src/link_libraries.rs. Verification: compiler/crates/beskid_engine/tests/ffi_v03_link_time.rs::link_time_extern_getpid_matches_platform_spec.