Third-party licences#
Wheelhouse ships other people's code in three places: modules compiled into the agent
binary, libraries bundled into the web UI's JavaScript, and the several thousand Debian and
VyOS packages that make up the image. This page lists the first two in full and says where
the third is enumerated authoritatively — on the machine, generated from what is actually
installed, so it cannot drift. The complete licence texts are not summarised here: they
travel with the software, at /usr/share/doc/wheelhouse-agent/copyright and
/usr/share/doc/<package>/copyright.
The list is short on purpose. Compiled-in dependencies are permissive only — MIT, BSD-2,
BSD-3, ISC, Apache-2.0. Anything weak-copyleft needs a decision recorded in an ADR before
it goes in; anything strong-copyleft is out. That rule is why this table fits on a screen
and why it can be audited — docs/licenses.md.
Compiled into wheelhouse-agent#
The agent is one static Go binary, so these modules travel inside it and their notices have
to travel with it. Versions are from agent/go.mod.
| Module | Version | Licence | Why it is there |
|---|---|---|---|
github.com/gorilla/websocket | v1.5.1 | BSD-2-Clause | The telemetry stream to the UI |
golang.org/x/crypto | v0.31.0 | BSD-3-Clause | Argon2id password hashing |
gopkg.in/yaml.v3 | v3.0.1 | MIT or Apache-2.0 (dual) | The desired-state file |
github.com/coreos/go-oidc/v3 | v3.9.0 | Apache-2.0 | OIDC discovery and ID-token verification |
golang.org/x/oauth2 | v0.21.0 | BSD-3-Clause | The authorization-code flow behind go-oidc |
github.com/go-jose/go-jose/v3 | v3.0.1 | MIT | Transitive: JWKS and JWS verification |
golang.org/x/sys | v0.28.0 | BSD-3-Clause | Transitive: CPU feature detection for Argon2 |
golang.org/x/net | v0.21.0 | BSD-3-Clause | Transitive |
gopkg.in/check.v1 | — | MIT | Transitive, for yaml.v3's own tests only; never built into the binary |
Everything else in the agent is the Go standard library. TOTP (RFC 6238), the Prometheus text exposition format and the op-mode table parsers are implemented in the repository rather than pulled in, because each is small, specified, and cheaper to own than to audit. YAML is the exception, and the reason is written down in ADR-001.
Two notes on the OIDC pair, because both are deliberate. go-oidc is pinned at v3.9.0
rather than the newest release: v3.20 raises the module's minimum Go version to 1.25, which
would bump the toolchain for every build. And go-oidc is there precisely because it is
not our code — signature verification, alg handling and JWKS rotation are the part of
OIDC a hand-rolled implementation gets quietly wrong
(ADR-002).
Bundled into the web UI#
The UI is a built bundle, so these are inside the JavaScript files it ships. Declared
versions are in ui/package.json; the transitive names are the
ones whose notices ship in packaging/copyright.
| Package | Licence | Why it is there |
|---|---|---|
react, react-dom, scheduler (18.x) | MIT | The UI runtime |
react-router-dom, react-router, @remix-run/router (6.x) | MIT | Routing |
loose-envify, js-tokens | MIT | Transitive, through React |
No runtime dependency is added for charts, icons, dates or state management:
ui/src/components/Sparkline.tsx draws SVG
directly, icons are inline glyphs, and the data layer is fetch plus two hooks. That keeps
the bundle small enough to embed in the agent binary, and keeps this table short enough to
be worth reading.
Typefaces#
Both are variable fonts, served from the router itself — the UI fetches nothing from a content delivery network. Each ships beside its own licence text.
| Typeface | Licence | On the machine |
|---|---|---|
| Inter | SIL Open Font License 1.1 | /usr/share/wheelhouse/ui/fonts/inter-var-latin.woff2, licence at inter-OFL.txt beside it |
| JetBrains Mono | SIL Open Font License 1.1 | /usr/share/wheelhouse/ui/fonts/jetbrains-mono-var-latin.woff2, licence at jetbrains-mono-OFL.txt beside it |
JetBrains Mono is used for values that came off the router, which is a distinction the UI makes deliberately: what we wrote is set in Inter, what the router said is set in monospace.
Build-time only, and not shipped#
vite, @vitejs/plugin-react, typescript, tailwindcss, postcss, autoprefixer,
playwright-core and the @types/* packages are development dependencies. None of them
is in the package, so none is listed in the shipped copyright file.
The base system#
Almost everything on a Wheelhouse OS machine was written by other people and is free
software. It is not transcribed into this page, because a transcription would drift from
the image. The authoritative list is on the machine —
packaging/iso/branding/doc/THIRD-PARTY.txt:
| Path | What it holds |
|---|---|
/usr/share/doc/<package>/copyright | The licence and copyright of every installed package, one file each. Generated from the packages actually installed |
/usr/share/common-licenses/ | The full text of the GPL, LGPL, Apache and the other licences those files name, from Debian's base-files |
/var/lib/dpkg/status | Every installed package and its exact version |
/usr/share/doc/wheelhouse/SOURCES.txt | What the image was built from — Corresponding source |
The three headline entries in that file:
- VyOS — GPL-2.0-or-later. The image is built from
vyos-buildsource; the commit is inSOURCES.txt. VyOS is a registered trademark of Sentrium S.L., and this is a self-built image rebranded as upstream's artwork licence requires, not a VyOS release. - Debian — many licences, one per package.
- The Linux kernel — GPL-2.0, an unmodified Debian/VyOS build.
The routing, DHCP, DNS, VPN and firewall daemons come from Debian and VyOS package repositories unmodified, and their licences are in their own copyright files.
Where the full texts are#
This page is an index. The texts themselves are reproduced in full, unedited, in two places:
packaging/copyright, installed at /usr/share/doc/wheelhouse-agent/copyright | The Wheelhouse grant, then every notice that has to travel with the binary and the bundle: the BSD-3 text for gorilla/websocket, the BSD-3 text for the Go Authors, the MIT text for each MIT component with its own copyright line, and the CoreOS NOTICE that Apache-2.0 requires be carried. The Apache-2.0 text itself is referenced at /usr/share/common-licenses/Apache-2.0, where Debian already puts it |
/usr/share/doc/<package>/copyright on the image | Everything else |
Re-deriving this list#
If you want to check the tables above rather than trust them:
cd agent && go list -m all # the module graph, versions included
cd ui && npm ls --all --omit=dev # the runtime dependency tree
cd ui && npx license-checker --production --summary # if the tool is availableThe repository's own rule is that docs/licenses.md is updated in the same change that
adds or removes a dependency, so a difference between that file and go.mod is a bug worth
reporting — Support.
See also#
- Built on VyOS — why the compiled-in list is permissive only.
- Corresponding source — the GPL half, and how to obtain its source.
- The Wheelhouse licence — what the parts we wrote are licensed under.
- Files on the router — where each of these lands on disk.
Checked against#
docs/licenses.md ·
agent/go.mod ·
ui/package.json ·
packaging/copyright ·
packaging/iso/branding/doc/THIRD-PARTY.txt ·
ui/src/components/AboutPage.tsx ·
docs/adr/001-desired-state-file.md ·
docs/adr/002-oidc-client.md