Run #4281 cleared every layer above the ISO9660 wrapper: SHA256 (squashfs payload) caed117ca72c6c1d9204c49dd749d5f7b372f3a19cac1b2a7e66bee452a8d501 /tmp/.../a.squashfs caed117ca72c6c1d9204c49dd749d5f7b372f3a19cac1b2a7e66bee452a8d501 /tmp/.../b.squashfs …squashfs is now byte-identical, ISO TOC is identical, file listing diff is empty, but ISO SHA still differs. The remaining drift is in the ISO9660 metadata region between the system area (first 32 KiB) and the file payload start. Two complementary changes: 1. xorriso post-process now sets *every* date field xorriso writes, not just the obvious two: -alter_date_r all — atime + mtime + btime on all nodes, not just mtime. ISO9660 directory records carry creation+modification timestamps. -volume_date c m x f u s — every volume-descriptor date: c=creation m=modification x=expiration f=effective u=system area s=path table Default for any unset volume_date is "now", which is what was leaking through despite us setting c+m. 2. diagnose-divergence.sh now does whole-file cmp -l (capped at 200 lines so 1 GiB of all-different doesn't drown the report) and on any divergence, dumps a 128-byte xxd window from each ISO around the first differing byte plus a unified diff between the two windows. This tells us in the next failure log "first byte differs at offset N (LBA M), bytes around it look like X" — pinpoints the ISO9660 region without needing artifact download. Workflow tail-into-log step wired up the two new files (iso-cmp-first-200.txt, iso-around-first-diff.diff). If iter34 still fails the gate, the new diagnostic tells us exactly which structure (volume descriptor, path table, directory record, boot catalog…) is still drifting. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
SilverMetal OS — Linux
Status: Phase 1 (planning) → moving to milestone 1.1 (reproducible Kicksecure fork build)
🔒 SilverMetal OS product line — we ship the operating system.
The reference SilverMetal flavour. Tier A — full kernel-level hardening, verified boot we control, Debian/Kicksecure-based.
Scope (v1)
See ../docs/roadmap.md Phase 1.
Hardening must-haves
- Kicksecure base (Debian-derived, hardened upstream)
- linux-hardened kernel + KSPP sysctl/build flags
- Secure Boot with our shim/MOK
- TPM2 PCR-bound LUKS2 unlock (Argon2id), full-disk encryption mandatory
- AppArmor strict profiles for browsers, mail, viewers, networked daemons
- GrapheneOS hardened_malloc as system allocator
- bubblewrap + Flatpak primary; firejail for legacy
.deb - nftables default-deny inbound, encrypted DNS, SilverVPN always-on default
- Zero upstream telemetry — verified by integration test
- SilverBrowser default (ungoogled-chromium-rebranded v1)
- SilverVPN integrated from existing
SilverLABS/SilverVPN(Linux client + tunnel service) - SilverSync v1 (Nextcloud-backed, client-side encryption)
- A/B updates with rollback, signed by our keys
- Optional amnesic session mode
Out of scope (v1)
- Atomic / immutable root (v1.1 —
ostreeexperiment) - dm-verity on
/(v1.1) - ARM64 / Apple Silicon (v2)
- Tor-by-default variant (sibling product later)
Directory layout
linux/
├── build/ # live-build pipeline, reproducible-build config
├── kernel/ # config fragments, linux-hardened pinning
├── overlay/ # /etc + /usr/share/silvermetal + skel hardening overlay
├── packages/
│ ├── include.list # what's installed
│ └── exclude.list # what's purged (snap, telemetry, etc.)
├── apparmor/ # custom strict profiles
├── nftables/ # default ruleset
├── installer/ # Calamares branding + hardened defaults
├── update-server/ # signing + repo hosting (infra-as-code)
└── tests/
├── lynis-baseline/
├── kspp-check/
└── telemetry-leak/
Verification gates (must pass before public alpha)
- Two clean builds from same commit → identical SHA256
kconfig-hardened-checkpasses- Lynis hardening score ≥ 90
- 30-min idle telemetry capture: zero packets to MS/Google/Apple/Mozilla/Canonical/Debian/analytics
- TPM tamper test: LUKS correctly falls back to passphrase
- AppArmor: every networked binary confined or documented
- Independent privacy-engineering review
Upstream we depend on
- Kicksecure — fork base
- linux-hardened — kernel patchset
- GrapheneOS hardened_malloc — allocator
- KSPP — kernel config authority
- secureblue — reference for v1.1 immutable design
SilverLABS/SilverVPN— VPN client + tunnel service (existing, integrated)