Clients want to show which OS/distro a host runs. The host now detects it once per process (new osinfo module: compile-time on Windows/macOS, os-release on Linux) and advertises an icon-friendly specificity chain, generic → specific — `windows`, `macos`, `linux[/<family>][/<id>]`, e.g. `linux/fedora/bazzite`, `linux/arch/steamos`. A client walks the chain most-specific-first and shows the first token it has art for, so an unknown distro degrades to its family's mark and finally to plain Tux — the host emits the full chain precisely so clients need zero distro→parent knowledge. The middle token is the first recognized ID_LIKE ancestor (the spec orders them most-similar-first); the leaf is ID verbatim, sanitized to TXT-safe `[a-z0-9._-]` because it feeds a DNS record. Two carriers, both additive: a new advisory mDNS `os=` TXT key (same trust posture as `mac` — unauthenticated, a wrong value only draws a wrong icon), and `HostInfo.os` + `HostInfo.os_name` on the mgmt API (`os_name` is the os-release PRETTY_NAME, REST-only so the TXT stays small). GameStream serverinfo and the QUIC Welcome are untouched. api/openapi.json regenerated (drift test green on Linux) and the TS SDK gen refreshed from it — which also catches the committed gen up with earlier spec changes it had missed (monitors, native_paired_clients, encoder_backend). assets/os-icons/ gains the ten master SVG marks every client derives its per-platform art from (Font Awesome Free brands CC BY 4.0 + Simple Icons CC0 — provenance in its README), with attribution folded into THIRD-PARTY-NOTICES.txt via the generator (regenerating also catches the stale crate manifest up with the current lockfile). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
31 lines
1.7 KiB
Markdown
31 lines
1.7 KiB
Markdown
# OS icon masters
|
|
|
|
The canonical OS/distro brand marks every client derives its host-card OS icon from
|
|
(web console inline SVGs, GTK symbolic icons, Windows PNGs, Apple template imagesets,
|
|
Android `ImageVector`s). One file per **icon token** of the host's OS-identity chain
|
|
(see `crates/punktfunk-host/src/osinfo.rs` and `crates/pf-client-core/src/os.rs`):
|
|
|
|
| token | mark | source |
|
|
|---|---|---|
|
|
| `windows` | Windows | Font Awesome Free brands (CC BY 4.0) |
|
|
| `apple` | Apple (also `macos` via alias) | Font Awesome Free brands (CC BY 4.0) |
|
|
| `linux` | Tux | Font Awesome Free brands (CC BY 4.0) |
|
|
| `steam` | Steam (also `steamos` via alias) | Font Awesome Free brands (CC BY 4.0) |
|
|
| `ubuntu` | Ubuntu | Font Awesome Free brands (CC BY 4.0) |
|
|
| `fedora` | Fedora | Font Awesome Free brands (CC BY 4.0) |
|
|
| `opensuse` | SUSE | Font Awesome Free brands (CC BY 4.0) |
|
|
| `arch` | Arch Linux | Simple Icons (CC0 1.0) |
|
|
| `nixos` | NixOS | Simple Icons (CC0 1.0) |
|
|
| `debian` | Debian | Simple Icons (CC0 1.0) |
|
|
|
|
Distros with no file here (Bazzite, CachyOS, Nobara, Pop!_OS, Mint, …) are intentional:
|
|
the host advertises the full chain (`linux/fedora/bazzite`), and clients walk it
|
|
most-specific-first, so they degrade to the family mark and finally to Tux.
|
|
|
|
All files are monochrome (`fill="currentColor"`), original per-icon viewBoxes preserved.
|
|
Licensing: attribution notices live in `LICENSES/` and are folded into
|
|
`THIRD-PARTY-NOTICES.txt` by `scripts/gen-third-party-notices.py`. The marks are
|
|
trademarks of their respective owners; they are used here nominatively — to *identify*
|
|
the operating system a host runs, the standard practice in this ecosystem — and imply no
|
|
affiliation or endorsement.
|