Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hop3 — Sovereign, Reproducible Application Depl...

Hop3 — Sovereign, Reproducible Application Deployment (NGI ZAPP / OS2Con 2026)

Avatar for Stefane Fermigier

Stefane Fermigier

June 03, 2026

More Decks by Stefane Fermigier

Other Decks in Technology

Transcript

  1. Slide 1 ╭───────────────────────────────────────────────────────────────────────────────────── Slide 1/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ Hop3 ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ │ │ Sovereign, Reproducible Application Deployment │ │ │ │ │ │ │ │ │ │ Stéfane Fermigier — Abilian SAS │ │ │ │ │ │ │ │ NGI Zero peer talk — June 2026 │ │ │ │ NGI Zero Commons Fund · #2024-04-365 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ █░░░░░░░░░░░░░░░░░░░ 1/14
  2. Slide 2 ╭───────────────────────────────────────────────────────────────────────────────────── Slide 2/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ What is Hop3? ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ │ │ The push-to-deploy experience of Heroku — on infrastructure you own. │ │ │ │ │ │ • Push to deploy — git push or hop3 deploy and your app is live: built, reverse-proxied, TLS, │ │ backups. No DevOps team, no YAML. │ │ • Your server, your data — no hyperscaler lock-in, no per-seat SaaS tax, nothing phones home. │ │ • Any app, one command — your own code, or one-click installs from an open catalogue (in │ │ progress). │ │ • No Kubernetes. No mandatory Docker. No cluster (yet?). │ │ │ │ │ │ Why now: rising SaaS bills, vendor lock-in and digital-sovereignty rules are pushing workloads │ │ back on-prem. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ██░░░░░░░░░░░░░░░░░░ 2/14
  3. Slide 3 ╭───────────────────────────────────────────────────────────────────────────────────── Slide 3/14 ─╮ │ │ │ │

    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ████░░░░░░░░░░░░░░░░ 3/14
  4. Slide 4 ╭───────────────────────────────────────────────────────────────────────────────────── Slide 4/14 ─╮ │ │ │ │

    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ █████░░░░░░░░░░░░░░░ 4/14
  5. Slide 5 ╭───────────────────────────────────────────────────────────────────────────────────── Slide 5/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ Architecture : Backend-agnostic, all the way down ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ Every layer is a plugin you can swap — and each row composes independently of the others: │ │ │ │ │ │ Layer Plugin choices (currently) │ │ ────────────────────────────────────────────────────────── │ │ Build Native · Docker · Nix │ │ Toolchains 12 languages (Python, Node, Ruby, Go, Rust, …) │ │ Runtime uWSGI · static · containerized │ │ Proxy Nginx · Caddy · Traefik │ │ Addons Postgres · MySQL · Redis · BLOB-storage ("S3") │ │ OS Debian-family · Red Hat-family │ │ │ │ │ │ Adding a language is a toolchain. Adding a backend is one engine, twelve languages. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ███████░░░░░░░░░░░░░ 5/14
  6. Slide 6 ╭───────────────────────────────────────────────────────────────────────────────────── Slide 6/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ What NGI funded ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ One project — Nix Integration for Hop3 — five work packages, three thrusts: │ │ │ │ ╭── Nix — build → runtime ───╮ ╭── Security & resilience ───╮ ╭─── Apps & dissemination ───╮ │ │ │ Reproducible builds and │ │ Backing services, backups, │ │ 20 real F/OSS apps as the │ │ │ │ reproducible runtimes — an │ │ network firewall + WAF, a │ │ test bed — plus docs, a │ │ │ │ app's build and its │ │ web UI, and a redesigned │ │ paper, and talks like this │ │ │ │ running environment, both │ │ CLI. │ │ one. │ │ │ │ verifiable. │ │ │ │ │ │ │ │ │ │ Work package T3 │ │ Work packages T4 + T5 │ │ │ │ Work packages T1 + T2 │ ╰────────────────────────────╯ ╰────────────────────────────╯ │ │ ╰────────────────────────────╯ │ │ │ │ │ │ │ │ 40 apps packaged · 8 Nix templates · 4 addons · 1 WAF │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ████████░░░░░░░░░░░░ 6/14
  7. Slide 7 ╭───────────────────────────────────────────────────────────────────────────────────── Slide 7/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ Two spin-off projects ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ Reusable on their own — each with a different tie to the grant: │ │ │ │ ╭────────────────── LeWAF ───────────────────╮ ╭───────────────── Validoc ──────────────────╮ │ │ │ NGI-funded │ │ NGI-adjacent — built to ship a deliverable │ │ │ │ │ │ │ │ │ │ Python Web Application Firewall │ │ Documentation testing │ │ │ │ │ │ │ │ │ │ • OWASP Core Rule Set │ │ • Annotated markdown becomes runnable │ │ │ │ • 1,258 tests · Apache 2.0 │ │ tests │ │ │ │ • Drop-in middleware for any Python web │ │ • Catches doc rot at CI time │ │ │ │ app │ │ • "The tutorial is the test" │ │ │ ╰────────────────────────────────────────────╯ ╰────────────────────────────────────────────╯ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ██████████░░░░░░░░░░ 7/14
  8. Slide 8 ╭───────────────────────────────────────────────────────────────────────────────────── Slide 8/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ Testing — how the platform earns trust ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ A platform makes a promise on every deploy. Making good on that promise was one of the two │ │ largest sustained efforts of the grant — alongside Nix reproducibility — and it runs at two │ │ altitudes. │ │ │ │ ╭──── Code-level pyramid · ~2,000 tests ─────╮ ╭────────── System-level harnesses ──────────╮ │ │ │ • Unit — functions & classes, deps mocked │ │ • `hop3-test` — deploy real apps to Docker │ │ │ │ • Integration — real in-memory DB, HTTP │ │ / SSH / Hetzner, verify HTTP + logs │ │ │ │ client │ │ • App corpus — 169 apps × {native · docker │ │ │ │ • System — full server + CLI in Docker │ │ · nix · nix-gen}, +12 negative cases │ │ │ │ • E2E — complete deploy workflows │ │ • Docs-as-tests — 10 tutorials run via │ │ │ ╰────────────────────────────────────────────╯ │ Validoc · 58 demos │ │ │ ╰────────────────────────────────────────────╯ │ │ │ │ │ │ │ │ Fast (?) tests on CI · E2E + multi-distro nightly (hours). │ │ │ │ Packaging an app is a test — each real one finds an edge the synthetic fixtures never hit. │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ███████████░░░░░░░░░ 8/14
  9. Slide 9 ╭───────────────────────────────────────────────────────────────────────────────────── Slide 9/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ Where we are ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ v0.3 (Jun 2025) → v0.4 (Mar 2026) matured the plugin architecture. The v0.4 → v0.5 cycle │ │ (tagged this week) was load-bearing trust work — reproducibility, a real privilege boundary, │ │ security, testing — not feature polish. │ │ │ │ Tagged · v0.5 Still in flight │ │ │ │ • T1 (Nix build) and T2 (Nix runtime) • Final 0.5 blog post + release announcement │ │ • T3 (Security & Resilience): mostly • Real-world tests of 20 of the apps │ │ delivered • The "marketplace" │ │ • Addons, backups, WAF, firewall, • Web-UI and CLI UX reviews │ │ hop3-rootd, system testing • NGI external audit hand-off │ │ • Web UI: shipped, under final review • Wrap-up the remaining tasks in June (-> │ │ • 40 "real worlds" apps packaged with smoke 0.6) │ │ tests │ │ • Three internal security audits │ │ • 42 ADRs, 1 tech report, 10 blog posts, 3 │ │ slide decks │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ████████████░░░░░░░░ 9/14
  10. Slide 10 ╭──────────────────────────────────────────────────────────────────────────────────── Slide 10/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ Future work — three directions ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ │ │ ╭───── Federated agents ─────╮ ╭────────── Punix ───────────╮ ╭──── Collaborative R&D ─────╮ │ │ │ The obvious next step: │ │ Long-shot. A multi-backend │ │ Joint EU projects on │ │ │ │ from one sovereign node to │ │ builder and deployer │ │ sovereign cloudm, edge & │ │ │ │ a fleet. │ │ inspired by the Nix │ │ IoT infrastructure and │ │ │ │ │ │ correctness model. │ │ applications. │ │ │ │ Promise Theory (Burgess) │ │ │ │ │ │ │ │ as the formal frame — each │ │ + Core based on the │ │ One bid in (JumpGATE, │ │ │ │ node cooperates through │ │ inheritance-calculus — │ │ Horizon Europe — low │ │ │ │ voluntary promises under │ │ composition is │ │ odds); we want more like │ │ │ │ degraded connectivity, not │ │ commutative, idempotent, │ │ it. │ │ │ │ imposed orchestration. │ │ associative. │ │ │ │ │ │ │ │ │ │ The vehicle to fund and │ │ │ │ Sketched in paper §7.4. │ │ One spec → build → systemd │ │ validate the fleet work │ │ │ ╰────────────────────────────╯ │ / launchd / docker-compose │ │ with partners. │ │ │ │ / SSH. │ ╰────────────────────────────╯ │ │ ╰────────────────────────────╯ │ │ │ │ │ │ │ │ None of these is funded yet — NGI funded some of the foundations they build on. │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ██████████████░░░░░░ 10/14
  11. Slide 11 ╭──────────────────────────────────────────────────────────────────────────────────── Slide 11/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ Business model ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ Open source today; the commercial side is still ahead of us. Three models we'd weigh once │ │ (if?) we get traction: │ │ │ │ ╭───────── Service ──────────╮ ╭─────── Subscription ───────╮ ╭───── SaaS marketplace ─────╮ │ │ │ Support, integration & │ │ Access to a marketplace of │ │ A hosted product sold │ │ │ │ deployment around the │ │ premium apps — plus CRA │ │ under its own brand — Hop3 │ │ │ │ kernel — Abilian's │ │ (Cyber Resilience Act) │ │ is the underlying tech. │ │ │ │ existing consulting model. │ │ compliance, security │ │ │ │ │ │ │ │ updates and SLAs. │ │ Already designed — mockup │ │ │ │ Best fit: public sector & │ │ │ │ on the next slide. │ │ │ │ regulated orgs where │ │ Recurring revenue, not │ ╰────────────────────────────╯ │ │ │ sovereignty is a │ │ project-by-project. │ │ │ │ procurement requirement. │ ╰────────────────────────────╯ │ │ ╰────────────────────────────╯ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ███████████████░░░░░ 11/14
  12. Slide 12 ╭──────────────────────────────────────────────────────────────────────────────────── Slide 12/14 ─╮ │ │ │ │

    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ █████████████████░░░ 12/14
  13. Slide 13 ╭──────────────────────────────────────────────────────────────────────────────────── Slide 13/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ What works — and what's next ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ │ │ ╭───── What works (by the close of NGI) ─────╮ ╭─────────────── What's next ────────────────╮ │ │ │ • It's real and in use - we run our own │ │ • Branding · marketing · communication - │ │ │ │ production apps on Hop3. │ │ we built it; now we have to make it │ │ │ │ • The method: package real software → it │ │ known. │ │ │ │ surfaces the gaps → fix the platform. │ │ • Adoption - the first external users │ │ │ │ • A usable, trustworthy platform - not │ │ (today, we're user zero). │ │ │ │ just a prototype. │ │ • Revenue - service, subscription, or a │ │ │ │ • Tens of applications │ │ branded SaaS marketplace (prior slide) - │ │ │ ╰────────────────────────────────────────────╯ │ once there are users. │ │ │ │ • Federation - the longer, research │ │ │ │ horizon. │ │ │ ╰────────────────────────────────────────────╯ │ │ │ │ │ │ │ │ Hop3 is real and runs today. The open question was never the idea — it's adoption, then │ │ revenue. │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ██████████████████░░ 13/14
  14. Slide 14 ╭──────────────────────────────────────────────────────────────────────────────────── Slide 14/14 ─╮ │ │ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

    │ │ ┃ Thank you ┃ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │ │ │ │ │ │ │ │ Hop3 Adjacent projects │ │ │ │ github.com/abilian/hop3 LeWAF · Validoc · Punix (soon) │ │ │ │ hop3.cloud on the Abilian SourceHut and GitHub │ │ │ │ │ │ │ │ │ │ │ │ NGI Zero Commons Fund · #2024-04-365 │ │ │ │ Questions? │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ████████████████████ 14/14