Skip to content

DisplayXR Runtime v2.20.1

Choose a tag to compare

@github-actions github-actions released this 22 Sep 22:10
· 203 commits to main since this release

Highlights

The Linux .deb and tarball are now built on Ubuntu 22.04, dropping the glibc floor so one package installs and runs on 22.04, 24.04 and 26.04. Previously the Linux artifacts were built on a newer host and declared unversioned dependencies, so apt would install them on 22.04 and every OpenXR app then failed at dlopen(). Windows, macOS and Android are unchanged from v2.20.0.

Fixes

  • Linux packaging is portable by construction (#1659, closes #1656). Both release artifacts — displayxr-runtime_<ver>_amd64.deb and the dist/*.tar.gz — now build in an ubuntu:22.04 container, so the shipped binaries carry the oldest supported release's glibc floor rather than the build host's newest.
  • Versioned dependencies. scripts/package_deb_linux.sh derives Depends with dpkg-shlibdeps instead of mapping sonames to unversioned package names. apt now refuses a package whose host is too old, rather than installing a runtime that cannot load.
  • Tarball install gate. scripts/package_linux.sh records the build's floor in a GLIBC_FLOOR file and scripts/linux/install.sh refuses a host older than that floor, instead of unpacking a tree that only fails later at dlopen().

CI / Build

  • Packaging guards. Packaging now fails if the glibc floor rises above the supported minimum (DXR_DEB_MAX_GLIBC, which CI sets to 2.35), if a DT_NEEDED soname falls outside the cross-release STABLE_SONAMES list — libraries whose package name is identical on all three supported releases — or if Depends would name the vendor SR package.
  • New DebInstall matrix. Installs the built .deb into pristine 22.04 / 24.04 / 26.04 containers without Recommends, runs ldd -r over every shipped ELF, asserts every declared dependency name exists on that release, and runs displayxr-cli info + selftest env-free against the packaged sim-display. The release attachment moved to a DebRelease job gated on that matrix, so a non-portable package cannot be published.
  • New Newest job. The newest-toolchain coverage the Package job provided before it moved to 22.04 now lives in its own ubuntu:26.04 build + selftest job.
  • scripts/verify_deb_install_linux.sh is the single verifier shared by CI and the local Docker acceptance test (scripts/test_deb_linux.sh, now a 22.04 builder with tri-release verification).

Docs

  • docs/getting-started/building.md, docs/roadmap/linux-support.md and CLAUDE.md record the supported-release matrix and the build-on-oldest rule.

Other

  • chore(versions): versions.json[runtime] pinned to v2.20.0 by the automatic post-release bump.

Known issues (Linux)

  1. On a native Wayland session the weave shimmers while a window is dragged, and is correct on drop. Pre-existing; a fix is in progress.
  2. The phase snap needs the bundled GNOME Shell extension plus a logout.
  3. New: on Ubuntu 22.04 the bundled GNOME Shell extension does not load — it targets GNOME Shell 45+ and 22.04 ships GNOME 42. The runtime logs why. Without the extension, Wayland weaving is display-scoped rather than window-scoped, and the vendor plug-in's desktop capture for transparency is unavailable, so transparent apps fall back to a silhouette. X11 sessions on 22.04 are unaffected for weaving and phase snap; transparency needs the extension on both session types. A GNOME 42 variant is planned.

Full changelog: v2.20.0...v2.20.1