{"id":6540,"date":"2026-10-07T16:10:43","date_gmt":"2026-10-07T23:10:43","guid":{"rendered":"https:\/\/xn--y9aq2bc.com\/?p=6540"},"modified":"2026-10-07T16:10:43","modified_gmt":"2026-10-07T23:10:43","slug":"program-without-control-pwc","status":"publish","type":"post","link":"https:\/\/xn--y9aq2bc.com\/?p=6540","title":{"rendered":"Program Without Control (PWC)"},"content":{"rendered":"<div class=\"taxonomy-category wp-block-post-terms\"><span class=\"wp-block-post-terms__prefix\">Category: <\/span><a href=\"https:\/\/xn--y9aq2bc.com\/?cat=223\" rel=\"tag\">LLM Chats<\/a><span class=\"wp-block-post-terms__separator\">\u2192<\/span><a href=\"https:\/\/xn--y9aq2bc.com\/?cat=238\" rel=\"tag\">Security Bug<\/a><span class=\"wp-block-post-terms__separator\">\u2192<\/span><a href=\"https:\/\/xn--y9aq2bc.com\/?cat=225\" rel=\"tag\">Technology Activism<\/a><\/div>\n\n\n<h2 class=\"wp-block-heading\">The inherited model: program and control<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Almost every security architecture in production is PAC: program and control. A program does the work. A separate control plane stands outside it, watches it, and intervenes when it drifts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The pattern is everywhere once named:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An init system supervises services and restarts the ones that die.<\/li>\n\n\n\n<li>An IAM layer stands between a caller and an API and decides each request.<\/li>\n\n\n\n<li>A host agent scans the filesystem and quarantines what it finds.<\/li>\n\n\n\n<li>A runtime policy engine intercepts syscalls and denies the ones the profile forbids.<\/li>\n\n\n\n<li>A maintainer reviews a pull request before it merges.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">PAC is a reasonable default because it separates duties: the worker stays simple, the authority stays concentrated, and the two can be reasoned about independently. But it carries structural costs that its users rarely count.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>The controller is itself a program.<\/strong> It runs on something, it must be patched, and it can be subverted, bypassed, or lied to. Every controller is a privileged target: take the controller and you take the system.<\/li>\n\n\n\n<li><strong>The controller only sees its own vantage.<\/strong> Anything outside its observation window (a race between check and use, a subresource it does not instrument, a path it does not hook) is uncontrolled in fact while controlled in the diagram.<\/li>\n\n\n\n<li><strong>The controller converts a property into a procedure.<\/strong> &#8220;The system is safe&#8221; becomes &#8220;the system is safe while the watcher is running, correctly, on a healthy host, with current rules.&#8221; Stop the watcher and the property evaporates.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">The inverse claim<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PWC: program without control. The name is deliberately provocative and the claim is precise: not a program without safety, a program without a <em>controller<\/em>. Control should not be an actor standing outside the program. Control should be a property of the program&#8217;s construction.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of a watcher who intervenes when the world goes wrong, build the world such that the wrong state cannot be reached, or such that reaching it is detected by the structure itself, at the moment of use, by an instrument that cannot be talked out of its verdict.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three mechanisms carry it, in the order an adversary meets them:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Control by construction<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The unsafe state does not exist to be reached. There is nothing for a controller to intervene on because there is no intervention to make: the writable surface was removed, the capability was never granted, the mutable alias was never created. Construction is the strongest form because it does not depend on any process behaving correctly at runtime.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Control by verification at use<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The state is checked every time it is used, by the mechanism that does the using, not by a separate watcher. The check and the use are the same act. A poisoned byte does not get quarantined by an agent after the fact; it fails to read. Verification at use has no TOCTOU because there is no gap between the check and the thing checked.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Control by record<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The state leaves evidence that cannot be silently rewritten. Nothing intervenes, and nothing needs to: the event is in an append-only ledger with enough structure that an independent auditor, human or machine, can reconstruct what happened and detect the lie. Record converts control from prevention into falsifiability. It is weaker than construction and verification, and it is the only one of the three that reaches what already happened.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where yubiOS already runs PWC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The doctrine is not new to this project; it is mostly a name for what the architecture already does:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>dm-verity on <code>\/usr<\/code><\/strong> (ADR-007, <a href=\"SPEC.md\">SPEC.md<\/a> principle 3): there is no file-integrity daemon watching the root filesystem. Verification lives in the read path itself. The control is the device-mapper mapping.<\/li>\n\n\n\n<li><strong>Composefs and the signed catalog<\/strong>: the image is its own control. The catalog pins every file&#8217;s digest and the mount refuses anything that does not match. No process compares hashes; the mount is the comparison.<\/li>\n\n\n\n<li><strong>Atomic A\/B updates<\/strong>: no controller watches an update for safety. The deployment either boots verified or the previous deployment is still there. Rollback is structural, not supervisory.<\/li>\n\n\n\n<li><strong>LUKS2 bound to FIDO2 hmac-secret<\/strong> (ADR-011): update-survivability is achieved by construction. The disk key is bound to the token&#8217;s secret, which updates cannot invalidate, so no controller is needed to re-bind anything after every update. The TPM-PCR alternative is PAC: a controller (the measurement policy) that must be re-tuned every time the measured world changes.<\/li>\n\n\n\n<li><strong>Build admission<\/strong> (<a href=\"..\/yubiOS.rego\">yubiOS.rego<\/a>): the OPA\/Rego gate is a filter, not a supervisor. It does not watch the build; it refuses to let the build start on unpinned or floating inputs (ADR-014\/015, <a href=\"..\/PINNED.md\">PINNED.md<\/a>). Admission at the boundary replaces surveillance of the interior.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Each of these removed a watcher and kept the property. That is the doctrine in one sentence: <strong>when you can move a control from a process into a structure, you must, because processes are attack surface and structures are not.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where PAC stays mandatory<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PWC dissolves the controller only where the controller would be a program. It never dissolves the owner.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Physical presence.<\/strong> Disk unlock, login, and administrative identity require the YubiKey, its PIN, or its touch (ADR-003). The touch is a controller that no software can impersonate, and it is deliberately kept out of the program.<\/li>\n\n\n\n<li><strong>Irreversible operations.<\/strong> Fuse burns, RPMB key writes, Secure Boot key enrollment: documented, rehearsed on sacrificial hardware, never automated past a human gate (<a href=\"MISSION.md\">MISSION.md<\/a>). These are PAC with a human as the controller, on purpose.<\/li>\n\n\n\n<li><strong>Recovery.<\/strong> The recovery path is the designed exception to every controller-free mechanism, and it is held offline and separated from the credentials it recovers.<\/li>\n\n\n\n<li><strong>The firmware below the OS.<\/strong> On x86-64, and today on most of ARM64, the lower firmware layers remain OEM-controlled: PAC we do not own and cannot dissolve. <a href=\"MITIGATE.md\">MITIGATE.md<\/a> names this honestly rather than pretending otherwise.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The test is judgment. Where staying safe requires judgment about the physical world, about irreversibility, or about intent, a controller is the honest choice, and on yubiOS that controller is the owner. Where staying safe is a matter of structure and verification, a controller is overhead and a target, and it should be dissolved.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The cost of PWC, and what pays for it<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A controller-free program has one structural weakness: when a load-bearing assumption breaks, no one is watching, because there is no one. PWC therefore has a mandatory second half.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Evidence.<\/strong> A controller-free mechanism must be observable enough that a broken assumption produces a detectable signal: a verification failure, a logged measurement, a build attestation that stopped matching, an audit trail an outsider can replay. The append-only record is not a nicety; it is the alarm that stands in for the watcher that no longer exists.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pinned assumptions.<\/strong> Every structural control rests on assumptions (a kernel feature floor, a signer that behaves, a format that stays stable). Those assumptions are pins like any other input: named, dated, and re-checkable. A floor that silently shifts is a control that silently stopped. Assumptions drift in the direction of the repository&#8217;s <a href=\"..\/PINNED.md\">PINNED.md<\/a> discipline: historical evidence is not a current pin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Honest scope.<\/strong> A PWC claim is a claim about where the control moved, not about safety in the abstract. A doc or ADR that adopts a controller-free mechanism says which mechanism (construction, verification at use, or record) replaced the watcher, and what evidence proves the replacement still holds. PWC without a named mechanism is just ungoverned.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When to reach for each model<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Situation<\/th><th>Model<\/th><th>Why<\/th><\/tr><\/thead><tbody><tr><td>The unsafe state can be made unreachable<\/td><td>PWC, by construction<\/td><td>No runtime dependency on anyone behaving<\/td><\/tr><tr><td>The state is reachable but foreign<\/td><td>PWC, by verification at use<\/td><td>No gap between check and use, so no TOCTOU<\/td><\/tr><tr><td>The state is legitimate but must not pass silently<\/td><td>PWC, by record<\/td><td>Falsifiability without a gatekeeper<\/td><\/tr><tr><td>The act is irreversible, physical, or requires intent<\/td><td>PAC, and the controller is the owner<\/td><td>Judgment is not a property of structure<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Non-negotiables<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No controller-free mechanism ships without naming the structural mechanism that replaces the watcher.<\/li>\n\n\n\n<li>Evidence is not optional in PWC. It is the second half of the claim.<\/li>\n\n\n\n<li>The owner is never the component PWC dissolves.<\/li>\n\n\n\n<li>PAC is not a failure word. Where control requires judgment, PAC with a human controller is the correct and final answer, and dissolving it would be a regression.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Control is a property of structure, not of supervision. Where structure can carry it, structure must. Where judgment is required, the controller is the owner, holding a key.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The inherited model: program and control Almost every security architecture in production is PAC: program and control. A program does the work. A separate control plane stands outside it, watches it, and intervenes when it drifts. The pattern is everywhere once named: PAC is a reasonable default because it separates duties: the worker stays simple, &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/xn--y9aq2bc.com\/?p=6540\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Program Without Control (PWC)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"chat","meta":{"footnotes":""},"categories":[223,238,225],"tags":[],"class_list":["post-6540","post","type-post","status-publish","format-chat","hentry","category-llms","category-security-bug","category-technology-activism","post_format-post-format-chat"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=\/wp\/v2\/posts\/6540","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6540"}],"version-history":[{"count":1,"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=\/wp\/v2\/posts\/6540\/revisions"}],"predecessor-version":[{"id":6542,"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=\/wp\/v2\/posts\/6540\/revisions\/6542"}],"wp:attachment":[{"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xn--y9aq2bc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}