Skip to content

docs: overhaul the README and retire the fork dependency - #27

Merged
Samueru-sama merged 12 commits into
mainfrom
docs/overhaul-readme-and-de-fork
Aug 28, 2026
Merged

docs: overhaul the README and retire the fork dependency#27
Samueru-sama merged 12 commits into
mainfrom
docs/overhaul-readme-and-de-fork

Conversation

@Samueru-sama

@Samueru-sama Samueru-sama commented Aug 28, 2026

Copy link
Copy Markdown
Member

What changed

README overhaul. The README read like a machine wrote it. It has been rewritten in plainer prose a new reader can follow, with the two-gap framing kept because that is the part people actually need.

Where it has been tested. New section: Ubuntu 12.04 through 22.04, Alpine Linux, Arch Linux, Artix Linux, NixOS and Slackware, all working.

Known limitations. New section after the tested list, covering the three places where the host's Mesa is the ceiling and this project cannot raise it:

  • a GTK4 application needs glBufferStorage (desktop GL 4.4 / GL_ARB_buffer_storage / GL_EXT_buffer_storage), which Mesa 10.1 on Ubuntu 14.04 lacks
  • OpenGL 4.6 arrived with Mesa 20.0 (Feb 2020, radeonsi), so a system on Mesa 19.x or older stops at 4.5
  • Vulkan 1.3 arrived with Mesa 22.0 (Mar 2022, RADV and ANV), so older distributions cannot run an application that demands 1.3 or 1.4

The OpenGL and Vulkan version claims were verified against the Mesa release notes before writing. Note this corrects the original suggestion: OpenGL 4.6 landed in Mesa 20.0, which is Ubuntu 20.04, not 22.04.

The fork dependency is gone. Upstream pkgforge-dev/Anylinux-AppImages now publishes the host-drivers demo assets that previously existed only on the Samueru-sama/Anylinux-AppImages fork. Both orchestrators take every asset from the upstream.

The demo pins are gone, because the tag is rolling. The demo tag is mutable, so a checked-in SHA was stale the moment it was written. Both orchestrators now read the digest the release API publishes at download time and verify the bytes against it:

  • scripts/run-appimage.sh and experiments/appimage.ps1 carry no sha256 pin at all; scripts/suite-lib.sh fetch_verified and the PowerShell side both query the release API. A cached copy is re-verified and re-downloaded when the tag moved.
  • scripts/check-drift.sh section 3b refuses a leftover 64-hex digest in either orchestrator and checks both verify the same upstream repo and tag.

Docs kept consistent. Report 9.15/9.17, ground-truth, reproducing, integrating, PROGRESS, infrastructure T-10, the appimage-suite cache comment and the secret-sweep narrowing all describe live verification instead of pins. The measured record keeps its numbers and gets the corrected premise underneath, per the repo rule.

Verification

  • sh scripts/check-drift.sh exit 0, with both new failure paths (leftover digest, divergent upstream) planted and seen to refuse
  • sh scripts/check-charset.sh exit 0
  • Template check-docs.sh and check-control-bytes.sh clean
  • sh -n on every tracked .sh and a pwsh parse of appimage.ps1 pass
  • Live fetch_verified run against the real release API for all three assets, covering stale-cache re-download and matching-cache reuse

The README read like a machine wrote it: dense, marker-heavy, and more
about the project's process than about what the library does. Rewrite it
in plainer prose that a new reader can follow, keep the two-gap framing
because that is the part people actually need, and add a "where it has
been tested" section. The library has been exercised on Ubuntu 12.04
through 22.04, Alpine Linux, NixOS and Slackware, all working.

Upstream now publishes the host-drivers demo assets that previously
existed only on the Samueru-sama fork. scripts/run-appimage.sh and
experiments/appimage.ps1 took the demo and the host-drivers gtk4 build
from that fork; both now take every asset from pkgforge-dev/Anylinux-AppImages
and are re-pinned to the current published digests, computed from the
bytes and cross-checked against the release API.

docs/report/09-the-second-boundary.md 9.15 recorded the fork as a hard
dependency. The premise is corrected in place, per the measured-record
rule, and docs/todo/PROGRESS.md item 3 is updated to match.

Verified: sh scripts/check-drift.sh, sh scripts/check-charset.sh, the
template check-docs/check-control-bytes, and sh -n on every tracked .sh
all pass. The two orchestrators pin the same bytes.
Samueru-sama and others added 11 commits August 27, 2026 20:18
The demo tag is rolling, so a checked-in SHA was stale the moment it was
written. Both orchestrators now read the digest the release API publishes
at download time and verify the bytes against it, refusing on a mismatch
with one re-read so a re-upload in progress is not blamed on the network.

scripts/run-appimage.sh and experiments/appimage.ps1 no longer carry any
sha256 pin. scripts/suite-lib.sh fetch_verified gained the live digest as
its only authority; the PowerShell side reads the same API. A cached copy
from an earlier run is re-verified and re-downloaded when the tag moved.

scripts/check-drift.sh section 3b no longer compares pin bytes (there are
none). It refuses a leftover 64-hex digest in either orchestrator and
checks that both verify the same upstream repo and tag. Both failure
paths were planted and seen to refuse; the clean tree passes.

Docs that described the pin policy are corrected to describe live
verification: report 9.15 and 9.17, ground-truth, reproducing,
integrating, PROGRESS item 3, infrastructure T-10, the appimage-suite
cache comment, and the secret-sweep narrowing (which now names the
ground-truth digest instead of pins). The measured record keeps its
numbers and gets the premise corrected underneath, per the repo rule.

README gains Arch and Artix to the tested list, and a "Known
limitations" section. The OpenGL and Vulkan version claims were verified
against the Mesa release notes before writing: Mesa 20.0.0 (February
2020) is the first release implementing OpenGL 4.6 on radeonsi (so
Ubuntu 20.04, not 22.04, is the boundary), and Vulkan 1.3 arrived in
Mesa 22.0.0 (March 2022) on RADV and ANV. The GTK4 row cites the existing
glBufferStorage measurement in docs/limits.md.

Verified: check-drift, check-charset, template check-docs and
check-control-bytes, sh -n on every tracked .sh, pwsh parse of
appimage.ps1, and a live run of fetch_verified against the real release
API for all three assets, covering both the stale-cache re-download and
the matching-cache reuse paths.
The limits row claimed GTK4's GL renderer needs glBufferStorage and
Desktop OpenGL 4.4, and that a host lacking them makes epoxy abort with
"No provider of glBufferStorage found". That claim was wrong, found by
asking whether GTK4 really needs GL 4.4 when it is known to work on
softpipe at GL 3.3.

Measured by running the gtk4-demo-host-drivers AppImage on this machine:
Ubuntu 14.04 (Mesa 10.1) could not realize a GL context and GTK4 fell
back to GskCairoRenderer, with the OpenGLArea demo reporting GL disabled.
The same binary rendered via GL on Ubuntu 16.04 (Mesa 18.0.5), on
softpipe at OpenGL 3.3, and on Mesa 26.1.4. The GTK 4.16 source confirms
the minimum is OpenGL 3.2 (GDK_GL_MIN_GL_VERSION in gdkglversionprivate.h),
and gskglbuffer.c uses glBufferData, never glBufferStorage.

So the real limitation is a missing OpenGL 3.2 host context, not a
missing buffer_storage extension, and GTK4 degrades to Cairo instead of
aborting. The limits.md row and the README Known limitations row are
corrected to that, with the measured hosts named.
The previous row opened with the failure on Ubuntu 14.04, which buried
the measured fact that GTK4's GL renderer works on Ubuntu 16.04, on
softpipe and on Mesa 26.1.4. Rewrite both rows to state the working
minimum first (OpenGL 3.2, satisfied on those three) and name 14.04 as
the one host measured that cannot create a context at all.
Rewritten for a user: the opening now states the one-sentence rule
(the host's graphics stack is the ceiling) before the tables, the
measured rows are split into 'what is measured' and 'what is not
measured', and each row names the reason it is not fixable in the
heading column rather than burying it in prose.

The GTK4 row now leads with where it works (Ubuntu 16.04, softpipe,
Mesa 26.1.4) and names Ubuntu 14.04 as the one measured failure, and
the EGL row says plainly that the shim reproduces the host rather than
failing. The static-binary section keeps its three-way split and its
UNVERIFIED label.

Verified: check-drift, check-charset, template check-docs and
check-control-bytes all pass.
The old gap-2 paragraph said only 'a host whose Mesa was built without
glvnd has no libGLX_<vendor>.so.0'. A reader could not tell why that
happens or why three shims exist. Explain the actual shape: OpenGL on
Linux is a family of dispatchers with independent implementation
discovery, distributions disagree on which pieces exist, Alpine still
builds without glvnd, and some hosts have libEGL but no libGLESv2 while
GTK4 renders through GLES. The shims are then presented as the glue, one
per dispatcher, because fixing one discovery mechanism does not fix the
others.
Add to the gap-2 section the reason these problems never show up for
Vulkan: there is one loader, the Vulkan loader standard, every
distribution with Vulkan ships it, so the loader/ICD boundary is the
same everywhere and only the libc gap remains. Also record the practical
difference: the Vulkan loader already reads XDG_DATA_DIRS for ICD
manifests, while glvnd's EGL/GLES discovery has no such standard, which
is why egl-fwd.so derives __EGL_VENDOR_LIBRARY_DIRS from XDG_DATA_DIRS
itself (commit 1f46a49).
The repo's prose convention is ASCII plus the five markers and nothing
else, enforced by check-charset.sh. The penguin emoji added to the title
failed the hygiene check in CI. Remove it, keeping the centered title.
The ASCII rule permitted only the five markers, so the penguin the
operator added to the README title failed check-charset.sh. The operator
wants the penguin, so emoji are now permitted wholesale as decoration.

scripts/check-charset.sh admits the standard emoji ranges in addition to
the five markers. The template's check-docs.sh, which bans every emoji
outside its hardcoded allowlist, is widened in gates.yml by adding the
same ranges to the negative lookahead, and the assertion now greps for
the emoji range rather than the tick.

docs/conventions/prose.md and CONTRIBUTING.md document that emoji are
allowed as decoration and are not markers.

Verified locally with the penguin in the README: check-charset,
check-drift, the patched template check-docs (which accepts the penguin
where the unpatched one refuses it), and check-control-bytes all pass.
@Samueru-sama
Samueru-sama merged commit 1cecf50 into main Aug 28, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant