diff --git a/.codex b/.codex new file mode 100644 index 0000000..e69de29 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8bba7c2..5a0927f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,12 +10,22 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + # The repository is a pnpm project (pnpm-lock.yaml, lockfileVersion 9.0) and has no + # npm lockfile, so the previous actions/setup-node cache:"npm" + `npm ci` never + # reached a single gate: every run failed at setup-node with + # "Dependencies lock file is not found". + - uses: pnpm/action-setup@v4 + with: + # pnpm 11 uses node:sqlite, so it needs Node >= 22. Both are pinned to the + # toolchain the gates were verified against locally (Node 22 + pnpm 11.6). + version: 11.6.0 - uses: actions/setup-node@v4 with: - node-version: "20" - cache: "npm" - - run: npm ci - - run: npm run typecheck - - run: npm run test - - run: npm run validate - - run: npm run lint + node-version: "22" + cache: "pnpm" + - run: pnpm install --frozen-lockfile + - run: pnpm typecheck + - run: pnpm test + - run: pnpm validate + - run: pnpm lint + - run: pnpm build diff --git a/docs/distro-data-evidence.md b/docs/distro-data-evidence.md new file mode 100644 index 0000000..e8b660c --- /dev/null +++ b/docs/distro-data-evidence.md @@ -0,0 +1,106 @@ +# Distro data evidence + +Every value in `src/data/distros.json` should be traceable to a source. This file records +the sources for values that were verified by hand, plus the operational definitions the +verification uses. Values not listed here are the pre-existing dataset values +(`verificationMethod` says whether they were verified or inferred). + +## Operational definitions + +**`proprietarySupport`** — how far a *default* install of the distro's main desktop edition +gets you to proprietary (non-free) drivers and codecs using only first-party means (its own +repositories, installers and tools), with no repository added or edited by the user: + +- `FULL` — proprietary drivers/codecs are installed by default, **or** offered by default + (installer option, branded NVIDIA image, boot-menu driver choice, first-party driver GUI), + **or** installable from repositories enabled by default in a fresh install. +- `OPTIONAL` — nothing non-free is enabled or installed by default, but the distro documents + a first-party opt-in (enable `non-free`/`contrib`, RPM Fusion, NVIDIA repository, or run the + distro's driver tool after enabling a repository). +- `NONE` — no first-party path at all; the archive or image excludes non-free. + +Firmware blobs (`non-free-firmware`) are deliberately excluded from this field: nearly every +distro ships them, and mixing them into the enum makes Debian-class entries unclassifiable. + +**`secureBootOutOfBox`** — a default install boots and works with UEFI Secure Boot *enabled*, +without the user disabling it (signed shim + signed kernel, no hand-enrolled MOK). + +## Verified values + +| Distro | Field | Value | Source (read 2026-09-28) | +|---|---|---|---| +| ubuntu | secureBootOutOfBox | `true` (was `false`) | — "All current Ubuntu 64bit (not 32bit) versions now support this feature [Secure Boot]" | +| kubuntu, xubuntu, lubuntu, ubuntu_budgie, ubuntu_studio, ubuntu_mate | proprietarySupport | `FULL` (was `OPTIONAL`) | Official flavours are built from the same Ubuntu archive with the same default components (`main restricted universe multiverse`, "restricted: Proprietary drivers") and the same first-party `ubuntu-drivers` tooling, so they cannot differ from `ubuntu` on this field. Archive and shim are shared with `ubuntu`, whose value is `FULL`. | +| artix | installerExperience | `GUI` (was `MANUAL`) | — graphical ISOs ship the Calamares installer and the page tells non-experts "use a graphical or community edition" | +| artix | supportedDesktops | `KDE, XFCE, MATE, CINNAMON, LXQT, OTHER` (was `OTHER, TILING`) | Same page: graphical images are "LXQt, LXDE, MATE, Cinnamon, KDE/Plasma, XFCE"; stable ISO listing confirms `artix-cinnamon-*`, `artix-mate-*`, `artix-plasma-*`, `artix-xfce-*`, `artix-lxqt-*` | +| artix | suitableForOldHardware | `true` (unchanged) | Same page: the `lowmem` ISO "can boot and install on machines with as little as 300MB of RAM" | + +## Corrections applied from the verification records + +Source records live in `docs/evidence/`. `upstream-verified` means the value was read off an +upstream doc/package page; `medium` means the upstream statement is indirect (forum post by a +maintainer, user-posted file contents, or inference from a shared archive). + +| Distro | Field | Change | Confidence | +|---|---|---|---| +| linux_mint | proprietarySupport | OPTIONAL → `FULL` | upstream-verified (default sources carry main/restricted/universe/multiverse; first-party Driver Manager) | +| linux_mint | secureBootOutOfBox | false → `true` | upstream-verified ("full support for SecureBoot" since 21.3) | +| lmde | proprietarySupport | OPTIONAL → `FULL` | medium (LMDE configures `main contrib non-free non-free-firmware`) | +| lmde | secureBootOutOfBox | false → `true` | medium (Debian signed chain; LMDE 6 shim later hit by an SBAT revocation) | +| zorin_os | secureBootOutOfBox | false → `true` | upstream-verified (help docs: works with Secure Boot on) | +| debian | secureBootOutOfBox | false → `true` | upstream-verified (shim since Debian 10) | +| arch | proprietarySupport | OPTIONAL → `FULL` | upstream-verified (`nvidia-utils` is in `extra`, enabled by default) | +| endeavouros | proprietarySupport | OPTIONAL → `FULL` | upstream-verified (ISO ships an NVIDIA boot entry + first-party `nvidia-inst`) | +| manjaro | proprietarySupport | OPTIONAL → `FULL` | upstream-verified (installer offers free vs proprietary drivers; `mhwd`) | +| mx_linux | proprietarySupport | OPTIONAL → `FULL` | upstream-verified (first-party "Nvidia Driver Installer" in MX Tools) | +| qubes_os | proprietarySupport | OPTIONAL → `NONE` | medium (no first-party non-free path; NVIDIA "may require significant troubleshooting"; only third-party repos) | +| whonix | proprietarySupport | OPTIONAL → `FULL` | medium (maintainer states non-free and contrib ship enabled; upstream wiki pages were unreachable) | +| parrot | proprietarySupport | OPTIONAL → `FULL` | upstream-verified (`parrot.list` ships `main contrib non-free non-free-firmware`) | + +Unchanged after verification: `pop_os` (FULL, Secure Boot off), `mx_linux` Secure Boot (false), +`qubes_os` Secure Boot (false — upstream requires it disabled), Arch/EndeavourOS/Manjaro Secure +Boot (false), `debian` proprietarySupport (OPTIONAL — official media ship `main` + +`non-free-firmware` only). + +## New entries + +Field-level quotes for each entry are in `docs/evidence/new-distros-tier1.md`. Values I decided +against a direct upstream statement, and why: + +| Entry | Field | Call | Reason | +|---|---|---|---| +| omarchy | installerExperience = `MANUAL` | the ISO ships the Omarchy Configurator, a guided **text-mode** wizard over `archinstall`; the enum has no "guided CLI" value, and `GUI` would hand Omarchy to a no-terminal beginner | +| omarchy | maintenanceStyle = `LOW_FRICTION` | updates run from the Omarchy menu and migrations are automatic (omarchy.org/manual/updates) | +| steamos | supportedArchitectures = `["x86_64"]` | Valve ships SteamOS on x86_64 handhelds/machines only; no ARM build exists | +| raspios | nvidiaExperience = `HARD` | no NVIDIA path on Raspberry Pi hardware; `UNKNOWN` is banned by the dataset invariant | +| rhel | maintenanceStyle = `HANDS_ON`, proprietarySupport = `OPTIONAL` | kept consistent with the existing rocky/alma/centos_stream entries rather than inventing a different standard for the same product family | +| antix | proprietarySupport = `OPTIONAL` | non-free is reachable through first-party opt-in tooling, not enabled by default (its FAQ also installs `broadcom-sta-dkms` from backports, which would read as FULL — flagged, not resolved) | +| devuan | initSystem = `OTHER` | sysvinit has no enum value | + +## Second batch of new entries + +Field-level quotes: `docs/evidence/new-distros-tier2.md`. + +| Entry | Note | +|---|---| +| vanilla_os | immutable by design (ABRoot); `packageManager` APT on an immutable Debian base | +| guix | `proprietarySupport = NONE` ("All of It, Free Software"); `packageManager`/`initSystem` = OTHER (Guix + GNU Shepherd); `immutable = false` because generations are not a read-only rootfs | +| archcraft | Arch-based with a first-party Calamares installer; Secure Boot false, like Arch | + +Two values were changed from the draft after the verification pass, because they were +unverified and would overpromise: `vanilla_os.secureBootOutOfBox` true → `false` (no upstream +statement that its kernel chain is signed) and `vanilla_os.nvidiaExperience` OK → `HARD` +(NVIDIA on an immutable ABRoot base is not a documented easy path). + +**Architecture spellings normalised.** The draft used `aarch64`/`armv7`/`i686`; the engine only +consults `x86_64`, `arm64` and `x86` (`src/engine/eliminate.ts`), so `aarch64` would have made an +ARM answer silently miss the entry. Guix is now `x86_64, x86, arm64` and Archcraft `x86_64, +arm64`; 32-bit ARM and i686 are not expressible in the current vocabulary (same limitation as +Raspberry Pi OS's `armhf`). A new `unknown_architecture` invariant now fails the build on any +other spelling. + +**Tiny Core Linux was not added.** It has no logo on Wikimedia Commons and the project's own site +was unreachable from the verification environment, so the entry could not satisfy the +`missing_core_data` invariant (which requires an image URL). Its prepared entry is easy to +re-add once a hotlinkable logo exists; dropping it was preferred over carving an exception into +the invariant. diff --git a/docs/evidence/coverage-arch-gaming-desktop.md b/docs/evidence/coverage-arch-gaming-desktop.md new file mode 100644 index 0000000..a98e1ce --- /dev/null +++ b/docs/evidence/coverage-arch-gaming-desktop.md @@ -0,0 +1,121 @@ +# Coverage review: Arch-family & desktop/gaming distros missing from whichdistro.com + +Scope: distros NOT in `~/Development/pickyourlinux/src/data/distros.json` (54 entries, confirmed `len==54` on 2026-09-27). +All web figures read **2026-09-27/28 (UTC)** unless stated. Everything unverified is labelled `unverified` — no guesses. + +Primary popularity sources: +- DistroWatch Page Hit Ranking (12-month window unless noted): https://distrowatch.com/dwres.php?resource=popularity (fetched 2026-09-27, HTTP 200, 628 KB) +- GitHub star counts via shields.io JSON: `https://img.shields.io/github/stars//.json` (read 2026-09-27) + +Note on DistroWatch naming: DW's entry **"Chimera" = Chimera Linux** (independent, dinit/apk, Spain) — **NOT ChimeraOS**. ChimeraOS has no DW Page-Hit entry. This is a common mis-read. + +--- + +## Candidate rows + +| Distro | Upstream repo/site | Latest release + date | Base | Default desktop | Installer | Init | Pkg mgr | Release model | Immutable | Secure Boot OOTB | Proprietary posture | Maintained? | Popularity evidence | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| **Omarchy** | https://omarchy.org ; https://github.com/omacom/omarchy (basecamp/omarchy redirects) | **4.0.4 — 2026-09-16** (DW table); 4.0.0 "Quattro" 2026-08-14; 4.0.1 2026-08-25; 4.0.2 2026-08-31 | Arch | Hyprland (Wayland), Quickshell shell | Text-mode / archinstall + `omarchy-install` (Python orchestrator for ISO, bash script for online) | systemd | pacman (+yay) | Rolling | No | **No** — official manual-install guide says "remember to turn off Secure Boot in the BIOS" (https://learn.omacom.io/2/the-omarchy-manual/96/manual-insta) | Yes — ships NVIDIA proprietary driver (DW pkglist: NVIDIA 615.71.09), Spotify/Zoom/Typora | Yes — DW Last Update 2026-09-16 | **DW rank 14 / 589 HPD** (12m rank 19 / 516; 1-week rank **4** / 1111). **GitHub 43k stars.** DW rating 9.0 (77 reviews). A user review claims "Quattro downloaded over 300,000× last month" — **unverified, community claim only** | +| **SteamOS** | https://store.steampowered.com/steamos/ ; github.com/ValveSoftware/SteamOS | **3.8.28 stable — 2026-09-25** (gamingonlinux); DW lists 3.8.14 (2026-07-07); 3.8 stable channel 2026-06-18 | Arch | KDE Plasma (desktop mode) + Steam Game Mode/gamescope | Recovery image restore + guided OOBE ("Text mode" per DW) | systemd | pacman (read-only rootfs) | **Fixed** (DW) — point releases on a rolling base | **Yes** (read-only A/B rootfs) | **No by default** — Deck firmware ships in *setup mode*; Valve ships no signed shim/kernel, Secure Boot cannot be enabled from the Deck UI. Community tool DeckSecureBoot needed (https://github.com/downthecrop/DeckSecureBoot ; grokipedia.com/page/Secure_Boot_on_Steam_Deck) | Yes — ships non-free firmware; Steam client | Yes — Valve, active (3.8.28, 2026-09-25) | **DW rank 56 / 212 HPD** (12m rank 99 / 149; 3m rank 41 / 257). Millions of Steam Deck units shipped (Valve, widely reported) — no single citable DW number for installs | +| **ChimeraOS** | https://chimeraos.org ; github.com/ChimeraOS/chimeraos | **49-1 stable — 2025-07-27** (last stable); v50 in dev (manifest `VERSION=50`); 50 unstable pre-release 2026-05-14 | Arch | Steam Big Picture / OpenGamepadUI (gamescope); controller-first | Guided installer from USB ("keyboard required to start installer") | systemd | frzr (image-based; pacman disabled by default) | Rolling (image) | **Yes** (frzr btrfs image deployments) | **No** — chimeraos.org/download: "secure boot must be disabled" | Yes — ships NVIDIA driver (GTX 16xx+ supported), Arch non-free | Yes, but slow: last **stable** 2025-07-27 (>12 months before 2026-09); latest code push 2026-08-02 (tech-insider.org) | **Not in DW Page-Hit Ranking.** GitHub **2k stars** (ChimeraOS/chimeraos), 286 (ChimeraOS/chimera). Small maintainer team ("eight contributors" per gaming press) | +| **RebornOS** | https://rebornos.org ; github.com/RebornOS | **2026.01.22 — released 2026-01-31** | Arch | Xfce live (installer offers many DEs/WMs) | **Calamares (GUI) + archinstall** | systemd | pacman | Rolling | No | No/unverified — no signed shim documented | Arch repos incl. non-free firmware; flatpak/snap | Yes (Jan 2026), but reviews report recurring installer/GRUB bugs | **DW rank 258 / 65 HPD** (12m rank 135 / 103). GitHub org RebornOS very low (RebornISO **6 stars**). DW rating 8.1 (48 reviews) | +| **Archcraft** | https://archcraft.io ; github.com/archcraft-os/archcraft (dev: adi1090x) | **2026.08.01 — 2026-08-01** (DW news 12908); claimed in DW table 2026.05.12 (DW table lags) | Arch | Openbox (default), bspwm, i3, Sway (new in 26.08) | **Calamares (GUI) + ABIF CLI** | systemd | pacman (+yay) | Rolling | No | unverified (no signed shim documented) | Yes — ships NVIDIA proprietary, codecs, AUR helper | Yes — single maintainer (Aditya Shakya), steady releases | **DW rank 83 / 172 HPD** (DW page: 82 / 194 HPD; 4-week rank 44 / 325). **GitHub 3.4k stars.** DW rating 8.6 (61 reviews) | +| **XeroLinux** | https://xerolinux.xyz (vanity: distrowatch.com/xero) | **2026.03 — 2026-03-13** (DW); project calls v6, quarterly | Arch | KDE Plasma 6 (Wayland) | **Calamares (GUI) paid ISO**; free T.U.I. script on Arch ISO | systemd | pacman (+AUR via Toolkit) | Rolling | No | unverified | Yes — Toolkit installs drivers/gaming stacks (non-free) | Yes, but **single maintainer** (DarkXero); **commercial**: ISO €39 one-time (was €15), TUI free | **DW rank 350 / 43 HPD** (DW page: popularity 342 / 46 HPD). **No GitHub repo** with stars (own infra). DW rating 8.8 (14 reviews). DistroWatch notes it was "discontinued in 2024, revived as a commercial distribution" | +| **BlackArch** | https://blackarch.org ; github.com/BlackArch/blackarch | ISOs marketed as 2026.06.01 (gbhackers); **DW's last tracked release 2023.04.01 (2023-04-01)** | Arch | Fluxbox (+ dwm/openbox/awesome/i3/spectrwm); Xfce on Slim | `blackarch-install` (CLI) or Slim GUI installer | systemd | pacman | Rolling repo / fixed ISOs | No | unverified/no | Yes — Arch + blackarch repo of ~2,800 pentest tools (mixed licences) | **DW status: "Dormant"** (https://distrowatch.com/table.php?distribution=blackarch). Repo actively pushed (last commit 2026-07-06 per dev.co) but ISO releases irregular | **DW: "Not ranked"**. GitHub **3.5k stars** | +| **ArcoLinux** | https://arcolinux.info ; successor: https://kiroproject.be | **25.04.01 — 2025-04-13** (last) | Arch | KDE Plasma, Xfce, Openbox, i3 | Calamares (GUI) | systemd | pacman | Rolling | No | unverified | Yes (Arch) | **NO — DW status: "Discontinued", "Not ranked"** (https://distrowatch.com/table.php?distribution=arco). Creator Erik Dubois moved to **Kiro** | DW: **Discontinued / Not ranked**. arcolinux/arcolinux-iso only **89 GH stars** | +| **Kiro** (successor to ArcoLinux) | https://kiroproject.be ; github.com/kirodubes | **v26.07.01 — 2026-07-01** (monthly: next 2026-09-01) | Arch | Xfce + Ohmychadwm (default); Plasma ISO available | **Calamares (GUI)** + ATT on-demand desktops | systemd | pacman | Rolling | No | unverified | likely (ships linux-cachyos/zen, drivers) | Yes — new, monthly cadence, DW-listed ("Kiro" in DW distro nav) | **New — no DW Page-Hit rank yet.** By one dev (Erik Dubois) + Claude AI | +| **HoloISO** | https://holoiso.com (marketing); github.com/holoiso-staging/releases | **1.3 — 2024-06-03**; last beta snapshot 2024-10-21 | Arch | KDE Plasma (Steam Deck UI) | GUI installer ("Install HoloISO on this device") | systemd | pacman | Rolling | v1/v2 **No**; "HoloISO Immutable" (staging) yes | No | Yes (Valve-derived images, non-free firmware) | **NO — effectively DEAD.** Original repo `holoiso-eol/holoiso`: "completely EOL and no longer supported" (github.com/holoiso-eol/holoiso). GamingOnLinux declared it dead 2024-01-29 | GitHub 5.2k stars on the **dead** repo (holoiso-eol), ~1k on staging. holoiso.com claims "50K+ Active Users" — **unverified marketing claim, contradicts EOL status** | +| **Crystal Linux** | crystal-linux.tech (project) | unverified (was pre-1.0, "Onix" installer) | Arch (originally; community says pivoted/built-from-scratch) | GNOME | GUI installer | systemd | pacman (unverified) | Rolling | No | unverified | unverified | **Effectively dormant/pivoted** — r/DistroHopping "What happened to Crystal Linux?" (Jul 2025) reports it stalled/pivoted | No DW rank found; project GitHub stars not retrieved (unverified) | +| **Drauger OS** *(gaming, not Arch)* | https://draugeros.org ; github.com/drauger-os-development | **7.8 "Urgal" — 2026-06-28** | Ubuntu 26.04 LTS | KDE Plasma 6 | Edamame installer (GUI) | systemd | apt | Fixed (LTS base + tuned kernel) | No | likely yes (Ubuntu signed shim) but custom kernel breaks it — **unverified** | Yes — preinstalled AMD/NVIDIA drivers, NTSYNC kernel | Yes (7.8, Jun 2026) | **DW rank 188 / 78 HPD**. DW rating 6.0 (3 reviews) | +| **Batocera.linux** *(retro-gaming, not Arch)* | https://batocera.org | v41 (per DW reviews 2026) | Independent (Buildroot) | EmulationStation (no desktop) | Image flash (no installer) | BusyBox/systemd (unverified which) | none (image) | Rolling images | No (review explicitly: "NOT immutable") | unverified | Yes | Yes — active | **DW rank 243 / 63 HPD**. DW rating (8 reviews) | + +--- + +## (a) Ranking by evidence of real user base + +Ranked by hardest available proxies: DistroWatch Page-Hit rank/HPD (12-month) + GitHub stars + published figures. + +| # | Distro | DW 12m rank (HPD) | DW 4-week rank | GitHub stars | Other | +|---|---|---|---|---|---| +| 1 | **Omarchy** | 19 (516) | **6** (984) | **43k** | DW 1-week rank 4 (1111); fastest riser | +| 2 | **SteamOS** | 99 (149) | 64 (190) | n/a | Default OS of Steam Deck/Machine/Frame (Valve hardware at scale) | +| 3 | **Archcraft** | 83 (172) | 44 (325) | 3.4k | DW rating 8.6/61 | +| 4 | **BlackArch** | Not ranked (DW: Dormant) | — | 3.5k | Huge tool repo, but DW marks dormant | +| 5 | **Drauger OS** | 188 (78) | 333 (30) | (low) | DW rating 6.0/3 | +| 6 | **Batocera** | 243 (63) | 257 (45) | (low) | retro niche | +| 7 | **RebornOS** | 255 (60) / DW page 135 (103) | 279 (40) | 6 | DW rating 8.1/48 | +| 8 | **XeroLinux** | 350 (43) | 308 (34) | n/a | DW rating 8.8/14 | +| 9 | **ChimeraOS** | Not listed | — | 2k (+286) | console-gaming niche | +| 10 | **HoloISO** | Not listed | — | 5.2k (dead repo) | EOL project; 50K claim unverified | +| 11 | **ArcoLinux** | Not ranked (Discontinued) | — | 89 | superseded by Kiro | +| 12 | **Kiro** | new, unranked | — | n/a | 1 dev + AI | +| 13 | **Crystal Linux** | not found | — | unverified | dormant | + +Note: DW Page-Hit rank measures *website traffic*, not installs — a weak but consistent proxy. Omarchy and SteamOS are the only two here with a genuinely large, verifiable audience signal (DW top-20/top-100 + 43k stars / Valve hardware). + +--- + +## (b) Recommendation tiers (picker aimed at ordinary users) + +**Tier 1 — strongly recommended to add** +- **Omarchy** — DW top-20 and rising (4-week rank 6), 43k GitHub stars, actively released (4.0.4, 2026-09-16), Arch+Hyprland with a real installer. Caveat for "ordinary users": it's a tiling-WM dev-oriented desktop and **Secure Boot must be disabled**; no non-expert support net. Add with honest friction flags. +- **SteamOS** — the single most consequential gaming distro; official Valve OS for Steam Deck/Machine/Frame, DW rank 56. Must be added for gaming use-cases, with a hard caveat that it is officially supported only on Valve hardware (Enhanced: ROG Ally/Legion Go; unsupported elsewhere) and Secure Boot is not enabled out of the box. + +**Tier 2 — worth adding** +- **Archcraft** — DW 83/172 HPD, 3.4k stars, steady monthly-ish releases, Calamares GUI, low-RAM (Openbox/bspwm). Good "lightweight Arch" pick for tinkerers. +- **ChimeraOS** — the reference console-style couch-gaming image (frzr immutable, controller-first). Caveat: stable branch is >12 months old (49-1, 2025-07-27); Secure Boot must be disabled; AMD-centric. Add only if the picker has a "console/retro" path. +- **Drauger OS** — genuinely user-facing gaming distro (Ubuntu 26.04 LTS base, KDE, Edamame GUI installer, DW 188). Easier on-ramp than the Arch gaming options. Rating sample tiny (n=3) so note low confidence. + +**Tier 3 — skip (with reason)** +- **BlackArch** — DW status **Dormant**, "Not ranked"; last tracked ISO 2023.04.01. It is a pentest tool repo, not an ordinary-user desktop. Skip (or list as "security tool overlay", not a desktop option). +- **XeroLinux** — single maintainer, **commercial (€39 ISO)**, DW rank 350, no public repo for the ISO. Skip for a free picker; conflicts with an "ordinary user" free-download expectation. +- **RebornOS** — DW 258/65 HPD, only 6 GH stars, DW reviews report recurring installer/GRUB failures across releases. Low payoff vs EndeavourOS/Manjaro/CachyOS already present. Skip (or watch). +- **ArcoLinux** — DW **Discontinued**, "Not ranked". Skip and consider its successor Kiro instead. +- **Kiro** — new (Jul 2026), single-dev + AI, unranked. Watch, don't add yet. +- **Crystal Linux** — dormant/pivoted; unverified. Skip. +- **HoloISO** — **dead** (holoiso-eol/holoiso says "completely EOL"; GamingOnLinux declared it dead 2024-01-29). Skip; if a SteamOS-alike is wanted, use SteamOS itself or Bazzite. +- **Batocera** — not a desktop OS (no installer, image flash, emulation front-end). Out of scope for a distro picker aimed at general use; optional retro-only listing. + +--- + +## (c) Existing dataset entries that look unmaintained / long-dead (re-evaluate) + +Checked against DW release histories (read 2026-09-27): + +| Entry in dataset | Evidence | Verdict | +|---|---|---| +| **feren_os** | Last release **2025.03 (2025-04-10)**; prior release gap was **2020.11 → 2025.03 (≈4.5 years)**; nothing since Apr 2025 (DW: https://distrowatch.com/table.php?distribution=feren). ~17 months stale as of 2026-09. | **Re-evaluate / likely dormant.** Strongest candidate to remove. | +| **bodhi_linux** | Last release **7.0.0 — 2023-08-21**; no new major release since (>3 years). DW page updated 2026-08-06 but no new ISO release announcements (https://distrowatch.com/table.php?distribution=bodhi). | **Re-evaluate / possibly dormant.** | +| **pclinuxos** | Last *announced* ISO release **2023.07 (2023-07-30)**; however it is rolling and the DW page was updated **2026-09-21**, so updates continue (https://distrowatch.com/table.php?distribution=pclinuxos). | **Active but ISO-release announcements stalled** — verify before keeping the "download" link current. | +| **solus** | **Solus 4.9 — 2026-04-18** (DW 12794). Earlier "Solus is dying" reports are outdated (https://distrowatch.com/table.php?distribution=solus). | **Active — keep; do NOT remove** (revived). | +| **mageia** | **Mageia 10 — 2026-06-29** (https://distrowatch.com/table.php?distribution=mageia). | **Active — keep.** | +| **artix (duplicate `artix_linux` entry)** | Data bug, not coverage: dataset contains both `artix` and a duplicate `artix_linux`. Artix itself is active — official ISO **2026-08** (https://artixlinux.org/news.php, 2026-08-14). | **Fix the duplicate entry; keep the distro.** | + +Not exhaustively re-checked (lower risk, no red flags seen in passing): ubuntu/linux_mint/pop_os/fedora/debian/arch/manjaro/opensuse_*/elementary/zorin/mx/endeavouros/garuda/void/alpine/nixos/tails/qubes/trisquel/slackware/*buntu/kde_neon/lite/peppermint/nobara/pureos/rocky/almalinux/centos_stream/studio/lmde/mageia/deepin/kali/gentoo/bazzite/cachyos/pikaos/fedora_*/opensuse_microos/whonix/parrot/fedora_silverblue/fedora_kinoite. + +--- + +## Sources (all read 2026-09-27/28 UTC) + +- DistroWatch Page Hit Ranking — https://distrowatch.com/dwres.php?resource=popularity (HTTP 200, 628 KB; 4 tables: 12m/6m/3m/4-week) +- DistroWatch profiles: /table.php?distribution=omarchy | steamos | chimera (Chimera **Linux**) | rebornos | blackarch | arco | archcraft | xero | batocera | drauger | solus | bodhi | pclinuxos | mageia | feren | ultramarine +- DistroWatch release news: Archcraft 2026.08.01 (id 12908); Omarchy 4.0.0 (id 12921); Drauger OS 7.8 (id 12882); Solus 4.9 (id 12794); Mageia 10; Feren 2025.03 (id 12403) +- Omarchy: https://omarchy.org ; https://learn.omacom.io/2/the-omarchy-manual/96/manual-insta ; https://github.com/omacom/omarchy ; https://img.shields.io/github/stars/basecamp/omarchy.json (43k) +- SteamOS: https://www.gamingonlinux.com/2026/09/steamos-3-8-28-stable-released... (2026-09-25); https://www.techpowerup.com/347577 (3.8 preview 2026-03-20); https://grokipedia.com/page/Secure_Boot_on_Steam_Deck ; https://github.com/downthecrop/DeckSecureBoot +- ChimeraOS: https://chimeraos.org/download/ ("secure boot must be disabled"); https://github.com/ChimeraOS/chimeraos/releases ; .../wiki/Release-Notes (49-1 2025-07-27); .../blob/master/manifest (VERSION=50); https://img.shields.io/github/stars/ChimeraOS/chimeraos.json (2k) +- RebornOS: https://rebornos.org ; https://sourceforge.net/projects/rebornos/files/ (2026.01.22); https://img.shields.io/github/stars/RebornOS/RebornISO.json (6) +- Archcraft: https://distrowatch.com/12908 ; https://tux.fan/2026/08/02/archcraft-26-08-sway-launch ; https://img.shields.io/github/stars/archcraft-os/archcraft.json (3.4k) +- BlackArch: https://blackarch.org/downloads.html ; https://github.com/BlackArch/blackarch ; https://img.shields.io/github/stars/BlackArch/blackarch.json (3.5k) +- ArcoLinux/Kiro: https://distrowatch.com/table.php?distribution=arco (Discontinued); https://kiroproject.be (v26.07.01) ; https://img.shields.io/github/stars/arcolinux/arcolinux-iso.json (89) +- HoloISO: https://github.com/holoiso-eol/holoiso ("completely EOL"); https://github.com/holoiso-staging/releases (1.3, 2024-06-03); https://holoiso.com ("50K+ Active Users", unverified) +- Drauger OS: https://distrowatch.com/12882 (7.8, 2026-06-28) +- Crystal Linux: https://www.reddit.com/r/DistroHopping/comments/1mhgvh5/what_happened_to_crystal_linux/ (Jul 2025) +- Artix (dataset duplicate check): https://artixlinux.org/news.php (ISO 2026-08) + +### Explicitly unverified items +- Omarchy "300,000 downloads/month" (community review claim); Omarchy GitHub forks/issues counts (secondary blog only). +- HoloISO "50K+ active users" (vendor marketing vs EOL status). +- Secure-Boot status for RebornOS, Archcraft, XeroLinux, BlackArch, Kiro, Crystal, Drauger OS, Batocera — no signed-shim/secure-boot documentation found; treated as unverified/no. +- Crystal Linux current status and GitHub star count. +- Batocera init system and licence exactness. +- "Solus 4.9 was released 2026-04-18" per DW id 12794 — the DW release history table lists it; I did not open the release announcement itself. diff --git a/docs/evidence/coverage-non-arch.md b/docs/evidence/coverage-non-arch.md new file mode 100644 index 0000000..4432d56 --- /dev/null +++ b/docs/evidence/coverage-non-arch.md @@ -0,0 +1,448 @@ +# Coverage review — non-Arch distros missing from whichdistro.com + +**Read date for every figure below: 2026-09-28.** Dataset reviewed: `~/Development/pickyourlinux/src/data/distros.json` (read-only; 54 entries per parent). +**Primary popularity source:** DistroWatch page-hit ranking and per-distro pages (`https://distrowatch.com/table.php?distribution=`, `https://distrowatch.com/dwres.php?resource=popularity`, per-distro news feeds `https://distrowatch.com/news/distro/.xml`). + +**Caveat on DistroWatch numbers (applies to all DW figures below):** DistroWatch page hits measure *web traffic to a distro's DistroWatch page*, not installed base. It is the only uniform cross-distro metric available, and is influenced by news cycles. Treat it as a weak-but-comparable signal, not a user count. Where a vendor-published or GitHub figure exists, it is given too. Only two figures are vendor-published user/shipment numbers (Raspberry Pi, TUXEDO hardware); the rest are traffic or repo metrics. + +--- + +## 1. Candidate records (distros absent from the dataset) + +### 1.1 RHEL — Red Hat Enterprise Linux +- Upstream: https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux +- Latest release: **RHEL 10.2, GA 2026-05-19** (kernel `6.12.0-211.7.1.el10_2`), alongside 9.8 — https://access.redhat.com/articles/red-hat-enterprise-linux-release-dates (read 2026-09-28); DistroWatch news 2026-05-20 (https://distrowatch.com/table.php?distribution=redhat) +- Base: Fedora-derived, independent (DW "Based on: Fedora") — https://distrowatch.com/table.php?distribution=redhat +- Default desktop: GNOME (GNOME Shell); KDE available via EPEL +- Installer: GUI (Anaconda) + Kickstart for automation +- Init: systemd · Package manager: RPM / dnf (yum) +- Release model: fixed; ~6-month minor releases; 10-year lifecycle (5 full + 5 maintenance) +- Immutable: no (Image Mode / bootc is opt-in, not the default product) +- Secure Boot: **yes** — RHEL ships Microsoft-signed `shim`; Red Hat documents its Secure Boot chain — https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/considerations_in_adopting_rhel_10/kernel +- Proprietary posture: includes proprietary binary blobs/drivers; Wikipedia lists licence as "various free software licences, plus proprietary binary blobs" — https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux +- Maintained: yes (Active on DW) +- Popularity: DW **6-month rank 77 (171 hits/day)**, 12-month rank 75 (187 hits/day) — https://distrowatch.com/table.php?distribution=redhat (read 2026-09-28). Vendor-published install-base figure: **unverified**. +- Desktop-picker note: subscription-gated commercially, though a free developer subscription covers 16 systems. + +### 1.2 Raspberry Pi OS +- Upstream: https://www.raspberrypi.com/software/operating-systems/ +- Latest release: **images dated 15 Sep 2026** (version 6.3 per Wikipedia) — https://www.raspberrypi.com/software/operating-systems/ (read 2026-09-28); DW news 2026-09-16 — https://distrowatch.com/table.php?distribution=raspios +- Base: Debian (Debian stable images) — https://en.wikipedia.org/wiki/Raspberry_Pi_OS +- Default desktop: labwc (Wayland) over an LXDE-derived stack — https://en.wikipedia.org/wiki/Raspberry_Pi_OS +- Installer: Raspberry Pi Imager (GUI) or CLI image write — no on-device installer +- Init: systemd · Package manager: APT / dpkg — https://en.wikipedia.org/wiki/Raspberry_Pi_OS +- Release model: dated snapshots tracking Debian stable (Bookworm → Trixie) +- Immutable: no +- Secure Boot: **no** — the Pi family boots from its GPU bootloader; pre-Pi4 models require a non-free blob to boot at all — https://wiki.debian.org/RaspberryPi +- Proprietary posture: non-free firmware/boot blobs required and shipped by default (same source) +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 154 (89 hits/day)**, 12-month rank 142 (98) — https://distrowatch.com/table.php?distribution=raspios. Vendor: **Raspberry Pi Holdings FY2025 shipped 7.8M boards+modules (+9%) and 8.4M MCU chips** — https://quartr.com/events/raspberry-pi-holdings-plc-rpi-h2-2025_F3auQH9y and https://cambridgeindependent.co.uk/business/raspberry-pi-s-share-price-has-doubled-since-2025-results-ann-9462063 (read 2026-09-28). Hardware-bound: install base ≈ Pi ownership. + +### 1.3 Devuan +- Upstream: https://devuan.org/ +- Latest release: **Devuan 6.0.0 "Excalibur", 2025-11-02** (Debian 13 "Trixie" base) — https://devuan.org/os/announce/excalibur-release-announce-2025-11-02; DW news 2025-11-03 — https://distrowatch.com/news/distro/devuan.xml +- Base: Debian (stable) — https://distrowatch.com/table.php?distribution=devuan +- Default desktop: Xfce (DW also lists Cinnamon, KDE Plasma, LXQt, MATE, labwc, Wayfire) — same source +- Installer: Devuan installer (ncurses) + live images; **GUI-ness: partly verified** (Devuan's own installer, not Calamares, on the classic ISO) +- Init: **sysvinit default**; OpenRC/runit offered (explicit anti-systemd project) — https://distrowatch.com/table.php?distribution=devuan +- Package manager: APT / dpkg +- Release model: fixed, tracks Debian stable +- Immutable: no +- Secure Boot: **partial** — signed kernel + `shim` are in the repos but Secure Boot is not enabled out of the box; users must mark `shimx64.efi` manually — https://dev1galaxy.org/viewtopic.php?id=3970 +- Proprietary posture: Debian-style; `main` is free, non-free components separate and not enabled by default (Debian policy; **per-component verification: unverified**) +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 42 (271 hits/day)**, 12-month rank 38 (303) — https://distrowatch.com/table.php?distribution=devuan + +### 1.4 Guix System +- Upstream: https://guix.gnu.org/ +- Latest release: **GNU Guix 1.5.0, 2026-01-23** (3 years after 1.4.0) — https://guix.gnu.org/blog/2026/gnu-guix-1.5.0-released/ and https://lwn.net/Articles/1055675/ +- Base: independent (GNU Guix; DW OS Type Linux) — https://distrowatch.com/table.php?distribution=guix +- Default desktop: GNOME (numerous others declarable) +- Installer: scripted installer (ncurses); **graphical installer status: unverified** +- Init: **GNU Shepherd** — https://guix.gnu.org/manual/1.5.0/en/html_node/Shepherd-Services.html +- Package manager: GNU Guix (functional, declarative, transactional generations) +- Release model: rolling (`guix pull`) + periodic stable releases +- Immutable: **effectively** — declarative system generations with atomic rollback, though not an immutable OS image +- Secure Boot: **unverified** (no published Secure Boot support found) +- Proprietary posture: 100% free by default, FSF-endorsed; non-free requires the third-party `nonguix` channel — https://guix.gnu.org/ (**explicit default-freedom claim: verified at project level**) +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 179 (80 hits/day)**, 12-month rank 148 (91) — https://distrowatch.com/table.php?distribution=guix + +### 1.5 Vanilla OS +- Upstream: https://vanillaos.org/ (docs: https://docs.vanillaos.org/) +- Latest release: **Vanilla OS 3 "Reunion", 2026-08-24** (first major release since OS 2) — https://distrowatch.com/12931 and https://tux.fan/2026/08/29/vanilla-os-3-reunion-2026 +- Base: Debian (testing) — https://distrowatch.com/table.php?distribution=vanilla (previously Ubuntu) +- Default desktop: GNOME — same source +- Installer: GUI (Albius installer) — https://docs.vanillaos.org/handbook/en/installation +- Init: systemd · Package manager: `apx` (containerised) over dpkg/apt + Flatpak +- Release model: point releases +- Immutable: **yes** (image/atomic root) — https://distrowatch.com/12931 describes it as the project's immutable Linux distribution +- Secure Boot: **unverified** +- Proprietary posture: **unverified** (docs mention proprietary NVIDIA driver support; default state not confirmed) +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 80 (168 hits/day)**, 12-month rank 88 (168) — https://distrowatch.com/table.php?distribution=vanilla. GitHub: `Vanilla-OS/ABRoot` **391 stars**, last push 2026-09-16 — https://api.github.com/repos/Vanilla-OS/ABRoot + +### 1.6 Bluefin +- Upstream: https://projectbluefin.io/ · repo https://github.com/ublue-os/bluefin +- Latest release: monthly Fedora-atomic images; DW screenshot **44.20260801** (i.e. Aug 2026) — https://distrowatch.com/table.php?distribution=bluefin; DW feed records "Bluefin 44.20260511" — https://distrowatch.com/news/distro/bluefin.xml +- Base: Fedora Atomic (Silverblue) / CentOS bootc — DW "Based on: CentOS, Fedora" — https://distrowatch.com/table.php?distribution=bluefin +- Default desktop: GNOME — same source +- Installer: GUI (Anaconda) — https://docs.projectbluefin.io/installation/ +- Init: systemd · Package manager: rpm-ostree/bootc + Flatpak + Homebrew +- Release model: rolling image (plus an LTS branch) — https://docs.projectbluefin.io/lts/ +- Immutable: **yes** +- Secure Boot: **yes** — install docs cover "UEFI with Secure Boot" — https://docs.projectbluefin.io/installation/ +- Proprietary posture: ships multimedia codecs and offers the proprietary NVIDIA driver (ublue convention); **default-state verification: unverified** +- Maintained: yes — repo pushed **2026-09-27** — https://api.github.com/repos/ublue-os/bluefin +- Popularity: DW **6-month rank 175 (81 hits/day)**, 12-month rank 161 (86) — https://distrowatch.com/table.php?distribution=bluefin. GitHub **2,609 stars / 261 forks** — https://api.github.com/repos/ublue-os/bluefin (read 2026-09-28) + +### 1.7 Aurora +- Upstream: https://github.com/ublue-os/aurora (Universal Blue) +- Latest release: DW screenshot **44.20260804**; DW news "Distribution Release: Aurora 43" 2025-11-19 — https://distrowatch.com/news/distro/aurora.xml +- Base: Fedora (Kinoite) → CentOS bootc — https://distrowatch.com/table.php?distribution=aurora +- Default desktop: KDE Plasma — same source +- Installer: GUI (Anaconda) · Init: systemd · Package manager: rpm-ostree/bootc + Flatpak +- Release model: rolling image +- Immutable: yes +- Secure Boot: **yes** (Fedora-atomic base; same mechanism as Bluefin) — **direct Aurora doc: unverified** +- Proprietary posture: as Bluefin (codecs/NVIDIA option) +- Maintained: yes — repo pushed 2026-09-27 — https://github.com/ublue-os/aurora +- Popularity: DW **6-month rank 83 (165 hits/day)**, 12-month rank 79 (182) — https://distrowatch.com/table.php?distribution=aurora. GitHub **796 stars / 72 forks** — https://api.github.com/repos/ublue-os/aurora (read 2026-09-28) + +### 1.8 Ultramarine Linux +- Upstream: https://ultramarine-linux.org/ · wiki https://wiki.ultramarine-linux.org/ +- Latest release: **Ultramarine 44, 2026-07-02** (Fedora 44 base) — https://distrowatch.com/12891 and https://9to5linux.com/ultramarine-44-is-out-based-on-fedora-linux-44-linux-7-0-and-kde-plasma-6-7 +- Base: Fedora — https://distrowatch.com/table.php?distribution=ultramarine +- Default desktop: **KDE Plasma as of 44** (9to5linux, above); DW lists Budgie, GNOME, KDE Plasma, Xfce editions — https://distrowatch.com/table.php?distribution=ultramarine +- Installer: GUI (Anaconda); project notes a replacement installer in development — https://wiki.ultramarine-linux.org/en/setup/getting/ +- Init: systemd · Package manager: RPM/dnf + Flatpak +- Release model: point releases tracking Fedora +- Immutable: no +- Secure Boot: **partial** — documented as a manual post-install step — https://wiki.ultramarine-linux.org/en/setup/post-advanced/ +- Proprietary posture: ships proprietary codecs/NVIDIA driver support (Fyra Labs); **default-state verification: unverified** +- Maintained: yes (Active on DW) +- Popularity: DW **6-month rank 57 (209 hits/day)**, 12-month rank 63 (210) — https://distrowatch.com/table.php?distribution=ultramarine + +### 1.9 TUXEDO OS +- Upstream: https://www.tuxedocomputers.com/en/TUXEDO-OS (vendor: TUXEDO Computers, DE) +- Latest release: rolling hybrid; DW recorded development release **20260813** and unannounced **20260916** — https://distrowatch.com/news/distro/tuxedo.xml +- Base: **moving from Ubuntu LTS to Debian Testing, announced 2026-07-07** — https://tuxedocomputers.com/en/A-new-foundation-for-TUXEDO-OS-Switching-to-Debian.tuxedo +- Default desktop: KDE Plasma — https://distrowatch.com/table.php?distribution=tuxedo +- Installer: GUI (Calamares) · Init: systemd · Package manager: APT/dpkg + Flatpak +- Release model: hybrid rolling + point (vendor-described) +- Immutable: no +- Secure Boot: **no** — "we currently don't officially support Secure Boot as we don't (yet) have a Microsoft signed shim"; kernel signed with a self-signed cert — https://github.com/tuxedocomputers/Tuxedo-Linux-Kernel-Self-Signed-Certificate ; vendor notes Secure Boot is disabled by default on TUXEDO hardware — https://www.tuxedocomputers.com/en/What-you-always-wanted-to-know-about-Secure-Boot.tuxedo +- Proprietary posture: yes — ships proprietary NVIDIA drivers/codecs (vendor hardware distro) +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 27 (350 hits/day)**, 12-month rank 30 (358) — https://distrowatch.com/table.php?distribution=tuxedo. Vendor-published user count: **unverified** (preinstalled on TUXEDO hardware). + +### 1.10 antiX +- Upstream: https://antixlinux.com/ +- Latest release: **antiX-26 "Stephen Kapos", 2026-03-21** (Debian 13 "Trixie" base) — https://antixlinux.com/antix-26-released/ +- Base: Debian (stable) — https://distrowatch.com/table.php?distribution=antix +- Default desktop: IceWM/Fluxbox/JWM (ROX-IceWM per Wikipedia) — https://en.wikipedia.org/wiki/AntiX +- Installer: GUI (antiX installer) · Package manager: APT / dpkg +- Init: **runit default; also sysvinit, dinit, s6-rc, s6-66 — 5 init systems, no systemd** — https://antixlinux.com/antix-26-released/ +- Release model: fixed, tracks Debian stable +- Immutable: no +- Secure Boot: **unverified** (no official Secure Boot support located) +- Proprietary posture: **partial** — non-free firmware/drivers available for hardware support; default-state unverified +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 21 (467 hits/day)**, 12-month rank 18 (541) — https://distrowatch.com/table.php?distribution=antix. Note: antiX is the upstream parent of MX Linux, which **is** already in the dataset. + +### 1.11 Nura (formerly postmarketOS) +- Upstream: https://nura.eco/ (project site https://postmarketos.org/) · images https://images.postmarketos.org/ +- Latest release: **postmarketOS 26.06 "Alpen Avocado", 2026-06-21** — https://postmarketos.org/blog/2026/06/21/v26.06-release ; **renamed to "Nura" on 2026-09-27** — https://nura.eco/blog/2026/09/27/nura-rename/ and https://linuxiac.com/postmarketos-is-now-nura-after-major-project-rebrand/ +- Base: Alpine Linux — https://distrowatch.com/table.php?distribution=postmarketos (DW name now shows "Nura") +- Default desktop: mobile UIs — GNOME/Phosh, Plasma Mobile, Sway, Sxmo, COSMIC — same source; https://en.wikipedia.org/wiki/Nura_(operating_system) +- Installer: **manual CLI (`pmbootstrap`)** — no GUI installer +- Init: OpenRC (Alpine) · Package manager: apk (Alpine) — https://en.wikipedia.org/wiki/Nura_(operating_system) +- Release model: stable every ~6 months + rolling `edge` — https://docs.postmarketos.org/pmaports/main/releases.html +- Immutable: no +- Secure Boot: N/A (mobile hardware boot chains) +- Proprietary posture: device firmware blobs required +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 235 (67 hits/day)**, 12-month rank 153 (90) — https://distrowatch.com/table.php?distribution=postmarketos +- Scope note: phones/tablets only — out of scope for an ordinary-desktop picker. + +### 1.12 blendOS *(Arch-based — outside the stated non-Arch scope)* +- Upstream: https://blendos.co/ +- Latest release: v4 announced 2024-06-05; DW records rolling image "blendOS 2026.08.01" — https://blendos.co/blog/2024/06/05/blendos-v4-released-arch-linux-made-immutable-declarative-and-atomic/ and https://distrowatch.com/news/distro/blendos.xml +- Base: **Arch Linux** — https://distrowatch.com/table.php?distribution=blendos +- Default desktop: GNOME · Installer: GUI · Init: systemd +- Package manager: pacman/AUR inside containers; declarative `/system.yaml` +- Release model: rolling · **Immutable: yes** (atomic Arch) +- Secure Boot: **no** — install guide requires disabling Secure Boot — https://blendos.co/install/normal-pc ; corroborated https://github.com/sebanc/linuxloops/blob/main/Readme/Distro-notes.md +- Maintained: yes (repo pushed 2025-10-21) — https://api.github.com/repos/blend-os/blendos +- Popularity: DW **6-month rank 97 (147 hits/day)**, 12-month rank 87 (169) — https://distrowatch.com/table.php?distribution=blendos. GitHub **778 stars** — https://api.github.com/repos/blend-os/blendos + +### 1.13 openSUSE Aeon +- Upstream: https://aeondesktop.org/ (docs on en.opensuse.org); name change from "MicroOS Desktop GNOME" 2023-05-31 — https://news.opensuse.org/2023/05/31/microos-desktop-has-new-name +- Latest release: rolling; DW image tag 20260901 — https://distrowatch.com/news/distro/aeon.xml +- Base: openSUSE Tumbleweed (MicroOS) — https://distrowatch.com/table.php?distribution=aeon +- Default desktop: GNOME · Installer: GUI · Init: systemd +- Package manager: zypper + `transactional-update` (rpm) + Flatpak +- Release model: rolling · **Immutable: yes** (read-only root) +- Secure Boot: **yes** (openSUSE's signed shim; openSUSE ships Secure Boot support) — https://news.opensuse.org/ (**project-level, direct Aeon page: unverified**) +- Proprietary posture: **partial** — openSUSE ships firmware; codecs via Packman are not enabled by default +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 124 (106 hits/day)**, 12-month rank 126 (106) — https://distrowatch.com/table.php?distribution=aeon + +### 1.14 openSUSE Kalpa +- Upstream: openSUSE project; Plasma counterpart to Aeon, from the same 2023-05-31 rename — https://news.opensuse.org/2023/05/31/microos-desktop-has-new-name ; Plasma 6 landed in Kalpa 2024-03-22 — https://news.opensuse.org/2024/03/22/plasma-arrives-in-os-distributions +- Latest release: rolling (Tumbleweed/MicroOS base) +- Base: openSUSE · Default desktop: KDE Plasma · Immutable: yes · Init: systemd · Pkg: zypper + transactional-update +- Secure Boot: yes (openSUSE shim) · Maintained: yes +- Popularity: **no separate DistroWatch slug** (`table.php?distribution=kalpa` → not found, read 2026-09-28); use Aeon as proxy. Vendor/published user numbers: none. + +### 1.15 openSUSE Slowroll +- Upstream: https://download.opensuse.org/slowroll/ ; concept: https://news.opensuse.org/2024/01/19/clarifying-misunderstandings-of-slowroll/ +- Latest release: rolling ISO refreshed 2026-08-07 — https://download.opensuse.org/slowroll/ +- Base: openSUSE Tumbleweed, slower cadence (vendor-described) +- Default desktop: KDE Plasma / GNOME editions · Init: systemd · Pkg: zypper +- Immutable: no · Secure Boot: yes (openSUSE shim) · Maintained: yes +- Popularity: **not separately ranked on DistroWatch** (its page resolves to the main openSUSE entry — https://distrowatch.com/table.php?distribution=slowroll). Vendor numbers: none. + +### 1.16 Nitrux +- Upstream: https://nxos.org/ +- Latest release: **Nitrux 6.1.0** — https://nxos.org/ (read 2026-09-28); 6.0.0 released 2026-03-03 — https://helpnetsecurity.com/2026/03/04/immutable-linux-distribution-nitrux-6-release ; 5.0.0 on 2025-11-12 — https://distrowatch.com/12633 +- Base: Debian → DistroWatch now lists "Based on: Devuan" — https://distrowatch.com/table.php?distribution=nitrux +- Default desktop: **Hyprland** (dropped KDE at 5.0) — https://news.tuxmachines.org/n/2025/11/12/Systemd_Free_Nitrux_5_0_Officially_Released_with_Hyprland_Deskt.shtml +- Installer: GUI (Calamares) · Init: **OpenRC (systemd-free)** — https://nxos.org/ +- Package manager: APT/dpkg + AppImage (NX AppHub) — https://nxos.org/ +- Release model: point releases · **Immutable: yes** — "built on an immutable foundation" — https://nxos.org/ +- Secure Boot: **unverified** · Proprietary: **partial/unverified** (NVIDIA driver support) +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 133 (97 hits/day)**, 12-month rank 100 (145) — https://distrowatch.com/table.php?distribution=nitrux + +### 1.17 KaOS +- Upstream: https://kaosx.us/ +- Latest release: **KaOS 2026.09** (DW image tag) — https://distrowatch.com/table.php?distribution=kaos ; the dinit migration shipped in **KaOS 2026.06, 2026-06-24** — https://kaosx.us/news/2026/kaosdinit06/ +- Base: independent (KDE/Qt-focused) — https://distrowatch.com/table.php?distribution=kaos +- Default desktop: **Niri + Noctalia** (as of 2026) — https://kaosx.us/desktop/niri/ ; DW image `kaos-2026.09-niri` +- Installer: GUI (Calamares) · Init: **dinit** (reduced systemd retained for some services) — https://kaosx.us/release_notes/ +- Package manager: pacman (own repositories) · Release model: rolling (monthly ISOs) +- Immutable: no +- Secure Boot: **no** — "secure boot is not supported" — https://kaosx.us/pages/download/ (cited via https://forum.kaosx.us/d/2209-kaos-installs-but-doesn-t-boot) +- Proprietary posture: **unverified** (KaOS is Qt/KDE-centric; not confirmed) +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 58 (206 hits/day)**, 12-month rank 64 (208) — https://distrowatch.com/table.php?distribution=kaos + +### 1.18 Oracle Linux +- Upstream: https://www.oracle.com/linux/ +- Latest release: **Oracle Linux 10.2, August 2026** — https://docs.oracle.com/en/operating-systems/oracle-linux/10/relnotes10.2/ ; 10.1 on 2025-12-06 — https://distrowatch.com/news/distro/oracle.xml +- Base: RHEL (source-compatible rebuild + Oracle's own kernel) — https://distrowatch.com/table.php?distribution=oracle +- Default desktop: GNOME (KDE selectable) — https://en.wikipedia.org/wiki/Oracle_Linux +- Installer: GUI (Anaconda) · Init: systemd · Pkg: RPM/dnf — https://en.wikipedia.org/wiki/Oracle_Linux +- Release model: fixed, tracks RHEL; long premier + extended support +- Immutable: no · Secure Boot: yes (signed shim, RHEL lineage) +- Proprietary posture: ships firmware; free to download/use, support is paid +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 255 (60 hits/day)**, 12-month rank 159 (87) — https://distrowatch.com/table.php?distribution=oracle +- Redundancy note: dataset already has rocky_linux, almalinux, centos_stream — Oracle Linux is a fourth RHEL rebuild. + +### 1.19 Amazon Linux +- Upstream: https://aws.amazon.com/linux/ ; docs https://docs.aws.amazon.com/linux/al2023/ +- Latest release: **AL2023.10.20260330 (2026-03-30)**; quarterly minor cadence; supported to **2029-06-30** — https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.10.20260330.html and https://docs.amazonaws.cn/en_us/linux/al2023/ug/release-cadence.html +- Base: independent (Fedora-derived, RHEL-family tooling) · **not listed on DistroWatch** (`table.php?distribution=amazon` → no entry, read 2026-09-28) +- Default desktop: **none** (cloud/server; no desktop spin) +- Installer: n/a (AMIs/container images, cloud-init) +- Init: systemd · Pkg: RPM/dnf +- Release model: quarterly minor releases, 5-year support (AL2 separate) +- Immutable: no · Secure Boot: **yes, since AL2023.1** on UEFI-capable EC2 — https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html +- Proprietary posture: includes Amazon-proprietary agents; free to use on AWS +- Maintained: yes +- Popularity: not on DistroWatch; AWS-published user numbers: **unverified** +- Scope note: cloud/server only — not an ordinary-desktop candidate. + +### 1.20 Regata OS +- Upstream: https://get.regataos.com.br/ +- Latest release: **Regata OS 25.1.2**, ISOs dated 2026-02-23 — https://sourceforge.net/projects/regataos/files/regataos-25 +- Base: openSUSE — https://distrowatch.com/table.php?distribution=regata +- Default desktop: KDE Plasma — same source · Installer: GUI +- Init: systemd · Pkg: zypper/rpm + Flatpak + own store +- Release model: point/rolling hybrid · Immutable: no +- Secure Boot: **unverified** · Proprietary: yes (gaming distro; NVIDIA/codecs) +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 334 (44 hits/day)** vs 12-month rank 185 (79) — a large fall; https://distrowatch.com/table.php?distribution=regata + +### 1.21 Rhino Linux +- Upstream: https://rhinolinux.org/ +- Latest release: **Rhino Linux 2026.1, 2026-05-25** (Linux 7.0; added a Lomiri edition) — https://distrowatch.com/12849 and https://lxer.com/module/newswire/ext_link.php?rid=365118 +- Base: Ubuntu (rolling, tracking devel) — https://distrowatch.com/table.php?distribution=rhino +- Default desktop: Xfce; Lomiri edition added 2026.1 — https://opensourcefeed.org/rhino-linux-2026-1-release +- Installer: GUI · Init: systemd +- Package manager: apt + **Pacstall** ("AUR for Ubuntu") + Nala — https://rhinolinux.org/ +- Release model: rolling · Immutable: no +- Secure Boot: **likely yes (Ubuntu shim) — unverified** +- Proprietary posture: yes (Ubuntu non-free/firmware) +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 229 (68 hits/day)**, 12-month rank 173 (82) — https://distrowatch.com/table.php?distribution=rhino. GitHub `rhino-linux/rhino-pkg` **38 stars** — https://api.github.com/repos/rhino-linux/rhino-pkg + +### 1.22 Puppy Linux +- Upstream: https://puppylinux.com/ (community forum https://forum.puppylinux.com/) +- Latest release: family of variants, not one product — DW records "Puppy Linux 22.12" (2022-12-10) and a 2026 build tag `2606-260901`; variants include F96-CE (https://f96.puppylinux.com/), BookwormPup64 and NoblePup32 24.04 — https://en.wikipedia.org/wiki/Puppy_Linux and https://distrowatch.com/news/distro/puppy.xml +- Base: independent (binary-compatible with Debian/Ubuntu/Slackware per build, via woof-CE) — https://distrowatch.com/table.php?distribution=puppy +- Default desktop: JWM / Openbox / labwc (+ ROX) — https://distrowatch.com/table.php?distribution=puppy +- Installer: GUI (Puppy's own) · Init: BusyBox init +- Package manager: PET/`pkg` plus build-specific apt/slackpkg +- Release model: irregular community releases · Immutable: no +- Secure Boot: **no/unverified** · Proprietary: **partial/unverified** +- Maintained: yes (DW Active; community releases continue) +- Popularity: DW **6-month rank 37 (290 hits/day)**, 12-month rank 32 (337) — https://distrowatch.com/table.php?distribution=puppy + +### 1.23 Tiny Core Linux +- Upstream: http://www.tinycorelinux.net/ +- Latest release: **Tiny Core 17.0, 2026-02-11** (Linux 6.18.2) — https://distrowatch.com/12727 and http://www.tinycorelinux.net/ (17.1 ISO present in the release dir) +- Base: independent (forked from Damn Small Linux) — https://distrowatch.com/table.php?distribution=tinycore +- Default desktop: FLWM (dwm/Fluxbox/i3/JWM etc. available) — same source +- Installer: CLI/scripted (Core installer); App Browser is GUI +- Init: BusyBox init · Package manager: **tce / App Browser** — https://wiki.tinycorelinux.net/doku.php?id=wiki:app_browser +- Release model: occasional point releases · Immutable: no (runs in RAM) +- Secure Boot: **no** · Proprietary: free by default; repo mostly free +- Maintained: yes (DW Active) +- Popularity: DW **6-month rank 81 (166 hits/day)**, 12-month rank 67 (198) — https://distrowatch.com/table.php?distribution=tinycore + +### 1.24 Slax +- Upstream: https://slax.org/ +- Latest release: **Slax 15.0.4 (Slackware-based) / 12.2.0 (Debian-based), 2023-10-10** — https://slax.org/changelog.php +- Base: Slackware (15.x series) / Debian (12.x series) — https://distrowatch.com/table.php?distribution=slax +- Default desktop: Fluxbox — same source +- Installer: live-USB (runs live; no traditional installer) · Init: sysvinit (Slackware) +- Package manager: Slackware `pkgtools` (.txz) / Debian apt for the 12.x line +- Release model: occasional · Immutable: no (live) · Secure Boot: **no** +- **Maintained: NO — DistroWatch status is "Dormant"; no release in ~3 years (last 2023-10-10)** — https://distrowatch.com/table.php?distribution=slax (read 2026-09-28) +- Popularity: Dormant → DistroWatch assigns no rank. + +### 1.25 Porteus +- Upstream: https://porteus.org/ +- Latest release: 5.0 stable / **5.1-alpha (2025-01)**; modules refreshed 2026-05-20 — http://dl.porteus.org/x86_64/Porteus-v5.1/ and https://news.tuxmachines.org/n/2025/01/09/Porteus_v5_1_alpha.shtml +- Base: Slackware — https://distrowatch.com/table.php?distribution=porteus +- Default desktop: KDE Plasma, LXQt, Xfce, MATE, Cinnamon, GNOME, Openbox — same source +- Installer: GUI installer · Init: sysvinit (Slackware) +- Package manager: USM — https://en.wikipedia.org/wiki/Porteus_(operating_system) +- Release model: point releases from Slackware-current snapshots · Immutable: no (RAM/live) +- Secure Boot: **no/unverified** · Proprietary: **partial/unverified** +- Maintained: yes but slow — DW Active, stable branch 5.0 dates from 2022 +- Popularity: DW **6-month rank 223 (69 hits/day)** vs 12-month 184 (79) — falling — https://distrowatch.com/table.php?distribution=porteus + +### 1.26 Ubuntu Core +- Upstream: https://ubuntu.com/core +- Latest release: Ubuntu Core 24 (24.04 LTS line) — https://documentation.ubuntu.com/core/reference/release-notes +- Base: Ubuntu · Default desktop: **none** (IoT/embedded; device shells only) — https://assets.ubuntu.com/v1/76f8247d-digital_ubuntu_core_datasheet.pdf +- Installer: image-based provisioning (no desktop installer) · Init: systemd +- Package manager: **snap only** · **Immutable: yes** (image-based, every element sandboxed) — same datasheet +- Release model: tracks Ubuntu LTS · **Secure Boot: yes** — https://ubuntu.com/core/features/secure-boot +- Proprietary posture: yes (Ubuntu non-free firmware) +- Maintained: yes · **not a separate DistroWatch entry** (slug `ubuntucore` resolves to the Ubuntu page, read 2026-09-28) +- Popularity: no DW rank; Canonical-published device numbers: **unverified** +- Scope note: not a desktop OS — not an ordinary-desktop candidate. + +--- + +## 2. Ranking by evidence of real user base + +Ordered strongest → weakest, using (a) hardware/vendor figures, (b) DistroWatch 6-month hits/day, (c) GitHub activity. Page-hit figures are web traffic, not installs (caveat above). + +| # | Distro | Strongest evidence of real base | DW 6-mo rank (hits/day) | +|---|--------|--------------------------------|--------------------------| +| 1 | **Raspberry Pi OS** | 7.8M boards+modules shipped FY2025 (vendor) | 154 (89) | +| 2 | **RHEL** | Enterprise standard; underlies Rocky/Alma/Oracle | 77 (171) | +| 3 | **TUXEDO OS** | Preinstalled on TUXEDO hardware; DW rank 27 | 27 (350) | +| 4 | **antiX** | DW rank 21; parent of MX Linux (in dataset) | 21 (467) | +| 5 | **Devuan** | DW rank 42; distinct systemd-free Debian niche | 42 (271) | +| 6 | **Ultramarine** | DW rank 57; Fedora desktop daily driver | 57 (209) | +| 7 | **KaOS** | DW rank 58 | 58 (206) | +| 8 | **Aurora** | DW rank 83 + 796 GitHub stars | 83 (165) | +| 9 | **Vanilla OS** | DW rank 80; 391 stars on ABRoot | 80 (168) | +| 10 | **Guix System** | GNU flagship; DW rank 179 | 179 (80) | +| 11 | **Bluefin** | 2,609 GitHub stars; DW rank 175 | 175 (81) | +| 12 | **Nitrux** | DW rank 133 | 133 (97) | +| 13 | **Aeon/Kalpa** | openSUSE-family; DW rank 124 for Aeon | 124 (106) | +| 14 | **Puppy Linux** | DW rank 37 (traffic heavy, install base unproven) | 37 (290) | +| 15 | **Tiny Core** | DW rank 81 | 81 (166) | +| 16 | **Rhino Linux** | DW rank 229; 38 stars | 229 (68) | +| 17 | **Porteus** | DW rank 223, falling | 223 (69) | +| 18 | **Nura/postmarketOS** | DW rank 235; mobile-only | 235 (67) | +| 19 | **Regata OS** | DW rank collapsed 185→334 in 6 months | 334 (44) | +| 20 | **Oracle Linux** | DW rank 255; fourth RHEL rebuild | 255 (60) | +| 21 | **Amazon Linux** | Not on DistroWatch; cloud-only | — | +| 22 | **Ubuntu Core** | Not on DistroWatch; IoT-only | — | +| 23 | **Slax** | Dormant; no rank | — | +| — | blendOS (Arch) | DW 97 (147); 778 stars — *out of scope* | 97 (147) | + +Raw DW figures (6-mo rank / hits per day, read 2026-09-28 from `https://distrowatch.com/table.php?distribution=`): redhat 77/171 · raspios 154/89 · devuan 42/271 · guix 179/80 · vanilla 80/168 · bluefin 175/81 · aurora 83/165 · ultramarine 57/209 · tuxedo 27/350 · antix 21/467 · postmarketos(Nura) 235/67 · blendos 97/147 · aeon 124/106 · nitrux 133/97 · kaos 58/206 · oracle 255/60 · regata 334/44 · rhino 229/68 · puppy 37/290 · tinycore 81/166 · slax Dormant · porteus 223/69. + +--- + +## 3. Tier recommendations (picker aimed at ordinary desktop users) + +### Tier 1 — add now +Distinct role, actively maintained, real install base, no analogue already in the dataset. + +1. **RHEL** — the commercial enterprise reference point; the dataset has its clones (Rocky, Alma, CentOS Stream) but not the original. Add with a "paid subscription" caveat. +2. **Raspberry Pi OS** — the single most-installed ARM desktop; no other dataset entry targets Pi hardware. +3. **antiX** — top-25 DW traffic, systemd-free, ultra-light; the parental project of MX Linux which *is* already listed, so the gap is conspicuous. Note 5 init systems. +4. **Devuan** — the systemd-free Debian; a real, maintained philosophy-distinct choice at DW rank 42. +5. **Ultramarine Linux** — Fedora-based daily driver with a genuine following (DW rank 57); the "Fedora but friendlier" slot. + +### Tier 2 — add if scope allows (notable, but niche, partially redundant, or vendor/mobile-bound) +- **openSUSE Aeon (+ Kalpa)** — the immutable openSUSE desktops; complements the existing Leap/Tumbleweed/MicroOS entries rather than duplicating them. +- **Vanilla OS** — immutable Debian GNOME; notable 2026 release (OS 3). +- **Bluefin** and **Aurora** — the uBlue atomic desktops; strong GitHub signal (2,609 / 796 stars) but *partly redundant* with fedora_silverblue, fedora_kinoite and bazzite already present. +- **Guix System** — distinct functional paradigm and a GNU flagship; desktop user base is small (DW 179). +- **TUXEDO OS** — real boxed users via TUXEDO hardware and DW rank 27, but bound to purchasing the vendor's machines. +- **KaOS** — independent KDE/Qt distro, DW rank 58; now dinit-based and Niri-default. +- **Nitrux** — immutable, systemd-free (OpenRC), Hyprland; interesting but small (DW 133). +- **Tiny Core Linux** — the canonical "tiny" distro (DW 81); useful for low-resource questions. +- **Puppy Linux** — long-standing lightweight option (DW 37 traffic) but chaotic multi-variant releases and no single installable product. +- **Rhino Linux** — rolling Ubuntu with Pacstall; small but distinct (DW 229). +- **openSUSE Slowroll** — better folded into the existing openSUSE entry as an option than as its own row. + +### Tier 3 — skip, with reason +- **Amazon Linux** — cloud/server only, no desktop; no DistroWatch entry. Not a desktop pick. +- **Ubuntu Core** — IoT/snap-only, no desktop; already conceptually covered by the Ubuntu entry. +- **postmarketOS / Nura** — mobile (phones/tablets) only; manual `pmbootstrap` install. +- **Slax** — DistroWatch **Dormant**, last release 2023-10-10 (~3 years). +- **Porteus** — DW rank falling (184→223), stable branch 5.0 dates from 2022; stable-vs-alpha gap is a maintenance smell. +- **Oracle Linux** — fourth RHEL rebuild with the lowest DW rank of the four (255); adds no desktop-user value over RHEL/Rocky/Alma. +- **blendOS** — Arch-based, so outside the stated non-Arch scope, and the dataset is already Arch-saturated; also requires Secure Boot disabled. + +--- + +## 4. Existing dataset entries flagged by this research + +Checked against DistroWatch status + upstream release history, read 2026-09-28. + +### Re-evaluate / remove candidates +| Entry | Finding | Evidence | +|-------|---------|----------| +| **bodhi_linux** | **DistroWatch status: Dormant.** Latest release is **Bodhi 7.0.0 (2023-08-21)**, Ubuntu 22.04 base — ~3 years without a release. Still reads "7.0.0 Standard Edition" on the download page. | https://distrowatch.com/table.php?distribution=bodhi · https://www.bodhilinux.com/download/ · https://distrowatch.com/news/distro/bodhi.xml | +| **feren_os** | **Stalled.** No release since **2025.03 (2025-04-10)**; the developer's own post concedes "there hasn't been any new releases since 2025.03" and the 10th-anniversary release slipped past its 2026 target. DW still marks "Active" but 6-mo rank has slid to **253 (60 hits/day)**. | https://medium.com/feren-os/an-update-on-the-upcoming-feren-os-releases-437e707fb22e · https://medium.com/feren-os/2025-still-relatively-uneventful-fc8b141649f5 · https://distrowatch.com/table.php?distribution=ferenos | +| **centos_stream** | **Not discontinued — but mis-scoped for this picker.** CentOS Stream 10 (2024-12-13) is the *upstream development branch* of RHEL with a 5-year lifecycle, not a stable desktop distro; snapshots continue into 2026-09. It is not "commercially dead" (CentOS **Linux** 8/7 EOL'd 2021/2024), but it is a dev/upstream target, and the dataset already carries Rocky + Alma as the stable RHEL rebuilds. | https://www.redhat.com/en/topics/linux/what-is-centos-stream · https://www.openlogic.com/blog/centos-stream-10 · https://distrowatch.com/table.php?distribution=centos | + +### Checked and confirmed healthy — keep +| Entry | Latest release (evidence) | +|-------|---------------------------| +| **solus** | 4.9 "Serenity", **2026-04-18** — https://getsol.us/2026/04/solus-4-9-released · DW Active, rank 44/269 | +| **mageia** | Mageia 10, **2026-06-29** — https://news.tuxmachines.org/n/2026/06/29/Mageia_10_Released.shtml · DW Active, rank 29/335 | +| **pclinuxos** | Rolling ISO released **2026-07-30** — https://pclosusers.com/ · DW Active, rank 30/314 (note: DW's last formal release *news* item is 2023.07, but the project publishes rolling ISOs) | +| **peppermint_os** | **2025-10-12** release plus a new Devuan-Excalibur edition (2026-06) — https://en.wikipedia.org/wiki/Peppermint_OS · https://thedistrowriteproject.blogspot.com/2026/06/peppermintos-devuan-excalibur-launched.html · DW Active, rank 78/170 | +| **deepin** | deepin 25.2.0, **2026-07-08** — https://distrowatch.com/news/distro/deepin.xml · DW Active, rank 62/202 | + +### Bonus checks on other existing entries (no action needed) +- **trisquel** — Trisquel 12.0 "Ecne", 2026-04-11, supported to 2029 — https://trisquel.info/en/wiki/versions (Active). +- **pureos** — PureOS 11 "Crimson", 2026-05-22 (DistroWatch news item, via syndicated copy) — http://en.zicos.com/tech/i32619128-Distribution-Release-PureOS-11.html ; Purism ships PureOS on its laptops per https://theregister.com/personal-tech/2026/07/01/purism-launches-supersized-16-inch-laptop-for-buyers-who-put-privacy-before-price/5264938. *(DistroWatch's own `pureos.xml` feed was not fetched directly — flagged as a secondary source.)* +- **qubes_os** — Qubes 4.3.1, 2026-06-11; 4.3.2-rc1 2026-09-18 — https://www.qubes-os.org/news/ (Active). +- **slackware** — still 15.0 (2022-02-02) with the package tree updated 2026-09-17; slow but not abandoned — https://packages.slackware.com/ and http://www.slackware.com/announce/15.0.php (DW shows a 2026-09-25 date beside "15.0"; **whether that is a re-release or a tree-update marker: unverified**). +- **kde_neon** — rolling builds through 2026-07 on Ubuntu 24.04 LTS — https://www.linuxcompatible.org/story/kde-neon-20260730-build-released-rolling-plasma-6-on-ubuntu-2404-lts (Active). +- **zorin_os** — Zorin OS 18 (2025-10-14) / 18.1, Ubuntu 24.04 LTS base — https://zorin.com/os/details (Active). + +--- + +## 5. Caveats / unverified items +- **DistroWatch page hits ≠ install base** (see header caveat). Several entries here (Puppy 290/day, Tiny Core 166/day) have traffic disproportionate to any plausible desktop install base. +- Marked **unverified** above and not guessed: Vanilla OS Secure Boot + proprietary posture; Nitrux Secure Boot + proprietary posture; KaOS proprietary posture; antiX Secure Boot + proprietary default; Regata OS Secure Boot; Rhino Secure Boot; Guix Secure Boot; Aeon/Kalpa/Slowroll direct Secure-Boot doc page; Puppy/Tiny Core/Slax/Porteus Secure Boot & proprietary defaults; Ubuntu Core device counts; TUXEDO OS user counts. +- **DistroWatch does not track** Amazon Linux, Ubuntu Core, Kalpa or Slowroll as separate entries — popularity for those is unavailable from the required source. +- **postmarketOS → Nura rename (2026-09-27)** is very recent; DistroWatch already shows the page as "Nura". Any dataset addition should use the new name. +- Two `artix`/`artix_linux` duplicate is known to the parent task and not re-litigated here. diff --git a/docs/evidence/distro-attributes-arch-strict.md b/docs/evidence/distro-attributes-arch-strict.md new file mode 100644 index 0000000..52504a5 --- /dev/null +++ b/docs/evidence/distro-attributes-arch-strict.md @@ -0,0 +1,64 @@ +# Verify proprietarySupport + Secure Boot — arch, endeavouros, manjaro, qubes_os, whonix, parrot + +Definition used: **default-path** proprietarySupport (FULL = non-free installed by default / offered by default / boot-menu driver choice / first-party driver tool / installable from repos enabled by default in a fresh install; OPTIONAL = nothing on by default but officially documented first-party opt-in; NONE = no first-party path). Firmware blobs excluded. All sources read **2026-09-28**. + +## Table + +| distro_id | field | current | proposed | confidence | evidence (URL read 2026-09-28) | +|---|---|---|---|---|---| +| arch | proprietarySupport | OPTIONAL | **FULL** | upstream-verified | https://archlinux.org/packages/extra/x86_64/nvidia-utils/ — "Repository: Extra … License(s): LicenseRef-NVIDIA-Driver-License-Agreement" | +| arch | secureBootOutOfBox | false | **false** | upstream-verified | https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot — "Disabling Secure Boot: The Secure Boot feature can be disabled via the UEFI firmware interface." (Secure Boot is a manual, user-signed-keys procedure) | +| endeavouros | proprietarySupport | OPTIONAL | **FULL** | upstream-verified | https://raw.githubusercontent.com/endeavouros-team/EndeavourOS-ISO/main/efiboot/loader/entries/archiso-x86_64-linux-nv.conf — "title EndeavourOS with NVIDIA drivers: Only RTX GPUs, Turing, or later … module_blacklist=pcspkr,nouveau,nouveau_drm nouveau.modeset=0 nvidia_drm.modeset=1" | +| endeavouros | secureBootOutOfBox | false | **false** | medium | https://forum.endeavouros.com/t/enable-or-disable-secure-boot/32384 — dalto (EOS team): "You won't be able to boot the live ISO if it is enabled. If you want to use EOS, you have to disable it." | +| manjaro | proprietarySupport | OPTIONAL | **FULL** | upstream-verified | https://wiki.manjaro.org/index.php?title=UEFI_-_Install_Guide — "use the rEFInd - Main Menu… to choose which GPU drivers you want to have installed, the open-source or proprietary" | +| manjaro | secureBootOutOfBox | false | **false** | upstream-verified | https://wiki.manjaro.org/index.php?title=UEFI_-_Install_Guide — "Check your BIOS, UEFI must be ON and Secure boot OFF." | +| qubes_os | proprietarySupport | OPTIONAL | **NONE** | medium | https://doc.qubes-os.org/en/latest/user/hardware/system-requirements.html — "Graphics: Intel integrated graphics processor (IGP) strongly recommended - Nvidia GPUs may require significant troubleshooting." | +| qubes_os | secureBootOutOfBox | false | **false** | upstream-verified | https://doc.qubes-os.org/en/latest/user/downloading-installing-upgrading/installation-guide.html — "Then, if you are on a computer using UEFI, you'll have to disable Secure Boot to allow Qubes OS to boot." | +| whonix | proprietarySupport | OPTIONAL | **FULL** | medium | https://forums.whonix.org/t/whonix-and-free-system-distribution-guidelines-gnu-fsdg/5877 — HulaHoop (Whonix KVM maintainer): "…we ship with non-free and contrib enabled and because we depend on non-free firmware in some cases like microcode security updates for physical builds." | +| whonix | secureBootOutOfBox | false | **false** | medium | https://forums.whonix.org/t/uefi-secure-boot-support/7943 — HulaHoop (Whonix KVM maintainer), still-open proposal: "enable Linux kernel gpg verification in grub and/or enable Secure Boot by default" | +| parrot | proprietarySupport | OPTIONAL | **FULL** | upstream-verified | https://raw.githubusercontent.com/ParrotSec/parrot-core/master/system_configs/apt/sources.list.d/parrot.list — "the non-free suite provides additional packages that don't comply with the Debian Free Software Guidelines. They are mostly proprietary software." + shipped default line "deb https://deb.parrot.sh/parrot echo main contrib non-free non-free-firmware" | +| parrot | secureBootOutOfBox | false | **false** | upstream-verified | https://parrotsec.org/docs/installation/manual-installation/ — "Ensure that Secure Boot and CSM (Compatibility Support Module) are disabled in your machine's UEFI settings before proceeding with the operations described below." | + +## Per-entry detail + +### arch — OPTIONAL → FULL +- The proprietary NVIDIA userspace driver package **`nvidia-utils` is in `extra`** (official repo, enabled by default in a stock `pacman.conf`): https://archlinux.org/packages/extra/x86_64/nvidia-utils/ → "Repository: Extra", "License(s): LicenseRef-NVIDIA-Driver-License-Agreement". +- Note: the package named exactly `nvidia` is **not present** in the official repos at verification time — `https://archlinux.org/packages/extra/x86_64/nvidia/` now renders **nvidia-open** (`Repository: Extra`, "Replaces: nvidia<=580.119.02-2", depends on `nvidia-utils`). Arch's own wiki NVIDIA page's Installation step installs from the official repos (https://wiki.archlinux.org/title/NVIDIA). No repo needs to be added → FULL. +- Caveat on evidence chain: the raw default `pacman.conf` that ships `[core]`/`[extra]` (https://gitlab.archlinux.org/archlinux/packaging/packages/pacman/-/raw/main/pacman.conf) could not be rendered by the available fetch tooling, so "extra is enabled by default" is asserted from the package-DB repo field + wiki install instructions, not from a quoted pacman.conf line. Does not change the verdict (the wiki's documented install path requires no repo addition). +- Secure Boot: Arch ships no Secure-Boot-signed ISO/boot chain; enabling it is a manual user-signed-keys/sbctl procedure on the wiki page. → false. + +### endeavouros — OPTIONAL → FULL +- ISO ships a **boot-menu NVIDIA entry** in the archiso image: `archiso-x86_64-linux-nv.conf` titled *"EndeavourOS with NVIDIA drivers: Only RTX GPUs, Turing, or later"*, blacklisting nouveau and setting `nvidia_drm.modeset=1`. +- First-party driver tool: `nvidia-inst` (https://github.com/endeavouros-team/PKGBUILDS/tree/master/nvidia-inst), PKGBUILD `pkgdesc="Script to install/uninstall nvidia driver packages in EndeavourOS"`, depends/recommends `nvidia-dkms`/`nvidia-open-dkms`. +- Note: the EndeavourOS docs domain linked from endeavouros.com, `discovery.endeavouros.com`, now serves unrelated (parked/hijacked) content, and `endeavouros.com/docs/...` 404s — docs could not be used as a source. ISO repo + PKGBUILDS repo (upstream) used instead. +- Secure Boot: EOS team member states the live ISO will not boot with Secure Boot on (forum, medium confidence — no wiki page exists). + +### manjaro — OPTIONAL → FULL +- Wiki UEFI Install Guide: boot menu offers "the open-source or proprietary" GPU drivers. +- Wiki Configure Graphics Cards: "Where installing the full version of Manjaro… the mhwd command will be automatically run by the GUI and CLI installer to automatically detect your graphics card and install the most appropriate driver for it. **Whether free or proprietary drivers are installed will depend on your initial choice of using free or nonfree graphics drivers to boot up**." (https://wiki.manjaro.org/index.php?title=Configure_Graphics_Cards) plus `mhwd`/Manjaro Settings Manager as first-party driver tooling and `sudo mhwd -a pci nonfree 0300`. +- Secure Boot: wiki "Check your BIOS, UEFI must be ON and Secure boot OFF." Official forum thread title also states it is "not supported OOB" (https://forum.manjaro.org/t/info-what-is-it-with-secure-boot-why-is-it-not-supported-oob/175958). + +### qubes_os — OPTIONAL → NONE +- Qubes' own docs document only free drivers for the dom0 desktop: system requirements *strongly recommend* Intel IGP and note "Nvidia GPUs may require significant troubleshooting"; the linked "how to" is a **community guide** that installs the driver via **rpmfusion** (a third-party repo the user must add) or by manually compiling NVIDIA's .run installer (https://forum.qubes-os.org/t/nvidia-proprietary-driver-installation/18987, https://doc.qubes-os.org/en/latest/user/hardware/system-requirements.html). +- No Qubes-hosted repository ships proprietary drivers → no **first-party** path; the only first-party "extra" mechanism is contributed *community* packages (`qubes-dom0-update qubes-repo-contrib`, https://doc.qubes-os.org/en/latest/user/advanced-topics/installing-contributed-packages.html), which is not a proprietary-driver path. +- Templates note (asked for): default install ships Fedora, Debian and Whonix templates. Which non-free components those templates enable by default could **not** be confirmed from an upstream primary source (qubes-builder-debian / template sources not retrievable with the available tooling) → **unverified sub-claim**. If a reviewer counts "non-free repo enabled by default inside a shipped template" as satisfying the definition, Qubes would read FULL mechanically; the desktop-edition reading (dom0 graphics, free-only) gives NONE. Flagging because this is the single biggest judgement call in this sheet (hence medium confidence). +- Secure Boot: Qubes installation guide requires Secure Boot to be **disabled** → false. + +### whonix — OPTIONAL → FULL (medium; judgement call) +- Whonix does **not** exclude non-free. Upstream statement, Whonix KVM maintainer on the official Whonix forum: "We do not conform to the FSF's strict definition of distros that 'respect your freedom' because we ship with non-free and contrib enabled…" (forums.whonix.org/t/…/5877). Corroborated by the 2016 official forum thread "adding non-freedom (contrib, non-free) APT repositories by default is it safe?" (https://forums.whonix.org/t/adding-non-freedom-contrib-non-free-apt-repositories-by-default-is-it-safe/3300), where maintainers confirm non-free is in the shipped Debian source file by default. +- The Whonix wiki only *advises against* non-free ("For system privacy, freedom and security it is strongly advised to not install proprietary, non-freedom software", https://www.whonix.org/wiki/Avoid_nonfreedom_software — page currently 500s on whonix.org; text read from the upstream wiki HTML mirror, whonix.org wiki oldid 71200); it does not remove it. +- Mechanical verdict under the definition: non-free component enabled by default → non-free packages installable from repos enabled by default → **FULL**. Practical caveat a reviewer may weight: Whonix is a VM guest, so proprietary GPU drivers are not actually usable even when installable — downgrade to OPTIONAL if the intent of the field is "usable on the desktop". Confidence: medium (defaults statement is from 2016/2018 and was not re-read from a current-release `/etc/apt/sources.list*`). +- Secure Boot: Whonix images are VirtualBox/KVM/Qubes VM images (no signed bare-metal boot chain); the wiki/forum still list "enable Secure Boot by default" as an open, unimplemented item → false, medium confidence. + +### parrot — OPTIONAL → FULL +- Default APT sources shipped by the first-party `parrot-core` package enable non-free: `deb https://deb.parrot.sh/parrot echo main contrib non-free non-free-firmware`, with the file's own comment "the non-free suite provides additional packages that don't comply with the Debian Free Software Guidelines. They are mostly proprietary software." (https://raw.githubusercontent.com/ParrotSec/parrot-core/master/system_configs/apt/sources.list.d/parrot.list). +- Official Parrot docs document the proprietary driver install from those same repos: "you can install Nvidia's official (closed source) drivers … Install the driver via the Parrot repositories: `sudo apt update && sudo apt install nvidia-driver`" (https://parrotsec.org/docs/configuration/nvidia-drivers). No driver *tool* (GUI wrapper) was found; the repo path alone satisfies FULL. +- Secure Boot: Parrot docs require it disabled for install → false. + +## Unverified / weak items +- **unverified count: 0** entries. Every row has at least one upstream/first-party URL with a directly observed quotable sentence. +- 3 rows rest on **medium** confidence, none of them "unverified": + 1. `endeavouros.secureBootOutOfBox` — official forum statement by a team member (no upstream wiki page; EOS docs domain is hijacked/404). + 2. `qubes_os.proprietarySupport` — proposal NONE rests on the dom0/desktop reading; the templates' default repo components are an **unverified sub-claim** (primary source not retrievable). + 3. `whonix.proprietarySupport` + `whonix.secureBootOutOfBox` — maintainer forum statements (Whonix wiki pages for the current release could not be loaded; whonix.org returns HTTP 500 on the relevant pages). +- Rejected as sources: SEO/aggregator pages (itsfoss, internetstories, vmme), the parked `discovery.endeavouros.com`, and the unofficial `whonixos.ink`/`parrotlinux.org` mirrors. diff --git a/docs/evidence/distro-attributes-ubuntu-family.md b/docs/evidence/distro-attributes-ubuntu-family.md new file mode 100644 index 0000000..acc6a10 --- /dev/null +++ b/docs/evidence/distro-attributes-ubuntu-family.md @@ -0,0 +1,65 @@ +# Verification: proprietarySupport + secureBootOutOfBox — Ubuntu family, Mint, LMDE, Pop!_OS, Zorin, MX, Debian + +All reads done **2026-09-28**. Definition applied: the *default-path* definition supplied with the task +(proprietarySupport = how far a DEFAULT install of the main desktop edition gets you to proprietary +drivers/codecs using only first-party means; firmware/non-free-firmware excluded). +Sources are upstream (distro site/wiki/manifest) wherever possible; forum/user-report evidence is labelled. + +## Table + +| id | field | current | proposed | confidence | primary source (read 2026-09-28) | exact quote | +|---|---|---|---|---|---|---| +| ubuntu | proprietarySupport | FULL | **FULL** | upstream-verified | https://documentation.ubuntu.com/desktop/en/latest/tutorial/install-ubuntu-desktop/ | "Here, you can install third-party software. It can improve device support and performance (for example, NVIDIA graphics drivers) and adds support for additional media formats. We recommend that you enable both options." | +| ubuntu | secureBootOutOfBox | false | **true** | upstream-verified | https://documentation.ubuntu.com/security/security-features/platform-protections/secure-boot/ | "amd64: A shim binary signed by Microsoft and a GRUB binary signed by Canonical are provided in the Ubuntu main archive as shim-signed or grub-efi-amd64-signed." | +| linux_mint | proprietarySupport | OPTIONAL | **FULL** | upstream-verified | https://www.linuxmint.com/rel_zena.php | "If your graphics card is from NVIDIA, once in Linux Mint, perform the following steps to install the NVIDIA drivers: - Run the Driver Manager - Choose the NVIDIA drivers and wait for them to be installed - Reboot the computer" | +| linux_mint | secureBootOutOfBox | false | **true** | upstream-verified | https://www.linuxmint.com/rel_virginia_whatsnew.php | "Linux Mint 21.3 comes with full support for SecureBoot and compatibility with a wider variety of BIOS and EFI implementations." | +| lmde | proprietarySupport | OPTIONAL | **FULL** | medium | https://forums.linuxmint.com/viewtopic.php?t=469122 | "Active apt repos in: /etc/apt/sources.list.d/official-package-repositories.list 1: deb http://packages.linuxmint.com gigi main upstream import backport 2: deb https://deb.debian.org/debian trixie main contrib non-free non-free-firmware" | +| lmde | secureBootOutOfBox | false | **true** | medium | https://github.com/linuxmint/linuxmint/issues/787 | "/EFI/boot/bootx64.efi* Signed by 'Microsoft Corporation UEFI CA 2011' … /EFI/boot/grubx64.efi Signed by 'Debian Secure Boot Signer 2022 - grub2'" (with caveat: same report shows an SBAT revocation failure on newer firmware) | +| kubuntu | secureBootOutOfBox | true | **true** | upstream-verified | https://cdimage.ubuntu.com/kubuntu/releases/24.04/release/kubuntu-24.04.5-desktop-amd64.manifest | "shim-signed\t1.58+15.8-0ubuntu1" / "grub-efi-amd64-signed\t1.202.5+2.12-1ubuntu7.3" | +| xubuntu | secureBootOutOfBox | true | **true** | upstream-verified | https://cdimage.ubuntu.com/xubuntu/releases/24.04/release/xubuntu-24.04.5-desktop-amd64.manifest | "grub-efi-amd64-signed\t1.202.5+2.12-1ubuntu7.3" / "shim-signed\t1.58+15.8-0ubuntu1" | +| lubuntu | secureBootOutOfBox | true | **true** | medium | https://documentation.ubuntu.com/security/security-features/platform-protections/secure-boot/ | Manifest caveat (https://cdimage.ubuntu.com/lubuntu/releases/24.04/release/lubuntu-24.04.5-desktop-amd64.manifest: no shim-signed/grub-efi-amd64-signed entry, only "snap:ubuntu-desktop-bootstrap"; official Ubuntu flavour using the Ubuntu archive where "A shim binary signed by Microsoft … [is] provided in the Ubuntu main archive as shim-signed") | +| ubuntu_budgie | secureBootOutOfBox | true | **true** | upstream-verified | https://cdimage.ubuntu.com/ubuntu-budgie/releases/24.04/release/ubuntu-budgie-24.04.5-desktop-amd64.manifest | "grub-efi-amd64-signed\t1.202.5+2.12-1ubuntu7.3" / "shim-signed\t1.58+15.8-0ubuntu1" | +| ubuntu_studio | secureBootOutOfBox | true | **true** | medium | https://documentation.ubuntu.com/security/security-features/platform-protections/secure-boot/ | Manifest caveat (https://cdimage.ubuntu.com/ubuntustudio/releases/24.04/release/ubuntustudio-24.04.5-dvd-amd64.manifest: no shim-signed/grub-efi-amd64-signed entry; official Ubuntu flavour built from the Ubuntu archive containing Microsoft-signed shim-signed) | +| pop_os | proprietarySupport | FULL | **FULL** | upstream-verified | https://system76.com/support/install-pop | "choose DOWNLOAD under the section best matching your computer (generic, NVIDIA, or Raspberry Pi)" + "sudo apt install system76-driver-nvidia" | +| pop_os | secureBootOutOfBox | false | **false** | upstream-verified | https://system76.com/support/install-pop | "Secure boot must be disabled before installing Pop!_OS." | +| zorin_os | proprietarySupport | FULL | **FULL** | upstream-verified | https://help.zorin.com/docs/hardware/activate-nvidia-drivers/ | "you can use the down/up keys to select the 'Try or install Zorin OS (modern NVIDIA drivers)' option … This uses the NVIDIA version 580 proprietary drivers"; post-install via the built-in "Additional Drivers" app | +| zorin_os | secureBootOutOfBox | false | **true** | upstream-verified | https://help.zorin.com/docs/getting-started/unable-to-boot-from-the-usb-install-drive/ | "Zorin OS should work normally when the Secure Boot feature is enabled on most modern computers (produced after 2011)." | +| mx_linux | proprietarySupport | OPTIONAL | **FULL** | upstream-verified | https://mxlinux.org/wiki/system/repos-mx-25/ | "debian.list # Debian Stable deb http://deb.debian.org/debian trixie main contrib non-free" (and mx.list "trixie main non-free") | +| mx_linux | secureBootOutOfBox | false | **false** | upstream-verified | https://mxlinux.org/wiki/help-files/mx-faqs/ | "Most users are urged to turn off Secure Boot by entering the BIOS as the machine starts to boot." | +| debian | proprietarySupport | OPTIONAL | **OPTIONAL** | upstream-verified | https://wiki.debian.org/SourcesList | "Components: main non-free-firmware" + "## If you want access to contrib and non-free components, ## add \" contrib non-free\" after every \"non-free-firmware\" in this file" | +| debian | secureBootOutOfBox | false | **true** | upstream-verified | https://wiki.debian.org/SecureBoot | "Starting with Debian version 10 (\"Buster\"), Debian supports UEFI Secure Boot by employing a small UEFI loader called shim which is signed by Microsoft and embeds Debian's signing keys." | + +## Fresh-install component / repo state (what the definition turns on) + +| distro | component state in a fresh install | source | +|---|---|---| +| ubuntu | installer "Optimise your computer" page offers third-party drivers + media formats ("We recommend that you enable both options"); `restricted` (nvidia-driver) is part of the standard Ubuntu component set | documentation.ubuntu.com install tutorial (above) | +| linux_mint | Ubuntu components **main restricted universe multiverse** in `sources.list.d` (user pastes of the default file; upstream docs do not publish it) → nvidia-driver from `restricted` available; Driver Manager (mintdrivers) shipped by default; codecs NOT installed by default (`mint-meta-codecs` opt-in) | https://forums.linuxmint.com/viewtopic.php?t=274130 ; codecs: https://www.linuxmint.com/rel_virginia.php ("apt download mint-meta-codecs") | +| lmde | `official-package-repositories.list`: `deb https://deb.debian.org/debian main contrib non-free non-free-firmware` (+ Mint repo) → Debian `non-free` (nvidia-driver) enabled by default | https://forums.linuxmint.com/viewtopic.php?t=469122 (LMDE 7), same file shape reported for LMDE 6 | +| pop_os | separate NVIDIA ISO image (branded); `system76-driver-nvidia` on the generic ISO | https://system76.com/support/install-pop | +| zorin_os | boot-menu entry installs NVIDIA proprietary drivers; "Additional Drivers" app; per user reports the sources are Ubuntu `jammy main restricted universe multiverse` + Zorin repos | https://help.zorin.com/docs/hardware/activate-nvidia-drivers/ ; repo paste: https://forum.zorin.com/t/default-repositories-zorin-os-17-core/35396 (user report) | +| mx_linux | `debian.list`: `deb http://deb.debian.org/debian trixie main contrib non-free`; `debian-stable-updates.list`: `… main contrib non-free non-free-firmware`; `mx.list`: `trixie main non-free` → non-free enabled by default | https://mxlinux.org/wiki/system/repos-mx-25/ (same for MX-23: https://mxlinux.org/wiki/system/repos-mx-23/) | +| debian | `debian.sources`: `Components: main non-free-firmware` only (non-free-firmware is firmware → out of scope for this field) | https://wiki.debian.org/SourcesList | + +## Notes / judgement calls + +1. **Ubuntu flavours (kubuntu, xubuntu, ubuntu_budgie)** — the ISO package manifest literally lists + `shim-signed` (Microsoft-signed per Ubuntu's security docs) and `grub-efi-amd64-signed`, so Secure Boot + works out of the box; proposed value = current = true. +2. **Lubuntu and Ubuntu Studio** — their 24.04.5 manifests contain **no** shim-signed/grub-efi-amd64-signed + entry (they install through the `ubuntu-desktop-bootstrap` snap), so the signed shim could not be confirmed + from the ISO contents. They are official Ubuntu flavours served from the Ubuntu archive where shim-signed + (Microsoft-signed) lives in `main`, so the answer is true at **medium** confidence, not upstream-verified. +3. **Mint / LMDE Secure Boot history** — Mint 21.2's release notes documented broken Secure Boot + ("An update in Ubuntu's shim-signed broke the compatibility of all Linux Mint (and past Ubuntu and + derivative) ISOs with secureboot … we recommend to disable secureboot") and 21.3 fixed it + ("comes with full support for SecureBoot"). LMDE has no equivalent upstream statement; its Secure Boot case + rests on it shipping Debian's Microsoft-signed shim + Debian-signed GRUB/kernel, with a known SBAT-revocation + failure reported for the LMDE 6 image — hence medium. +4. **MX Linux** — Secure Boot is *partially* possible (Debian-signed kernel on the live ISO, manual shim/grub-install + + MOK steps on the installed system) but not out of the box; MX's own FAQ tells users to turn Secure Boot off. +5. **Confidence tally** — upstream-verified: 16 field-rows; medium: 4 (lmde ps, lmde sb, lubuntu sb, ubuntu_studio sb); + **unverified: 0**. No claim above is unverified, but the 4 medium rows rest on user-posted file contents + (LMDE) or an inference from the shared Ubuntu archive (lubuntu/ubuntu_studio). +6. Not investigated (outside this task's scope): proprietarySupport for the five Ubuntu flavours, and + MX/Zorin/Mint nvidiaExperience or codec policy beyond what the default path shows. diff --git a/docs/evidence/new-distros-tier1.md b/docs/evidence/new-distros-tier1.md new file mode 100644 index 0000000..2b45b8e --- /dev/null +++ b/docs/evidence/new-distros-tier1.md @@ -0,0 +1,304 @@ +# Tier-1 missing distros — dataset entries + per-field evidence + +Generated: 2026-09-28. Values are for `src/data/distros.json` (Zod `DistroSchema`, see `src/data/distro-types.ts`). Nothing was written into /home/gionag/Development/pickyourlinux. + +Architecture vocabulary follows the existing dataset: `x86_64`, `arm64`, `x86` (only `arm64` and `x86_64` are actually consulted by `src/engine/eliminate.ts`). `armhf` is not an accepted string, so the 32-bit Raspberry Pi OS edition is not expressible. + +proprietarySupport uses the supplied DEFAULT-PATH definition (FULL = proprietary drivers/codecs installed or offered by default, or installable from repos enabled by default; OPTIONAL = documented first-party opt-in only; NONE = no first-party non-free path). Firmware blobs are excluded from that field. + + +## Omarchy (`omarchy`) + +| field | value | source | quote / note | +|---|---|---|---| +| `id` | omarchy | [en.wikipedia.org](https://en.wikipedia.org/wiki/Omarchy) | 'Omarchy is an open-source Linux distribution created by David Heinemeier Hansson ... based on Arch Linux' | +| `name` | Omarchy | [omarchy.org](https://omarchy.org/) | Page title: 'Omarchy - Beautiful, fun & agentic Linux by DHH' | +| `description` | Arch-based desktop distribution built around the Hyprland tiling compositor. | [en.wikipedia.org](https://en.wikipedia.org/wiki/Omarchy) | 'It is based on Arch Linux and uses the Hyprland tiling Wayland compositor and Quickshell desktop shell.' | +| `imageUrl` | https://upload.wikimedia.org/wikipedia/commons/c/c3/Omarchy_logo.png | [upload.wikimedia.org](https://upload.wikimedia.org/wikipedia/commons/c/c3/Omarchy_logo.png) | commons.wikimedia.org/File:Omarchy_logo.png (838x257); direct URL appears on the file description page and returns 200 image/png | +| `websiteUrl` | https://omarchy.org/ | [omarchy.org](https://omarchy.org/) | canonical site; HTTP 200 | +| `documentationUrl` | https://omarchy.org/manual/ | [omarchy.org](https://omarchy.org/manual/) | 'The Manual - Omarchy ... Welcome to Omarchy! Omarchy is an omakase Linux distribution based on Arch' (HTTP 200) | +| `forumUrl` | https://omarchy.org/discord | [omarchy.org](https://omarchy.org/discord) | first-party community link; omarchy.org/discord -> HTTP 200 (Discord invite) | +| `downloadUrl` | https://omarchy.org/#download | [omarchy.org](https://omarchy.org/) | Omarchy ISO download section on the project site; current direct payload is https://iso.omarchy.org/omarchy-4.0.4.iso (linked from the page) | +| `distroSeaUrl` | null | — | https://distrosea.com/select/omarchy/ returns HTTP 404 (calibrated: a bogus slug also 404, /select/ubuntu/ 200) -> null | +| `testDriveUrl` | null | — | no browser test-drive demo published by the project | +| `installerExperience` | GUI | [github.com](https://github.com/omacom/omarchy-iso) | 'It includes the Omarchy Configurator as a front-end to archinstall and automatically launches the Omarchy Installer after base arch has been setup.' Guided wizard, text mode | +| `maintenanceStyle` | LOW_FRICTION | [omarchy.org](https://omarchy.org/manual/updates/) | 'Omarchy and your packages are kept up to date via Update > Omarchy in the Omarchy menu ... an update installs the latest Omarchy release, runs any pending migrations ... Omarchy will actually stop a direct system upgrade' | +| `proprietarySupport` | FULL | [omarchy.org](https://omarchy.org/) | 'Omarchy comes ready for Steam, RetroArch, and a whole world of gaming. Graphics drivers and configuration, including NVIDIA on supported hardware, are sorted during installation.' -> proprietary drivers offered by default (definition clause 1) | +| `suitableForOldHardware` | true | [omarchy.org](https://omarchy.org/) | 'Even a 2011 ThinkPad X220 with 2GB of RAM can run Omarchy, with room to spare.' | +| `gamingSupport` | GOOD | [omarchy.org](https://omarchy.org/) | 'Omarchy comes ready for Steam, RetroArch, and a whole world of gaming.'; /manual/gaming/ documents Steam, Lutris, Heroic, retro/cloud gaming | +| `privacyPosture` | DEFAULT | [learn.omacom.io](https://learn.omacom.io/2/the-omarchy-manual/50/getting-started) | no privacy-hardening upstream; legacy manual security page describes firewall defaults only -> DEFAULT | +| `docsEcosystem` | GOOD | [omarchy.org](https://omarchy.org/manual/) | 47-chapter first-party manual (install, updates, gaming, troubleshooting, FAQ) -> GOOD | +| `supportedDesktops` | ["TILING"] | [omarchy.org](https://omarchy.org/manual/) | 'based on Arch, the tiling window manager Hyprland, and the desktop construction-kit Quickshell' -> TILING | +| `supportedArchitectures` | ["x86_64"] | [omarchy.org](https://omarchy.org/) | 'Vintage Macs ... Give that old Intel Mac a second life' / 'The latest laptops' -> x86_64 only; no arm media published | +| `releaseModel` | ROLLING | [en.wikipedia.org](https://en.wikipedia.org/wiki/Omarchy) | 'The distribution uses Arch Linux as its base' + Arch rolling base; 'Arch always have the latest updates' (legacy manual Security page) -> ROLLING | +| `initSystem` | SYSTEMD | [en.wikipedia.org](https://en.wikipedia.org/wiki/Omarchy) | Arch base ships systemd -> SYSTEMD | +| `packageManager` | PACMAN | [omarchy.org](https://omarchy.org/manual/updates/) | 'Omarchy itself is installed as regular pacman packages from the Omarchy Package Repository' -> PACMAN | +| `primaryUseCase` | DESKTOP | [en.wikipedia.org](https://en.wikipedia.org/wiki/Omarchy) | 'intended primarily as a developer environment ... with its own installation image and package repository' -> DESKTOP | +| `laptopFriendly` | true | [omarchy.org](https://omarchy.org/) | 'Laptops like the latest Dell XPS make amazing Omarchy machines, with our core team helping the newest hardware work properly.' | +| `immutable` | false | [learn.omacom.io](https://learn.omacom.io/2/the-omarchy-manual/50/getting-started) | install uses 'full-disk encryption' but a normal read-write root ('Manual install ... editing config files') -> not immutable | +| `lastVerified` | 2026-09-28 | — | researched 2026-09-28 | +| `verificationMethod` | MANUAL | — | all values read from upstream pages on 2026-09-28 | +| `secureBootOutOfBox` | false | [learn.omacom.io](https://learn.omacom.io/2/the-omarchy-manual/50/getting-started) | 'You must turn off Secure Boot and/or TPM in the BIOS. You have to turn these off to be able to install Omarchy.' -> false | +| `nvidiaExperience` | OK | [omarchy.org](https://omarchy.org/) | 'Graphics drivers and configuration, including NVIDIA on supported hardware, are sorted during installation.' -> OK | + +**Unverified / inferred / judgement calls** + +- installerExperience — the ISO ships the 'Omarchy Configurator' (a guided text-mode wizard front-end to archinstall), so GUI is a judgement call on user effort, not pixels; MANUAL is the alternative. proprietarySupport — FULL rests on one sentence ('Graphics drivers ... including NVIDIA ... sorted during installation'); the plain-Arch reading would be OPTIONAL. nvidiaExperience — same sentence; OK chosen over GOOD because of the hedge 'on supported hardware'. maintenanceStyle — LOW_FRICTION inferred from the menu-driven updater + snapshots + blocked direct pacman; no upstream labatement of 'low friction'. +- forumUrl — Omarchy has no web forum; the project's community space is Discord, so forumUrl points at the first-party redirect https://omarchy.org/discord. + +## SteamOS (`steamos`) + +| field | value | source | quote / note | +|---|---|---|---| +| `id` | steamos | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'SteamOS' article; official site store.steampowered.com/steamos | +| `name` | SteamOS | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'SteamOS is a gaming-focused operating system released by Valve' | +| `description` | Valve's Arch-based operating system for gaming handhelds and consoles. | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'Gaming-focused ... Based on Arch Linux and built specifically to support Steam, it is the default Linux distribution for Valve's line of gaming hardware' | +| `imageUrl` | https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/SteamOS_wordmark.svg/500px-SteamOS_wordmark.svg.png | [upload.wikimedia.org](https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/SteamOS_wordmark.svg/500px-SteamOS_wordmark.svg.png) | commons.wikimedia.org/File:SteamOS_wordmark.svg thumb (500px PNG) -> HTTP 200 image/png | +| `websiteUrl` | https://store.steampowered.com/steamos | [store.steampowered.com](https://store.steampowered.com/steamos) | 'Official website \| store.steampowered.com/steamos'; HTTP 200 | +| `documentationUrl` | https://partner.steamgames.com/doc/steamhardware/steamdeck | [partner.steamgames.com](https://partner.steamgames.com/doc/steamhardware/steamdeck) | Steamworks documentation for SteamOS/Steam Deck (partner.steamgames.com/doc/steamdeck redirects here); HTTP 200. Chosen because Valve has no single docs portal | +| `forumUrl` | https://steamcommunity.com/app/1675200/discussions/ | [steamcommunity.com](https://steamcommunity.com/app/1675200/discussions/) | Steam Deck/SteamOS app discussion hub; HTTP 200 | +| `downloadUrl` | https://store.steampowered.com/steamos/download/?ver=steamdeck | [store.steampowered.com](https://store.steampowered.com/steamos/download/?ver=steamdeck) | official SteamOS/recovery image download page; HTTP 200 | +| `distroSeaUrl` | null | — | https://distrosea.com/select/steamos/ and /select/steam-os/ both HTTP 404 -> null | +| `testDriveUrl` | null | — | no browser demo published | +| `installerExperience` | MANUAL | [help.steampowered.com](https://help.steampowered.com/en/faqs/view/65B4-2AA3-5F37-4227) | 'Currently, the only devices officially "Powered by SteamOS" are Steam Deck, Steam Machine and Legion Go S' + 'For most non-Steam Deck devices, you will need to disable Secure Boot on your device in order to re-image from a USB drive' -> no general installer; MANUAL | +| `maintenanceStyle` | LOW_FRICTION | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'dual-mode ... a console-style mode ... and a KDE Plasma desktop environment'; updates are system-managed image updates ('You can download the updates yourself in the System Settings on the Steam Deck') -> LOW_FRICTION | +| `proprietarySupport` | FULL | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'Source model \| Open source base system with closed source components'; 'The core operating system is free and open-source software, while the Steam client remains proprietary.' -> shipped by default | +| `suitableForOldHardware` | false | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'built specifically to support Steam ... Valve's line of gaming hardware' -> modern AMD hardware only | +| `gamingSupport` | GOOD | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'Gaming-focused'; incorporates Proton: 'enabling many Windows games to run on Linux' | +| `privacyPosture` | DEFAULT | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | no privacy-hardening claims upstream; ships the Steam client with its accounts/telemetry -> DEFAULT | +| `docsEcosystem` | OK | [partner.steamgames.com](https://partner.steamgames.com/doc/steamhardware/steamdeck) | docs split across Steam Support, Steamworks and gitlab.steamos.cloud -> OK | +| `supportedDesktops` | ["KDE"] | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'Default user interface \| Steam (gaming mode) / KDE Plasma (desktop mode)' -> KDE | +| `supportedArchitectures` | ["x86_64", "arm64"] | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'Supported platforms \| x86-64, ARM64' (Steam Frame is Arm64 and runs SteamOS) -> x86_64 + arm64 | +| `releaseModel` | ROLLING | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'uses a rolling release model that Valve felt was better suited for hardware support' -> ROLLING | +| `initSystem` | SYSTEMD | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | Arch base ships systemd -> SYSTEMD | +| `packageManager` | PACMAN | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'Package manager \| APT (versions 1.0 and 2.0) / Flatpak, Pacman (version 3.0)' -> PACMAN | +| `primaryUseCase` | DESKTOP | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | 'Marketing target \| Gaming' with a desktop mode -> DESKTOP | +| `laptopFriendly` | true | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | handheld-first design (Steam Deck) -> true | +| `immutable` | true | [en.wikipedia.org](https://en.wikipedia.org/wiki/SteamOS) | image-based OS whose root is read-only by design; task constraint states SteamOS = true | +| `lastVerified` | 2026-09-28 | — | researched 2026-09-28 | +| `verificationMethod` | MANUAL | — | upstream pages read on 2026-09-28 | +| `secureBootOutOfBox` | false | [help.steampowered.com](https://help.steampowered.com/en/faqs/view/65B4-2AA3-5F37-4227) | 'For most non-Steam Deck devices, you will need to disable Secure Boot on your device in order to re-image from a USB drive' -> no signed default boot path -> false | +| `nvidiaExperience` | HARD | [help.steampowered.com](https://help.steampowered.com/en/faqs/view/65B4-2AA3-5F37-4227) | 'compatibility with other AMD powered PCs (handhelds and desktops) has been improved' - NVIDIA is unsupported -> HARD | + +**Unverified / inferred / judgement calls** + +- installerExperience — SteamOS has no general-purpose installer: Valve ships pre-imaged devices plus a recovery image, and PC installs are documented as manual. MANUAL chosen; no upstream wording confirms the GUI/MANUAL split. proprietarySupport — FULL inferred from upstream 'open source base system with closed source components' (ships the closed-source Steam client); the field definition talks about drivers/codecs, so this is a boundary call. documentationUrl — Valve publishes no single SteamOS documentation portal; the Steamworks Steam Deck page was chosen (redirect target of partner.steamgames.com/doc/steamdeck). The Steam Support FAQ .../65B4-2AA3-5F37-4227 is the user-facing alternative. docsEcosystem — OK is inferred from docs being split across Steam Support, Steamworks and gitlab.steamos.cloud; not measured. + +## Red Hat Enterprise Linux (`rhel`) + +| field | value | source | quote / note | +|---|---|---|---| +| `id` | rhel | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'Red Hat Enterprise Linux' article; official site redhat.com | +| `name` | Red Hat Enterprise Linux | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'Red Hat Enterprise Linux (RHEL) is a commercial Linux distribution developed by Red Hat.' | +| `description` | Commercial enterprise Linux distribution from Red Hat. | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'released in server versions for x86-64, Power ISA, ARM64, and IBM Z and a desktop version for x86-64' | +| `imageUrl` | https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Red_Hat_Enterprise_Linux_logo.svg/500px-Red_Hat_Enterprise_Linux_logo.svg.png | [upload.wikimedia.org](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Red_Hat_Enterprise_Linux_logo.svg/500px-Red_Hat_Enterprise_Linux_logo.svg.png) | commons.wikimedia.org/File:Red_Hat_Enterprise_Linux_logo.svg thumb (500px PNG) -> HTTP 200 image/png | +| `websiteUrl` | https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux | [www.redhat.com](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux) | 'Official website \| redhat.com/rhel/'; HTTP 200 | +| `documentationUrl` | https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/ | [docs.redhat.com](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/) | Red Hat product documentation; HTTP 403 to curl (bot wall) but loads in a real browser as 'Red Hat Enterprise Linux \| 10 \| Red Hat Documentation'. Verified content at https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/managing_monitoring_and_updating_the_kernel/signing-a-kernel-and-modules-for-secure-boot | +| `forumUrl` | https://access.redhat.com/discussions | [access.redhat.com](https://access.redhat.com/discussions) | official Red Hat discussion space; HTTP 200 | +| `downloadUrl` | https://developers.redhat.com/products/rhel/download | [developers.redhat.com](https://developers.redhat.com/products/rhel/download) | 'Download Red Hat Enterprise Linux (RHEL)' on developers.redhat.com (free developer subscription); HTTP 403 to curl, HTTP 200 in a real browser | +| `distroSeaUrl` | null | — | https://distrosea.com/select/rhel/, /redhat/, /red-hat-enterprise-linux/ all HTTP 404 -> null | +| `testDriveUrl` | null | — | no browser demo published | +| `installerExperience` | GUI | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | installer is Anaconda; RHEL 10 screenshot captioned 'RHEL 10.0, showing its default desktop environment (GNOME 47)' -> GUI | +| `maintenanceStyle` | HANDS_ON | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'Update method \| DNF or bootc', three predictable lifecycle phases ('full support, maintenance support, and extended life phase') -> HANDS_ON, consistent with the rocky_linux/almalinux/centos_stream entries in distros.json | +| `proprietarySupport` | OPTIONAL | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'License \| Various free software licenses, plus proprietary binary blobs' (firmware, excluded from this field); NVIDIA needs third-party repos -> OPTIONAL | +| `suitableForOldHardware` | false | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'Marketing target \| Commercial market (servers, mainframes, supercomputers, workstations)' and x86-64-v3 baseline for the latest release -> false | +| `gamingSupport` | NONE | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | no gaming stack; server/workstation focus -> NONE | +| `privacyPosture` | DEFAULT | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | no privacy-hardening claims upstream -> DEFAULT | +| `docsEcosystem` | EXCELLENT | [docs.redhat.com](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/) | extensive product documentation, install/config guides and knowledge base -> EXCELLENT | +| `supportedDesktops` | ["GNOME"] | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'Default user interface \| GNOME Shell, Bash' -> GNOME (note: the existing rocky_linux/almalinux/centos_stream entries use OTHER) | +| `supportedArchitectures` | ["x86_64", "arm64"] | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'Supported platforms \| x86-64 (x86-64-v3 for latest), ARM64, IBM Z, IBM Power Systems' -> x86_64 + arm64 | +| `releaseModel` | FIXED | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | '10.2 / May 20, 2026', '9.8', '8.10' majorminor point releases -> FIXED | +| `initSystem` | SYSTEMD | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | RHEL uses systemd -> SYSTEMD | +| `packageManager` | DNF | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'Update method \| DNF or bootc'; 'Package manager \| RPM' -> DNF | +| `primaryUseCase` | SERVER | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | 'Marketing target \| Commercial market (servers, mainframes, supercomputers, workstations)' -> SERVER | +| `laptopFriendly` | false | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | server/workstation target; no laptop-specific support upstream -> false | +| `immutable` | false | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | standard read-write install (image mode is opt-in) -> false | +| `lastVerified` | 2026-09-28 | — | researched 2026-09-28 | +| `verificationMethod` | MANUAL | — | upstream pages read on 2026-09-28 | +| `secureBootOutOfBox` | true | [docs.redhat.com](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/managing_monitoring_and_updating_the_kernel/signing-a-kernel-and-modules-for-secure-boot) | 'The shim file contains the Red Hat public key Red Hat Secure Boot (CA key 1) to authenticate the GRUB boot loader and the kernel.' -> signed shim + kernel by default -> true | +| `nvidiaExperience` | HARD | [en.wikipedia.org](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) | no NVIDIA driver in the default repos; requires third-party repos -> HARD | + +**Unverified / inferred / judgement calls** + +- maintenanceStyle — HANDS_ON chosen for consistency with the existing rocky_linux / almalinux / centos_stream entries in distros.json; RHEL is arguably LOW_FRICTION for an entitled subscriber. proprietarySupport — OPTIONAL chosen for the same sibling-consistency reason; RHEL ships proprietary firmware (excluded from the field) and NVIDIA needs third-party repos. supportedDesktops — ['GNOME'] taken from upstream (GNOME Shell is the default UI), which DIFFERS from the existing rocky_linux/almalinux/centos_stream entries that use ['OTHER']; flagged rather than copied. laptopFriendly / suitableForOldHardware — false; inferred from the server/workstation marketing target, and the x86-64-v3 requirement for RHEL 10 narrows old hardware further. +- documentationUrl / downloadUrl — both return HTTP 403 to non-browser clients (Red Hat bot wall) but load in a real browser; see the URL table. + +## Raspberry Pi OS (`raspios`) + +| field | value | source | quote / note | +|---|---|---|---| +| `id` | raspios | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | 'Raspberry Pi OS' article; official page raspberrypi.com/software/operating-systems/ | +| `name` | Raspberry Pi OS | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | 'Raspberry Pi OS is a Unix-like operating system developed for the Raspberry Pi line of single-board computers.' | +| `description` | Debian-based operating system for Raspberry Pi single-board computers. | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | 'Based on Debian, a Linux distribution, it is maintained by Raspberry Pi Holdings and optimized for the Pi's hardware' | +| `imageUrl` | https://upload.wikimedia.org/wikipedia/commons/c/c8/Raspberrry_pi_logo.png | [upload.wikimedia.org](https://upload.wikimedia.org/wikipedia/commons/c/c8/Raspberrry_pi_logo.png) | commons.wikimedia.org/File:Raspberrry_pi_logo.png (512x512 Raspberry Pi mark); direct URL appears 23x on the file page, HTTP 200. Official-site alternative: https://assets.raspberrypi.com/static/logo-663a71244b0e42ebedb0ddd72abcae73.png (declared as the org logo in the page's JSON-LD) | +| `websiteUrl` | https://www.raspberrypi.com/software/ | [www.raspberrypi.com](https://www.raspberrypi.com/software/) | 'Raspberry Pi OS is our official operating system ... View all download options'; HTTP 200 to the content extractor (Cloudflare challenge to curl/headless) | +| `documentationUrl` | https://www.raspberrypi.com/documentation/computers/os.html | [www.raspberrypi.com](https://www.raspberrypi.com/documentation/computers/os.html) | 'Raspberry Pi OS is the official operating system (OS) for Raspberry Pi computers and is free.' HTTP 200 via extractor | +| `forumUrl` | https://forums.raspberrypi.com/ | [forums.raspberrypi.com](https://forums.raspberrypi.com/) | 'Board index ... General discussion, Announcements, Using the Raspberry Pi'; HTTP 200 via extractor | +| `downloadUrl` | https://www.raspberrypi.com/software/operating-systems/ | [www.raspberrypi.com](https://www.raspberrypi.com/software/operating-systems/) | 'Raspberry Pi OS downloads' page; HTTP 200 | +| `distroSeaUrl` | null | — | https://distrosea.com/select/raspberry-pi-os/, /raspios/, /raspberry-pi/, /raspberrypi/ all HTTP 404 -> null | +| `testDriveUrl` | null | — | no browser demo published | +| `installerExperience` | GUI | [www.raspberrypi.com](https://www.raspberrypi.com/documentation/computers/os.html) | 'Raspberry Pi OS is installed using Raspberry Pi Imager, available for Windows, Mac, and Linux.' -> GUI image-writing tool | +| `maintenanceStyle` | LOW_FRICTION | [www.raspberrypi.com](https://www.raspberrypi.com/documentation/computers/os.html) | 'We recommend using APT to keep your Raspberry Pi software up to date ... sudo apt full-upgrade' with vendor-managed kernel/firmware -> LOW_FRICTION | +| `proprietarySupport` | FULL | [gist.github.com](https://gist.github.com/jauderho/5f73f16cac28669e56608be14c41006c) | stock Raspberry Pi OS /etc/apt/sources.list: 'deb http://deb.debian.org/debian trixie main contrib non-free non-free-firmware' -> non-free enabled by default -> FULL (definition clause 2). Caveat: libwidevinecdm0 (Widevine, proprietary) is a documented opt-in 'sudo apt install libwidevinecdm0' and firmware is excluded from the field | +| `suitableForOldHardware` | false | [www.raspberrypi.com](https://www.raspberrypi.com/documentation/computers/os.html) | the 'older hardware' upstream talks about is older Raspberry Pi models ('useful for ... older Raspberry Pi models, such as the original Raspberry Pi, Raspberry Pi 2, and Raspberry Pi Zero'), not older x86_64 machines -> false | +| `gamingSupport` | LIMITED | [www.raspberrypi.com](https://www.raspberrypi.com/documentation/computers/os.html) | no gaming stack shipped (the desktop image lists Chromium/Firefox, VLC, Thonny) -> LIMITED | +| `privacyPosture` | DEFAULT | [www.raspberrypi.com](https://www.raspberrypi.com/documentation/computers/os.html) | no privacy-hardening claims upstream -> DEFAULT | +| `docsEcosystem` | EXCELLENT | [www.raspberrypi.com](https://www.raspberrypi.com/documentation/computers/os.html) | complete first-party documentation site (os, config, GPIO, Imager) -> EXCELLENT | +| `supportedDesktops` | ["OTHER"] | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | 'Default user interface \| labwc (Wayland-based)' - a Pi desktop, not one of the listed DEs -> OTHER | +| `supportedArchitectures` | ["arm64"] | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | 'Supported platforms \| armhf, aarch64' and 'available in both 64-bit and 32-bit versions'. Only 'arm64' is used: the codebase vocabulary (src/engine/eliminate.ts) recognises x86_64 / arm64 and 'armhf' is not an accepted string | +| `releaseModel` | FIXED | [www.raspberrypi.com](https://www.raspberrypi.com/documentation/computers/os.html) | 'Raspberry Pi follows a staggered version of the Debian release cycle. Releases happen roughly once every two years.' -> FIXED | +| `initSystem` | SYSTEMD | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | Debian-based with systemd -> SYSTEMD | +| `packageManager` | APT | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | 'Package manager \| APT, dpkg' -> APT | +| `primaryUseCase` | BOTH | [www.raspberrypi.com](https://www.raspberrypi.com/documentation/computers/os.html) | 'Raspberry Pi OS Lite (a command-line-only version without a graphical desktop). This edition is useful for headless servers, embedded systems' alongside the desktop editions -> BOTH | +| `laptopFriendly` | false | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | an SBC/kiosk OS, not laptop hardware support (no upstream laptop claim) -> false | +| `immutable` | false | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | read-write root, APT upgrade path -> false | +| `lastVerified` | 2026-09-28 | — | researched 2026-09-28 | +| `verificationMethod` | MANUAL | — | upstream pages read on 2026-09-28 | +| `secureBootOutOfBox` | false | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | no UEFI Secure Boot path in the default Raspberry Pi firmware; no upstream claim -> false | +| `nvidiaExperience` | UNKNOWN | [en.wikipedia.org](https://en.wikipedia.org/wiki/Raspberry_Pi_OS) | no NVIDIA GPU support on Raspberry Pi hardware; not documented -> UNKNOWN | + +**Unverified / inferred / judgement calls** + +- proprietarySupport — MOST UNCERTAIN FIELD. FULL is taken from the definition's second clause (proprietary packages installable from repos enabled by default): stock Raspberry Pi OS sources.list contains 'main contrib non-free non-free-firmware'. The OPTIONAL reading applies if you discount the enabled-by-default non-free component and note that Widevine (libwidevinecdm0) is a documented opt-in apt install and firmware is excluded from the field. installerExperience — GUI means Raspberry Pi Imager writes a prebuilt image; there is no on-device OS installer, so GUI is a proxy for 'simple installer'. nvidiaExperience — UNKNOWN (no NVIDIA path on Raspberry Pi hardware); not documented either way. supportedArchitectures — only 'arm64' is used because the codebase's architecture vocabulary is x86_64 / arm64 / x86 (see src/engine/eliminate.ts) and 'armhf' is NOT an accepted string. The 32-bit armhf edition therefore cannot be expressed and is deliberately omitted. primaryUseCase — BOTH because upstream documents a Lite (headless/server) edition alongside the desktop edition. + +## antiX (`antix`) + +| field | value | source | quote / note | +|---|---|---|---| +| `id` | antix | [antixlinux.com](https://antixlinux.com/) | official site antixlinux.com; 'antiX Magic in an environment suitable for old and new computers' | +| `name` | antiX | [antixlinux.com](https://antixlinux.com/about/) | 'antiX is a fast, lightweight and easy to install systemd-free and elogind-free linux live CD distribution based on Debian Stable' | +| `description` | Lightweight Debian-based distribution that runs without systemd. | [antixlinux.com](https://antixlinux.com/about/) | 'fast, lightweight and easy to install systemd-free and elogind-free linux live CD distribution based on Debian Stable for Intel-AMD x86 compatible systems' | +| `imageUrl` | https://upload.wikimedia.org/wikipedia/commons/e/ec/AntiX_logo.png | [upload.wikimedia.org](https://upload.wikimedia.org/wikipedia/commons/e/ec/AntiX_logo.png) | commons.wikimedia.org/File:AntiX logo.png (138x111), only file in Category:AntiX logos; HTTP 200 image/png | +| `websiteUrl` | https://antixlinux.com/ | [antixlinux.com](https://antixlinux.com/) | HTTP 200 | +| `documentationUrl` | https://robin-antix.codeberg.page/antiX-FAQ/antiX26/ | [antixlinux.com](https://antixlinux.com/about/) | 'Useful documentation: antiX-26 FAQ' -> https://robin-antix.codeberg.page/antiX-FAQ/antiX26/ (HTTP 200); MX wiki/manual are additional first-party docs | +| `forumUrl` | https://www.antixforum.com/ | [www.antixforum.com](https://www.antixforum.com/) | 'antiX-forum - Forum for users of antiX Linux'; HTTP 403 to curl (Cloudflare challenge) but content served to the extractor | +| `downloadUrl` | https://antixlinux.com/download/ | [antixlinux.com](https://antixlinux.com/download/) | 'antiX-26 - Released 21 March 2026 ... antiX-26 includes 5 init systems'; ISO links to sourceforge.net/projects/antix-linux/files/Final/antiX-26/; HTTP 200 | +| `distroSeaUrl` | https://distrosea.com/select/antix/ | [distrosea.com](https://distrosea.com/select/antix/) | HTTP 200 (calibrated against a bogus slug returning 404) | +| `testDriveUrl` | null | — | no browser demo published by the project | +| `installerExperience` | GUI | [antixlinux.com](https://antixlinux.com/antix-26-released/) | 'Freja for default wallpaper ... AK-47 for further impressive work on the installer's extended features'; FAQ: 'at the live boot menu, type 3, login as root and type cli-installer' (CLI installer documented as the exception) -> GUI by default | +| `maintenanceStyle` | LOW_FRICTION | [robin-antix.codeberg.page](https://robin-antix.codeberg.page/antiX-FAQ/antiX26/) | 'antiX is set up using Debian Stable repositories by default ... antiX recommends using apt update followed by apt dist-upgrade', with Control Centre -> antiX Updater -> LOW_FRICTION (analogous to the mx_linux entry) | +| `proprietarySupport` | OPTIONAL | [robin-antix.codeberg.page](https://robin-antix.codeberg.page/antiX-FAQ/antiX26/) | OPTIONAL: 'You may need to install libdvdcss2 and maybe some codecs by enabling the deb-multimedia repository'; Package Installer has a 'Non-free' category. Counter-evidence in the same FAQ: 'The following packages are installed from the trixie-backports repo ... broadcom-sta-dkms, firmware-linux-nonfree' (broadcom-sta-dkms is a non-free driver) -> see uncertainty note | +| `suitableForOldHardware` | true | [antixlinux.com](https://antixlinux.com/about/) | 'It should run on most computers, ranging from 256MB old systems with pre-configured swap to the latest powerful boxes. 512MB RAM is the recommended minimum' | +| `gamingSupport` | NONE | [antixlinux.com](https://antixlinux.com/antix-26-released/) | shipped stack is xmms, celluloid/mpv/Xine, LibreOffice, Firefox ESR - no gaming layer; 32/64-bit packaging -> NONE (inferred) | +| `privacyPosture` | DEFAULT | [antixlinux.com](https://antixlinux.com/about/) | 'systemd-free and elogind-free' but no privacy hardening claims (no Tor/privacy tooling) -> DEFAULT | +| `docsEcosystem` | OK | [robin-antix.codeberg.page](https://robin-antix.codeberg.page/antiX-FAQ/antiX26/) | official FAQ + MX wiki/manual, community wiki; no single docs portal -> OK (inferred) | +| `supportedDesktops` | ["OTHER"] | [antixlinux.com](https://antixlinux.com/antix-26-released/) | 'We continue using window managers ... IceWM (default), fluxbox, jwm and the tiling window manager - herbstluftwm' -> OTHER | +| `supportedArchitectures` | ["x86_64", "x86"] | [antixlinux.com](https://antixlinux.com/antix-26-released/) | 'There are 2 flavours ... for 64bit and 32bit arch' -> x86_64 + x86 | +| `releaseModel` | FIXED | [robin-antix.codeberg.page](https://robin-antix.codeberg.page/antiX-FAQ/antiX26/) | 'antiX is based on Debian ... keep to the Debian Stable/Trixie repositories' with numbered point releases (antiX-26) -> FIXED; FAQ notes a rolling option only if the user enables testing/sid | +| `initSystem` | RUNIT | [antixlinux.com](https://antixlinux.com/antix-26-released/) | 'antiX-26 ... includes 5 init systems. (runit, sysVinit, dinit, s6-rc and s6-66). Default init=runit.' -> RUNIT | +| `packageManager` | APT | [antixlinux.com](https://antixlinux.com/about/) | 'based on Debian Stable' + FAQ uses apt/synaptic -> APT | +| `primaryUseCase` | DESKTOP | [antixlinux.com](https://antixlinux.com/about/) | 'The goal of antiX is to provide a light, but fully functional and flexible free operating system' for desktop old/new computers -> DESKTOP | +| `laptopFriendly` | true | [antixlinux.com](https://antixlinux.com/about/) | targets old laptops/desktops ('So don't throw away that old computer yet!'), runs live from USB -> true | +| `immutable` | false | [robin-antix.codeberg.page](https://robin-antix.codeberg.page/antiX-FAQ/antiX26/) | standard read-write install with remaster/snapshot tools -> false | +| `lastVerified` | 2026-09-28 | — | researched 2026-09-28 | +| `verificationMethod` | MANUAL | — | upstream pages read on 2026-09-28 | +| `secureBootOutOfBox` | false | [robin-antix.codeberg.page](https://robin-antix.codeberg.page/antiX-FAQ/antiX26/) | sysvinit/runit distro with no signed shim path documented -> false | +| `nvidiaExperience` | OK | [antixlinux.com](https://antixlinux.com/antix-26-released/) | 'ddm-mx - install nvidia drivers' shipped tool; FAQ has a 'How to Setup nvidia graphics drivers?' section -> OK | + +**Unverified / inferred / judgement calls** + +- proprietarySupport — DISPUTED. OPTIONAL chosen because antiX's own FAQ routes all non-free acquisition through first-party opt-in tooling (Package Installer > Non-free, deb-multimedia for codecs, Repo Manager). Counter-evidence: the same FAQ says broadcom-sta-dkms (a non-free driver) and firmware-linux-nonfree are 'installed from the trixie-backports repo', which would make the entry FULL under the definition's first clause. Not resolved from upstream sources. maintenanceStyle — LOW_FRICTION chosen by analogy with the sibling mx_linux entry; antiX is an update-by-terminal distro (apt update && apt dist-upgrade) with a GUI updater, so HANDS_ON is arguable. gamingSupport — NONE inferred (no gaming stack shipped, old-hardware focus); antiX can install Steam from Debian, so LIMITED is arguable. documentationUrl — antiX has no single docs portal; the official antiX-26 FAQ was used. docsEcosystem OK likewise inferred. nvidiaExperience — OK because antiX ships ddm-mx ('install nvidia drivers'); no upstream statement of how well it works. + +## Devuan (`devuan`) + +| field | value | source | quote / note | +|---|---|---|---| +| `id` | devuan | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | 'Devuan' article; official site www.devuan.org | +| `name` | Devuan | [www.devuan.org](https://www.devuan.org/) | 'Welcome to Devuan ... Devuan GNU+Linux is a fork of Debian without systemd' | +| `description` | Debian fork that uses sysvinit instead of systemd by default. | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | 'Devuan is an open source, Debian-based Linux distribution that aims to maintain compatibility with other init systems and avoid lock-in by systemd.' | +| `imageUrl` | https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Devuan-logo.svg/500px-Devuan-logo.svg.png | [upload.wikimedia.org](https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Devuan-logo.svg/500px-Devuan-logo.svg.png) | commons.wikimedia.org/File:Devuan-logo.svg thumb (500px PNG) -> HTTP 200 image/png | +| `websiteUrl` | https://www.devuan.org/ | [www.devuan.org](https://www.devuan.org/) | HTTP 200 | +| `documentationUrl` | https://www.devuan.org/os/install | [www.devuan.org](https://www.devuan.org/os/install) | www.devuan.org/os/documentation/ returns HTTP 404 upstream, so the install/documentation index was used: 'Please read the relevant documentation (/os/install) in full'; HTTP 200 | +| `forumUrl` | https://dev1galaxy.org/ | [dev1galaxy.org](https://dev1galaxy.org/) | Devuan community forum (linked from /os/community); HTTP 200 | +| `downloadUrl` | https://www.devuan.org/get-devuan | [www.devuan.org](https://www.devuan.org/get-devuan) | 'Devuan has http, https, ftp and rsync iso mirrors available as well as torrent and magnet link options.'; HTTP 200 | +| `distroSeaUrl` | https://distrosea.com/select/devuan/ | [distrosea.com](https://distrosea.com/select/devuan/) | HTTP 200 (calibrated against a bogus slug returning 404) | +| `testDriveUrl` | null | — | no browser demo published | +| `installerExperience` | GUI | [files.devuan.org](https://files.devuan.org/devuan_daedalus/desktop-live/README_desktop-live.txt) | 'This Devuan live-iso comes with Refracta Installer' / 'refractainstaller-yad # Starts the graphical installer.'; the desktop-live install guide is titled 'Live Install Guide ... uses the graphical desktop-live installer' -> GUI | +| `maintenanceStyle` | HANDS_ON | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | Debian-stable point releases ('Latest release \| 6.1'), user-managed apt/troubleshooting and no systemd-based automation -> HANDS_ON (consistent with the debian entry) | +| `proprietarySupport` | OPTIONAL | [www.devuan.org](https://www.devuan.org/get-devuan) | 'Firmware is installed but can easily be removed ... The "expert install" allows user to opt out of firmware installation' (firmware excluded from this field); non-free drivers need the Debian non-free components enabled as on Debian -> OPTIONAL (inferred) | +| `suitableForOldHardware` | true | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | 'Supported platforms \| i386, amd64, ARM, ppc64el' - 32-bit i386 media keeps very old x86 hardware viable -> true (inferred from i386 media, not an explicit low-RAM claim) | +| `gamingSupport` | LIMITED | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | Debian-derived, no gaming layer shipped by the project -> LIMITED | +| `privacyPosture` | DEFAULT | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | no privacy-hardening claims upstream -> DEFAULT | +| `docsEcosystem` | OK | [www.devuan.org](https://www.devuan.org/os/install) | first-party install guides + releases pages, otherwise pointing at Debian docs -> OK (inferred) | +| `supportedDesktops` | ["XFCE"] | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | 'Default user interface \| Xfce' -> XFCE | +| `supportedArchitectures` | ["x86_64", "x86", "arm64"] | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | 'Supported platforms \| i386, amd64, ARM, ppc64el'; get-devuan lists 'Installation Media for amd64, arm64, armel, armhf, and ppc64el' -> x86_64 + x86 + arm64 | +| `releaseModel` | FIXED | [www.devuan.org](https://www.devuan.org/os/releases) | 'Excalibur 6 is the current stable release' with numbered point releases -> FIXED | +| `initSystem` | OTHER | [www.devuan.org](https://www.devuan.org/os/init-freedom) | 'Devuan uses the sysvinit init system by default.' (openrc and runit are alternates) -> OTHER (sysvinit has no enum value) | +| `packageManager` | APT | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | 'Package manager \| APT (dpkg)' -> APT | +| `primaryUseCase` | BOTH | [www.devuan.org](https://www.devuan.org/get-devuan) | 'netinstall: Preferred by more experienced users to create servers, minimal systems but also includes choice of several Desktop Environments' -> BOTH | +| `laptopFriendly` | true | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | Debian-derived with full desktop ISOs; no laptop-specific claim upstream -> true (inferred) | +| `immutable` | false | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | standard read-write Debian-style install -> false | +| `lastVerified` | 2026-09-28 | — | researched 2026-09-28 | +| `verificationMethod` | MANUAL | — | upstream pages read on 2026-09-28 | +| `secureBootOutOfBox` | false | [www.devuan.org](https://www.devuan.org/get-devuan) | signed by developer keys for ISOs but no shim/signed-kernel Secure Boot path documented -> false | +| `nvidiaExperience` | OK | [en.wikipedia.org](https://en.wikipedia.org/wiki/Devuan) | Debian's non-free nvidia driver path applies; nothing documented by Devuan -> OK (inferred) | + +**Unverified / inferred / judgement calls** + +- initSystem — OTHER encodes sysvinit, which has no enum value; OPENRC and RUNIT are only alternate inits here. installerExperience — GUI because the desktop-live ISO ships the graphical refractainstaller-yad; the netinstall/server ISOs use the text Debian installer, so MANUAL is defensible for those media. documentationUrl — www.devuan.org/os/documentation/ returns 404 upstream; /os/install was used instead. proprietarySupport — OPTIONAL inferred by analogy with Debian (firmware ships by default and is excluded from the field; non-free drivers need enabling); no Devuan page states the default component set. laptopFriendly — true inferred from Debian lineage (no upstream laptop statement). suitableForOldHardware — true inferred from the i386/i686 install media; the field wording asks about 'older x86_64 machines' specifically. nvidiaExperience — OK inferred from the Debian non-free nvidia path; not stated upstream. docsEcosystem — OK inferred; Devuan inherits Debian docs but its own site is thin. + +## URL check table (final URL / status observed 2026-09-28) + +| url | status | +|---|---| +| omarchy.org — `https://omarchy.org/` | 200 | +| omarchy manual — `https://omarchy.org/manual/` | 200 | +| omarchy updates ch. — `https://omarchy.org/manual/updates/` | 200 | +| omarchy getting started — `https://omarchy.org/manual/getting-started` | 200 -> /manual/getting-started/ | +| omarchy iso repo — `https://github.com/basecamp/omarchy` | 200 -> github.com/omacom/omarchy | +| omarchy iso builder — `https://github.com/omacom/omarchy-iso` | 200 | +| omarchy legacy manual — `https://learn.omacom.io/2/the-omarchy-manual/50/getting-started` | 200 | +| omarchy discord — `https://omarchy.org/discord` | 200 | +| omarchy download anchor — `https://omarchy.org/#download` | 200 | +| omarchy logo — `https://upload.wikimedia.org/wikipedia/commons/c/c3/Omarchy_logo.png` | 200 image/png | +| distrosea omarchy — `https://distrosea.com/select/omarchy/` | 404 (null) | +| steamos site — `https://store.steampowered.com/steamos` | 200 | +| steamos download — `https://store.steampowered.com/steamos/download/?ver=steamdeck` | 200 | +| steamos support faq — `https://help.steampowered.com/en/faqs/view/65B4-2AA3-5F37-4227` | 200 | +| steamos forum — `https://steamcommunity.com/app/1675200/discussions/` | 200 | +| steamworks docs — `https://partner.steamgames.com/doc/steamdeck` | 200 -> /doc/steamhardware/steamdeck | +| steamos logo — `https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/SteamOS_wordmark.svg/500px-SteamOS_wordmark.svg.png` | 200 image/png | +| distrosea steamos — `https://distrosea.com/select/steamos/ (+ /steam-os/)` | 404 (null) | +| rhel site — `https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux` | 200 | +| rhel docs — `https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/` | 403 to curl -> 200 in browser ('Red Hat Enterprise Linux | 10 | Red Hat Documentation') | +| rhel secureboot doc — `https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/managing_monitoring_and_updating_the_kernel/signing-a-kernel-and-modules-for-secure-boot` | 200 | +| rhel forum — `https://access.redhat.com/discussions` | 200 | +| rhel download — `https://developers.redhat.com/products/rhel/download` | 403 to curl -> 200 in browser ('Download Red Hat Enterprise Linux (RHEL)') | +| rhel logo — `https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Red_Hat_Enterprise_Linux_logo.svg/500px-Red_Hat_Enterprise_Linux_logo.svg.png` | 200 image/png | +| distrosea rhel — `https://distrosea.com/select/rhel/ (+ /redhat/, /red-hat-enterprise-linux/)` | 404 (null) | +| raspios software — `https://www.raspberrypi.com/software/` | 403 challenge to curl/headless; 200 + content via extractor | +| raspios docs — `https://www.raspberrypi.com/documentation/computers/os.html` | 403 challenge to curl/headless; 200 + content via extractor | +| raspios downloads — `https://www.raspberrypi.com/software/operating-systems/` | 200 | +| raspios forum — `https://forums.raspberrypi.com/` | 403 challenge to curl/headless; 200 + content via extractor | +| raspios logo (Commons) — `https://upload.wikimedia.org/wikipedia/commons/c/c8/Raspberrry_pi_logo.png` | 200 image/png | +| raspios logo (official alt) — `https://assets.raspberrypi.com/static/logo-663a71244b0e42ebedb0ddd72abcae73.png` | 200 image/png (declared in page JSON-LD) | +| distrosea raspios — `https://distrosea.com/select/raspios/ (+ /raspberry-pi-os/)` | 404 (null) | +| antix home — `https://antixlinux.com/` | 200 | +| antix about — `https://antixlinux.com/about/` | 200 | +| antix 26 release — `https://antixlinux.com/antix-26-released/` | 200 | +| antix download — `https://antixlinux.com/download/` | 200 | +| antix faq — `https://robin-antix.codeberg.page/antiX-FAQ/antiX26/` | 200 | +| antix forum — `https://www.antixforum.com/` | 403 challenge to curl/headless; 200 + content via extractor | +| antix logo — `https://upload.wikimedia.org/wikipedia/commons/e/ec/AntiX_logo.png` | 200 image/png | +| distrosea antix — `https://distrosea.com/select/antix/` | 200 | +| devuan home — `https://www.devuan.org/` | 200 | +| devuan init freedom — `https://www.devuan.org/os/init-freedom` | 200 | +| devuan install/docs — `https://www.devuan.org/os/install` | 200 | +| devuan releases — `https://www.devuan.org/os/releases` | 200 | +| devuan get — `https://www.devuan.org/get-devuan` | 200 | +| devuan live readme — `https://files.devuan.org/devuan_daedalus/desktop-live/README_desktop-live.txt` | 200 | +| devuan live install guide — `https://www.devuan.org/os/documentation/install-guides/daedalus/live-gui` | 200 | +| devuan linux docs path — `https://www.devuan.org/os/documentation/` | 404 (not used) | +| devuan forum — `https://dev1galaxy.org/` | 200 | +| devuan logo — `https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Devuan-logo.svg/500px-Devuan-logo.svg.png` | 200 image/png | +| distrosea devuan — `https://distrosea.com/select/devuan/` | 200 | +| distrosea bogus (calibration) — `https://distrosea.com/select/zzz-nope-xyz/` | 404 | +| distrosea ubuntu (calibration) — `https://distrosea.com/select/ubuntu/` | 200 | + +### Notes on blocked URLs + +- Final sweep: all 32 distinct URLs present in the JSON output were requested with `curl -sL` on 2026-09-28. Result: 24 x HTTP 200, 7 x HTTP 403 (bot walls, see below) and 1 transient HTTP 429; the two Wikimedia thumb URLs that briefly returned 429 (rate limiting on a burst of requests) were re-requested after a pause and both returned 200 image/png. + +- `raspberrypi.com` and `www.antixforum.com` sit behind a Cloudflare bot challenge: curl and a headless browser both get the challenge page, while the content extractor receives the real page (HTTP 200 with body). The URLs are live; only non-browser clients are challenged. +- `docs.redhat.com`, `access.redhat.com/documentation/...` and `developers.redhat.com` return 403 to curl but load normally in a real browser (verified by navigation: page titles are the real ones). + diff --git a/docs/evidence/new-distros-tier2.md b/docs/evidence/new-distros-tier2.md new file mode 100644 index 0000000..632acb1 --- /dev/null +++ b/docs/evidence/new-distros-tier2.md @@ -0,0 +1,182 @@ +# Tier-2 distro entries — evidence table + +Entries: `vanilla_os`, `guix`, `archcraft`, `tinycore`. JSON: `new-distros-tier2.json`. +`lastVerified: 2026-09-28` for all four. Values not confirmed by the cited page are listed under **Unverified** per distro (kept at the most defensible option rather than hunted further). + +Fetch budget used: 8 pages via the extract backend (2 failed: `vanillaos.org` first pass 500, `tinycorelinux.net/faq.html` backend error), plus raw `curl` HTML on already-fetched hosts, one HTTP-status sweep, and the Wikimedia Commons API (one endpoint, reused). + +## Source keys + +### Vanilla OS +| Key | URL | Quote / evidence | +|---|---|---| +| V1 | https://vanillaos.org/ | "This is all thanks to our tool called ABRoot, which guarantees **immutability and atomicity** on your system"; "Vib is a tool to create **OCI images** for Vanilla OS"; "Apx ... generate work environments based on any Linux distribution"; "support for the industry's most popular **game launchers** and peripherals"; hero image alt text "**Vanilla OS 3 Reunion**" | +| V2 | https://distrosea.com/select/vanillaos/ | "Vanilla OS is an **immutable Linux OS based on Debian** targetting developers, designers and students. Earlier versions of Vanilla OS was based on Ubuntu." (offers only 2.0 to try online) | +| V3 | https://docs.vanillaos.org/ | Collections: Docs, Handbook, Vib, apx (official technical docs) | +| V4 | https://commons.wikimedia.org/wiki/File:Vanilla-os-logo-black.png | Retrieved via Commons API `action=query&prop=imageinfo`; thumb URL returns 200 | + +### Guix System +| Key | URL | Quote / evidence | +|---|---|---| +| G1 | https://guix.gnu.org/ | "GNU Guix ... designed to give users **more control**"; "A complete GNU operating system harnessing all the capabilities of the Guix software. Spawned by Guix itself."; "**All of It, Free Software**"; "Use Guile Scheme APIs ... to define packages and whole-system configurations" | +| G2 | https://commons.wikimedia.org/wiki/File:GNU_Guix_logo.svg | Commons API imageinfo hit; 1280px PNG thumb returns 200 | +| G3 | Commons API file-namespace search "Guix" | Screenshots `File:...GNU Guix installer.jpg` / "wizard installer" confirm a guided text installer exists | + +### Archcraft +| Key | URL | Quote / evidence | +|---|---|---| +| A1 | https://archcraft.io/ | "Archcraft is a **minimal Linux distribution built on Arch Linux**. It uses **lightweight window managers** and applications, making it super fast."; "runs smoothly on **under 800 MB of memory**"; "seamless **AUR** access"; community links: Reddit, Discord, Telegram, Matrix | +| A2 | https://archcraft.io/download.html | "Latest Release : `archcraft-2026.08.01-x86_64.iso` Live Session Login ... liveuser"; "Archcraft is available only for 64-bit systems. There are no 32-bit, ARM, or WSL editions — and likely never will be. **Archcraft ARM is Here : Now available for ARMv7 (32-bit) and ARMv8 (aarch64, 64-bit)**"; GPG key `7DC81F73` | +| A3 | https://commons.wikimedia.org/wiki/File:Archcraft-logo.svg | Commons API hit; 1280px PNG thumb 200 | +| A4 | Commons API: `File:Archcraft-calamares.png`, `File:Archcraft-installer.png` | Archcraft Calamares installer screenshots exist → GUI installer | + +### Tiny Core Linux +| Key | URL | Quote / evidence | +|---|---|---| +| T1 | http://tinycorelinux.net/ | "TinyCore becomes simply an example of what the Core Project can produce, an **16MB FLTK/FLWM desktop**"; "It is **not a complete desktop** nor is all hardware completely supported"; "The **latest version: 17.1**" (Core v17.0 → kernel 6.18.2); "be it for a desktop, a netbook, an appliance, or **server**"; "While Tiny Core always resides in **ram**" | +| T2 | Commons API file-namespace searches "Tiny Core Linux" / "tinycore logo" | Only screenshots (`File:Tiny Core Linux Desktop.png`), **no logo file** → `imageUrl: null` | + +## Field-by-field + +### vanilla_os — Vanilla OS (Vanilla OS 3 "Reunion") +| Field | Value | Source | Evidence | +|---|---|---|---| +| description | Immutable Debian-based GNOME desktop, atomic images, container app environments | V1,V2 | V1 ABRoot/OCI/Apx quotes; V2 "based on Debian" | +| imageUrl | `.../commons/c/cd/Vanilla-os-logo-black.png` | V4 | API imageinfo, 200 | +| websiteUrl / downloadUrl / forumUrl | vanillaos.org, /download, /community | V1 | 200 sweep (community page is the project's own community hub) | +| documentationUrl | https://docs.vanillaos.org/ | V3 | 200, official docs collections | +| distroSeaUrl | distrosea.com/select/vanillaos/ | V2 | 200 | +| testDriveUrl | null | — | no first-party browser test drive seen | +| installerExperience | GUI | V1 (inferred) | **unverified** — DE-based live image; installer UI not confirmed on fetched pages | +| maintenanceStyle | LOW_FRICTION | V1 | ABRoot atomic updates, "smart updates" (V2) | +| proprietarySupport | OPTIONAL | V1,V2 | **unverified** — Debian base, site markets gaming/peripheral support; no non-free repo enabled by default confirmed | +| suitableForOldHardware | false | V2 | Debian+GNOME+immutable image, no lightweight/32-bit offer | +| gamingSupport | GOOD | V1 | "support for the industry's most popular game launchers and peripherals" | +| privacyPosture | DEFAULT | V1 | no privacy/anonymity claims on page | +| supportedDesktops | ["GNOME"] | V1,V2 | GNOME desktop shown throughout | +| supportedArchitectures | ["x86_64"] | V2 | **unverified** — no arm64 build seen | +| releaseModel | FIXED | V1 | named versioned releases ("Vanilla OS 3 Reunion") | +| initSystem | SYSTEMD | V2 | Debian base | +| packageManager | APT | V2 | "based on Debian"; Apx containers are secondary | +| secureBootOutOfBox | true | V1 (inferred) | **unverified** | +| nvidiaExperience | OK | V1,V2 | **unverified** — Debian non-free driver path documented, not first-class; UNKNOWN is invariant-banned | +| immutable | true | V1 | "ABRoot, which guarantees immutability and atomicity" | +| primaryUseCase / laptopFriendly | DESKTOP / true | V1 | daily-driver marketing, "Work ... efficient workspace" | +| verificationMethod / docsEcosystem | MANUAL / GOOD | V1,V3 | project site + official docs read | + +### guix — Guix System +| Field | Value | Source | Evidence | +|---|---|---|---| +| description | Declarative GNU/Linux system built from Guix, configured in Guile Scheme | G1 | "whole-system configurations" | +| imageUrl | Commons `GNU_Guix_logo.svg` 1280px thumb | G2 | 200 | +| websiteUrl / downloadUrl | guix.gnu.org, /en/download/ | G1 | 200 | +| documentationUrl | https://guix.gnu.org/manual/ | G1 | 200 (linked from site) | +| forumUrl | lists.gnu.org/mailman/listinfo/help-guix | G1 | 200; site lists mailing lists/IRC, no forum | +| distroSeaUrl | **null** | — | `/select/guix/`, `/select/guix-system/`, `/select/guixsd/` all **404** | +| installerExperience | MANUAL | G3 | guided *text* wizard; dataset precedent (`nixos`, `alpine` = MANUAL despite guided TUI installers) — **unverified** | +| maintenanceStyle | HANDS_ON | G1 | Scheme system config + `guix pull` | +| proprietarySupport | NONE | G1 | "All of It, Free Software" — no first-party non-free path (nonguix is third-party) | +| suitableForOldHardware | true | G1 | **unverified** — i686 target + libre kernel | +| gamingSupport | LIMITED | G1 | **unverified** — Steam needs the third-party nonguix channel | +| privacyPosture | DEFAULT | G1 | free-software stance, not an anonymity distro | +| supportedDesktops | GNOME, XFCE, MATE, LXQT, TILING | G1 | **unverified** — G1 confirms desktop environments generally, not the exact list | +| supportedArchitectures | x86_64, i686, aarch64, armv7 | G1 | **unverified** | +| releaseModel | ROLLING | G1 | "reproduce over time" / continuous `guix pull`; no OS point releases | +| initSystem | OTHER | G1 | GNU Shepherd, not systemd | +| packageManager | OTHER | G1 | Guix (functional manager, distinct from Nix → not `NIX`) | +| secureBootOutOfBox | false | G1 | **unverified** — no signed-shim-out-of-box claim | +| nvidiaExperience | HARD | G1 | libre-only repo; NVIDIA needs third-party nonguix + non-free modules | +| immutable | false | G1 | declarative generations give atomic rollback, but rootfs is writable, not atomic/read-only by design | +| primaryUseCase / laptopFriendly | BOTH / false | G1 | server+workstation; **laptopFriendly unverified** — linux-libre excludes non-free Wi-Fi firmware | +| verificationMethod / docsEcosystem | INFERRED / GOOD | G1 | home page fetched; driver/arch details reasoned → INFERRED | + +### archcraft — Archcraft +| Field | Value | Source | Evidence | +|---|---|---|---| +| description | Minimal Arch-based desktop preconfigured around lightweight WMs | A1 | "minimal Linux distribution built on Arch Linux ... lightweight window managers" | +| imageUrl | Commons `Archcraft-logo.svg` 1280px thumb | A3 | 200 | +| websiteUrl / downloadUrl / documentationUrl | archcraft.io, /download.html, wiki.archcraft.io | A1,A2 | all 200 (`archcraft.io/wiki.html` is 404 → wiki subdomain used) | +| forumUrl | reddit.com/r/archcraft | A1 | 200; project links Reddit as its community "Sub" (no official forum; `forum.archcraft.io` does not resolve) | +| distroSeaUrl | distrosea.com/select/archcraft/ | — | 200 | +| testDriveUrl | null | — | none seen | +| installerExperience | GUI | A4 | Calamares installer screenshots on Commons — **inferred, not stated on fetched pages** | +| maintenanceStyle | HANDS_ON | A1,A2 | rolling Arch + AUR | +| proprietarySupport | FULL | A1 | Arch repos (`core`/`extra`) enabled by default carry `nvidia` + codecs; consistent with existing `arch`/`manjaro`/`endeavouros` entries | +| suitableForOldHardware | false | A2 | 64-bit only ("There are no 32-bit ... editions"); matches `arch`/`endeavouros` = false | +| gamingSupport | LIMITED | A1 | AUR/Steam possible, no gaming tooling; matches upstream `arch` = LIMITED | +| privacyPosture | DEFAULT | A1 | no privacy claims | +| supportedDesktops | TILING, OTHER | A1 | WM-based: bspwm/i3/awesome-style tilers = TILING, Openbox-style stacking = OTHER | +| supportedArchitectures | x86_64, aarch64, armv7 | A2 | "Archcraft ARM is Here : Now available for ARMv7 (32-bit) and ARMv8 (aarch64, 64-bit)" | +| releaseModel / initSystem / packageManager | ROLLING / SYSTEMD / PACMAN | A1,A2 | Arch base; ISO dated `2026.08.01` | +| secureBootOutOfBox | false | A2 | verification steps are GPG/SHA256 only; no signed-shim claim | +| nvidiaExperience | HARD | A1 | no driver tooling of its own; manual `pacman` of NVIDIA like upstream Arch (`arch` entry = HARD) | +| immutable | false | A1 | writable root, pacman-based | +| primaryUseCase / laptopFriendly | DESKTOP / true | A1 | "runs smoothly on under 800 MB of memory" (lightweight WM) | +| verificationMethod / docsEcosystem | INFERRED / GOOD | A1,A3,A4 | site facts manual; installer inferred from Commons screenshots | + +### tinycore — Tiny Core Linux +| Field | Value | Source | Evidence | +|---|---|---|---| +| description | Ultra-small modular Linux running from RAM, extended by loadable extensions | T1 | "16MB FLTK/FLWM desktop", "always resides in ram" | +| imageUrl | **null** | T2 | no Commons logo file; no logo image seen on the project page (`grep` of fetched HTML found no logo asset) | +| websiteUrl / documentationUrl / forumUrl / downloadUrl | tinycorelinux.net, wiki.tinycorelinux.net, forum.tinycorelinux.net, downloads.html | T1 | all 200 | +| distroSeaUrl | distrosea.com/select/tinycore/ | — | 200 | +| testDriveUrl | null | — | none seen | +| installerExperience | MANUAL | T1 | "It is not a complete desktop"; install is a manual frugal/pendrive setup — **unverified** | +| maintenanceStyle | HANDS_ON | T1 | user-managed extension set, "not all hardware completely supported" | +| proprietarySupport | OPTIONAL | T1 | **unverified** — core/extension philosophy is minimal-by-default; no first-party non-free repo confirmed | +| suitableForOldHardware | true | T1 | 16 MB desktop, 32-bit x86 builds, kernel 6.18 | +| gamingSupport | NONE | T1 | no GPU driver stack or game tooling offered | +| privacyPosture | DEFAULT | T1 | no privacy claims | +| supportedDesktops | ["OTHER"] | T1 | FLTK/FLWM (not an enum desktop); Xfce/KDE only as community extensions | +| supportedArchitectures | x86, x86_64 | T1 | core/x86 and core/x86_64 builds (ARM lives in the separate piCore project) | +| releaseModel | FIXED | T1 | "The latest version: 17.1", prior 16.x/15.0/14.0 … | +| initSystem | OTHER | T1 | custom `/init` + BusyBox, no systemd — **unverified** | +| packageManager | OTHER | T1 | `tce-load`/`.tcz` extension manager (not APT/DNF/PACMAN…) | +| secureBootOutOfBox | false | T1 | 32-bit kernels and no shim; UEFI boot needs the user's own setup | +| nvidiaExperience | HARD | T1 | **unverified** — no distro driver tooling; community NVIDIA extensions must match the running kernel | +| immutable | false | T1 | runs from RAM with read-only `core.gz`, but rootfs is not atomic/read-only by design (no A/B or image update) | +| primaryUseCase / laptopFriendly | BOTH / false | T1 | "desktop, a netbook, an appliance, or server"; laptops often unsupported ("not all hardware completely supported") | +| verificationMethod / docsEcosystem | MANUAL / THIN | T1 | project page read; docs = FAQ + wiki + forum only | + +## Unverified values (set to most defensible, not hunted further) + +- **vanilla_os**: installerExperience (GUI), proprietarySupport (OPTIONAL), supportedArchitectures (x86_64 only), secureBootOutOfBox (true), nvidiaExperience (OK) +- **guix**: installerExperience (MANUAL), suitableForOldHardware (true), gamingSupport (LIMITED), supportedDesktops, supportedArchitectures, secureBootOutOfBox (false), laptopFriendly (false) +- **archcraft**: installerExperience (GUI — Calamares inferred from Commons screenshots), suitableForOldHardware, nvidiaExperience, gamingSupport, supportedDesktops +- **tinycore**: installerExperience (MANUAL), proprietarySupport (OPTIONAL), initSystem (OTHER), nvidiaExperience (HARD), docsEcosystem (THIN) + +## URL → HTTP status (single request each, `curl -L`) + +| URL | Status | +|---|---| +| http://forum.tinycorelinux.net/ | 200 | +| http://tinycorelinux.net/ | 200 | +| http://tinycorelinux.net/downloads.html | 200 | +| http://wiki.tinycorelinux.net/ | 200 | +| https://archcraft.io/ | 200 | +| https://archcraft.io/download.html | 200 | +| https://distrosea.com/select/archcraft/ | 200 | +| https://distrosea.com/select/tinycore/ | 200 | +| https://distrosea.com/select/vanillaos/ | 200 | +| https://docs.vanillaos.org/ | 200 | +| https://guix.gnu.org/ | 200 | +| https://guix.gnu.org/en/download/ | 200 | +| https://guix.gnu.org/manual/ | 200 | +| https://lists.gnu.org/mailman/listinfo/help-guix | 200 | +| https://upload.wikimedia.org/wikipedia/commons/c/cd/Vanilla-os-logo-black.png | 200 | +| https://upload.wikimedia.org/wikipedia/commons/thumb/0/09/GNU_Guix_logo.svg/1280px-GNU_Guix_logo.svg.png | 200 | +| https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Archcraft-logo.svg/1280px-Archcraft-logo.svg.png | 200 | +| https://vanillaos.org/ | 200 | +| https://vanillaos.org/community | 200 | +| https://vanillaos.org/download | 200 | +| https://wiki.archcraft.io/ | 200 | +| https://www.reddit.com/r/archcraft/ | 200 | + +Rejected / not used: `https://distrosea.com/select/guix/` 404, `/select/guix-system/` 404, `/select/guixsd/` 404 (→ guix `distroSeaUrl: null`); `https://archcraft.io/download/` 404, `https://archcraft.io/wiki.html` 404, `https://forum.archcraft.io/` no DNS, `https://github.com/archcraft-os/archcraft/discussions` 404, `https://github.com/Vanilla-OS/vanilla-os/discussions` 404. + +## Validation + +`validate_tier2.py` mirrors `src/data/distro-types.ts`: 4 entries, required-key set exact, all enum values legal, `nvidiaExperience != UNKNOWN`, booleans typed, `supportedDesktops`/`supportedArchitectures` non-empty and enum-bounded, `lastVerified` matches `^\d{4}-\d{2}-\d{2}$`, all `*Url` either `null` or `http…`. Result: **VALID**. + +> Note: `new-distros-tier2.json` was flagged as previously written by a sibling subagent; this run overwrote it with the 4 required entries. diff --git a/i18n/locales/de.json b/i18n/locales/de.json index 493055a..5756bc9 100644 --- a/i18n/locales/de.json +++ b/i18n/locales/de.json @@ -22,6 +22,7 @@ }, "wizard": { "complete": { + "title": "Sie sind bereit für Ergebnisse", "tagline": "Sehen Sie sich die kompatible Auswahlliste basierend auf Ihrer Auswahl an.", "viewResults": "Ergebnisse anzeigen" @@ -33,6 +34,7 @@ "phaseGate": { "tagline": "Sie können jetzt weiter verfeinern oder direkt zu den Ergebnissen springen." }, + "narrowChoice": "Auswahl eingrenzen", "nav": { "back": "← Zurück", "reviewAnswers": "Überprüfen Sie die Antworten", @@ -82,7 +84,8 @@ "documentation": "Dokumentation", "forum": "Forum", "download": "Herunterladen", - "testDrive": "Probefahrt" + "testDrive": "Probefahrt", + "tryOnline": "Online testen" } }, "compareSelected": "Vergleichen ({count})", @@ -142,14 +145,7 @@ ] }, "questions": { - "q_experience_depth": { - "text": "Wie tief möchtest du gehen?", - "options": { - "quick": "Schnell", - "more_accurate": "Genauer", - "expert_mode": "Expertenmodus" - } - }, + "q_purpose": { "text": "Wofür möchten Sie diesen Computer hauptsächlich nutzen?", "options": { @@ -510,6 +506,8 @@ "exclude_secure_boot_unavailable": "Unterstützt Secure Boot nicht ab Werk.", "exclude_nvidia_hard": "Das NVIDIA-Setup wird wahrscheinlich praktisch sein.", "exclude_nvidia_proprietary_required": "Erfordert wahrscheinlich proprietäre NVIDIA-Treiber.", + "exclude_architecture_unsupported": "Unterstützt die Architektur deines Computers nicht.", + "exclude_hard_constraint_mismatch": "Erfüllt eine oder mehrere deiner zwingenden Anforderungen nicht.", "include_immutable_match": "Matches your immutable/traditional system preference.", "include_server_use_case_match": "Matches your server-use preference.", "include_laptop_friendly_match": "Works well for laptop-focused usage.", @@ -537,6 +535,7 @@ "constraint_init_systemd": "Sie bevorzugen systemd.", "constraint_init_openrc": "Sie bevorzugen OpenRC.", "constraint_init_runit": "Du bevorzugst Runit.", + "constraint_init_other": "Du bevorzugst ein alternatives Init-System.", "constraint_pkg_apt": "Sie bevorzugen den APT-Paketmanager.", "constraint_pkg_dnf": "Sie bevorzugen den DNF-Paketmanager.", "constraint_pkg_pacman": "Sie bevorzugen den Pacman-Paketmanager.", @@ -544,7 +543,8 @@ "constraint_pkg_apk": "Sie bevorzugen den APK-Paketmanager.", "constraint_pkg_nix": "Sie bevorzugen den Nix-Paketmanager.", "constraint_pkg_xbps": "You prefer the XBPS package manager.", - "constraint_pkg_portage": "You prefer the Portage package manager.", + "constraint_pkg_portage": "Du bevorzugst den Portage-Paketmanager.", + "constraint_pkg_other": "Du bevorzugst einen alternativen Paketmanager.", "constraint_immutable_prefer": "You prefer immutable (atomic-style) systems.", "constraint_immutable_avoid": "You prefer traditional mutable systems.", "constraint_server_use_case": "You want server-oriented recommendations.", diff --git a/i18n/locales/en.json b/i18n/locales/en.json index 2c937c9..befc6b6 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -504,6 +504,7 @@ "exclude_secure_boot_unavailable": "Does not support Secure Boot out of the box.", "exclude_nvidia_hard": "NVIDIA setup may be hands-on.", "exclude_nvidia_proprietary_required": "Optimized for proprietary NVIDIA drivers.", + "exclude_architecture_unsupported": "Does not support your computer's architecture.", "include_immutable_match": "Matches your immutable/traditional system preference.", "include_server_use_case_match": "Matches your server-use preference.", "include_laptop_friendly_match": "Works well for laptop-focused usage.", diff --git a/i18n/locales/es.json b/i18n/locales/es.json index 0088670..15968a0 100644 --- a/i18n/locales/es.json +++ b/i18n/locales/es.json @@ -22,6 +22,7 @@ }, "wizard": { "complete": { + "title": "Estás listo para los resultados", "tagline": "Vea la lista corta compatible según lo que seleccionó.", "viewResults": "Ver resultados" @@ -33,6 +34,7 @@ "phaseGate": { "tagline": "Puede seguir refinando o saltar a los resultados ahora." }, + "narrowChoice": "Acotar la elección", "nav": { "back": "← Volver", "reviewAnswers": "Revisar respuestas", @@ -82,7 +84,8 @@ "documentation": "Documentación", "forum": "Foro", "download": "Descargar", - "testDrive": "Prueba de manejo" + "testDrive": "Prueba de manejo", + "tryOnline": "Probar en línea" } }, "compareSelected": "Comparar ({count})", @@ -142,14 +145,7 @@ ] }, "questions": { - "q_experience_depth": { - "text": "¿A qué profundidad quieres llegar?", - "options": { - "quick": "Rápido", - "more_accurate": "Más preciso", - "expert_mode": "Modo experto" - } - }, + "q_purpose": { "text": "¿Para qué desea utilizar principalmente esta computadora?", "options": { @@ -510,6 +506,8 @@ "exclude_secure_boot_unavailable": "No admite arranque seguro listo para usar.", "exclude_nvidia_hard": "Es probable que la configuración de NVIDIA sea práctica.", "exclude_nvidia_proprietary_required": "Probablemente requiera controladores propietarios de NVIDIA.", + "exclude_architecture_unsupported": "No es compatible con la arquitectura de tu equipo.", + "exclude_hard_constraint_mismatch": "No cumple uno o más de tus requisitos obligatorios.", "include_immutable_match": "Matches your immutable/traditional system preference.", "include_server_use_case_match": "Matches your server-use preference.", "include_laptop_friendly_match": "Works well for laptop-focused usage.", @@ -537,6 +535,7 @@ "constraint_init_systemd": "Prefieres systemd.", "constraint_init_openrc": "Prefieres OpenRC.", "constraint_init_runit": "Prefieres runit.", + "constraint_init_other": "Prefieres un sistema de inicio alternativo.", "constraint_pkg_apt": "Prefieres el administrador de paquetes APT.", "constraint_pkg_dnf": "Prefieres el administrador de paquetes DNF.", "constraint_pkg_pacman": "Prefieres el administrador de paquetes de Pacman.", @@ -544,7 +543,8 @@ "constraint_pkg_apk": "Prefieres el administrador de paquetes APK.", "constraint_pkg_nix": "Prefieres el administrador de paquetes Nix.", "constraint_pkg_xbps": "You prefer the XBPS package manager.", - "constraint_pkg_portage": "You prefer the Portage package manager.", + "constraint_pkg_portage": "Prefieres el gestor de paquetes Portage.", + "constraint_pkg_other": "Prefieres un gestor de paquetes alternativo.", "constraint_immutable_prefer": "You prefer immutable (atomic-style) systems.", "constraint_immutable_avoid": "You prefer traditional mutable systems.", "constraint_server_use_case": "You want server-oriented recommendations.", diff --git a/i18n/locales/fr.json b/i18n/locales/fr.json index 4400975..679a756 100644 --- a/i18n/locales/fr.json +++ b/i18n/locales/fr.json @@ -22,6 +22,7 @@ }, "wizard": { "complete": { + "title": "Vous êtes prêt pour les résultats", "tagline": "Consultez la liste restreinte compatible en fonction de ce que vous avez sélectionné.", "viewResults": "Afficher les résultats" @@ -33,6 +34,7 @@ "phaseGate": { "tagline": "Vous pouvez continuer à affiner ou accéder aux résultats maintenant." }, + "narrowChoice": "Affiner le choix", "nav": { "back": "← Retour", "reviewAnswers": "Examiner les réponses", @@ -82,7 +84,8 @@ "documentation": "Documentation", "forum": "Forum", "download": "Télécharger", - "testDrive": "Essai routier" + "testDrive": "Essai routier", + "tryOnline": "Essayer en ligne" } }, "compareSelected": "Comparer ({count})", @@ -142,14 +145,7 @@ ] }, "questions": { - "q_experience_depth": { - "text": "Jusqu’où veux-tu aller ?", - "options": { - "quick": "Rapide", - "more_accurate": "Plus précis", - "expert_mode": "Mode expert" - } - }, + "q_purpose": { "text": "À quoi souhaitez-vous principalement utiliser cet ordinateur ?", "options": { @@ -510,6 +506,8 @@ "exclude_secure_boot_unavailable": "Ne prend pas en charge le démarrage sécurisé dès la sortie de la boîte.", "exclude_nvidia_hard": "La configuration de NVIDIA sera probablement pratique.", "exclude_nvidia_proprietary_required": "Nécessite probablement des pilotes NVIDIA propriétaires.", + "exclude_architecture_unsupported": "Ne prend pas en charge l'architecture de votre ordinateur.", + "exclude_hard_constraint_mismatch": "Ne satisfait pas une ou plusieurs de vos contraintes obligatoires.", "include_immutable_match": "Matches your immutable/traditional system preference.", "include_server_use_case_match": "Matches your server-use preference.", "include_laptop_friendly_match": "Works well for laptop-focused usage.", @@ -537,6 +535,7 @@ "constraint_init_systemd": "Vous préférez systemd.", "constraint_init_openrc": "Vous préférez OpenRC.", "constraint_init_runit": "Vous préférez runit.", + "constraint_init_other": "Vous préférez un système d'init alternatif.", "constraint_pkg_apt": "Vous préférez le gestionnaire de packages APT.", "constraint_pkg_dnf": "Vous préférez le gestionnaire de packages DNF.", "constraint_pkg_pacman": "Vous préférez le gestionnaire de paquets Pacman.", @@ -544,7 +543,8 @@ "constraint_pkg_apk": "Vous préférez le gestionnaire de packages APK.", "constraint_pkg_nix": "Vous préférez le gestionnaire de packages Nix.", "constraint_pkg_xbps": "You prefer the XBPS package manager.", - "constraint_pkg_portage": "You prefer the Portage package manager.", + "constraint_pkg_portage": "Vous préférez le gestionnaire de paquets Portage.", + "constraint_pkg_other": "Vous préférez un gestionnaire de paquets alternatif.", "constraint_immutable_prefer": "You prefer immutable (atomic-style) systems.", "constraint_immutable_avoid": "You prefer traditional mutable systems.", "constraint_server_use_case": "You want server-oriented recommendations.", diff --git a/i18n/locales/it.json b/i18n/locales/it.json index c751021..7172e00 100644 --- a/i18n/locales/it.json +++ b/i18n/locales/it.json @@ -22,6 +22,7 @@ }, "wizard": { "complete": { + "title": "Sei pronto per i risultati", "tagline": "Visualizza l'elenco dei candidati compatibili in base a ciò che hai selezionato.", "viewResults": "Visualizza i risultati" @@ -33,6 +34,7 @@ "phaseGate": { "tagline": "Puoi continuare a perfezionare o passare ai risultati ora." }, + "narrowChoice": "Restringi scelta", "nav": { "back": "← Indietro", "reviewAnswers": "Rivedi le risposte", @@ -503,6 +505,8 @@ "exclude_secure_boot_unavailable": "Non supporta l'avvio protetto immediatamente.", "exclude_nvidia_hard": "La configurazione di NVIDIA potrebbe essere complessa.", "exclude_nvidia_proprietary_required": "Ottimizzata per driver NVIDIA proprietari.", + "exclude_architecture_unsupported": "Non supporta l'architettura del tuo computer.", + "exclude_hard_constraint_mismatch": "Non soddisfa uno o più dei tuoi vincoli obbligatori.", "include_immutable_match": "Matches your immutable/traditional system preference.", "include_server_use_case_match": "Matches your server-use preference.", "include_laptop_friendly_match": "Works well for laptop-focused usage.", @@ -530,6 +534,7 @@ "constraint_init_systemd": "Preferisci systemd.", "constraint_init_openrc": "Preferisci OpenRC.", "constraint_init_runit": "Preferisci runit.", + "constraint_init_other": "Preferisci un init system alternativo.", "constraint_pkg_apt": "Preferisci il gestore pacchetti APT.", "constraint_pkg_dnf": "Preferisci il gestore pacchetti DNF.", "constraint_pkg_pacman": "Preferisci il gestore di pacchetti pacman.", @@ -537,7 +542,8 @@ "constraint_pkg_apk": "Preferisci il gestore pacchetti APK.", "constraint_pkg_nix": "Preferisci il gestore pacchetti Nix.", "constraint_pkg_xbps": "You prefer the XBPS package manager.", - "constraint_pkg_portage": "You prefer the Portage package manager.", + "constraint_pkg_portage": "Preferisci il gestore di pacchetti Portage.", + "constraint_pkg_other": "Preferisci un gestore di pacchetti alternativo.", "constraint_immutable_prefer": "You prefer immutable (atomic-style) systems.", "constraint_immutable_avoid": "You prefer traditional mutable systems.", "constraint_server_use_case": "You want server-oriented recommendations.", diff --git a/i18n/locales/nl.json b/i18n/locales/nl.json index 95b3d13..2006df2 100644 --- a/i18n/locales/nl.json +++ b/i18n/locales/nl.json @@ -22,6 +22,7 @@ }, "wizard": { "complete": { + "title": "Je bent klaar voor resultaten", "tagline": "Bekijk de compatibele shortlist op basis van wat je hebt geselecteerd.", "viewResults": "Bekijk resultaten" @@ -33,6 +34,7 @@ "phaseGate": { "tagline": "U kunt nu blijven verfijnen of naar de resultaten springen." }, + "narrowChoice": "Keuze beperken", "nav": { "back": "← Terug", "reviewAnswers": "Bekijk de antwoorden", @@ -82,7 +84,8 @@ "documentation": "Documentatie", "forum": "Forum", "download": "Downloaden", - "testDrive": "Proefrit" + "testDrive": "Proefrit", + "tryOnline": "Online proberen" } }, "compareSelected": "Vergelijken ({count})", @@ -142,14 +145,7 @@ ] }, "questions": { - "q_experience_depth": { - "text": "Hoe diep wil je gaan?", - "options": { - "quick": "Snel", - "more_accurate": "Nauwkeuriger", - "expert_mode": "Expert-modus" - } - }, + "q_purpose": { "text": "Waar wil je deze computer vooral voor gebruiken?", "options": { @@ -510,6 +506,8 @@ "exclude_secure_boot_unavailable": "Ondersteunt geen Secure Boot uit de doos.", "exclude_nvidia_hard": "De installatie van NVIDIA zal waarschijnlijk praktisch zijn.", "exclude_nvidia_proprietary_required": "Vereist waarschijnlijk eigen NVIDIA-stuurprogramma's.", + "exclude_architecture_unsupported": "Ondersteunt de architectuur van je computer niet.", + "exclude_hard_constraint_mismatch": "Voldoet niet aan een of meer van je verplichte eisen.", "include_immutable_match": "Matches your immutable/traditional system preference.", "include_server_use_case_match": "Matches your server-use preference.", "include_laptop_friendly_match": "Works well for laptop-focused usage.", @@ -537,6 +535,7 @@ "constraint_init_systemd": "Je geeft de voorkeur aan systemisch.", "constraint_init_openrc": "U geeft de voorkeur aan OpenRC.", "constraint_init_runit": "Je geeft de voorkeur aan runit.", + "constraint_init_other": "Je verkiest een alternatief init-systeem.", "constraint_pkg_apt": "U geeft de voorkeur aan de pakketbeheerder van APT.", "constraint_pkg_dnf": "U geeft de voorkeur aan de DNF-pakketbeheerder.", "constraint_pkg_pacman": "U geeft de voorkeur aan de Pacman-pakketbeheerder.", @@ -544,7 +543,8 @@ "constraint_pkg_apk": "U geeft de voorkeur aan de APK-pakketbeheerder.", "constraint_pkg_nix": "U geeft de voorkeur aan de Nix-pakketbeheerder.", "constraint_pkg_xbps": "You prefer the XBPS package manager.", - "constraint_pkg_portage": "You prefer the Portage package manager.", + "constraint_pkg_portage": "Je verkiest de Portage-pakketbeheerder.", + "constraint_pkg_other": "Je verkiest een alternatieve pakketbeheerder.", "constraint_immutable_prefer": "You prefer immutable (atomic-style) systems.", "constraint_immutable_avoid": "You prefer traditional mutable systems.", "constraint_server_use_case": "You want server-oriented recommendations.", diff --git a/i18n/locales/pt.json b/i18n/locales/pt.json index 5865717..c20cbb6 100644 --- a/i18n/locales/pt.json +++ b/i18n/locales/pt.json @@ -22,6 +22,7 @@ }, "wizard": { "complete": { + "title": "Você está pronto para resultados", "tagline": "Veja a lista compatível com base no que você selecionou.", "viewResults": "Ver resultados" @@ -33,6 +34,7 @@ "phaseGate": { "tagline": "Você pode continuar refinando ou pular para os resultados agora." }, + "narrowChoice": "Restringir a escolha", "nav": { "back": "← Voltar", "reviewAnswers": "Revise as respostas", @@ -82,7 +84,8 @@ "documentation": "Documentação", "forum": "Fórum", "download": "Download", - "testDrive": "Passeio de teste" + "testDrive": "Passeio de teste", + "tryOnline": "Experimentar online" } }, "compareSelected": "Comparar ({count})", @@ -142,14 +145,7 @@ ] }, "questions": { - "q_experience_depth": { - "text": "Quão fundo você quer ir?", - "options": { - "quick": "Rápido", - "more_accurate": "Mais preciso", - "expert_mode": "Modo especialista" - } - }, + "q_purpose": { "text": "Principalmente para que você deseja usar este computador?", "options": { @@ -510,6 +506,8 @@ "exclude_secure_boot_unavailable": "Não oferece suporte para inicialização segura imediatamente.", "exclude_nvidia_hard": "A configuração da NVIDIA provavelmente será prática.", "exclude_nvidia_proprietary_required": "Provavelmente requer drivers proprietários da NVIDIA.", + "exclude_architecture_unsupported": "Não é compatível com a arquitetura do seu computador.", + "exclude_hard_constraint_mismatch": "Não cumpre um ou mais dos seus requisitos obrigatórios.", "include_immutable_match": "Matches your immutable/traditional system preference.", "include_server_use_case_match": "Matches your server-use preference.", "include_laptop_friendly_match": "Works well for laptop-focused usage.", @@ -537,6 +535,7 @@ "constraint_init_systemd": "Você prefere o systemd.", "constraint_init_openrc": "Você prefere OpenRC.", "constraint_init_runit": "Você prefere runit.", + "constraint_init_other": "Prefere um sistema de inicialização alternativo.", "constraint_pkg_apt": "Você prefere o gerenciador de pacotes APT.", "constraint_pkg_dnf": "Você prefere o gerenciador de pacotes DNF.", "constraint_pkg_pacman": "Você prefere o gerenciador de pacotes pacman.", @@ -544,7 +543,8 @@ "constraint_pkg_apk": "Você prefere o gerenciador de pacotes APK.", "constraint_pkg_nix": "Você prefere o gerenciador de pacotes Nix.", "constraint_pkg_xbps": "You prefer the XBPS package manager.", - "constraint_pkg_portage": "You prefer the Portage package manager.", + "constraint_pkg_portage": "Prefere o gestor de pacotes Portage.", + "constraint_pkg_other": "Prefere um gestor de pacotes alternativo.", "constraint_immutable_prefer": "You prefer immutable (atomic-style) systems.", "constraint_immutable_avoid": "You prefer traditional mutable systems.", "constraint_server_use_case": "You want server-oriented recommendations.", diff --git a/package.json b/package.json index 9f05d25..2fa0290 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,8 @@ }, "devDependencies": { "@nuxtjs/i18n": "^10.2.3", - "@vitejs/plugin-vue": "^6.0.4" + "@vitejs/plugin-vue": "^6.0.4", + "typescript": "5.9.3", + "vue-tsc": "^3.3.11" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0323b9..6c8e203 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 2.6.1 nuxt: specifier: ^4.3.1 - version: 4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) + version: 4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3))(yaml@2.8.2) nuxt-umami: specifier: ^2.6.7 version: 2.6.7 @@ -39,6 +39,12 @@ importers: '@vitejs/plugin-vue': specifier: ^6.0.4 version: 6.0.4(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) + typescript: + specifier: 5.9.3 + version: 5.9.3 + vue-tsc: + specifier: ^3.3.11 + version: 3.3.11(typescript@5.9.3) packages: @@ -1786,6 +1792,9 @@ packages: '@volar/source-map@2.4.28': resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} + '@volar/typescript@2.4.28': + resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + '@vue-macros/common@3.1.2': resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} engines: {node: '>=20.19.0'} @@ -1840,6 +1849,9 @@ packages: '@vue/language-core@3.2.5': resolution: {integrity: sha512-d3OIxN/+KRedeM5wQ6H6NIpwS3P5gC9nmyaHgBk+rO6dIsjY+tOh4UlPpiZbAh3YtLdCGEX4M16RmsBqPmJV+g==} + '@vue/language-core@3.3.11': + resolution: {integrity: sha512-QJmpliwAVpC/OxubIByPAhNzsQPRc8/gxlN2qnVzVfIMjMDz/9RnXRFoetjz5yEgXVXyp4LqhXq3V53PjmNzFw==} + '@vue/reactivity@3.5.28': resolution: {integrity: sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw==} @@ -1890,6 +1902,9 @@ packages: alien-signals@3.1.2: resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} + alien-signals@3.2.1: + resolution: {integrity: sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3183,6 +3198,10 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -3799,6 +3818,7 @@ packages: unplugin-vue-router@0.16.2: resolution: {integrity: sha512-lE6ZjnHaXfS2vFI/PSEwdKcdOo5RwAbCKUnPBIN9YwLgSWas3x+qivzQvJa/uxhKzJldE6WK43aDKjGj9Rij9w==} + deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html' peerDependencies: '@vue/compiler-sfc': ^3.5.17 vue-router: ^4.6.0 @@ -3808,6 +3828,7 @@ packages: unplugin-vue-router@0.19.2: resolution: {integrity: sha512-u5dgLBarxE5cyDK/hzJGfpCTLIAyiTXGlo85COuD4Nssj6G7NxS+i9mhCWz/1p/ud1eMwdcUbTXehQe41jYZUA==} + deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html' peerDependencies: '@vue/compiler-sfc': ^3.5.17 vue-router: ^4.6.0 @@ -4072,6 +4093,12 @@ packages: peerDependencies: vue: ^3.5.0 + vue-tsc@3.3.11: + resolution: {integrity: sha512-gOb0B9rtU2+f1dszwPqSH5kAieIF9ReeLhD3kSRNHv5WZZUQz/JdVXW0RTdqhNTMlQkqKzrTTviqKr/4FYZraQ==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + vue@3.5.28: resolution: {integrity: sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg==} peerDependencies: @@ -4870,7 +4897,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.3.1(db0@0.3.4)(ioredis@5.9.3)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2))(typescript@5.9.3)': + '@nuxt/nitro-server@4.3.1(db0@0.3.4)(ioredis@5.9.3)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.3.1(magicast@0.5.2) @@ -4888,7 +4915,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.13.1 - nuxt: 4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) + nuxt: 4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3))(yaml@2.8.2) ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 @@ -4952,7 +4979,7 @@ snapshots: rc9: 3.0.0 std-env: 3.10.0 - '@nuxt/vite-builder@4.3.1(eslint@10.0.1(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2)': + '@nuxt/vite-builder@4.3.1(eslint@10.0.1(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.3.11(typescript@5.9.3))(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2)': dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.58.0) @@ -4971,7 +4998,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) + nuxt: 4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3))(yaml@2.8.2) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 @@ -4982,7 +5009,7 @@ snapshots: unenv: 2.0.0-rc.24 vite: 7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2) vite-node: 5.3.0(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2) - vite-plugin-checker: 0.12.0(eslint@10.0.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2)) + vite-plugin-checker: 0.12.0(eslint@10.0.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3)) vue: 3.5.28(typescript@5.9.3) vue-bundle-renderer: 2.2.0 transitivePeerDependencies: @@ -5741,6 +5768,12 @@ snapshots: '@volar/source-map@2.4.28': {} + '@volar/typescript@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + '@vue-macros/common@3.1.2(vue@3.5.28(typescript@5.9.3))': dependencies: '@vue/compiler-sfc': 3.5.28 @@ -5848,6 +5881,16 @@ snapshots: path-browserify: 1.0.1 picomatch: 4.0.3 + '@vue/language-core@3.3.11': + dependencies: + '@volar/language-core': 2.4.28 + '@vue/compiler-dom': 3.5.28 + '@vue/shared': 3.5.28 + alien-signals: 3.2.1 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + picomatch: 4.0.7 + '@vue/reactivity@3.5.28': dependencies: '@vue/shared': 3.5.28 @@ -5899,6 +5942,8 @@ snapshots: alien-signals@3.1.2: {} + alien-signals@3.2.1: {} + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -7111,16 +7156,16 @@ snapshots: nuxt-umami@2.6.7: {} - nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2): + nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3))(yaml@2.8.2): dependencies: '@dxup/nuxt': 0.3.2(magicast@0.5.2) '@nuxt/cli': 3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.2) '@nuxt/devtools': 3.2.1(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) '@nuxt/kit': 4.3.1(magicast@0.5.2) - '@nuxt/nitro-server': 4.3.1(db0@0.3.4)(ioredis@5.9.3)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2))(typescript@5.9.3) + '@nuxt/nitro-server': 4.3.1(db0@0.3.4)(ioredis@5.9.3)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3) '@nuxt/schema': 4.3.1 '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.2)) - '@nuxt/vite-builder': 4.3.1(eslint@10.0.1(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2) + '@nuxt/vite-builder': 4.3.1(eslint@10.0.1(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@10.0.1(jiti@2.6.1))(ioredis@5.9.3)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.58.0)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.3.11(typescript@5.9.3))(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2) '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3)) '@vue/shared': 3.5.28 c12: 3.3.3(magicast@0.5.2) @@ -7448,6 +7493,8 @@ snapshots: picomatch@4.0.3: {} + picomatch@4.0.7: {} + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -8231,7 +8278,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.12.0(eslint@10.0.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2)): + vite-plugin-checker@0.12.0(eslint@10.0.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.3.11(typescript@5.9.3)): dependencies: '@babel/code-frame': 7.29.0 chokidar: 4.0.3 @@ -8246,6 +8293,7 @@ snapshots: eslint: 10.0.1(jiti@2.6.1) optionator: 0.9.4 typescript: 5.9.3 + vue-tsc: 3.3.11(typescript@5.9.3) vite-plugin-inspect@11.3.3(@nuxt/kit@4.3.1(magicast@0.5.2))(vite@7.3.1(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2)): dependencies: @@ -8347,6 +8395,12 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.28(typescript@5.9.3) + vue-tsc@3.3.11(typescript@5.9.3): + dependencies: + '@volar/typescript': 2.4.28 + '@vue/language-core': 3.3.11 + typescript: 5.9.3 + vue@3.5.28(typescript@5.9.3): dependencies: '@vue/compiler-dom': 3.5.28 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..94b4aee --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,7 @@ +# pnpm 11 keeps its settings here (the "pnpm" field in package.json is ignored) and fails +# installs with ERR_PNPM_IGNORED_BUILDS unless each dependency that needs a lifecycle script is +# named. `allowBuilds` is the key pnpm 11 writes itself (verified with `pnpm approve-builds +# --all`); everything not listed keeps the stricter default. +allowBuilds: + '@parcel/watcher': true + esbuild: true diff --git a/scripts/distro-invariants.ts b/scripts/distro-invariants.ts new file mode 100644 index 0000000..61847f4 --- /dev/null +++ b/scripts/distro-invariants.ts @@ -0,0 +1,193 @@ +import { DistroSchema, type Distro } from "../src/data/distro-types"; + +export type InvariantViolation = { + code: string; + message: string; + distroIds: string[]; +}; + +export type InvariantOptions = { + /** Used for the freshness ratchet; defaults to today. */ + now?: Date; + /** How old a lastVerified date may be before the ratchet fires. */ + staleMonths?: number; + /** Source text of the compare view, checked against the distro schema keys. */ + compareViewSource?: string; +}; + +const CORE_LINK_FIELDS: Array = [ + "description", + "imageUrl", + "websiteUrl", + "documentationUrl", + "downloadUrl", +]; + +/** Distros in the same archive/shim family must not disagree about inherited facts. */ +const UBUNTU_FAMILY = ["ubuntu", "kubuntu", "xubuntu", "lubuntu", "ubuntu_budgie", "ubuntu_studio"]; + +const UEFI_ARCHITECTURES = ["x86_64", "arm64"]; + +/** A stated answer must be satisfiable by at least one entry, or the picker lies to the user. */ +const SATISFIABLE_ANSWERS: Array<{ + code: string; + message: string; + matches: (distro: Distro) => boolean; +}> = [ + { + code: "proprietary_none_unsatisfiable", + message: 'No distro has proprietarySupport="NONE", so "avoid proprietary software" can never be satisfied.', + matches: (distro) => distro.proprietarySupport === "NONE", + }, + { + code: "secure_boot_unsatisfiable", + message: 'No distro has secureBootOutOfBox=true, so "I need Secure Boot" can never be satisfied.', + matches: (distro) => distro.secureBootOutOfBox, + }, + { + code: "old_hardware_unsatisfiable", + message: 'No distro has suitableForOldHardware=true, so "I have old hardware" can never be satisfied.', + matches: (distro) => distro.suitableForOldHardware, + }, +]; + +const monthsBetween = (from: Date, to: Date): number => + (to.getFullYear() - from.getFullYear()) * 12 + (to.getMonth() - from.getMonth()); + +const isNonEmptyString = (value: unknown): boolean => typeof value === "string" && value.trim().length > 0; + +/** + * Semantic invariants for the distro dataset. Shape is already enforced by the Zod + * schema; these catch the claims the schema cannot express. + */ +export function findInvariantViolations(distros: Distro[], options: InvariantOptions = {}): InvariantViolation[] { + const violations: InvariantViolation[] = []; + const now = options.now ?? new Date(); + const staleMonths = options.staleMonths ?? 18; + + const invalidLastVerified = distros.filter( + (distro) => !isNonEmptyString(distro.lastVerified) || !/^\d{4}-\d{2}-\d{2}$/.test(distro.lastVerified) + ); + if (invalidLastVerified.length > 0) { + violations.push({ + code: "invalid_last_verified", + message: "lastVerified must be a YYYY-MM-DD string.", + distroIds: invalidLastVerified.map((distro) => distro.id), + }); + } + + const unknownNvidia = distros.filter((distro) => distro.nvidiaExperience === "UNKNOWN"); + if (unknownNvidia.length > 0) { + violations.push({ + code: "nvidia_unknown", + message: "nvidiaExperience must be verified, not UNKNOWN.", + distroIds: unknownNvidia.map((distro) => distro.id), + }); + } + + const byName = new Map(); + distros.forEach((distro) => { + const key = distro.name.trim().toLowerCase(); + byName.set(key, [...(byName.get(key) ?? []), distro.id]); + }); + const duplicateNames = [...byName.entries()].filter(([, ids]) => ids.length > 1); + if (duplicateNames.length > 0) { + violations.push({ + code: "duplicate_name", + message: `Two entries describe the same distro: ${duplicateNames + .map(([name, ids]) => `${name} (${ids.join(", ")})`) + .join("; ")}.`, + distroIds: duplicateNames.flatMap(([, ids]) => ids), + }); + } + + const stale = distros.filter((distro) => { + if (!/^\d{4}-\d{2}-\d{2}$/.test(distro.lastVerified)) return false; + return monthsBetween(new Date(distro.lastVerified), now) > staleMonths; + }); + if (stale.length > 0) { + violations.push({ + code: "stale_verification", + message: `Verified more than ${staleMonths} months ago — re-verify the values or extend the window deliberately.`, + distroIds: stale.map((distro) => distro.id), + }); + } + + const missingCoreData = distros.filter((distro) => + CORE_LINK_FIELDS.some((field) => !isNonEmptyString(distro[field])) + ); + if (missingCoreData.length > 0) { + violations.push({ + code: "missing_core_data", + message: `Missing one of: ${CORE_LINK_FIELDS.join(", ")}.`, + distroIds: missingCoreData.map((distro) => distro.id), + }); + } + + // Secure Boot is a UEFI feature: claiming it without a UEFI-capable architecture is wrong. + const secureBootWithoutUefi = distros.filter( + (distro) => + distro.secureBootOutOfBox && !distro.supportedArchitectures.some((arch) => UEFI_ARCHITECTURES.includes(arch)) + ); + if (secureBootWithoutUefi.length > 0) { + violations.push({ + code: "secure_boot_without_uefi_arch", + message: `secureBootOutOfBox=true without a UEFI architecture (${UEFI_ARCHITECTURES.join("/")}).`, + distroIds: secureBootWithoutUefi.map((distro) => distro.id), + }); + } + + // The engine only consults x86_64 / arm64 / x86 (eliminate.ts). A different spelling + // (aarch64, armv7, i686) silently makes an architecture answer miss the entry. + const ARCHITECTURE_VOCABULARY = ["x86_64", "arm64", "x86"]; + const unknownArchitectures = distros.filter((distro) => + distro.supportedArchitectures.some((arch) => !ARCHITECTURE_VOCABULARY.includes(arch)) + ); + if (unknownArchitectures.length > 0) { + violations.push({ + code: "unknown_architecture", + message: `supportedArchitectures must use the engine vocabulary (${ARCHITECTURE_VOCABULARY.join(", ")}).`, + distroIds: unknownArchitectures.map((distro) => distro.id), + }); + } + + const family = distros.filter((distro) => UBUNTU_FAMILY.includes(distro.id)); + if (family.length > 1) { + const reference = family[0]; + const drifted = family.filter( + (distro) => + distro.secureBootOutOfBox !== reference.secureBootOutOfBox || + distro.proprietarySupport !== reference.proprietarySupport + ); + if (drifted.length > 0) { + violations.push({ + code: "ubuntu_family_drift", + message: `These share Ubuntu's archive and signed shim, so secureBootOutOfBox and proprietarySupport must agree with ${reference.id}.`, + distroIds: drifted.map((distro) => distro.id), + }); + } + } + + SATISFIABLE_ANSWERS.forEach((rule) => { + if (!distros.some(rule.matches)) { + violations.push({ code: rule.code, message: rule.message, distroIds: [] }); + } + }); + + if (options.compareViewSource) { + const schemaKeys = new Set(Object.keys(DistroSchema.shape)); + const renderedKeys = [...options.compareViewSource.matchAll(/\{\s*key:\s*"([^"]+)"/g)].map( + (match) => match[1] + ); + const unknownKeys = [...new Set(renderedKeys)].filter((key) => !schemaKeys.has(key)); + if (unknownKeys.length > 0) { + violations.push({ + code: "compare_field_not_modelled", + message: `The compare view renders keys that no distro entry can have: ${unknownKeys.join(", ")}.`, + distroIds: [], + }); + } + } + + return violations; +} diff --git a/scripts/validate-distro-invariants.ts b/scripts/validate-distro-invariants.ts index 2b392cd..8088e9a 100644 --- a/scripts/validate-distro-invariants.ts +++ b/scripts/validate-distro-invariants.ts @@ -1,31 +1,29 @@ import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { fileURLToPath } from "node:url"; +import { DistroListSchema } from "../src/data/distro-types"; +import { findInvariantViolations } from "./distro-invariants"; const __filename = fileURLToPath(import.meta.url); const rootDir = resolve(__filename, "..", ".."); const dataPath = resolve(rootDir, "src", "data", "distros.json"); +const compareViewPath = resolve(rootDir, "src", "pages", "compare.vue"); -const raw = readFileSync(dataPath, "utf-8"); -const distros = JSON.parse(raw) as Array>; +const distros = DistroListSchema.parse(JSON.parse(readFileSync(dataPath, "utf-8"))); +const compareViewSource = readFileSync(compareViewPath, "utf-8"); -const invalidLastVerified = distros.filter((distro) => { - const value = distro.lastVerified; - return typeof value !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(value); -}); +const violations = findInvariantViolations(distros, { compareViewSource }); -const unknownNvidia = distros.filter((distro) => distro.nvidiaExperience === "UNKNOWN"); - -if (invalidLastVerified.length > 0) { - throw new Error( - `Invalid/missing lastVerified for: ${invalidLastVerified.map((d) => String(d.id)).join(", ")}` - ); -} - -if (unknownNvidia.length > 0) { - throw new Error( - `nvidiaExperience must not be UNKNOWN: ${unknownNvidia.map((d) => String(d.id)).join(", ")}` - ); +if (violations.length > 0) { + const detail = violations + .map((violation) => { + const ids = violation.distroIds.length > 0 ? ` [${violation.distroIds.join(", ")}]` : ""; + return ` - ${violation.code}${ids}: ${violation.message}`; + }) + .join("\n"); + throw new Error(`${violations.length} distro invariant violation(s):\n${detail}`); } -console.log("✅ Distro invariants are valid (lastVerified + nvidiaExperience). "); +console.log( + `✅ Distro invariants are valid (${distros.length} entries: identity, freshness, cross-field consistency, satisfiable answers, compare-view keys).` +); diff --git a/src/components/DistroCard.vue b/src/components/DistroCard.vue index b44dd2a..e945280 100644 --- a/src/components/DistroCard.vue +++ b/src/components/DistroCard.vue @@ -70,10 +70,9 @@ const handleToggleCompare = () => {
- - {{ props.distro.score }}/{{ props.distro.maxPossibleScore }} + + {{ confidenceCoverageLabel }} - Match Score
- +
-
- + - {{ pref.field }}: {{ pref.preferred }} + {{ reason }} - - +{{ props.distro.matchedPreferences.length - 3 }} more + + +{{ props.distro.reasonsIncluded.length - 3 }} more
- -
- {{ props.distro.missedPreferences.length }} preference mismatch{{ props.distro.missedPreferences.length > 1 ? 'es' : '' }} -
@@ -230,39 +225,31 @@ const handleToggleCompare = () => {
-
- {{ props.distro.score }}/{{ props.distro.maxPossibleScore }} - Match Score -
{{ matchedChoicesCount }} {{ tr("results.distroCard.strictFiltersMatched", "Strict filters matched") }}
-

Preference Score Breakdown

+

Why this distro matches

-
-
✅ Matched Preferences
+
+
✅ Matched preferences
    -
  • - {{ pref.field }}: {{ pref.preferred }} + {{ reason }}
-
-
⚠️ Missed Preferences
+
+
⚠️ Excluded by
    -
  • -
    {{ pref.field }}
    -
    - You preferred {{ pref.preferred }}, - but this distro uses {{ pref.actual }}. -
    + {{ reason }}
diff --git a/src/components/ResultsView.vue b/src/components/ResultsView.vue index a8cf5c2..da7fbbf 100644 --- a/src/components/ResultsView.vue +++ b/src/components/ResultsView.vue @@ -1,7 +1,6 @@