OXYGENHUB

Architecture

Andy McCall edited this page · 1 revision

Architecture

The pieces

flowchart TB
    subgraph oxygen[oxygen repository]
        CLI["oxy: the command line<br/>(src/cli)"]
        Core["oxy-core: objects, change graph,<br/>storage, identities, policy, protocol"]
        Server["oxy-server: the reference<br/>HTTP(S) server"]
        Strata["oxy-strata: S3, GCS<br/>and Azure stores"]
        CLI --> Core
        CLI --> Strata
        Server --> Core
        Strata --> Core
    end
    subgraph hub[OxygenHub]
        Hub["oxygenhub: the forge<br/>web, API, wikis, proposals"]
        OH["oh: the hub's command line"]
    end
    subgraph flow[OxygenFlow]
        Runner["flow: runs pipelines<br/>in sandboxes"]
    end
    Hub --> Core
    Hub --> Server
    Hub --> Strata
    Runner --> Core
    Hub <-->|claims, logs, receipts| Runner
CrateWhat it does
oxy-coreEncoding and hashing, the object types, the change graph and conflict detection, the working copy, storage, identities and signatures, the trust policy, the wire protocol client, Git import and export
oxy-serverServes the wire protocol over HTTP(S): oxy serve
oxy-strataThe cloud stores, kept apart because of what they pull in
oxy (src/cli)The command line, with colour, glyphs and plain output for scripts

Inside oxy-core

flowchart TB
    Repo["Repo: every user operation"] --> WC[Working copy and snapshot]
    Repo --> OpLog[Operation log]
    Repo --> StateL["State: changes applied<br/>into file and tree graphs"]
    StateL --> Graph["File graphs (atoms)<br/>and the tree graph"]
    Repo --> Store["Store: objects, packs,<br/>batches, caches"]
    Store --> Backend["Strata backend:<br/>directory, memory or a bucket"]
    Repo --> Ident[Identities, signatures, policy]
    Repo --> Proto[Protocol: hub, directory and bucket remotes]

Around it

  • OxygenHub is a forge built on oxy-core: repositories, proposals with sealed approvals, issues, wikis, releases, a Git mirror, and repositories kept in their owner's buckets.
  • OxygenFlow runs a repository's pipeline (.flow/pipeline.kdl) in sandboxes: a Firecracker microVM where there is KVM, or a Linux namespaces, Landlock and seccomp sandbox where there is not. Each job's result is a signed receipt kept in the repository.
  • Oxygen is self-hosting: its own history, OxygenHub's and OxygenFlow's are kept in Oxygen, and every push is checked by OxygenFlow.