Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Glossary

One vocabulary, used the same way on every page. Each entry says what the term means here, the nearest Unix idea where there is one (and how it differs), and the page that defines it. When a page and this list disagree, the page that owns the term is right and this list is fixed.

A/B slots

Two places for the signed bundle. An update writes the new bundle to the inactive slot, and the loader verifies it on the next boot; a system that does not boot, or does not reach a healthy state before any session starts, falls back to the other slot. A version counter kept outside both slots stops a rollback below it. Unix: A/B partitions on a phone. Defined in packages.

abandoned call

An open call whose caller has gone: it died, timed out, or was failed by revocation after the server took the call. The server keeps the call, and any lend, until it replies; the reply reaches nobody. Unix: none. Defined in IPC.

account

A 64-bit number carried by a budget that says which principal the budget bills to; 0 means none. A new budget inherits its parent’s account unless the parent has none. Servers see the caller’s account on every message. Unix: a user ID, but it grants nothing by itself. Defined in budgets.

agent

A program that acts for a principal and is assumed hostile: an AI agent or any other automated worker. It is its own principal with a sponsor, runs under a lease, and holds only capabilities narrowed from its launcher’s. Unix: none. Defined in agents.

approval

A human’s out-of-band yes to a request that would add authority or move data across a label boundary. The requester cannot draw, type or listen on the channel where it happens. Unix: none (sudo’s prompt is in-band). Defined in the steward.

attach root

The directory a 9P connection is rooted at. Nothing above it can be named through that connection. Unix: a chroot, per connection. Defined in the wire protocol.

attack case

A bench case that tries to break a security property and passes only on a verdict the attacker cannot produce: the kernel’s own output, a victim’s, or a clean power-off. Defined in the test bench.

badge

A 64-bit number attached to an endpoint handle, chosen by the server that minted it. The kernel delivers it with every message sent through that handle, so the server knows which grant is in use. Badge 0 is the receive right. Unix: none; closest to a file descriptor’s open-file description as the server sees it. Defined in handles and objects.

bench case

One test the bench runs: a file tests/<name>.toml that boots the real kernel under QEMU with chosen programs, or runs host tests or a source check. Defined in the test bench.

bind

Making a capability the process already holds appear at another path in its namespace. It creates no authority. Unix: mount --bind, but per process and with no global mount table. Defined in files and binds.

boot manifest

The one strict-JSON file in the signed bundle that tells init which servers to start, with which devices, labels, weights, volumes and arguments, and which principals exist. Unix: /etc/fstab, /etc/inittab, /etc/passwd and the service files, as one signed document. Defined in init.

boot pack

One file on the verified system volume, boot.pack, holding again the modules and resources the shell loads to its prompt, behind an index of name, offset and length. beamlet reads it whole before its VM starts and takes those names from it, in place of one lookup each; any other name is the volume’s file. It is per VM and never written at run time. Unix: none close; a little like an initramfs that is only ever read whole. Defined in beamlet on Redoubt.

budget

The kernel object that holds resources: page, process and CPU-weight limits, a class, a label set, an account and an optional deadline. Every process runs in one; every kernel object is charged to one; destroying one revokes everything under it. Budgets form a tree. Unix: a cgroup, a revocation list and a security label in one object. Defined in budgets.

bundle

The signed archive the loader boots: the kernel, init, the boot manifest, every other server’s program and any data entries. Defined in boot.

call

A message that waits for a reply. It may lend pages to the server for the length of the call. Defined in IPC.

capability

The right to use something, held as a handle. There is no other authority: no user IDs, no paths that grant access by name, no root. Unix: a file descriptor, if file descriptors were the only way to reach anything. Defined in handles and objects.

carve

Giving part of a budget’s limits to a new child budget. The children’s limits never add up to more than the parent’s. Unix: none. Defined in budgets.

class

system or user, fixed for a budget and inherited by its children. It decides trust (a flow into a system budget is not label-checked by the kernel) and never scheduling order. Defined in budgets.

commandlet

One of the shell’s commands (cat, cp, grep): an Elixir function declared once, with defcommand, with typed parameters and its help, which it does not compile without. Imported at the prompt and called as plain Elixir. Unix: a shell builtin, but an ordinary function with no syntax of its own. Defined in the shell.

confined deployment

A boot in which init refuses any manifest that lets two different label sets share a server instance, volume, endpoint, network instance or device, except the two named control-plane mediators. The kernel and the cores stay shared. Defined in init.

connection

One client’s session with a server: an endpoint handle with its own badge, and the server state keyed to it (for 9P, its fid table). Copies of the handle share the connection; a launcher gives each child a fresh one. Unix: an open socket or file description. Defined in the servers.

context

A named session of one principal in one label set, chosen by the SSH user name: ssh alice.work@box is Alice’s context work, ssh alice@box her default one. One session at a time. Defined in sessions and namespaces.

crash blame

When a server crashes while working on a call, the exit notice names the account and labels of that call’s sender. The steward counts blame and ends sessions that keep crashing shared servers. Defined in processes.

current call

The open call a server thread is working on: the call its last receive took, or the one it named with serve; none once it replies to it or receives anything else. A crash blames its sender. Defined in IPC.

declassification

Moving one item of data out of a label to an unlabelled volume, done only by the steward after the label’s owner approves that exact snapshot out of band. Unix: none. Defined in the steward.

device object

The kernel’s record of one device resource: an MMIO range (possibly able to do DMA), an interrupt line, or the right to power off. A driver reaches a device only through a handle to one. Unix: a device node, but held as a capability rather than found by path. Defined in devices.

DMA

Direct memory access: a device reading and writing RAM itself. A driver that programs DMA is trusted unless hardware confines it. Defined in devices.

endpoint

The kernel object clients call and servers receive on. It holds no queue: its waiting messages are its blocked senders. Unix: a listening socket, with the badge in place of the peer address. Defined in IPC.

escape room

The standing game in which real agents, told to get out, attack a confined deployment while a referee decides from the record, never from an agent’s own output. It tests what nobody thought to write a bench case for. Unix: none; a capture-the-flag run continuously. Defined in agents.

exit notice

The message the kernel sends to a process’s exit endpoint when it exits, faults or is killed: its PID, cause, code, and who is blamed. Unix: SIGCHLD and wait, as a message. Defined in processes.

fid

A number a 9P client uses to name a file it has walked to, within one connection. Unix: a file descriptor, scoped to the connection. Defined in the wire protocol.

fixed sub-budget

One of the budgets the steward splits a principal’s top budget into at boot, one per label set the manifest names for that principal. Every session and lease of one (principal, label set) is carved from its own sub-budget, so a vault’s activity never shows in what the unlabelled side can carve. Unix: none. Defined in the steward.

founding handle

The root badge of a server that is filled once at setup and then only served: bootfsd’s is the one init uses to add the public entries and seal them. No connection minted for a client can fill it. Unix: none. Defined in bootfsd.

gateway

A server that does a network job for an agent so the agent never holds a socket or a key: TLS, credentials, request checks and logging. gatewayd is the first. Defined in gatewayd.

gateway capability

A connection to gatewayd whose badge names one grant (the model gateway, a git remote), optionally narrowed to some of its hosts, with a meter. It is what an agent holds instead of a socket. Unix: none; closest to a scoped API token the holder can use but never read. Defined in gatewayd.

grant and release

The two operations of a typed protocol that mints a narrower capability for a client: a grant replies with the new endpoint handle and a random id; a release frees it by that id, and only for the client that received it. A 9P server’s pair is new_connection and disconnect. Unix: open and close, where only the opener may close. Defined in the wire protocol.

handle

An index into a process’s handle table, which the kernel holds. It names an object, a badge and a stamp. It cannot be forged; it can be copied and closed. Unix: a file descriptor. Defined in handles and objects.

hart

A RISC-V hardware thread: one core, or one thread of a multithreaded core. Unix: a CPU.

job

The native stages one shell command started, each running in a budget of its own carved from the session’s. Killing a job destroys those budgets; there is no signal. Unix: a shell job, killed by budget destruction rather than SIGKILL. Defined in native programs.

label

A name owned by a principal, marking data that must not leave a set of budgets. The kernel sees it as a 64-bit number. Defined in the servers.

label set

The labels on a budget, fixed when it is created. It is the isolation unit: two budgets with different label sets have no path between them that the OS carries, except through the steward’s approved moves. Defined in IPC.

lease

A budget with a deadline, made by the steward for an agent or session. When the deadline passes, the kernel destroys the budget and everything in it; the sponsor can end it sooner. Unix: none. Defined in the steward.

lend

Pages a caller hands to a server for the length of one call. They leave the caller’s address space until the reply brings them back. Defined in IPC.

loader stub

A small program mapped into a new process that reads the program’s ELF image and maps its segments, so the launcher never parses an ELF. Unix: the ELF loader in execve, moved out of the kernel and the parent. Defined in init.

meter

The part of a gateway capability that says how much the holder may spend: tokens and money, carved from its principal’s own. Unix: a quota. Defined in gatewayd.

mint

Making a new endpoint handle with a chosen badge, and optionally a narrower stamp. Only the holder of the receive right can. Defined in handles and objects.

model

The executable model: the Rust crate redoubt-model, which states the kernel’s objects, calls, rules and invariants as code, drives them with random call sequences and checks every invariant after each step. Its traces replay on the real kernel. Unix: none. Defined in the model.

mutation

A deliberate break of one rule planted in the executable model, to show the model’s checks catch it. Defined in the model.

name rules

What a resolver connection may have answered: an allowlist of domain names and suffixes, and a blocklist that subtracts from it and always wins. A suffix matches only at a label boundary. A grant only narrows them. Unix: none; closest to a filtering DNS proxy per client. Defined in the resolver.

namespace

A process’s own map from path prefixes to capabilities, built by its launcher. Nothing is inherited and there is no global file tree. Unix: a mount namespace with no root to fall back on. Defined in sessions and namespaces.

native program

A Rust program built for Redoubt and started from a session in a budget of its own, through the loader stub, with the namespace its launcher binds. Unix: an executable, but with no inherited descriptors or environment. Defined in native programs.

9P

The Plan 9 file protocol (9P2000), used for every service a person or program sees as files. Defined in the wire protocol.

open call

A call a server has taken with receive and not yet replied to. Each costs the server a page and counts against its limit of open calls. Defined in IPC.

pass

A budget’s position in the stride scheduler: the lowest pass runs next, and running raises it in inverse proportion to the budget’s weight. Defined in scheduling.

person

A principal who is a human: logs in with a key over SSH and can approve. Only a person gets name-scoped TCP, and every chain of sponsors ends at one. Unix: a user. Defined in the steward.

physmap

The kernel’s mapping of all RAM at a fixed offset, so it can reach any frame. Supervisor-only and never executable. Defined in memory layout.

PID

A process’s number, 2 to 64 (1 is the kernel), which is also its hardware address-space id. It is drawn at random from the free ones and held until the process’s exit notice is taken or dropped. No authority is keyed by it. Unix: a PID, but it names; it grants nothing. Defined in processes.

pipe

A file that somebody serves over 9P, bound into two programs’ namespaces as one’s standard output and the other’s standard input. There is no pipe object in the kernel and no inherited descriptor. Unix: pipe(2), as a served file. Defined in native programs.

powerbox

The steward’s service that grants authority a principal lacks, or confirms a principal’s own high-stakes step, through an out-of-band approval, and if approved hands back a narrow capability. Unix: none (sudo grants everything and asks in-band). Defined in the steward.

principal

A named, accountable identity the steward knows: a person, an agent or a project. It has an authentication method, a set of capabilities and an audit identity, and its top budget carries its account. Unix: a user account, without root and without ambient rights. Defined in the steward.

profile

The package versions a principal runs, and so the /bin its sessions see. It is a steward record, not a file in the principal’s space. Unix: a Nix profile. Defined in packages.

project

A principal sponsored by several members, with its own budget, volume, package directory and profile, and optionally a label. Membership is capabilities minted into a revocation scope per member. Unix: a group, but with its own budget and no ambient rights. Defined in the steward.

purpose

The one message shape a keyd badge may have its key sign: ssh_host signs only an SSH key exchange, audit only an audit record. No purpose signs a caller’s own bytes. Unix: none; closest to a key usage extension. Defined in keyd.

push

Moving one item from an unlabelled volume into a labelled domain’s volume, triggered by the label’s owner out of band. The mirror of declassification, and the only way input enters a confined labelled domain. Unix: none. Defined in the steward.

quarantine

What happens to DMA pages and devices when a device in the reset set does not confirm its reset: the pages are mapped nowhere and never reused until the machine resets, still charged to their budget, and the device’s object is destroyed and none names it again until reboot. Unix: none. Defined in devices.

reader budget

A short-lived budget the steward creates carrying exactly an item’s labels, with a deadline, to read that item for it: the steward stays unlabelled and calls it. There is no standing reader. Defined in the steward.

receive right

An endpoint handle with badge 0. Only it can receive, and only its holder can mint. Defined in IPC.

revocation scope

A budget with zero limits, made only to be a stamp and later destroyed, so a grant can be revoked without killing any process. Defined in budgets.

root badge

A badge below the minted range that a server’s setter-up gives meaning to (the manifest, through init), rather than one the server minted for a client. It is how system callers get separate shares and how setup-only operations are reserved. Defined in serving.

scope

The IP prefixes and ports an ipd connection may reach. A grant only narrows it, and no scope reaches the box’s own addresses. Unix: none; closest to a per-socket firewall rule. Defined in ipd.

screen buffer

A grid of cells beamlet holds natively for one screen program, written with a few primitives and diffed into the cells that changed; the only way a screen’s text reaches the terminal. Unix: a curses window, but with no escape sequence in it. Defined in beamlet.

screen program

A full-screen program of the session (the pager, the editor, a chooser): an Erlang process that draws into a screen buffer and is sent its keys by the shell’s driver. Unix: a curses program, but in the session’s VM, not a process of its own. Defined in the shell.

seal

The message that ends a server’s setup: before it clients see nothing; after it the contents are fixed for good. bootfsd is sealed once its public entries are added. Defined in bootfsd.

self set

The addresses that are the box itself: its own address, its network and broadcast addresses, loopback, “this host”, multicast, class E and the prefixes named as the host’s. ipd refuses them before any scope is looked at. Defined in ipd.

send

A message that does not wait for a reply. It may transfer pages to the receiver for good. Defined in IPC.

service record

The steward’s record of one installed service: the package’s program, its owner, the grants the owner made for it, a budget carved from the owner’s and a restart policy. The supervisor starts services only from these. Unix: a systemd unit, holding grants rather than a user name. Defined in the supervisor.

session

A person’s or agent’s working environment on the box: an Elixir VM in its own budget, with a namespace and capabilities the steward built for it. Unix: a login session. Defined in sessions and namespaces.

sink

A server whose output leaves a principal or the machine (ipd, gatewayd, sshd). A sink is cleared for no label and refuses every labelled caller, with one exception: sshd, on the channel whose owner authenticated it. Defined in the servers.

The principal accountable for an agent: a person, or an agent with a person at the top of the chain. The agent’s budget sits under the sponsor’s, and the sponsor can always end its lease. Defined in agents.

stamp

The budget recorded in a handle: destroying that budget, or any budget above it, closes the handle everywhere. Defined in handles and objects.

startup block

The read-only page a launcher gives a new process: its namespace, named handles, arguments and the location of its image. Unix: argv, envp and the inherited descriptors, in one checked record. Defined in init.

steward

The trusted server that knows principals, authenticates them, builds sessions, grants leases, runs approvals and keeps the audit log. Defined in the steward.

TCB

The trusted computing base: the code whose failure can break the security guarantees. For Redoubt: the firmware interface, the loader and the kernel, plus any server that programs DMA without hardware confinement. Defined in the kernel.

TID

A thread’s number within its process, 1 to 31; the first thread is 1. Defined in processes.

transfer

Pages given away with a send: they leave the sender and become the receiver’s. Defined in IPC.

trust domain

The budgets that share one label set. Within it, delegation is permitted; across it, only the steward moves data, one approved item at a time. Defined in the tenets.

trust list

The signing keys whose code a principal runs. The steward launches code on a principal’s behalf only if a key on its trust list signed it. Unix: an apt keyring, per principal. Defined in packages.

typed message

A message whose word 0 names an operation in a table, encoded by generated code, as opposed to a 9P message. Defined in the wire protocol.

vault session

A session carrying one of its principal’s labels, so it can read that label’s data and cannot send it anywhere unlabelled. Opened with ssh alice+X@box. Defined in sessions and namespaces.

verdict

The line a bench case passes or fails on. It must come from a party the attacker cannot impersonate. Defined in the test bench.

W^X

No RAM page is ever both writable and executable, under any mapping; the kernel’s own mappings keep the same rule. Device memory is a stated gap. Defined in memory.

weight

A budget’s CPU share. The scheduler uses its free weight: its limit less what its children carved. Defined in scheduling.

wire table

A Markdown table in libs/wire/tables/ that defines one typed protocol; the Rust and Elixir codecs are generated from it. Defined in the wire protocol.

writer budget

A short-lived budget the steward creates carrying exactly a target label set, to write one pushed item into that domain, since a write needs equal labels. Defined in the steward.

XLEN

The register width: 32 bits (rv32) or 64 bits (rv64). Every milestone boots rv64 and compiles rv32.