Evidence
Three different kinds of evidence stand behind this site, and they are not interchangeable. A measurement on a live kernel is the strongest; a model checked against the kernel source is weaker; an SMT proof about a hand-written model is weaker still. Each claim below says which kind it is.
1 · Measured on a live kernel
Linux 6.1, CONFIG_BPF_LSM=y, blocking mode, the 2026-08-07 build. Source of truth: the project's claim ledger. Nothing that is not in the ledger with a status is claimed here.
| ID | Claim | Status |
|---|---|---|
| D-01 | A process without a token (an autonomous process) cannot write a file. | PROVEN |
| D-02 | The causal window is enforced: an expired token is worth nothing. | PROVEN |
| D-03 | Every ordinary file-modifying operation reaches a hook — 16 of 17 operations mediated. The 17th, reading, was not, because the read guard was switched off in that run. | PROVEN |
| D-04 | Network egress is mediated on the connectionless (UDP) path too. | PROVEN |
| D-05 | There is a token source that works on a headless machine. | PROVEN |
| D-06 | An application cannot issue itself a token. | PROVEN |
| D-07 | The token request is authenticated: signature, anti-replay, caller identity, rate limit. | PROVEN |
| D-08 | The operator can stop the protection without a reboot. | PROVEN |
| D-09 | An unprivileged process cannot stop the protection. | PROVEN |
| D-10 | Log-only mode forbids nothing. | PROVEN |
| D-11 | A token is bound to the content being written (content hash). | PLANNED |
| D-12 | A whitelist keyed on the process name (comm) can be bypassed with prctl(PR_SET_NAME). | STATED |
| D-13 | Root can switch the protection off; it does not defend against root. | STATED |
| D-14 | The results hold in a deployment. | BLOCKED |
| D-15 | Process identity is bound to the executable file (inode + device), so a prctl(PR_SET_NAME) rename cannot borrow a whitelisted identity. Measured: the rename passes in name mode and is blocked in inode mode, while the real binary still writes. | PROVEN |
| D-16 | TOCTOU (I5): with a live token the first write binds the inode; a pivot to a different inode is refused. | PROVEN |
| D-17 | Multi-write: the bound inode may be written again with the same token. | PROVEN |
| D-18 | op_class (I4): a WRITE-scoped token is refused on a NET-only axiom file; a NET-scoped token on the same file passes. | PROVEN |
| D-19 | OP_BLOCK (I3): the protected file is refused even with a live token; the same token writes an unprotected file. | PROVEN |
| D-20 | Fork inheritance (T07): a child with no token of its own writes via the parent's live token. | PROVEN |
| D-21 | The whitelist is an op-class effect-scope, not a blanket exemption: a WRITE-scoped binary cannot open the network and a NET-scoped one cannot write, both without a token; OP_BLOCK overrides even an in-scope write. | PROVEN |
D-16–D-20 were measured on 2026-09-11 on the disposable VM in blocking mode, with a real token minted to the probe. What was measured is the effect — the write() allowed or refused — with two differential controls (the same file under a WRITE vs a NET token; the same token on an unprotected vs an OP_BLOCK file), so no result is explained by a missing token. The kernel's verdict names were not captured in that run, so this is one step short of the T08-level corroboration; a re-run that records them is still owed.
Open obstacles
- O-D3 — nothing is deployed; the long-running host still runs an older build in log-only mode.
- O-D4 — the shared secret used to authenticate token requests is protected only by file permissions.
- O-D5 — read mediation, measured on the older build in May, did not reproduce on the 2026-08-07 build; the cause is not yet known.
The token-dependent paths — now measured with a real token
These paths need a process that holds a valid token. Until the authority existed (2026-08-07) no token was ever created on the test machines — the key-press source never attached — so every such test blocked for the trivial reason that there was no token. The project's 2026-08-07 summary withdrew those as evidence. On 2026-09-11 they were re-measured on the disposable VM in blocking mode, minting a real token to the probe (D-16 – D-20): the TOCTOU pivot, the multi-write to the bound inode, op_class against an axiom, an OP_BLOCK file with a live token, and fork inheritance all gave the expected allow/refuse. The discrimination is carried by two differential controls — the same file under a WRITE vs a NET token, and the same token on an unprotected vs an OP_BLOCK file — so none of the results is explained by a missing token.
What is still owed: that run captured the effect (the write() allowed or refused), not the kernel's verdict names, whose audit stream produced no journald lines. And content binding (D-11) remains planned — a token authorises writing a file, not writing a particular content.
Earlier results (2026-05-25, validation report v1.4)
On the long-running host, in blocking mode: T01 (a write with no token) was refused with EPERM, and T10 (writing the token map from user space) was refused even for root, because the map is frozen. The report also lists T03 (protected file) and T04 (op_class mismatch) as blocked; by the reasoning above those two results cannot tell a working rule from a missing token, and are not relied on here. T13 (root rewrites the axiom map) succeeded, as documented: a software layer does not stop root. The report's T08 result is superseded — see below.
When only a physical button can open the window
The design goal is that nothing outside the scope runs unless a person physically acts. Writing that rule down does not make it hold; where it is checked decides who can go around it. A check inside an agent can be bypassed by a child process the check never sees; a check in a service can be bypassed by not calling the service. A check in the kernel sees every process. Five conditions must hold together — two of them do not yet:
| Condition | Why it is needed | Today |
|---|---|---|
| 1 · Enforcement in the kernel, in blocking mode, on every write path | Child processes cannot slip past it. | Measured on one disposable VM (D-01, D-03); not deployed (O-D3). |
| 2 · The button is a signal no program can generate | Synthetic input — a program driving the browser or the OS input, /dev/uinput, a readable shared secret — would let software press it. This site's own tests produce isTrusted clicks that way. | Not met. The authority accepts a request signed with a shared secret protected by file permissions (O-D4); a hardware-key touch is not yet required. |
| 3 · No whitelisted binary within reach | A whitelisted process passes every guard without a token; a whitelisted interpreter extends that to every script. | Depends on the operator's whitelist. |
| 4 · No root | Root can switch the layer off (D-13). | Depends on the deployment. |
| 5 · The press is bound to the specific action | Otherwise a person approves “something” and the process chooses what. | Not met. Binding a token to the content written is planned (D-11); today it binds to the first file written. |
With condition 2 met by a hardware key whose touch signs the specific request, and condition 5 by content binding, the rule becomes one that a process on the machine cannot go around. Against root, the check has to move lower still — a hypervisor or hardware.
2 · The emulator against the kernel source
The emulator on the main page is a model of dcc_core.bpf.c as built on 2026-08-07. It is checked in three ways:
- 36 conformance tests, each naming the kernel lines it pins: window length and boundary, which hook consumes a token, same-inode multi-write, TOCTOU rollback, fork inheritance, whitelist precedence, the axiom key, guard defaults, log-only mode, exit cleanup, the stop path.
- A source pin. If the kernel source changes in any of the ways the model depends on — the window constant, the fork rule, the number of programs (22, of which 18 are LSM hooks) — a test fails and names what changed.
- Mutation testing. 23 deliberately wrong versions — 20 of the model, 3 of the source — are run against the suite. All 23 are caught.
This establishes that the model follows the source. It does not establish that the kernel behaves like the source says; that is what section 1 is for.
3 · The Z3 model
The check this site used to cite proved nothing
Until 2026-09-11 this page showed “6/6 invariants formally verified” and “isomorphism proven”. Each of the six checks added a rule of the form A implies B and then asked Z3 whether A and not B could hold. That combination is impossible for any A and B, so the check passes whatever the kernel does — with the error code set to a nonsensical value it still printed the same result. It has been withdrawn.
What replaces it
The write-path decision — the program on lsm/file_permission together with its axiom and token checks — is written out as one Z3 formula over all of its inputs, following the kernel source. Z3 proves 9 properties of it for every input, among them: an ordinary writer gets through only with a live token; an expired token never does; an OP_BLOCK file is refused to everyone but the loader, whitelist included; a second file with a bound token is always refused, even in log-only mode; every refusal is EPERM; and a whitelisted writer passes every other file without a token. Each property is also checked the other way: its premise can occur (it is not true merely because nothing satisfies it), and removing the one guard it depends on produces a counterexample.
The formula and the emulator are then run on the same 896 input combinations; they agree on all of them. Together with the conformance tests this is a chain — kernel source → emulator → formula → properties — but every link is a model. None of it is a measurement of the running kernel; section 1 is.
The invariants as they were published
Besides being unproven, several of the six published invariants said things the kernel does not do:
| Invariant as published until 2026-09-11 | What the kernel does | Status |
|---|---|---|
I3 — a refused file access returns ENODEV | Every refusal returns EPERM. Masking a refusal as an absent device is planned, not built. | WITHDRAWN |
I4 — a refused connection returns ECONNREFUSED | EPERM, as above. | WITHDRAWN |
I6 — a token's op_class is checked at every LSM hook | Only on the write path, and only against a file that has an axiom entry. Connect, send, exec and read look at the token's age alone. | CORRECTED |
| I1 — access requires a hardware key-press event | That tracepoint does not exist on the 6.1 generic kernel; the measured build's token source is the authenticated authority (D-05 – D-07). | CORRECTED |
| I2 — window 200 ms in the emulator, 500 ms in the kernel | 500 ms. The emulator now uses 500 ms too. | CORRECTED |
| I5 — TOCTOU: a second file with a staged token is always refused | Holds, including in log-only mode. | HOLDS |
The earlier page also attributed these invariants to three BPF programs — dcc_token_validator, dcc_toctou_guard, dcc_scope_checker — that do not exist. The checks live in dcc_axiom_validator, dcc_network_guard and the other programs named on this site.
4 · Changes since the papers (2026-05-25)
- Name-spoofing (T08). The May report recorded the spoof as blocked. The August measurement shows it succeeds against a name-keyed whitelist (D-12). The fix binds identity to the executable file, and that is now PROVEN (D-15).
- PID recycling (T09). A recycled process ID could inherit a dead process's token or identity. An exit hook now clears both (ledger O-D7, O-D8, fixed and measured).
- Token source. The key-press tracepoint is absent on the 6.1 generic kernel (O-D1). Tokens now come from an authority that only a privileged caller can run, reached through an authenticated request (D-05 – D-07).
- Coverage. On the older build, 2 of 13 ordinary file-modifying operations reached the hook. With 11 new LSM hooks, 16 of 17 do (D-03). UDP egress is mediated (D-04).
- Stopping. The operator can stop the layer without a reboot (D-08); an earlier hang in that path was found and fixed, then measured over three consecutive clean stops (O-D9). An unprivileged process cannot stop the layer (D-09).
- Root sub-boundary. A user-namespace root cannot read or rewrite the maps, and unprivileged BPF is disabled, so there is no unprivileged path to the verifier. Both closures come from the kernel's own configuration, not from DCC.
5 · Limits
- Root can switch the layer off (D-13).
- A whitelisted binary passes every guard without a token; only an
OP_BLOCKfile still stops it. See Headless workloads. - The file axiom is keyed on the first 15 characters of the file name, not on its path.
- Nothing is deployed (O-D3); all 2026-08-07 results come from one disposable VM.
Kernel model: dcc_core.bpf.c, build 2026-08-07. Ledger statuses as of 2026-09-11. The implementation source is not public; the technical dossier is available under NDA — admin@metaspace.bio.