The Entity System

A Computational Information Substrate

About This Paper

The Entity System is a substrate for distributed information systems. This paper is one part of a corpus describing it: what the system is, why it has the shape it does, what properties emerge as its primitives compose, and how the structural analysis methodology developed during the work generalises to other domains.

Each part stands on its own, which is why this one is rendered standalone. The corpus is a graph of cross-references rather than a chain, so a reference to another part points at where a claim is worked out in full — it is an offer, not required reading. The Entity System is the root of that graph: it presents the six primitives — Entity, Identity, Tree, Emit, Execution, Peer — and the build-up sequence under which their composition produces the system. A reader starting from any other part can pick up the primitives there.

The parts are also collected into reading paths, each rendered as a single volume — the whole corpus in several orderings, and narrower paths for readers who want one arc. Anyone reading past this part is better served by one of those than by collecting the pieces.

What is and is not claimed

The entity-system parts document a working system. Three independent implementations (Go, Python, Rust) validate cross-platform conformance on the normative surface, and claims about the system are testable against them. The methodology parts document the structural analysis in its own right, along with a small set of applications; the applications are exploratory, interpretations put forward to be tested.

The design is not finished. The system is implemented and running, but it has not met the range of uses that will show where it bends. Where a part can be checked, it says how; where it is exploratory, it says so.

Throughout, claims are distinguished from observations and observations from speculation. Where AI assistance was used in drafting or analysis, it is acknowledged in the relevant part.

Where the upstream work lives

The Entity Core architecture is maintained as an active spec elsewhere; this paper describes a snapshot. Open work, draft extensions, and implementation tracks continue beyond what is captured here, and the paper notes its snapshot boundaries explicitly where it matters.

The Entity Machine Boundary: From Content-Addressed Computation to Physical Hardware

Abstract.

We examine where entity computation meets physical hardware — the machine boundary. The entity system defines a compilation gradient of four stages, from content-addressed compute graphs (fully inspectable, self-describing, portable) through partial compilation and handler embedding to native machine code. Five machine boundary profiles describe the continuum from pure entity computation to entity-native hardware — each is a valid deployment target, not a step in a progression. A bootstrap evaluator designed at approximately 400–500 lines of C suffices to boot the full system from a conforming entity tree by performing eight core operations over seven irreducible machine-level primitives. Entity-native hardware naturally separates into three memory regions: an immutable content store (suitable for content-addressable memory, with no cache-coherency traffic for that store), a mutable location index (trie-backed), and ephemeral evaluation state. A six-stage instruction pipeline (FETCH, TYPE_DISPATCH, OPERAND_FETCH, EXECUTE, RESULT, EMIT) gives one opcode to each expression-constructing type in the compute extension (the types a programmer writes), as distinct from the operational types the evaluator produces during reduction (closure, scope, result, error). Machine architecture itself becomes an entity domain — instructions, registers, and ABIs are typed entities in the tree, enabling multi-architecture compilation from a single source. The compilation gradient traces the transition from computation-as-structure to computation-as-activity: from inspectable information to opaque physical execution. What cannot be optimized away at any stage defines the irreducible interface between entity computation and the physical substrate.

1. Introduction

The companion paper on computation (see The Entity Church Architecture) establishes that the entity system has a specific computational character: fixed evaluators processing typed data through emit, with universality arising from data expressiveness rather than evaluator complexity. This paper asks the next question: what does that evaluator need from physical hardware, and what does the path from entity computation to machine execution look like?

Most systems leave this boundary implicit. Programs are written in high-level languages, compiled to machine code, and the relationship between the computational model and the hardware is managed by compilers and runtimes that are not part of the system’s own description. The Java Virtual Machine abstracts the machine behind bytecode. WebAssembly defines a portable instruction set. The Erlang BEAM provides a concurrent runtime. In each case, the boundary between the computational model and the physical hardware is a fixed, opaque layer — the programmer cannot inspect it, the system cannot describe it, and the compilation process is external to the data model.

The entity system makes the boundary explicit because its computational model — typed data, content-addressed, organized in a tree, mutated through emit, processed by evaluators — is structurally different from the von Neumann model that conventional hardware implements. The entity system stores immutable content by hash, dispatches by type and path, and verifies capability tokens per operation. Von Neumann hardware operates on mutable memory at addressed locations through a sequential instruction stream. These are different computational assumptions, and making the boundary between them explicit is the first step toward understanding what each requires from the other.

This paper describes the compilation gradient (four stages from entity compute graph to machine code), five machine boundary profiles (from pure entity computation to entity-native silicon), the bootstrap evaluator (the minimal mechanism that boots the system), and an analysis of what entity-native hardware would look like. It also examines how machine architecture itself becomes an entity domain — instructions, registers, and ABIs described as typed entities in the tree — closing the self-description loop.

In the transferability framework of The Entity System, the machine boundary is the interface between Class N (platform-native code — bootstrap evaluator, primitive I/O, architecture-specific compiled handlers) and Class T (transferable content — entity-native computation expressions that any peer with the same evaluator specification can execute). The compilation gradient is the path that carries Class T data through progressively more Class-N-specific forms. Stage 1 is pure Class T (the entity compute graph is data). Stage 4 is pure Class N (machine code for a specific architecture). The intermediate stages trade Class T inspectability for Class N execution efficiency.

The machine boundary is where The Entity Church Architecture’s “computation-as-structure” becomes “computation-as-activity” — where inspectable, self-describing information in the tree becomes opaque physical execution on hardware. The stages of the gradient trace this transition. The fixed points — operations that cannot be compiled away at any stage — define the irreducible interface between entity computation and the physical substrate. The bootstrap evaluator is the minimum Class N footprint: ~400–500 lines of platform-specific code per implementation. Everything else in the entity system can in principle be Class T, transferable between peers.

Companion papers. The six primitives and their combinatorial analysis are in The Entity System. The computational model is in The Entity Church Architecture. The biology parallel — the ribosome as nature’s bootstrap evaluator — is in The Universal Computational Genome. Application development patterns using the compilation gradient are in Application Architecture. The security architecture, including hardware capability verification, is in Entity System Security Architecture.

2. The Compilation Gradient

Entity computation exists as typed data in the tree. Machine execution exists as electrical signals in silicon. Between them lies a gradient of four stages, each trading inspectability and portability for execution efficiency.

2.1. Stage 1: Entity Compute Graph

Compute expressions are entities in the tree — content-addressed, typed, fully inspectable. A compute subgraph at this stage is pure information. You can read it, verify it, compare it by hash, transform it, version it, transfer it between peers. It has all the architectural properties described in The Entity Church Architecture: self-description, versioning, addressability, persistence, and authorization.

The compute extension defines a set of core expression types — compute/literal (constant values), the compute/lookup family (resolve a name in scope, in the tree, or by content hash), compute/apply (function application), compute/if (conditional), compute/let (binding), and compute/lambda (abstraction) — alongside inline types for common operations: arithmetic, comparison, logic, field access (compute/field), record construction (compute/construct), and array operations. Together these form a Turing-complete entity-native compute language. At this stage, the program IS data — indistinguishable from any other entity in the tree, subject to the same content addressing, type validation, and capability scoping.

Every expression entity has a content hash. Two independently constructed but structurally identical compute graphs produce the same hash. This is not a cache optimization — it is a consequence of content addressing. The identity of the computation is intrinsic to its structure.

2.2. Stage 2: Partial Compilation

Pure subgraphs — those using only hash references, with no dependency on mutable tree state — can be evaluated at compile time. Their results exist as structure (computation-as-structure from The Entity Church Architecture); the compiler materializes them. Collapse replaces a subgraph of expression entities with a single result entity. The semantics are identical — the result IS what the expression produces.

Content addressing makes this safe and aggressive. The cache key for any pure subexpression is its content hash: expression_hash \to result_hash. If the expression’s input hashes have not changed, the result is cached. This is memoization as a structural consequence of content addressing, not an optimization strategy that must be proven correct.

What remains after partial compilation is the impure skeleton: expression subgraphs that reference tree paths (mutable state) or depend on runtime values. These define the runtime’s calling convention — the interface between compiled code and the entity system:

These four calls are the impure boundary. Everything between them can, in principle, be compiled to native code.

2.3. Stage 3: Compiled Handler

Entity compute expressions are compiled to native functions. The handler receives typed parameters, executes native code, and returns typed results through the emit pathway. The interior of the handler is now opaque — no longer inspectable entity data. This is where computation-as-structure becomes computation-as-activity.

The handler still crosses the entity boundary on both sides: typed input, typed output, capability verified, emit pathway available. What is lost is inspectability and portability. The compiled handler is architecture-specific — an x86_64 compiled handler does not run on ARM64. But its source (Stage 1 entities in the tree) remains, and recompilation for a different target is a matter of invoking the compiler with different machine type definitions.

2.4. Stage 4: Machine Code

Native instructions on physical hardware. Architecture-specific, opaque to the entity model. The entity system’s typed data model has been fully translated to register operations, memory access patterns, and I/O calls. At this stage, the program is invisible to the entity system — it is an artifact of a specific physical substrate.

2.5. Properties Across the Gradient

The gradient trades inspectability and portability for performance. But not all properties are lost:

Property Stage 1 Stage 2 Stage 3 Stage 4 Class
Content-addressed identity Yes Yes Yes (source hash) No
Inspectable Yes Partially No No
Portable (transferable between peers) Yes Yes No No T → N
Deterministic Yes Yes Yes Yes
Capability-scoped Yes Yes Yes Yes

Determinism and capability-scoping are preserved at all stages. The entity system’s security model works regardless of compilation level — capabilities are checked at the impure boundary, which exists at every stage. The gradient trades visibility for speed, but the security invariants hold throughout.

The transferability transition happens between Stages 2 and 3. At Stage 2 the expression skeleton is still entity data; two peers with the same evaluator specification can exchange the skeleton and execute identically. At Stage 3 the handler is compiled native code specific to an architecture; it cannot be transferred to a peer with different native architecture without recompilation. This is the boundary between Class T and Class N: each peer carries its own Stage-3 compiled handlers, produced by compiling received Stage-1/Stage-2 entity data.

2.6. What Cannot Be Optimized Away

At every stage, certain operations remain irreducible — they define the interface between entity computation and the physical substrate:

  1. Tree writes: state crossings through the emit pathway — store, bind, event
  2. Cross-peer exchange: serialization to wire format, network I/O, envelope construction and verification
  3. Capability checks: authorization verification at dispatch boundaries
  4. Handler transitions: crossing from entity-native to handler-internal and back

These four categories are the machine boundary’s fixed points. Any observable effect in the entity system falls into one of them. No compilation stage can eliminate them because they are where the entity model touches the physical world — where information crosses from one state to another, from one peer to another, or from one authority domain to another.

2.7. The Purity Boundary and Cross-Compilation

The purity boundary from The Entity Church Architecture maps directly to the compilation boundary. Hash references are pure — their referents are immutable, and expressions using only hash references can be collapsed at compile time. Path references are impure — their referents depend on mutable tree state, and expressions using them must remain as runtime evaluation.

This connects to the cross-compilation partition described in The Entity Church Architecture. Category A features (data types, functions, closures, generics) map to entity compute expressions and survive the full gradient. Category B features (lifetimes, ownership, borrow checking, GC internals) erase at the content-addressed boundary — they are substrate management that entity computation provides structurally. Category C features (SIMD, inline assembly, memory-mapped I/O) require machine access and live inside native handlers at Stage 3 or below, opaque to the entity model. The compilation gradient is where Category C meets the physical world. The formal dimensional analysis of these categories is developed in Dimensional Completeness.

3. The Bootstrap Evaluator

The bootstrap evaluator is the minimal mechanism that can read a conforming entity tree and begin evaluation. It is the answer to: what is the smallest fixed evaluator that boots the system?

3.1. Design Specification

The bootstrap evaluator is designed at approximately 400–500 lines of C.1 This estimate derives from component analysis: the evaluation algorithm for the core expression types accounts for roughly 130 lines of pseudocode (based on the compute extension specification), CBOR decoding adds approximately 100 lines, SHA-256 computation approximately 80 lines, content store management approximately 40 lines, location index approximately 30 lines, and I/O bootstrap approximately 20 lines.

The bootstrap evaluator performs eight core operations:

  1. Read entity tree: navigate the path \to hash namespace
  2. Resolve hashes: look up entities by content hash in the content store
  3. Dispatch on type: route evaluation based on the entity’s type field
  4. Evaluate compute expressions: reduce the core expression types — literal, the lookup family, apply, if, let, lambda — plus the inline operation types (arithmetic, comparison, logic, field access, construction, array operations)
  5. Manage scope: maintain variable bindings during evaluation (lexical scoping for lambda/let)
  6. Read/write tree: access and modify tree bindings through the emit pathway
  7. Compute hashes: SHA-256 over ECF-encoded content to derive content identity
  8. Encode/decode CBOR: parse and produce Entity Canonical Form for serialization

These eight operations decompose into seven irreducible machine-level requirements — the minimal hardware interface:

  1. Byte manipulation: read, write, compare byte sequences
  2. SHA-256: cryptographic hash computation
  3. CBOR encode/decode: parse and produce deterministic binary encoding
  4. String comparison: match type names and path segments
  5. Integer arithmetic: basic operations for expression evaluation
  6. Memory allocation: dynamic allocation for entities, scopes, and intermediate results
  7. I/O: read from storage (to load the initial tree), write results

These seven are what the bootstrap evaluator needs from the physical substrate. Everything above this — type dispatch, expression reduction, scope management, content addressing — is entity-native logic built from these machine primitives.

What the bootstrap evaluator does NOT need is notable: no networking, no full protocol implementation, no process management, no domain-specific handlers, no capability verification (the bootstrap runs in a trusted, single-peer context). It needs only enough to read a conforming tree and evaluate the compute expressions it finds there. Everything else can be bootstrapped from within the entity system once the evaluator is running.

The protocol specification requires three handlers to exist from initialization: system/tree (get, put), system/handler (register, unregister), and system/protocol/connect (hello, authenticate); the type handler (system/type validate) is bootstrapped as well when the implementation supports type validation. These are what “booting from a conforming tree” means at the protocol level — the bootstrap evaluator provides their functionality directly, and additional handlers (the capability handler among them) register through the standard mechanism once the system is running.

3.2. The Opcode Question

The opcode set is a design question, not a settled number. An entity-native instruction set would draw its opcodes from the compute extension’s expression-constructing types — the types a programmer writes: literal, the lookup family, apply, if, let, lambda, and the inline operations (arithmetic, comparison, logic, field access, construction, array indexing). Distinct from these are the extension’s operational types — compute/closure (a lambda with captured scope), compute/scope (evaluation context), compute/result (evaluation output), and compute/error (evaluation failure) — which the evaluator produces during reduction rather than reading from source.

The distinction matters: the expression-constructing types are what the programmer writes and the compiler processes; the operational types are intermediate representations the evaluator manufactures, not source-level constructs. An entity-native instruction set would likely need an opcode per expression-constructing type and microcode or internal operations for the operational ones. The exact size of the expression set depends on the compute extension’s current definition — which is still settling, having grown since this analysis was first drafted — so this paper describes the structure of the mapping rather than committing to a count.

3.3. Connection to the Fixed Evaluator Insight

The companion paper on computation (see The Entity Church Architecture) observes that at any point in time, every evaluator that is actually running is a fixed evaluator, and that universality comes from data expressiveness rather than evaluator complexity. The bootstrap evaluator makes this concrete: it is a specific, minimal, fixed evaluator. Its approximately 400–500 lines of C are the physical mechanism that reads typed structures and reduces them. What makes the system universal is not the evaluator’s complexity but the expressiveness of the typed data it processes — the core expression types and their inline operations form a Turing-complete language.

The computation gradient is the process of producing more efficient fixed evaluators. Stage 3 (compiled handler) is a fixed evaluator specialized for a particular set of entity types. Stage 4 (machine code) is a fixed evaluator specialized for a particular architecture. Each is less general but faster than the one above. The bootstrap evaluator is the most general and slowest — and the only one needed to start.

3.4. The Self-Hosting Loop

Once the bootstrap evaluator runs, the system can compile itself:

  1. Bootstrap (compiled externally): an external compiler produces the bootstrap evaluator binary for the target architecture. This is the one-time external dependency — the analog of the ribosome’s prior existence in biology, the persistent minimal evaluator that the abiogenesis-equivalent transition leaves behind (see The Universal Computational Genome).
  2. Read tree: the bootstrap evaluator reads the entity tree, which contains the source for an entity-native compiler (itself an entity — typed, content-addressed, at a known path).
  3. Compile: the entity-native compiler, running as a handler, compiles its own source (entity compute expressions in the tree) to instruction entities for the target architecture.
  4. Assemble: an assembler handler translates instruction entities to executable byte entities.
  5. Self-sustaining: the system runs on its own output. The externally compiled bootstrap is no longer needed.

At step 5, the system is self-hosting. It contains its own build instructions, its own compiler, its own evaluator source, and has used them to produce its own executable. The self-hosting loop closes. The parallel to GCC compiling itself is exact: GCC was first compiled with another compiler; now GCC compiles itself. The parallel to biological self-replication is structural: DNA encodes the proteins (including replication machinery) that read DNA. The key requirement in both cases: the description must include knowledge of the substrate. DNA encodes enzymes that manipulate chemistry. Entity trees must contain type definitions that describe machine architectures. Without substrate awareness, the system can describe itself but not reproduce itself.

Hash-based verification replaces test suites for replication correctness. Deterministic compilation means: same source entities + same compiler entities = same output hash. Verification is a hash comparison, not a test suite execution. The self-hosting loop also enables a defense against Thompson’s “trusting trust” attack (Thompson 1984) through diverse double-compilation: compile with Implementation A to produce hash HaH_a, with Implementation B to produce HbH_b, with Implementation C to produce HcH_c. If Ha=Hb=HcH_a = H_b = H_c, the output is trustworthy — no single implementation could have inserted a backdoor that all three reproduce identically. The entity system has three implementations (Go, Python, Rust) that could serve this role.

3.5. The Cosmopolitan Pattern

A practical deployment concern: the bootstrap evaluator must run on multiple architectures. The cosmopolitan pattern addresses this by packaging per-architecture evaluators with a multi-architecture selector in a single binary:

[Multi-architecture bootstrap selector]     (~200 bytes)
[x86_64 bootstrap evaluator]                (~2KB compiled)
[ARM64 bootstrap evaluator]                 (~2KB compiled)
[RISC-V bootstrap evaluator]               (~2KB compiled)
[Entity tree / content store]               (the actual system)

The selector detects the current architecture and jumps to the appropriate evaluator. The per-architecture evaluators share the same entity-reading logic — tree navigation, hash resolution, type dispatch, expression evaluation — with different machine code for the seven irreducible machine-level operations. A single entity peer binary runs on any supported architecture.

If the 400–500 line design estimate holds, a compiled bootstrap evaluator would be on the order of a few kilobytes per architecture. Everything else is entities: the compiler, the type system, the handlers, the protocol, the extensions — all entity data, architecture-independent, verified by content hash. The architecture-specific surface area would therefore be very small relative to the total system. Whether this holds in practice depends on the actual line count and the degree to which the bootstrap evaluator can share code across architecture targets.

3.6. The Abiogenesis Connection

The bootstrap evaluator is where the entity system meets the question examined in The Universal Computational Genome and decomposed in detail in Abiogenesis as Progressive Hardening: something must run first. The entity tree can contain its own specification, its own compiler, its own evaluator source — but none of this evaluates itself. A physical process (the bootstrap evaluator, running on electricity in silicon) must read the tree and begin reduction.

This is the entity system’s analog of the abiogenesis-equivalent transition — the co-arising of evaluator and data. The bootstrap evaluator is what persists from that transition (the analog of the ribosome), not the transition itself. The single external requirement is: one running evaluator on one architecture. From that seed, the system can build evaluators for other architectures, compile its own tools, and replicate to new hardware. But the first evaluator must come from outside — compiled by an external compiler, running on existing hardware.

In biology, the ribosome does not run by itself — chemistry and thermodynamics drive molecular interactions. In computation, the bootstrap evaluator does not run by itself — electricity and physics drive state transitions. The evaluator is where abstract information meets physical reality. The bootstrap evaluator, the ribosome, and the CPU are all instances of the same structural relationship: a fixed mechanism that reads typed structures and produces new structures, driven by physical forces it does not control.

The abiogenesis-equivalent problem for entity-native hardware (discussed below) shifts but does not disappear: instead of “compile the first evaluator with an external compiler,” it becomes “fabricate the first entity processor with existing semiconductor processes.” The dependency on the external physical substrate is irreducible.

4. Machine Boundary Profiles

Five profiles describe the continuum from pure entity computation to entity-native hardware. Each is independently viable — a valid deployment target with specific tradeoffs between entity-native control and reuse of existing infrastructure. The line counts below are design estimates, not measured implementations, on the same basis as the bootstrap evaluator’s; they indicate relative scale across profiles, not figures to be implemented against.2

4.1. Profile 1: Compute-Only Peer

Lines of machine-specific code: approximately 400–500. Dependencies: memory allocation, hash computation. Use cases: embedded systems, WebAssembly targets, formal analysis, testing.

No I/O. The evaluator and entity tree exist in memory. Compute expressions evaluate within the tree. This is the bootstrap evaluator stripped to its minimum — the pure computational kernel. Useful for environments where the entity system runs as a sandboxed computation engine with no access to the host environment.

4.2. Profile 2: Storage Peer

Lines: approximately 600–700. Dependencies: file or block I/O. Use cases: single-machine entity stores, embedded devices with persistent storage.

Adds tree persistence backed by local storage. The entity tree survives across evaluator restarts. Architecture-independent — the evaluator runs on any platform that provides storage and basic I/O. This is where the bootstrap evaluator naturally operates: it reads entities from storage, evaluates, and writes results back.

4.3. Profile 3: Network Peer (OS-Hosted)

Lines: approximately 800–1000. Dependencies: POSIX syscalls (or equivalent OS interface). Use cases: current entity-core implementations (Go, Python, Rust).

Adds networking and process management via host OS facilities. This is where the three existing implementations operate — handler logic in the host language, entity protocol at the boundary, OS-provided networking and storage. The machine boundary is the host language’s FFI: entity types cross into Go structs, Python objects, or Rust types, and back.

4.4. Profile 4: Hybrid Kernel

Lines: approximately 1500–2000. Dependencies: Linux syscall ABI (or equivalent kernel interface). Use cases: entity-native OS environment, dedicated entity servers.

The entity system runs as a kernel-level service rather than a user-space application. Device drivers are handlers. The file system is the entity tree. Process isolation uses entity capabilities rather than OS-level permissions. This profile corresponds to the DEOS vision described in DEOS — the entity system as operating system.

4.5. Profile 5: Bare Metal / Entity-Native Hardware

Lines: approximately 5000+ (or 0 with entity-native silicon). Dependencies: CPU architecture, essential hardware interfaces. Use cases: dedicated entity hardware, FPGA prototypes, entity-native silicon.

Hardware designed to execute entity computation directly. At the extreme end, entity-native silicon would have zero lines of translation — the hardware’s instruction set IS entity computation. The machine boundary disappears because there is no translation between computational models.

4.6. Each Profile Is a Deployment Target

The profiles are not a progression. Profile 3 (OS-hosted) is not “worse” than Profile 5 (entity-native hardware). They are different tradeoffs:

The machine boundary is not binary (entity vs. machine) but a spectrum of how much of the machine substrate is absorbed into entity computation. Most deployments will operate at Profile 3 for the foreseeable future, using existing OS infrastructure. Profiles 4 and 5 are longer-term targets that become relevant as the entity system matures and performance characteristics are better understood.

The Distributed Entity Operating System layer model (see DEOS) provides complementary context: host OS \to entity core protocol \to system extensions \to standard library \to application. The machine boundary profiles describe where entity computation begins in this stack. Profile 3 starts at the entity core protocol layer. Profile 4 pushes entity computation into the OS layer. Profile 5 pushes it into the hardware.

5. Entity-Native Hardware Architecture

This section is speculative — no entity-native hardware exists. We analyze what it would look like based on the computational model’s requirements. The analysis is architecturally grounded: the component technologies (CAM, LPM, SHA-256 acceleration, capability hardware) exist individually in production or research hardware. What is novel is their composition into a unified architecture for entity computation.

5.1. Three Memory Regions

The entity computational model naturally separates memory into three regions with different properties:

Content store (gigabytes to terabytes, immutable): hash \to entity. Write-once, read-many. Content-addressable memory (CAM) is the natural hardware primitive — lookup by content rather than by address. Because content is immutable once written, there is no cache coherency problem for the content store. Multiple processors can read from it without coordination. In a workload where the content store constitutes most of total memory (a reasonable assumption for data-heavy applications), coherency traffic would be limited to the location index. The extent of the reduction depends on the content store/index ratio for the actual workload, which varies. This addresses a recognized bottleneck in conventional multi-core systems, where cache coherency protocols (MESI, MOESI) consume significant bus bandwidth.3

Location index (megabytes to gigabytes, mutable): path \to hash. This is the tree’s binding state — the mutable namespace. It requires traditional cache coherency because bindings change via emit. Trie or longest-prefix-match (LPM) structures are the natural hardware — these exist in production network routing ASICs. The location index is small relative to the content store (paths are shorter than content), making coherency manageable.

Evaluation state (kilobytes per core, ephemeral): scope bindings, partial results, evaluation stack. This is working memory for the evaluator — conventional SRAM, local to each processing core, discarded after evaluation completes. No cross-core sharing, no coherency needed.

The three-region separation is not arbitrary — it follows from the entity model’s separation of immutable content (E+I), mutable naming (T+M), and temporal evaluation (X). Each region has different access patterns, different mutability properties, and therefore different optimal hardware implementations.

5.2. Why Content-Addressed Data Is Hardware-Friendly

The conventional “performance overhead” of entity computation — hashing every entity, looking up content by hash, comparing hashes for equality — appears inherent when standing inside the von Neumann paradigm. Hashing costs cycles; associative lookup is slower than addressed access on current hardware. The hypothesis is that these costs are artifacts of the hardware model rather than the computational model.

The parallel to graphics processing is suggestive: before GPUs, data-parallel graphics on CPUs was slow because the hardware was not designed for it. Hardware designed for the workload changed the performance picture. Whether entity computation follows an analogous path remains an open question — the analogy is structural, not a prediction.

On von Neumann hardware, the evaluator interprets entity expressions on top of machine instructions — two levels of interpretation. On entity-native hardware, entity expressions would be the instruction set — one level. Whether this eliminates the interpretation overhead entirely, or introduces different overheads, is what an FPGA prototype would test.

Entity computation has cache locality properties that may be easier to exploit on entity-native hardware than on von Neumann architectures:

The potential advantage over von Neumann’s statistical spatial/temporal heuristics is that the locality is structural — determined by the data model — rather than statistical. Whether this structural locality translates to better hardware performance depends on whether entity-native hardware can exploit it efficiently, which is an empirical question.

5.3. Entity Instruction Pipeline

An entity-native processor would have a six-stage pipeline derived from the evaluator’s operation:

FETCHTYPE_DISPATCHOPERAND_FETCHEXECUTERESULTEMIT\text{FETCH} \to \text{TYPE\_DISPATCH} \to \text{OPERAND\_FETCH} \to \text{EXECUTE} \to \text{RESULT} \to \text{EMIT}

This differs from a von Neumann pipeline (fetch, decode, execute, memory, writeback) in two structural ways. First, type dispatch replaces instruction decoding — the processor routes based on entity type rather than opcode byte. The entity type IS the opcode; there is no separate encoding layer. Second, the final stage is emit (atomic state crossing: store, bind, event) rather than memory writeback. The emit stage is where computation produces observable effects in the entity model.

Each expression-constructing type maps to an opcode — the entity type IS the opcode (see “The Opcode Question” above for the distinction between expression-constructing and operational types). The core types map as follows:

Opcode Expression Type Operation
0 compute/literal Load constant value
1 compute/lookup Resolve name in scope or tree
2 compute/apply Function application
3 compute/if Conditional branch
4 compute/let Bind name in scope
5 compute/lambda Create closure
6 compute/arithmetic Numeric operations
7 compute/compare Comparison operations
8 compute/logic Boolean operations
9 compute/field Record field access
10 compute/construct Record construction

5.4. Capability Verification in Hardware

On entity-native hardware, capability verification would be inserted at the TYPE_DISPATCH stage of the pipeline:

With a capability cache (analogous to a TLB for address translation), the common case — a recently verified scope — could have near-zero additional latency. Cache misses would fall through to full verification, which involves cryptographic signature checking (computationally expensive but rare for repeated operations on the same scope). The actual latency profile is an empirical question.

This approach contrasts with conventional hardware security models (x86 ring levels, ARM TrustZone) where security boundaries are coarse-grained and expensive to cross. Entity-native capability verification would be fine-grained (per-operation) and potentially cheap for cached cases. The CHERI capability architecture (Watson et al. 2015) is the closest existing research in this direction — hardware-enforced capabilities with per-pointer bounds — though CHERI operates at the memory access level while entity capabilities operate at the semantic dispatch level.

5.5. Layer-by-Layer Hardware Mapping

Each layer of the entity system maps to specific hardware components. The “benefit” column describes the hypothesized advantage on entity-native hardware relative to a software implementation on von Neumann hardware — none of these are measured results:

System Layer Hardware Component Hypothesized Benefit
Content store Content-addressable memory Low-latency entity lookup by hash
Location index Hardware trie / LPM unit Fast path resolution
Handler dispatch LPM unit (shared with index) Fast handler resolution
Capability checking Pipelined verifier + cap cache Low-latency common case
Expression evaluation Entity instruction pipeline Direct hardware execution
Hash computation Dedicated SHA-256 pipeline Pipelined, overlaps other stages
Protocol handling Entity-native NIC / DPU Wire-speed CBOR decode, hash verify
Dependency tracking Dependency CAM Fast cascade identification

The pattern is consistent with hardware/software co-design generally: regular, frequent, well-defined operations move to hardware; irregular, rare, policy-driven operations stay in software. What stays in entity-native software: handler logic (arbitrary computation), GC policy (heuristic), deep delegation chains (rare), revocation propagation (complex), tree merge conflict resolution (policy-dependent), complex type validation (open-ended).

5.6. Performance Inversion Hypothesis

The performance inversion hypothesis is that certain operations expensive on von Neumann hardware would become cheap on entity-native hardware, and vice versa. This is architectural reasoning, not measured performance.

Potentially entity-native wins: content verification (hash comparison vs. full re-hash), multi-core sharing (immutable content store requires no coherency traffic), per-operation authorization (pipelined rather than context switch), deduplication (CAM lookup vs. explicit comparison), dependency tracking (hardware-assisted rather than software-maintained), speculative prefetching (hash references enable structurally precise prefetch rather than statistical prediction).

Potentially von Neumann still wins: sequential arithmetic on large arrays (conventional ALUs optimized for this), large contiguous memory scans (DRAM burst mode), execution of legacy code (by definition), workloads that are purely sequential with no content-addressing benefit.

The hypothesis is not that entity-native hardware would be universally faster, but that for workloads matching the entity computational model — content-addressed data, typed dispatch, capability-scoped operations, reactive cascades — translation overhead on von Neumann hardware may be the dominant cost, and removing that translation could recover significant performance. Whether this hypothesis holds is what implementation and benchmarking would determine.

5.7. Feasibility Path

An incremental approach to entity-native hardware:

  1. FPGA prototype: implement the six-stage pipeline and three memory regions on an FPGA. Measure actual performance characteristics. Validate the architectural assumptions.
  2. Accelerator card: entity-native co-processor (like a GPU for entity computation) that handles content-store operations, hash computation, and capability verification while the host CPU runs handler logic.
  3. System-on-chip: full entity-native SoC with content-store memory, location-index trie, and entity instruction cores.
  4. Entity-native system: standalone hardware running entity computation as its native model.

Each step is independently useful and provides validation data for the next.

6. Machine Architecture as Entity Domain

At Profile 4 and above, the machine architecture itself is described as entity types in the tree. This is not a convenience — it is the completion condition for self-descriptive completeness.

6.1. Architecture as Type Definitions

A machine architecture is a system with data types (registers, instructions, memory regions), operations (instruction semantics), and constraints (alignment, encoding rules). Each of these maps to entity infrastructure:

machine/x86_64/register    -> {name: "rax", width: 64, class: "general"}
machine/x86_64/instruction -> {opcode: "mov", operands: [...]}
machine/x86_64/abi/sysv    -> {arg_registers: ["rdi","rsi","rdx",...], ...}
machine/x86_64/memory-model -> {ordering: "tso", page_size: 4096, ...}

These architecture descriptions are entities — content-addressed, typed, capability-scoped, transferable, inspectable. Same architecture definition produces the same hash, enabling automatic deduplication. The type system validates instruction entities against architecture constraints. Compilation to a target architecture can be authorized via capabilities. Architecture definitions travel between peers in envelopes.

6.2. Multi-Architecture Compilation

The architecture type tree provides a systematic structure for multi-target compilation:

system/types/machine/x86_64/  (register, instruction, operand, abi/sysv, abi/win64)
system/types/machine/arm64/   (register, instruction, operand, abi/aapcs64)
system/types/machine/riscv64/ (register, instruction, operand, abi/lp64d)

The compiler knows its target because the target’s instruction set is typed data it can read. Multi-architecture compilation is not a separate compiler feature — it is a consequence of the target being data. Same entity compute graph, different machine type definitions, different instruction entity output. The compilation logic is the same; only the type definitions change.

An assembler is a handler that reads instruction entities and produces byte entities. A disassembler reads byte entities and produces instruction entities. Both are ordinary domain handlers operating on typed data. There is no special “assembly language” — machine instructions are entities like any other.

6.3. The Entity ABI

Traditional operating system concepts map to entity equivalents:

Traditional Concept Entity Equivalent
Syscall numbers EXECUTE operations
File descriptors Tree paths
Process IDs Peer IDs
Memory addresses Content hashes
Unix permissions Capability grants
Shared libraries Handler entities
Environment variables Tree paths (configuration subtree)
Signals Callbacks / subscriptions

This mapping is not metaphorical — it is operational. The entity ABI replaces the traditional OS ABI. A “process” is a peer. A “file” is an entity at a tree path. An “open” is a tree get. A “write” is an emit. The entity system does not simulate these concepts — it provides them through the six primitives in a unified, typed, content-addressed framework.

In entity computation, source is compute expression entities in the tree. The compiler is a handler (an entity). The binary is byte entities in the tree. The running process is the evaluator interpreting entities. All four — source, compiler, binary, process — are entities. Same substance. Same security model. Same inspection tools. Same lifecycle.

6.4. The C/Unix Co-Evolution Parallel

C and Unix co-evolved: C assumes addressed mutable memory, and the von Neumann architecture provides it. C’s memory model (pointers, stack, heap) maps directly to hardware capabilities. The language and the hardware reinforce each other.

Entity computation and entity-native hardware would co-evolve in the same way: entity computation assumes content-addressed immutable data with capability-scoped dispatch, and entity-native hardware would provide it. The entity compute language’s expression types map to pipeline opcodes. The tree’s path \to hash structure maps to LPM hardware. Content addressing maps to CAM. The computational model and the hardware model reinforce each other.

This parallel suggests that the performance characteristics of entity computation on von Neumann hardware may not be representative of the model’s natural performance — just as performance of data-parallel graphics on CPUs was not representative of what became possible with dedicated hardware. Whether the parallel holds for entity computation is an open question; it motivates the FPGA prototype path as a way to find out.

6.5. Entity-Native Virtualization

When machine architecture is an entity domain, virtualization becomes entity-native. A virtual machine’s CPU state is an entity subtree: vm/cpu/rax, vm/cpu/rsp, vm/memory/page/0x1000. Instruction execution is handler evaluation on instruction entities. Memory access is tree navigation. The virtual machine IS an entity system evaluating machine-type entities in the tree.

This observation applies recursively: an entity system running on entity-native hardware, virtualizing a von Neumann machine, running conventional software, is a fully inspectable, auditable, capability-scoped virtualization stack — every level described in the same terms.

7.1. High-Level Synthesis

Bluespec, Clash, and Chisel generate hardware descriptions from functional specifications. These share the entity system’s premise that computation-as-structure can produce hardware, but they target register-transfer-level descriptions of conventional circuits. The entity-native hardware proposal goes further. Where these tools generate conventional circuits from a functional description, entity-native hardware would make the model’s operations the hardware’s own — eliminating the translation layer rather than re-describing the function in silicon.

7.2. Content-Addressable Memory

CAM exists in production hardware. TCAMs in network switches handle packet classification with millions of entries at moderate speed. TLBs in CPUs use fully associative CAM for virtual-to-physical address translation at high speed but small scale. The entity-native content store proposes using CAM for a different purpose — entity lookup by content hash — at a scale between TLB (too small) and TCAM (closer but still potentially insufficient). Hardware SHA-256 acceleration is also in production: Intel SHA Extensions (SHA-NI) and ARM Cryptographic Extensions provide pipelined hash computation.

7.3. Tagged and Capability Architectures

The Burroughs B5000 (1961) pioneered tagged memory, where each word carries a type tag checked by hardware. The entity system’s type dispatch at the pipeline level is a descendant of this idea, extended from word-level tags to full structural types.

CHERI (Watson et al. 2015) (Capability Hardware Enhanced RISC Instructions) implements capability-based security in hardware, with the ARM Morello prototype demonstrating practical capability enforcement at pointer granularity. Entity-native capability verification operates at a higher semantic level — per-dispatch authorization rather than per-pointer bounds — but the hardware techniques (tag bits, capability caches, bounds checking) are directly applicable.

7.4. Self-Hosting and Bootstrapping

The self-hosting loop has precedent in compiler bootstrapping. GCC, the Rust compiler, and the Go compiler are all self-hosting — compiled by earlier versions of themselves. The entity system’s self-hosting loop is structurally identical but extends beyond the compiler: the entire system — evaluator, type system, protocol, extensions — is described in entities and can be compiled from entities.

The diverse double-compilation defense against trusting trust attacks was formalized by Wheeler (Wheeler 2009). The entity system’s three independent implementations (Go, Python, Rust) provide the necessary diversity. Content addressing adds a verification mechanism that Wheeler’s analysis does not assume: same source + same compiler = same output hash, checkable without executing the output.

7.5. Virtual Machine Design

The JVM, WebAssembly, and Erlang BEAM each define an instruction set, memory model, type system, security model, and I/O model. The entity system as virtual machine compares as follows:

Dimension Traditional VM (JVM, WASM, V8) Entity VM
Instruction set Bytecode / stack operations Expression-constructing types (programmer-written) + operational types (closure, scope, result, error)
Memory model Heap + stack / linear memory Content store + location index
Type system Language-specific Entity type system (structural)
Security model External (OS process isolation) Internal (per-operation capabilities)
I/O model Syscall trap / FFI Handler dispatch (same as computation)
Programs Special artifacts (class files, modules) Entities (same substance as data)
Self-description None / limited reflection Tree contains evaluator specification

The entity VM is distinguished by the absence of a separate “program” concept — programs are entities, subject to the same content addressing, type validation, and capability scoping as all other data. The security model is internal (capabilities checked at every dispatch) rather than external (OS-level process isolation). The I/O model is unified with computation (both use handler dispatch through the tree).

7.6. Smart NICs and DPUs

NVIDIA BlueField and AMD Pensando are production data-processing units that offload protocol handling from the host CPU. Entity-native protocol processing — CBOR decoding, hash verification, signature checking, envelope validation — is a natural fit for DPU offload, even without full entity-native hardware. This represents a near-term path to hardware-accelerated entity processing at the network boundary.

8. Discussion

8.1. The Gradient as Structure-to-Activity Transition

The compilation gradient traces the transition described in The Entity Church Architecture: from computation-as-structure (Stage 1 — inspectable, content-addressed, self-describing information) to computation-as-activity (Stage 4 — temporal, opaque, machine-specific execution). Each stage trades inspectability for performance. The fixed points — tree writes, cross-peer exchange, capability checks, handler transitions — define the irreducible interface between the entity model and physical reality. These are the operations that must survive compilation because they are where the entity model’s guarantees are enforced.

The gradient also makes visible what is lost at each stage and what is preserved. Content-addressed identity persists through Stage 3 (the source hash identifies the compiled handler). Determinism and capability-scoping persist through Stage 4. Inspectability is lost at Stage 3. Portability is lost at Stage 3. The tradeoffs are explicit, not hidden behind opaque compilation.

8.2. The Evaluator Regression and Physical Grounding

The entity system is informationally closed: every aspect of the system — data, types, evaluators, execution traces, the evaluator’s own specification — is representable as entities in the tree. But informational closure is not physical closure. The tree contains the evaluator’s description, but a description does not execute itself. An evaluator described in the tree still needs another evaluator to run it. That evaluator is also describable, requiring yet another. The regression is infinite in description but terminates in physics: at the bottom, a physical process (silicon, chemistry) implements state transitions governed by physical law, not by another evaluator.

This is the entity system’s version of the limits of self-reference, as examined in The Entity Church Architecture:

The bootstrap evaluator is where this limit is concretely encountered. It is a physical process, external to the tree, that must read the description and begin evaluation. Entity-native hardware does not escape this — it moves the boundary from “software evaluator running on conventional hardware” to “hardware evaluator fabricated by conventional semiconductor processes.” The dependency on the physical substrate is irreducible.

8.3. What Entity-Native Hardware Would Prove

If the entity-native hardware architecture were implemented and showed the hypothesized performance characteristics — near-zero overhead for content verification, coherency-free multi-core sharing, per-cycle capability checking — it would support the conclusion that the apparent performance cost of content-addressed computation is a hardware mismatch rather than a computational limitation.

If it did NOT show these characteristics — if CAM at scale proved impractical, or if the six-stage pipeline introduced unexpected stalls, or if the location index became a bottleneck — that would be equally informative. It would identify which aspects of the entity computational model are genuinely expensive regardless of hardware, distinguishing fundamental costs from translation artifacts.

Either outcome advances understanding. The speculative analysis in this paper provides the architectural framework for both experiments.

8.4. Open Questions

Several questions bear on the claims in this paper:

8.5. Limitations

Several limitations should be noted:

9. Conclusion

The entity system defines an explicit machine boundary — the interface between content-addressed computation and physical hardware. Making this boundary explicit, rather than hiding it behind compilers and runtimes, allows the system to reason about its own physical realization.

The compilation gradient traces four stages from entity compute graph (fully inspectable, portable, self-describing information) to machine code (opaque, architecture-specific physical execution). At each stage, determinism and capability-scoping are preserved while inspectability and portability are traded for performance. The fixed points — tree writes, cross-peer exchange, capability checks, handler transitions — define the irreducible interface between entity computation and the physical substrate.

Five machine boundary profiles describe the deployment continuum (line counts are design estimates, not measured implementations):

Profile Description Lines Use Case
1 Compute-only ~400–500 Embedded, WASM, testing
2 Storage peer ~600–700 Single-machine, embedded
3 Network peer (OS-hosted) ~800–1000 Current implementations
4 Hybrid kernel ~1500–2000 Entity-native OS
5 Bare metal ~5000+ Dedicated hardware

A bootstrap evaluator designed at approximately 400–500 lines of C suffices to boot the full system from a conforming tree. It performs eight core operations over seven irreducible machine-level primitives. The self-hosting loop, once completed, enables the system to compile its own evaluator, verify its output by hash, and replicate to new architectures.

Entity-native hardware would naturally separate into three memory regions, with the immutable content store particularly suited to content-addressable memory. The six-stage instruction pipeline gives one opcode to each expression-constructing type in the compute extension, distinct from the operational types (closure, scope, result, error) that arise during evaluation. The machine architecture itself, described as entity types in the tree, enables multi-architecture compilation from a single source and closes the self-description loop.

The machine boundary is where abstract information meets physical reality — where the entity system’s typed, content-addressed, self-describing computational model is translated into electrical signals in silicon. The vision is hardware that understands the data model — where the translation overhead disappears because the computational model and the hardware model are the same. Whether that vision is practical is an engineering question. That it is architecturally coherent is what this paper aims to show.

Open questions:


  1. This is a design estimate based on component analysis, not a measured implementation. No bootstrap evaluator has been implemented yet. The actual line count will depend on the target language, standard library availability, and how the compute expression types are handled. The paper is a Tier 3 publication specifically because implementation work remains.↩︎

  2. Like the bootstrap evaluator’s ~400–500 line figure (see footnote above), these per-profile counts are extrapolations from component analysis, not measurements — no profile has been implemented. They are meant to convey the relative growth of the machine-specific surface as more of the substrate is absorbed, not to fix an absolute size for any profile.↩︎

  3. Content-addressable memory exists in current hardware: TCAMs in network switches handle millions of entries at moderate speed for packet classification; TLBs in CPUs use CAM for virtual-to-physical address translation at high speed but small scale (hundreds to thousands of entries). Whether CAM can scale to content-store sizes (millions to billions of entities) is an open engineering question. The addressing model is sound — the physics of associative lookup work at any scale. The economics and power characteristics are the constraints: CAM is power-hungry compared to addressed DRAM, and current TCAM scales to millions of entries. Whether this is sufficient, or whether hybrid approaches (CAM-indexed DRAM) are needed, remains to be determined. We flag this as the primary feasibility question for entity-native hardware.↩︎

Glossary

This glossary collects the controlled vocabulary used across the volume. Terms appear in the order they are first introduced in the foundational paper, The Entity System; cross-references in entries use the same vocabulary.

Primitives

Entity (E)
The unit of information in the system. An entity is a content-addressed, typed datum identified by a hash of its content. Entities are immutable.
Identity (I)
A stable name for a sequence of entities. An identity decouples “what this thing is now” from “what this thing was previously.”
Tree (T)
A structural composition primitive. Trees compose entities into hierarchical structures with addressable paths.
Emit (M)
The temporal primitive. Emit defines the act of producing a new entity and binding it to an identity at a point in logical time.
Execution (X)
The computational primitive. Execution evaluates content-addressed code against content-addressed data, producing content-addressed results.
Peer (P)
The spatial primitive. A peer is a uniform unit of isolation within which entities are stored, identities are resolved, and execution runs.

Composed properties

Self-description
A property emerging at three primitives (E+I+T). The system describes its own structure using the same vocabulary it uses to describe data.
Fixed-point types
The bootstrap-type structure under which types are themselves entities of a small set of “type entities” that refer to each other in a fixed-point closure.
Mutability
A structural property emerging at four primitives (E+I+T+M). Mutability is not a property of entities (which are immutable) but of identities (which may emit successive entities over time).
Computation
The actualisation of latent computational structure that emerges at five primitives (E+I+T+M+X). The substrate becomes Turing-complete via the execution primitive.
Distribution
Emerges at six primitives (E+I+T+M+X+P). Peer adds the spatial dimension that turns a single-machine substrate into a distributed one.

Architectural terms

Substrate
The minimum-floor abstraction over which everything else runs. The six primitives constitute the entity-system substrate.
Substrate-bridge extension
A Tier-1 extension that bridges substrate primitives to an application-architecture surface property. Eleven exist: TREE, TYPE, CONTENT, INBOX, SUBSCRIPTION, CONTINUATION, COMPUTE, QUERY, REVISION, HISTORY, CLOCK.
Operational extension
A Tier-2 extension supplying machinery that the substrate does not itself express: user identity (2a), network (2b), management (2c).
Standard peer
A peer profile under which a uniform set of substrate-bridge extensions is available. The standard peer is the conventional deployment target.
Conformance
The property of an implementation passing the cross-language conformance test suite that validates substrate behaviour across Go, Python, and Rust.

Methodology terms

Partial primitive
A primitive that decomposes into discrete levels (e.g., Sc=0 through Sc=4). Partial primitives admit graded analysis.
Convergence test
A reproducibility check for whether a candidate primitive set in a domain stabilises under iterated reduction.
Coherent sub-lattice
The subset of the power set of a primitive set under which dependency constraints are satisfied. For the entity-system substrate the coherent sub-lattice is 9 of 64 subsets (14%\sim 14\%); for the substrate-bridge extension lattice it is 576 of 2048 (28%\sim 28\%).
Transferability class
A classification of how cleanly a result transfers across substrates. Class N: not transferable. Class S: substrate-specific. Class T: transferable with translation. Class B: substrate-bridging — transfers without translation.
Triangle (composition triangle)
A three-primitive composition with load-bearing structural role. The named triangles in this volume are EIT, ITM, TMX, IXP, TXP.
Layer (1–4)
The scope hierarchy of the structural methodology. Layer 1: domain analysis. Layer 2: cross-domain graph construction. Layer 3: pattern extraction. Layer 4: applied analysis at variable scope ladder Sc=0 through Sc=4.

Conventions

References to other chapters use the form [@paperN] in source, rendered bundle-relatively as “Part M” when the referenced paper appears in the current bundle and as the italicised paper title otherwise. The shared references list appears in the back matter. Section numbering is hierarchical: the part number (the paper’s position in the current bundle) is the leading component (e.g., “3.2.1” is Part 3, Section 2, Subsection 1).

References

Thompson K. 1984. Reflections on trusting trust. Communications of the ACM. 27(8):761–763
Watson RNM et al. 2015. CHERI: A hybrid capability-system architecture for scalable software compartmentalization. In: IEEE symposium on security and privacy.
Wheeler DA. 2009. Fully countering trusting trust through diverse double-compiling [PhD thesis]. George Mason University.