Skip to content

0.28.0: i686-linux-musl, x86_64-uefi, i686-openkal and i686-dos-musl (technical experiment); the family on openkal 0.25.3 - #31

Merged
Sunrisepeak merged 11 commits into
mainfrom
feat/0.28.0-i686
Nov 14, 2026
Merged

Sunrisepeak merged 11 commits into
mainfrom
feat/0.28.0-i686

Conversation

@Sunrisepeak

@Sunrisepeak Sunrisepeak commented Nov 13, 2026 •

Copy link
Copy Markdown
Member

openkal-platform 0.28.0 adds four rows and moves the family to openkal 0.25.3.

Rows

  • i686-linux-musl, the hosted arrangement's thirty-two bit Linux row (openkal 0.25.1, clause 5.5). It is openkal-musl over openkal-linux 0.26.3's i386 system-call layer, with openkal-llvm-runtime above it.
  • x86_64-uefi, UEFI applications over openkal-uefi 0.10.0. The row is PE32+ with the EFI application subsystem, and its runner is dirun with xim's OVMF under QEMU q35. An ok image also packs for UEFI as a carried program (uefi-x86_64). The board makes standard error the console, and the UEFI machine has 2 GiB.
  • i686-openkal, the ok image of i386. The image is ELF32 with REL relocations, linked with -z rela.
  • i686-dos-musl, DOS programs. This row is a technical experiment only.
    • It is openkal-musl over openkal-dos 0.1.0, under a DPMI host (CWSDPMI), run by dirun with DOSBox Staging.
    • The seal okdos (openkal-dos-tools) writes the stub before an ELF32 executable linked at its address.
    • An i686-openkal image packs as a DOS program through the core runner (--systems dos-i686).

Conventions of the i386 rows

  • The code is compiled for the 486 (-march=i486). DOSBox Staging 0.83 executes no CMPXCHG8B under any cputype.
  • The stack is aligned to 16 bytes at a call (-mstack-alignment=16), as the System V i386 convention requires. clang keeps 4 bytes for a triple with no system.

The group

openkal 0.25.3, openkal-linux 0.26.3, openkal-macos 0.23.3, openkal-windows 0.21.2, openkal-freebsd 0.1.2, openkal-uefi 0.10.0, openkal-dos and openkal-dos-tools 0.1.0, openkal-musl 0.29.6, openkal-llvm-runtime 0.20.3, and openkal-ld/run/tools 0.6.3. mcpp 2026.11.14.1 is the engine this release requires (a planned row is served by the platform's targets).

CI

Job What it checks
i686 the hosted program on i686-linux-musl, and the specification's conformance suite over openkal-linux
uefi an application built and booted under OVMF, status 42
i686-openkal checks/i386 in dev and release, checked by okld and run by okrun built for i686-linux-musl from the group's openkal-image tag, status 7
dos checks/dos in dev and release under DOSBox Staging, status 7; the i386 image packed with --systems dos-i686 and run as a DOS program, status 7

The jobs and the group check pass once mcpp 2026.11.13.1 and the group's members are released and indexed.

Measured locally with the family's working trees

  • The conformance suite on i686-linux-musl (full,optional): 408 held, none did not.
  • checks/i386, dev and release: status 7.
  • checks/dos, dev and release: status 7.
  • The carried DOS program: status 7.
  • The UEFI application: status 42.

…enkal 0.25.1

The hosted arrangement serves i686-linux-musl: openkal-musl 0.29.5 over
openkal-linux 0.26.3's i386 system-call layer, with openkal-llvm-runtime 0.20.2
above it. CI builds and runs the hosted program on Linux x86_64 and runs the
specification's conformance suite through the platform over openkal-linux at
the group's version. The group follows openkal 0.25.1; its implementations
declare the specification by its minor version (openkal-macos 0.23.2,
openkal-windows 0.21.2, openkal-freebsd 0.1.2; openkal-image 0.6.2).
…does

The released mcpp registers i686-linux-musl as planned and takes the row when
the toolchain is named; the conformance step named none and was refused.
… on openkal-musl 0.29.6, openkal-llvm-runtime 0.20.3 and openkal-image 0.6.3; mcpp 2026.11.13.1
@Sunrisepeak Sunrisepeak changed the title 0.28.0: Linux's thirty-two bit row (i686-linux-musl); the group on openkal 0.25.1 0.28.0: i686-linux-musl and x86_64-uefi; the family on openkal 0.25.1 (musl 0.29.6, llvm-runtime 0.20.3, image 0.6.3, uefi 0.10.0) Nov 13, 2026
…e console; the UEFI machine has 2 GiB

The runner's hosts include uefi-x86_64, so a single-file pack for that system
builds the carrier as an application of the x86_64-uefi row. The board
defines okuefi_board_errors_to_console (OVMF's StdErr reaches no serial
reader). dirun boots the row with 2 GiB: the carrier's allocator and the
image's each place an arena at a 256 MiB alignment, which 512 MiB did not
hold twice. Measured: a carried image that prints, writes to standard error,
throws and catches returned status 7 under OVMF in 0.4 s.
…s on the i386 rows

The platform serves i686-openkal (openkal 0.25.1, clauses 5.5 and 12.2;
openkal-image 0.6.3 loads it). The ok images' link states its addends
(`-z rela`), which is i386's one difference from the linker's default. The
row is compiled for the Pentium (`-march=i586`) with the stack aligned to
sixteen bytes at a call (`-mstack-alignment=16`), the System V i386
convention SPEC 12.2 states; a triple with no system leaves clang at four,
and okrun's code, built for Linux, faulted on a `movaps` when such an
image called it (measured). The DOS row takes the same alignment: its code
calls images and is called by them.

The README states the row, how a project selects it while mcpp names it
planned, and what openkal-dos's files give a DOS program.
…dos-i686)

DOSBox Staging 0.83 executes RDTSC and not CMPXCHG8B under every cputype (measured), and an image's sixty-four bit atomics (mimalloc's statistics) were that instruction under -march=i586, so i686-openkal and i686-dos-musl are compiled for the 486 and such an atomic is compiler-rt's call. The runner's hosts include dos-i686: the core runner as a program of the DOS row, which mcpp 2026.11.13.1 builds as the row the platform defines for the system. Measured: an i686-openkal image packed so ran under DOSBox Staging and returned 7.
checks/i386 builds an i686-openkal image in both modes, checks it with okld
and runs it with okrun built for i686-linux-musl from the openkal-image
release the group names; packed with --systems dos-i686, the image runs as a
DOS program under DOSBox Staging. checks/dos runs a program of i686-dos-musl
in both modes through the provider's runner. Both return status 7.
…nkal-dos's tag

The family release checks its tag, mirror and index entry as it checks
openkal-tools'. The README's statement table names i686-openkal and okdos.
@Sunrisepeak Sunrisepeak changed the title 0.28.0: i686-linux-musl and x86_64-uefi; the family on openkal 0.25.1 (musl 0.29.6, llvm-runtime 0.20.3, image 0.6.3, uefi 0.10.0) 0.28.0: i686-linux-musl, x86_64-uefi, i686-openkal and i686-dos-musl (technical experiment); the family on openkal 0.25.1 Nov 13, 2026
@Sunrisepeak Sunrisepeak changed the title 0.28.0: i686-linux-musl, x86_64-uefi, i686-openkal and i686-dos-musl (technical experiment); the family on openkal 0.25.1 0.28.0: i686-linux-musl, x86_64-uefi, i686-openkal and i686-dos-musl (technical experiment); the family on openkal 0.25.3 Nov 14, 2026
@Sunrisepeak
Sunrisepeak merged commit 7558e38 into main Nov 14, 2026
12 of 24 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.

1 participant