multi-party consensus, agent scopes, and revset queries. Not built.
6
"Cylinder" is a working name (the artifact-repository idea parked on
7
2026-10-02); nothing here is decided until Andy says so.
8
9
**Cylinder** keeps and moves everything a build produces: runner images,
10
container images, packages, binaries, SBOMs and reports. It would be a
11
service of its own, embedded in OxygenHub by default and shown through
12
the hub's UI, the same pattern as Jetstream. It is meant to be better
13
than what exists, not compatible with it; compatibility is an edge we add
14
for adoption, never the core.
15
16
##1. What exists today
17
18
|| Strengths | Weaknesses |
19
|---|---|---|
20
|**Docker Hub**| The default namespace; huge public catalogue; official images; scanning (Scout). | Pull limits since April 2025: 10 an hour anonymous, 100 an hour on a free account. SaaS only. Tags are mutable. Signatures and provenance are separate artifacts; referrers are still in beta. Nothing links an image to the source it came from. |
21
|**GitHub** (GHCR, Packages) | Next to the code and Actions; free container storage for now; the best Sigstore integration; artifact attestations. | Storage billing for private images deferred, not settled. One silo per package format. Auth by personal access tokens. Tags are mutable: the tj-actions attack (March 2025, CVE-2025-30066) moved every tag of a popular action to a malicious commit at once. No self-hosting outside Enterprise Server. |
22
|**GitLab**| A registry per project; many package formats; a dependency proxy; self-hostable, so it can be sovereign. | Cleanup policies delete tags only; layers stay until an administrator runs garbage collection. The registry is a separate service to run and scale. Signing means bringing cosign yourself. |
23
|**Bitbucket** (Packages) | GA since December 2025; permissions inherited from the repository; garbage collection runs by itself; Maven and npm since April 2026. | Young; Cloud only; few formats; no provenance story. |
24
|**Artifactory, Nexus**| Every format; proxies and caches; enterprise features. | Costly; heavy JVM operations; slow UIs. A second system beside the forge, with its own identities and permissions. Provenance and scanning are add-on products. |
25
|**Harbor, Quay**| Self-hosted OCI with signing (cosign, Notation), replication and scanning. | Many components to run. A central bottleneck: peer-to-peer means adding Dragonfly. |
26
|**ECR, Artifact Registry, ACR**| Cloud IAM; regional; scanning; lazy pulling on AWS (SOCI). | Lock-in; egress costs; not sovereign. |
27
28
And the bolt-ons each of them needs:
29
30
-**Distribution:** Dragonfly, Kraken or Spegel, run beside the registry.
31
-**Lazy pulling:** eStargz, SOCI, Nydus or zstd:chunked, each a format
32
plus a snapshotter. It matters: pulling took 76% of container start time
33
while only 6.4% of the pulled data was read (Slacker, FAST '16).
34
-**Signing and provenance:** cosign and Rekor, SLSA generators,
35
in-toto, Notation, attached afterwards through the OCI referrers API.
36
-**Retention:** cleanup policies plus a separate garbage collection.
37
38
##2. The pattern behind the weaknesses
39
40
1.**The unit is the tarball layer.** One changed file re-pushes and
41
re-pulls a whole layer; layers share nothing below their own size; and a
42
layer has two digests (compressed and not), so tools disagree on what
43
it is called.
44
2.**Names are mutable pointers.** A tag moves silently and leaves no
45
history. Pinning by digest is safe but unreadable, so most people
46
don't.
47
3.**Trust is bolted on afterwards.** The registry stores bytes; a
48
separate tool signs them, a third says how they were built, and each
49
brings its own keys and identities. Nothing stops an unsigned image
50
from being pushed, and most pulls never verify anything.
51
4.**Distribution is someone else's problem.** Every registry is a
52
central server; peer-to-peer and lazy loading are extra products.
53
5.**The forge and the registry are strangers.** Permissions, identity,
54
retention and "which commit is this?" are kept twice and drift apart.
55
56
##3. What Oxygen already has
57
58
Every piece Cylinder needs exists in some form:
59
60
-**Content-defined chunks with BLAKE3** (FastCDC, 32 to 256 KiB), shared
61
by repositories, release assets, and runner images: deduplication below
62
file level, across everything.
63
-**Hybrid post-quantum signatures** (Ed25519 with ML-DSA-65), identities
64
with delegation chains, and rotation recorded in the repository.
65
-**Signed Flow receipts:** a runner signs what it built, from which
66
state, with which pipeline and environment, producing which outputs.
67
That is provenance by construction, not a statement added later.
68
-**flow-casfs:** a content-addressed tree mounted lazily over FUSE or
69
virtio-fs. Lazy pulling is native, not a format bolted on.
- Pull time versus data read: [SOCI paper (Amazon), citing Slacker](https://cdn.amazon.science/84/96/51ea2e0d40fca8cfaee9328278b9/soci-paper.pdf); [Grab engineering, lazy loading](https://engineering.grab.com/docker-lazy-loading)
419
- zstd:chunked: [Red Hat, faster container image pulls](https://www.redhat.com/sysadmin/faster-container-image-pulls)
420
- Peer-to-peer meshes: [Spegel vs Kraken vs Dragonfly](https://www.pistack.xyz/posts/2026-04-28-spegel-vs-kraken-vs-dragonfly-self-hosted-p2p-container-image-distribution-guide-2026/)
421
- Sigstore in registries: [Sigstore in image registries: adoption and reality](https://jacar.es/en/sigstore-in-image-registries-adoption-and-reality/); [cosign and the referrers API](https://oneuptime.com/blog/post/2026-08-11-cosign-signature-storage-oci-referrers-separate-repositories/markdown)
422
- tj-actions tag attack: [CVE-2025-30066](https://inventivehq.com/tools/security/cve-lookup/cve-2025-30066); [Legit Security, immutable tags](https://legitsecurity.com/blog/what-are-immutable-tags-and-can-they-protect-you-from-supply-chain-attacks)
423
- Artifactory and Nexus: [Codefresh, Artifactory alternatives](https://codefresh.io/learn/jfrog-artifactory/top-8-artifactory-alternatives-in-2025); [PeerSpot, Artifactory improvements](https://origin.peerspot.com/questions/what-needs-improvement-with-jfrog-artifactory)