350 lines
5.7 KiB
Markdown
350 lines
5.7 KiB
Markdown
This is a *foundational* question, and you’re asking it at exactly the right abstraction level.
|
||
I’ll answer it in a way that **does not lock you into ZFS, POSIX, or any single worldview**, but shows how they *fit*.
|
||
|
||
What follows is a **clean domain topology**, **backend mapping**, and a **seeding story** that lets the “common” crystallize naturally instead of being designed top-down.
|
||
|
||
---
|
||
|
||
# 1. The Domains You Are Actually Creating
|
||
|
||
You are not creating “many domains”.
|
||
You are creating **three roles**, which may be instantiated multiple times.
|
||
|
||
## 1.1 The Common Domain (shared reality)
|
||
|
||
```
|
||
domain: common
|
||
```
|
||
|
||
**Purpose**
|
||
|
||
* Shared, boring, necessary facts
|
||
* Toolchains
|
||
* Base artifacts
|
||
* Shared schemas
|
||
* Canonical references
|
||
|
||
**Properties**
|
||
|
||
* Conservative
|
||
* Slow-moving
|
||
* High trust threshold
|
||
* Read-mostly
|
||
|
||
Think of this as:
|
||
|
||
* `/usr`
|
||
* `/nix/store`
|
||
* `/lib`
|
||
* Wikipedia, but frozen and replayable
|
||
|
||
This is where your brother’s “Unity tree” intuition lives.
|
||
|
||
---
|
||
|
||
## 1.2 Personal Domain (agency)
|
||
|
||
```
|
||
domain: you
|
||
```
|
||
|
||
**Purpose**
|
||
|
||
* Your identity
|
||
* Your choices
|
||
* Your publications
|
||
* Your private state
|
||
|
||
**Properties**
|
||
|
||
* You own the roots
|
||
* You decide what to publish
|
||
* You may fork or disagree with “common”
|
||
|
||
This is:
|
||
|
||
* Your `$HOME`
|
||
* Your git identity
|
||
* Your signing authority
|
||
|
||
---
|
||
|
||
## 1.3 Working / Ephemeral Domains (action)
|
||
|
||
```
|
||
domain: you/work/…
|
||
domain: you/rescue/…
|
||
domain: you/experiment/…
|
||
```
|
||
|
||
**Purpose**
|
||
|
||
* Do things
|
||
* Run PEL
|
||
* Recover machines
|
||
* Import legacy data
|
||
|
||
**Properties**
|
||
|
||
* Delegated authority
|
||
* Narrow policy
|
||
* Often short-lived
|
||
* Results may be promoted upward
|
||
|
||
These are **verbs**, not nouns.
|
||
|
||
---
|
||
|
||
## 2. How These Domains Relate (Important)
|
||
|
||
They are **not hierarchical**.
|
||
|
||
Instead:
|
||
|
||
* Personal domain **pins** Common
|
||
* Working domains are **authorized by** Personal
|
||
* Publication is **explicit**
|
||
|
||
Graphically:
|
||
|
||
```
|
||
common
|
||
↑ (trust pin)
|
||
you
|
||
↓ (delegation)
|
||
you/rescue/laptop
|
||
```
|
||
|
||
No implicit inheritance.
|
||
No magical visibility.
|
||
|
||
---
|
||
|
||
# 3. Filesystems and Backends (Practical, Not Ideological)
|
||
|
||
You already have POSIX. That’s fine.
|
||
|
||
ASL **does not require** anything special — it requires **semantics**, not magic.
|
||
|
||
## 3.1 Minimum viable ASL backend
|
||
|
||
You need three things:
|
||
|
||
```
|
||
/asl/
|
||
blocks/
|
||
index/
|
||
log/
|
||
```
|
||
|
||
This can live on:
|
||
|
||
* ext4
|
||
* XFS
|
||
* ZFS
|
||
* tmpfs (for tests)
|
||
|
||
### Blocks
|
||
|
||
* Files named by BlockID
|
||
* Immutable once sealed
|
||
* Can be encrypted or plaintext
|
||
|
||
### Index
|
||
|
||
* Segment files
|
||
* Append-only
|
||
* Memory-mapped friendly
|
||
|
||
### Log
|
||
|
||
* Append-only
|
||
* Totally ordered
|
||
* Small
|
||
|
||
That’s it.
|
||
|
||
---
|
||
|
||
## 3.2 ZFS (where it helps, not dominates)
|
||
|
||
ZFS is *excellent* for:
|
||
|
||
* Snapshots as checkpoints
|
||
* Replication
|
||
* Retention
|
||
* Scrub / integrity
|
||
|
||
Recommended layout:
|
||
|
||
```
|
||
zpool/asl/common
|
||
zpool/asl/you
|
||
zpool/asl/you_work
|
||
```
|
||
|
||
Each dataset:
|
||
|
||
* Independent snapshots
|
||
* Independent GC
|
||
* Independent policy
|
||
|
||
ZFS is **not** your semantic layer.
|
||
It is your **reliable substrate**.
|
||
|
||
---
|
||
|
||
## 4. Seeding the Common Domain (this is subtle)
|
||
|
||
The common domain must **not** be “yours”.
|
||
|
||
It must start **empty or minimal**.
|
||
|
||
### 4.1 Initial common contents
|
||
|
||
Seed only:
|
||
|
||
* ASL schemas
|
||
* TGK schemas
|
||
* PEL operator definitions
|
||
* Hash algorithms
|
||
* Encoding specs
|
||
|
||
No opinions.
|
||
No personal data.
|
||
|
||
Think: *standards, not content*.
|
||
|
||
---
|
||
|
||
### 4.2 How common grows
|
||
|
||
Common grows when:
|
||
|
||
* Multiple personal domains independently publish the same artifacts
|
||
* Agreement is explicit
|
||
* Provenance is preserved
|
||
|
||
This is *emergent consensus*, not curation.
|
||
|
||
---
|
||
|
||
## 5. Seeding Your Personal Domain
|
||
|
||
Your personal domain starts with:
|
||
|
||
1. Your offline roots
|
||
2. Your DAM
|
||
3. Policy hash
|
||
4. Trust pin to common
|
||
|
||
That’s it.
|
||
|
||
Everything else is created via **working domains**.
|
||
|
||
---
|
||
|
||
## 6. The “Home Directory” Model (this matters)
|
||
|
||
Your intuition here is correct.
|
||
|
||
### `$HOME` is a domain, not a directory
|
||
|
||
```
|
||
domain: you/home
|
||
```
|
||
|
||
What lives here:
|
||
|
||
* Your files
|
||
* Your configs
|
||
* Your history
|
||
* Your backups
|
||
* Your recovered artifacts
|
||
|
||
This domain:
|
||
|
||
* Can publish subsets
|
||
* Can snapshot aggressively
|
||
* Can be encrypted-at-rest
|
||
|
||
The POSIX home directory is just a *view*.
|
||
|
||
---
|
||
|
||
## 7. The “Common Group” (rakeroots / unity)
|
||
|
||
Here is how the “common group” crystallizes **without central planning**.
|
||
|
||
### 7.1 Group domain
|
||
|
||
```
|
||
domain: you+brother/common
|
||
```
|
||
|
||
Properties:
|
||
|
||
* Multi-root authority
|
||
* Requires joint signatures
|
||
* Narrow scope
|
||
|
||
### 7.2 What goes here
|
||
|
||
* Family photos
|
||
* Shared documents
|
||
* Shared tooling
|
||
* Shared indexes
|
||
|
||
This is **not global common**.
|
||
It’s *your* common.
|
||
|
||
Others will have theirs.
|
||
|
||
---
|
||
|
||
## 8. Why This Scales Socially
|
||
|
||
Different people will have:
|
||
|
||
* Different commons
|
||
* Different trust roots
|
||
* Different overlaps
|
||
|
||
But:
|
||
|
||
✔ Artifacts are immutable
|
||
✔ Provenance is explicit
|
||
✔ Publication is voluntary
|
||
✔ Conflicts don’t corrupt history
|
||
|
||
This avoids the “one true tree” trap.
|
||
|
||
---
|
||
|
||
## 9. Mental Model That Locks It In
|
||
|
||
* **Common** = gravity
|
||
* **Personal** = agency
|
||
* **Working** = motion
|
||
* **Filesystems** = substrate
|
||
* **Domains** = meaning
|
||
* **Snapshots** = memory
|
||
|
||
---
|
||
|
||
## 10. One-sentence answer to your question
|
||
|
||
> You create a minimal Common domain for shared semantics, a Personal domain for identity and choice, and delegated Working domains for action — all backed by simple POSIX storage (optionally ZFS), with “home” and “common” emerging as published, snapshot-pinned domains rather than directories.
|
||
|
||
---
|
||
|
||
If you want, next we can:
|
||
|
||
* Draw the **exact on-disk layout**
|
||
* Specify **CLI flows** (`asl init-domain`, `asl publish`)
|
||
* Model **multi-user common domains**
|
||
* Define **GC across personal + common safely**
|
||
|
||
You’re very close to something that feels *obvious* once it exists — which is the sign you’re doing it right.
|
||
|