Skip to content

AppImage 2.7.1 shows a blank window: bundled libwayland-client.so.0 breaks EGL on newer Mesa #498

Description

@LargeModGames

Summary

The v2.7.1 Linux AppImage still fails to display on hosts whose Mesa is newer than the ubuntu-24.04 build runner. The window opens but stays blank white; the WebKit WebProcess aborts during EGL initialization with:

Could not create default EGL display: EGL_BAD_PARAMETER. Aborting...

This is a second, independent cause behind #182. The WebKitGTK version pin from #463 did land (verified below); a separate packaging problem remains.

This is not the #463 problem (that fix landed)

A dlopen probe of the library inside the published Markpad_2.7.1_amd64.AppImage, calling webkit_get_major/minor/micro_version, reports:

BUNDLED_WEBKITGTK_VERSION = 2.52.3

So #463 worked: the AppImage now bundles a modern WebKitGTK, not the old 2.44.0. The remaining failure is not about the WebKit version.

Root cause

The AppImage bundles usr/lib/libwayland-client.so.0 (the ubuntu-24.04 copy). On a host with a newer libwayland/Mesa, that older bundled copy shadows the host one. The host libEGL (libglvnd, which links libwayland-client) then fails eglGetPlatformDisplay with EGL_BAD_PARAMETER, so WebKit's WebProcess cannot create an EGL display and aborts. The GTK shell window survives, which is why the result is a blank window rather than an immediate exit.

libwayland-client.so.0 is on the standard AppImage excludelist (AppImageCommunity/pkg2appimage) precisely because it is coupled to the host graphics stack and must never be bundled.

Verbose Mesa logging (EGL_LOG_LEVEL=debug, LIBGL_DEBUG=verbose, MESA_DEBUG=1) prints nothing before the abort, which places the rejection at the EGL dispatch entry, before any DRI driver is reached. That is consistent with a libwayland ABI/version mismatch rather than a GPU or driver fault.

Evidence: single-library isolation

Extracted the published AppImage, moved individual libraries out of the AppDir so the host copy is used, then ran the app on the default (forced x11) backend:

Removed from AppDir EGL init WebProcess Result
nothing (as shipped) EGL_BAD_PARAMETER aborts blank window
only libwayland-client.so.0 ok alive full UI renders
only libwayland-egl.so.1 EGL_BAD_PARAMETER aborts blank
only libwayland-server.so.0 EGL_BAD_PARAMETER aborts blank
libxcb-render.so.0 + libxcb-shm.so.0 EGL_BAD_PARAMETER aborts blank

Removing only libwayland-client.so.0 is necessary and sufficient. Before/after screenshots (blank white window vs the full "Welcome to Markpad" UI, both v2.7.1) are available and I can attach them.

Also ruled out

  • Backend independent: the same abort happens on the default forced GDK_BACKEND=x11 and on GDK_BACKEND=wayland. WebKit's WebProcess creates its own EGL display regardless of the UI backend.
  • Env workarounds do not help: WEBKIT_DISABLE_DMABUF_RENDERER=1, WEBKIT_DISABLE_COMPOSITING_MODE=1, and LIBGL_ALWAYS_SOFTWARE=1 all still abort.

Test system

Arch Linux, Intel, Mesa 1:26.1.6-1, libglvnd 1.7.0, host webkit2gtk-4.1 2.52.5, Hyprland (Wayland session with XWayland). Tauri 2.10.2.

Fix direction

Stop bundling host-coupled graphics libraries in the AppImage, at minimum libwayland-client.so.0 and ideally the full excludelist set (libwayland-*, libxcb*, libEGL/libGL, libgbm, libdrm). The build is a plain npm run tauri build, and tauri-bundler invokes linuxdeploy plus the gtk plugin, so the exclusion needs to happen in that step or as a post-build strip of the AppDir.

One caveat for whoever writes it: the AppImage is signed (Markpad_2.7.1_amd64.AppImage.sig) and referenced by latest.json, so a post-build repack must re-sign and regenerate the updater metadata, otherwise the auto-updater breaks.

Why #463's verification did not catch this

My #463 check rebuilt on Arch, so linuxdeploy bundled Arch's libwayland-client (matching the host), which cannot reproduce the mismatch. The official build runs on ubuntu-24.04 and bundles the older libwayland-client, which fails against a newer host Mesa. Two independent bugs: the version pin (#463, fixed) and this libwayland bundling.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Final_Check_RequestLooks fixed, but do not close yet: needs confirmation, or part of it is still openbugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions