Skip to content

Move the portable example's pins, and record what the plan got wrong - #15

Merged
Sunrisepeak merged 5 commits into
mainfrom
feat/capability-completeness
Aug 27, 2026
Merged

Move the portable example's pins, and record what the plan got wrong#15
Sunrisepeak merged 5 commits into
mainfrom
feat/capability-completeness

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

The specification does not change. No interface was added, none was altered, and
SURFACE.txt is untouched.

Two implementations do change: openkal-macos provides the five interfaces 0.8
added and openkal-windows provides four of them, so examples/portable — the
example that demonstrates one program above three implementations — names the
versions that have them.

§9 of the capability-completeness plan

.agents/docs/2026-08-27-capability-completeness-across-the-ecosystem.md gains
a section recording what was implemented, the four decisions §8 left open, and
five things the plan itself got wrong. Two are worth naming here:

⚠️ posix_spawn was never missing. openkal-musl replaced musl's source
when the port was written, and system and popen have worked through it ever
since. What was missing was a criterion.

⚠️⚠️ timeout_ns = 0 does not mean "do not wait" — it means no bound,
which timeout.h states and kal_task_wait established. The plan had it
backwards, and passing a caller's zero straight through turns the one call that
must not wait into the one that never returns.

And one thing nothing had noticed: no continuous integration anywhere selected
these interfaces.
Every backend ran the conformance suite as full, which
expands to the hosted set, so every section for net, datagram, timeout,
exec and space was compiled with its body removed and reported as not
examined
— in the same release that added them.

The four decisions, settled:

decision outcome
fork() — trampoline or refusal trampoline, and space.h asked for it in terms
permissions refused, as recommended. Not an operation on the interface
symbolic links in 0.9 not now. The asymmetry stands recorded
openkal.space on Windows declined permanently

This is one change across seven repositories, and every branch carries the
same name.
Each repository's continuous integration substitutes its siblings'
working trees taken from the branch of the name under test, so the graph only
holds together when they agree.

repository what it carries
openkal-musl the socket, datagram, readiness and image-copying routes, and four probes
openkal-macos the five interfaces 0.8 added
openkal-windows four of the five; openkal.space declined in terms
openkal-linux the conformance run selects the optional interfaces, which nothing did
openkal-llvm-runtime __config_site's claims asserted by a program, and the C library repinned
openkal the portable example's pins, and §9 of the plan
sbase ninety-seven utilities above the new C library

The specification does not change. No interface was added, none was altered,
and SURFACE.txt is untouched — every capability below is composed from atoms
openkal 0.8 already had.

The specification does not change. Two implementations do: openkal-macos
provides the five interfaces 0.8 added and openkal-windows provides four
of them, so the example that demonstrates one program above three
implementations names the versions that have them.

.agents/docs gains section 9 of the capability-completeness plan --- what
was implemented, the four decisions section 8 left open, and the five
things the plan itself got wrong. Two of the five are worth naming here:

  ⚠️ `posix_spawn' was never missing. openkal-musl replaced musl's source
  when the port was written, and `system' and `popen' have worked through
  it ever since. What was missing was a criterion.

  ⚠️⚠️ `timeout_ns = 0' does not mean "do not wait" --- it means NO BOUND,
  which timeout.h states and kal_task_wait established. The plan had it
  backwards, and passing a caller's zero straight through turns the one
  call that must not wait into the one that never returns.

And one thing nothing had noticed: no continuous integration anywhere
selected these interfaces. Every backend ran the conformance suite as
`full', which expands to the HOSTED set, so every section for net,
datagram, timeout, exec and space was compiled with its body removed and
reported as not examined --- in the same release that added them.
Every workflow in this ecosystem substitutes its siblings' working trees
for the versions its manifests name. That is deliberate --- these
repositories change together --- and the consequence is that NO WORKFLOW
ANYWHERE RESOLVES A PUBLISHED PACKAGE. `openkal-kit' 0.1.0 shipped
naming the specification by a path, which is true inside its own tarball
and false for any consumer that also names an implementation; eight
packages published, nine workflows green and eight repositories green on
their own main, and the first resolution of the published set failed.

The script that asks that question existed only in a scratch directory.
It is here now, generalised over the versions and extended to exercise
the routes this release adds --- a listener, a connection, a transfer
and a duplicated image, written through POSIX and naming no openkal
symbol, so that a published C library whose sockets do not work cannot
satisfy it.
⚠️ THE FIRST RUN IN WHICH THIS SECTION WAS SELECTED AT ALL is the run
that found it. openkal-windows now names `exec' in its feature set, and
the MSVC row stopped at

    exec.cpp(78): error C3861: '__builtin___clear_cache': identifier not
    found
    exec.cpp(82): error C3861: '__builtin_memcpy': identifier not found

The suite is built by three compilers and had been written against two.

The cache maintenance is guarded on the COMPILER rather than on the
architecture, because what varies is which compiler spells the operation
that way; where it is absent, the architectures that compiler targets
here keep the two paths coherent in hardware. The copy becomes a byte
loop: this suite reaches no C library --- it is written to run against an
implementation that may be the only supplier of one --- and a builtin is
not a C library, but it is not a language feature either.
@Sunrisepeak
Sunrisepeak merged commit 283b1ca into main Aug 27, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants