Skip to content

feat(openkal): the 0.9.0 ecosystem — nine packages, one change - #275

Merged
Sunrisepeak merged 1 commit into
mainfrom
release/openkal-0.9.0
Aug 28, 2026
Merged

feat(openkal): the 0.9.0 ecosystem — nine packages, one change#275
Sunrisepeak merged 1 commit into
mainfrom
release/openkal-0.9.0

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

Nine packages, published together because they are one change: openkal 0.9.0 and
the eight packages that implement, extend or stand on it.

package version what it is
openkal 0.9.0 the specification
openkal-kit 0.2.0 facilities composed from its interfaces, out of the same archive
openkal-linux 0.7.0 the reference implementation
openkal-macos 0.6.0
openkal-windows 0.4.0
openkal-opensbi 0.3.0 RISC-V, no operating system
openkal-uefi 0.3.0 before an operating system exists
openkal-musl 0.7.0 one C library above every implementation
openkal-llvm-runtime 0.4.0 a C++ standard library above that

Why they go in one change

Every one of them names another by version. Adding them separately would leave
the index, between two merges, in a state where a published manifest names a
version the index does not have — which is the shape a consumer meets and
nothing else reproduces.

What 0.9.0 is

openkal has been a specification a program is linked against. This version
makes every declaration one that could also be bound at load, or reached across
an address space, without changing what it says: one rule for how an operation
reports its result, nothing returning a pointer into the implementation, an
implementation that states its own version and interfaces, and the machine's
memory quantum asked for rather than fixed when the program was compiled.

What was checked before this

  • Every source tarball was downloaded from both hosts and compared byte for
    byte against the file the checksum was taken from
    , rather than trusted to
    the hosting service's own listing. A GitHub asset has been listed and served
    404 before, and GitCode's HEAD returns a redirect stub whose length is not
    the asset's.
  • Every descriptor here parses as Lua afterwards and carries the version in
    all three OS tables with the same checksum — checked on the parsed table, not
    by searching the text.

openkal 0.9.0, openkal-kit 0.2.0, openkal-linux 0.7.0, openkal-macos 0.6.0,
openkal-windows 0.4.0, openkal-opensbi 0.3.0, openkal-uefi 0.3.0,
openkal-musl 0.7.0 and openkal-llvm-runtime 0.4.0.

They go in together because each names another by version. Adding them
separately would leave this index, between two merges, in a state where a
published manifest names a version it does not have -- which is the shape a
consumer meets and that nothing in any of those repositories reproduces, because
every workflow there substitutes working trees.

openkal 0.9.0 makes every declaration one that could be bound at load or reached
across an address space rather than only linked: one rule for how an operation
reports its result, nothing returning a pointer into the implementation, an
implementation that states its own version and interfaces, and the machine's
memory quantum asked for rather than fixed when the program was compiled.

Every source tarball was downloaded from BOTH hosts and compared byte for byte
against the file the checksum was taken from, rather than trusted to either
service's own listing -- a GitHub asset has been listed and served 404 before,
and GitCode's HEAD returns a redirect stub whose length is not the asset's.
Every descriptor here parses as Lua afterwards and carries its version in all
three OS tables with the same checksum, checked on the parsed table rather than
by searching the text.
@Sunrisepeak
Sunrisepeak merged commit 95e3432 into main Aug 28, 2026
8 checks passed
Sunrisepeak added a commit that referenced this pull request Aug 29, 2026
riscv-virt-rt 0.6.0 and std-freestanding-alloc-kal 0.1.2, following #275.

riscv-virt-rt is not only a consumer: behind `features = ["openkal"]` it
supplies openkal's core set for QEMU's RISC-V virt machine, so 0.9's one-word
transfers, kal_memory_granularity and the self-description all had to be
implemented. Its granularity answers 1 -- no memory management unit, no
rounding -- and its comment records that a C library above it must impose its
own floor rather than adopt the number.

⚠️ Nothing had ever called that implementation. The feature compiled the sources
and the linker took all fourteen names into the test binary, so the suite was
green while proving only that it compiles and links. It now has a test that asks,
on both ISA profiles, measured to fail when the answers are made wrong.

std-freestanding-alloc-kal is a repin: kal_alloc and kal_free are unchanged and
nothing 0.9 altered is reachable from `operator new`. Writing it exposed that its
manifest dependency catches a version mismatch and not a declaration one -- it
declares the two itself rather than including openkal's header -- so continuous
integration now compiles both against the header they came from.

Both tarballs were downloaded from both hosts and compared byte for byte against
the file the checksum was taken from. Both descriptors parse as Lua afterwards
and carry the version in all three OS tables with the same checksum, checked on
the parsed table rather than by searching the text.
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.

1 participant