Decided · proposed · open
Decisions and open questions
This project separates what is decided from what is proposed from what is genuinely unsolved, in every document, on purpose. Decided items are binding — work that contradicts one is wrong.
Source of record: docs/decisions.md in the Bivdi repository.
Decided#
Binding. Each was made with a stated rationale, and changing one requires an RFC.
- D-001
The name is Bivdi; the domain is bivdi.com
Short, unique, diacritic-free. The double meaning — to hunt or fish, and to ask — captures the capability model. More on the name.
- D-002
The first driver target is the most common VM engines
KVM/QEMU, VirtualBox, VMware, Firecracker, Proxmox, then AWS, GCP and Azure. virtio is the common denominator; VM-first gives a short, well-documented driver list and avoids GPU, Wi-Fi and suspend entirely.
- D-003
The Runtime is the product; the microkernel Core is a parked research track
The Runtime on Linux reaches the agent execution host with a fraction of the risk of a microkernel bring-up, and the Core track was deferring the actual product. One shared contract is kept so a future Core could run the same programs unchanged.
- D-004
WASI components are the native application format
WASI is already capability-oriented; the component model gives typed, language-neutral interfaces; Rust, C, C++, Go, Swift and C# already target it.
- D-005
Rust for services and drivers; a language-neutral IDL for protocols
Memory safety where failures are most dangerous. The wire format is the contract, not a language ABI — which also disposes of Rust's unstable ABI as a problem.
- D-006
IOMMU required; hardware without one is unsupported
A device may DMA only into buffers it was explicitly given. Without an IOMMU the driver-isolation model does not hold, and a model that does not hold should not be claimed.
- D-007
Files survive as an export format; running machine state is never persisted
The file is a stable contract, not the storage model. Persisting instruction-level state would persist corruption and defeat "restart fixes it".
- D-008
Distribution is uniform, but network failure and latency are never hidden
The same API and capability model locally and remotely — with latency, timeouts and partial failure explicit in the types. Waldo and colleagues settled this in 1994.
- D-009
GPU and Wi-Fi run in deprivileged driver VMs
Their driver stacks are enormous and Linux-specific. Isolation behind an IOMMU is the pragmatic answer.
- D-010
Crypto-shredding for deletion in versioned storage
History is immutable, so deletion is key destruction — supporting erasure obligations without rewriting history.
- D-011
Performance is a first-class attribute
Designed in, measured, and regression-gated — never won by weakening the security model.
- D-012
Open-core licensing
A freely implementable spec; permissive SDKs; MPL-2.0 for Bivdi's own core; a proprietary commercial layer; DCO and no CLA. The full model.
- D-013
Container-friendly, never container-primitive
The Runtime runs in a container from the first executable, because that is how it will be deployed. A container is a packaging and deployment concern — never an architectural or security primitive.
- D-014
The first target niche is the agent execution host
The machine you run agents on, where what an agent touched is a queryable fact and what it could touch was bounded before it started. Headless; the broader "server host" framing was dropped as a category entered against Linux with no advantage. Host is the niche — the machine; platform is the product category used in the definition. The two are deliberate, not drift.
- D-015
WIT as the interface definition language
Component Model canonical ABI in-process, deterministic CBOR across process, machine and storage boundaries. WASI components are already the native format, so a second interface language would only create drift. No kernel concept enters the contract.
Proposed#
Leading options, not facts. Treating one of these as settled is the specific error this list exists to prevent.
- P-001
seL4 as the microkernel — deferred indefinitely
Not rejected; removed from the critical path. The Runtime is the product, and the kernel is not needed to reach the agent execution host. The analysis is recorded so the option stays legible, and the interface contract forbids kernel concepts so the door stays open.
- P-003
The component naming scheme
Evocative names, descriptive daemon-style names, or deferred indefinitely. Until it is decided, generic descriptive terms are used everywhere.
- P-005
Governance structure and RFC process
A technical lead plus a public RFC process now; an elected committee and a foundation after 1.0.
P-002, the target niche, was resolved as D-014; P-004, the licence model, as D-012. Both are struck rather than deleted, because the history of a decision is part of the decision.
Requests for comment#
Every non-trivial decision is recorded as an RFC before work that depends on it begins.
| RFC | Subject | Status |
|---|---|---|
| 0001 | First target niche: the agent execution host | Accepted → D-014 |
| 0002 | Interface definition language and wire format | Accepted → D-015 |
| 0003 | Platform guarantees matrix | Deferred with the Core track |
| 0004 | Kernel choice: reuse seL4 | Deferred (P-001) |
Open questions#
Not solved in the design. Recorded here rather than discovered later.
- Revocation. How to revoke access to shared memory, and to data already copied out of a component. Shared memory is tractable — it is revoked by unmapping. Copied-out data is not, in the general case, and the model's guarantee is forward-only.
- Schema evolution. How to migrate persistent objects safely when their types change.
- Efficient sharing of large data. How far ownership transfer covers GPU, ML and video workloads without shared mutable memory.
- Cannibalisation. How to ensure a native ecosystem grows when the compatibility layers are good.
- GUI in WASI. Wait for a standard, contribute to one, or define our own.
- Agent policy. Which actions always require human confirmation, and how that is expressed.
- Semantic indexing. Useful cross-data search without a broad-access indexer.
- Powerbox usability. Every capability system has foundered on the human interface. This one needs user testing, and a negative result must change the design rather than the narrative.
- Driver availability. The existential risk. Hold the line on a narrow hardware list, or accept a Linux driver shim and its assurance cost.
- GPU acceleration versus isolation. There may be no way to have both hardware-accelerated graphics and a small trusted core. If that turns out to be true, the project says so.
The rule#
- Decided items are binding. Work that contradicts one is wrong.
- Proposed items are not binding. They are leading options, not facts.
- A decision that resolves a proposal or an open question is recorded as an RFC, then reflected in the decision log and every affected document.
- A document that asserts a not-yet-decided choice as fact is wrong, regardless of how reasonable the choice is.