Skip to content

release: 2026.10.26.2 -- ok images, mcpp over mcpplibs.os 0.2.0 (modules/platform removed), argv-named programs, no signal handlers - #842

Merged
Sunrisepeak merged 43 commits into
mainfrom
release/2026.10.26.2
Oct 27, 2026
Merged

Sunrisepeak merged 43 commits into
mainfrom
release/2026.10.26.2

Conversation

@Sunrisepeak

@Sunrisepeak Sunrisepeak commented Oct 26, 2026 •

Copy link
Copy Markdown
Member

mcpp 2026.10.26.2. The CHANGELOG section [2026.10.26.2] is the full statement; in summary:

Added

Changed (design 2026-10-26 §25)

  • modules/platform is removed. mcpp reaches the operating system through mcpplibs.os 0.2.0; what was mcpp's own meaning moved to the module that owns it (invocation, mcpp.effects, mcpp.run, src/runtime, mcpp.build.command_line, toolchain-model, src/ui, mcpp.home.files). The one primitive kept per system is the home's lock (src/native/{posix,windows}), selected by [target.<os>.build] sources.
  • Every program mcpp starts is named by its argument vector; the command interpreter runs only commands that are text by nature ([hooks], MSVC environment scripts, recorded command lines). Programs read an empty standard input and run in a unit that ends with mcpp.
  • No signal handlers: one watcher thread over mcpplibs.os.interrupt ends the running units, writes the interrupt record first, restores the terminal and ends mcpp as requested. A closed standard output ends mcpp in the same order.
  • mcpp does not write its own process environment; an invocation's statements are read by every lookup and given to the programs it starts.

Fixed

  • A dependency upgraded to a version the build cache holds replaces the previous version's same-size BMI and objects (e2e 948); a detached compile whose status could not be written fails at once.
  • A WebAssembly link writes its .wasm; GCC module maps name their repository; mcpp update moves branch dependencies; transitive git branches are locked; and the other entries in the CHANGELOG.

Ecosystem released for this round (GitHub + GitCode mirror, index entries merged): openkal 0.17.1; openkal-linux 0.18.1/0.18.2; openkal-macos 0.15.1; openkal-windows 0.13.1/0.13.2/0.13.3; openkal-musl 0.22.1–0.22.3; openkal-llvm-runtime 0.16.1–0.16.3; openkal-image (openkal-ld/run/tools) 0.1.1; mcpplibs.os 0.2.0 (mcpp-index #579 #581 #583 #585 #586 #587).

CI: every job passed on 8863464; the head after it changes CHANGELOG.md only.

Co-authored-by: speak-agent 248744407+speak-agent@users.noreply.github.com

Sunrisepeak and others added 3 commits October 26, 2026 13:15
…2026.10.26.2)

2026.10.26.1 linked every POSIX output to $out.tmp and renamed it. Emscripten
names the files it writes beside the output after the output, so a link to
app.js.tmp wrote no app.wasm: the edge's implicit output was missing and
mcpp pack of a wasm32-emscripten program found no stem family
(mcpp-plugins' dist-web). A WebAssembly link is in place, as a PE link is.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…e format, mcpplibs.os, and part 1's closure

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…_paths is per package (#844)

A GCC module map now names the BMI directory as its repository ($root) and
every path below it, so a BMI built with GCC's own mapper and one built with a
map record their imports at the same paths: an indirect import, and
`import std.compat`, are found in a unit with a map. A dependency BMI an
earlier mcpp cached spells its imports the earlier way, so the cache key of a
package that provides a module under GCC carries the spelling (the upgrade
lane's `modules` variant). The dyndep step reads $root.

The `trim_paths` prefix map left the flags every unit shares: a unit carries
the fixed roots and its own package's closure, so switching workspace members
no longer recompiles their common dependencies (e2e 872 F).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
@Sunrisepeak Sunrisepeak changed the title release: 2026.10.26.2 -- a WebAssembly link writes its .wasm again release: 2026.10.26.2 -- a WebAssembly link writes its .wasm again; GCC module maps; trim_paths per package (#844) Oct 26, 2026
Sunrisepeak and others added 2 commits October 26, 2026 19:11
…cord is active

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Sunrisepeak and others added 4 commits October 26, 2026 20:10
…dep step does

A staged BMI's edge waits for the modules its map names, and the backend read
the map line by line: `$root gcm.cache' became a module named `$root' and every
path lost its repository, so the edge waited for `local-dev.gen-dep/gen.dep.table.gcm'
beside the build directory (e2e 849). It reads the map with parse_module_map now.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…conditional; a closed reader ends mcpp in order

The platform constants and architecture, the executable's name, PATH lookup,
directory links, no-replace renames, volume identities and terminals come
from mcpplibs.os. What it does not carry -- the launchers and their signal
guard, flock-compatible file locks, durable sync -- is one implementation
unit per system, selected by modules/platform/mcpp.toml.

openkal ignores SIGPIPE for its own writes, and the ignore survived exec into
every program mcpp started; std::print to a closed stdout threw. mcpp installs
a SIGPIPE handler first thing: it ends mcpp as an interrupt does, then by the
signal (141), and exec resets it for children. e2e 941.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…d, run by okrun, packed as the image (M2) or a program that carries it (M3)

The triple names no operating system (<arch>-unknown-none-elf); the convention's
flags and an ld.lld link produce an ET_DYN entered at ok_main; okld note and
okld check, programs of the graph, finish each image before it takes its name.
okrun is the target's runner. The target side's kernel-abi is fixed to openkal;
every layer above it is the graph's, and the payload's libc++ is withheld.
e2e 942; unit Triple.OpenkalIsAnImageForNoOperatingSystem.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…eads it back as its anchor

Only the root's git dependencies were written, so a branch two edges away
moved to its tip on every build and an --offline build stopped at it (mcpp's
own CI: platform -> mcpplibs.os -> openkal). e2e 943.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Sunrisepeak and others added 17 commits October 26, 2026 22:22
…age another loads (.okso) is built

An image exports what its source marks and nothing else, so the link drops
what nothing reaches and the requirements note names only what the program
uses; the unwind index is there for dl_iterate_phdr. kind = "shared" on
<arch>-openkal produces lib<name>.okso.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…of the unwinder and of the C library

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… so mcpp update moves a branch forward; M3 programs name themselves

mcpp update cleared mcpp.lock and the next build replayed the old graph,
building the old commit and writing it back (2026.10.19.1 onwards). The record
carries a digest of mcpp.lock and declines otherwise. e2e 943 C. The generated
M3 program runs its image with okrun_options::carried.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… commits a stack as its guard page is touched)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…lved commit; an image build with no okld is refused as image-tool-absent, and the matrix declares the openkal cells

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… the workspace's source, and an unresolved one is refused by name

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ndex carries (e2e 944)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…d, okrun for an ok image); e2e 942 G

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…only what was published

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…-tools (workspace inheritance, the target's conditional tables); a workspace root's effective manifest merges its own [workspace.dependencies]; e2e 942 pins the image's environment

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…the image's tools were

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…kspace = true inherits in every table

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… join_list); e2e 942 takes openkal-tools 0.1.0

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Sunrisepeak and others added 17 commits October 27, 2026 05:52
…x wherever it is in the graph; e2e 945

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…c e2e bootstrap builds against the index as published

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…tanding image states the symbol it is entered at (#845)

kind = "entry"; main = { from = "<dependency>/<entry>" } on programs, rows and
[test]; start on programs, entries, rows and [test]; mcpp:link-start
(build-program protocol 16). The entry compiles in its package's context and
links only into the programs that select it; required_features gate it and
windows_entry follows it. start is accepted on freestanding targets only,
renders -e and a --defsym check, and disagreeing statements are refused.
A file a target names as main on any row is no longer an ordinary source.
The compiled build-program interface is kept by version and text digest.
Design 2026-10-26 §24, SPEC-004 §14, docs 04/08/30/40/50, e2e 946 and 947.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…solved (design 2026-10-26 §25, D25)

The operating system is reached through mcpplibs.os 0.2.0. What was mcpp's own
meaning under `platform` now lives in the module that owns it:

- modules/invocation (mcpp.invocation): the environment of one invocation,
  statements over the started environment; every package reads through it and
  every started program receives it. mcpp no longer writes its own process
  environment; xlings' environment is given per invocation.
- mcpp.effects: the constraints of a run.
- mcpp.run: every program mcpp starts, by argument vector, in a unit that ends
  with mcpp; the general `execute(argv, Options)`; the command interpreter only
  for commands that are text by nature. A watcher thread over
  os::interrupt replaces the signal handlers; a closed standard output ends
  mcpp in the same order.
- src/runtime (launch_env, search, env_contract), mcpp.build.command_line,
  mcpp.build.capacity, mcpp.ui.terminal, mcpp.home.files (the lock, in
  native/<system>), toolchain-model's mcpp.toolchain.platform and
  mcpp.toolchain.apple_sdk, scaffold's project-name rule.

Platform differences are `if constexpr` and per-system implementation units;
no OS header remains in src/ or modules/. Interfaces that carried
implementations were split where GCC 16.1 wrote compiled interfaces their
importers could not read (§25.7). A failed detached code generation is
withdrawn so the next build compiles the unit again.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…th is, not a spelling of its store

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…out the others'; one evaluation of a sources list

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ater record replaces it; network checks run in mcpp's directory

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ends in

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…dency replaces the previous version's same-size files; a status file with no number is a failed unit

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… quick child printing what the reader checks

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…g after an upgrade

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… entry merged into the dissolution's

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
@Sunrisepeak Sunrisepeak changed the title release: 2026.10.26.2 -- a WebAssembly link writes its .wasm again; GCC module maps; trim_paths per package (#844) release: 2026.10.26.2 -- ok images, mcpp over mcpplibs.os 0.2.0 (modules/platform removed), argv-named programs, no signal handlers Oct 27, 2026
@Sunrisepeak
Sunrisepeak merged commit 7d70482 into main Oct 27, 2026
3 of 13 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