Summary
Buzz 0.4.23's amd64 AppImage mixes older bundled libraries and WebKitGTK with Ubuntu 26.04's GStreamer 1.28.2 plugins and core libraries.
This produces three user-visible or system-visible failures:
- Four GStreamer plugins fail to load because host plugins resolve against incompatible libraries bundled in the AppImage.
- Buzz writes its random
/tmp/.mount_Buzz_* plugin paths into the desktop-wide GStreamer registry, so later non-Buzz GStreamer processes try to load plugins from a stale AppImage mount.
- The WebKit web process continues to emit
gst_caps_append criticals, and the originally failing Buzz sound remains silent, even when the three known library mismatches are worked around.
At least one Buzz notification sound did play during testing, so this is not a total failure of the host audio sink. Audio behavior is inconsistent, and the remaining silent path appears separate from the four blacklisted optional plugins.
Environment
- Buzz:
0.4.23
- Package:
Buzz_0.4.23_amd64.AppImage
- OS: Ubuntu 26.04 LTS
- Kernel:
7.0.0-27-generic
- Architecture:
x86_64
- Host GStreamer:
1.28.2
Steps to reproduce
-
On Ubuntu 26.04, start the AppImage from a terminal:
./Buzz_0.4.23_amd64.AppImage
-
Observe the initial GStreamer plugin scan.
-
Trigger media or an in-app sound handled by the WebKit process.
-
Quit Buzz, then run a normal host GStreamer command and inspect ~/.cache/gstreamer-1.0/registry.x86_64.bin.
Expected behavior
- The AppImage uses one internally compatible GStreamer/WebKit dependency set.
- No GStreamer plugins are blacklisted because of symbol or symbol-version mismatches.
- Buzz keeps any AppImage-specific GStreamer registry separate from the user's desktop-wide registry.
- In-app sounds play consistently.
- The WebKit process does not emit GStreamer caps criticals.
Actual behavior
The AppImage plugin scan reports:
Failed to load plugin '.../libgstcurl.so':
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4: undefined symbol:
nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation
Failed to load plugin '.../libgstladspa.so':
/usr/lib/x86_64-linux-gnu/libcurl.so.4: undefined symbol:
nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation
Failed to load plugin '.../libgstfluidsynthmidi.so':
.../usr/lib/libxkbcommon.so.0: version `V_1.10.0' not found
(required by /usr/lib/x86_64-linux-gnu/libSDL3.so.0)
Failed to load plugin '.../libgstwebrtc.so':
/usr/lib/x86_64-linux-gnu/libgupnp-1.6.so.0: undefined symbol:
soup_server_message_pause
When media is initialized, the WebKit process reports:
WebKitWebProcess: GStreamer-CRITICAL:
gst_caps_append: assertion 'GST_IS_CAPS (caps2)' failed
The gst_caps_append critical and the originally failing sound remain after relaunching with compatible host versions of libnghttp2, libxkbcommon, and libsoup preloaded.
Confirmed packaging findings
The AppImage prepends its own library directories to LD_LIBRARY_PATH, but its GStreamer plugins are from the Ubuntu 26.04 host generation. The result is a mixed dependency graph:
| Bundled library |
Bundled capability |
Host consumer that fails |
Compatible Ubuntu library |
libnghttp2.so.14 |
1.43.0; required symbol absent |
curl 8.18.0 |
1.68.0; symbol present |
libxkbcommon.so.0 |
exports only through V_1.0.0 |
SDL3 3.4.2 requires V_1.10.0 |
1.13.1; exports through V_1.12.0 |
libsoup-3.0.so.0 |
soup_server_message_pause absent |
GUPnP 1.6.9 |
3.6.6; symbol present |
Additional evidence:
- All 274 files in the AppImage's
usr/lib/gstreamer-1.0/ were byte-for-byte identical to /usr/lib/x86_64-linux-gnu/gstreamer-1.0/.
- AppImage environment: 275 plugins, 1,387 features, and four blacklisted plugins (
curl, fluidsynthmidi, ladspa, and webrtc).
- Host-only environment: 275 plugins, 1,395 features, and zero blacklisted plugins.
- Preloading the three compatible Ubuntu libraries restores all 1,395 features and removes all four blacklist entries, but does not fix the remaining WebKit caps error or the originally failing sound.
- A basic
filesrc ! decodebin ! audioconvert ! autoaudiosink MP3 pipeline reaches PLAYING and EOS under the AppImage environment, using PulseAudio. This suggests that the remaining silent Buzz path is above the basic decoder/sink pipeline.
Shared registry contamination
AppRun.wrapped sets:
GST_PLUGIN_SYSTEM_PATH_1_0=$APPDIR/usr/lib/gstreamer-1.0:$GST_PLUGIN_SYSTEM_PATH_1_0
When GST_PLUGIN_SYSTEM_PATH_1_0 was previously unset, this replaces GStreamer's compiled-in system plugin path. Buzz then uses the shared registry at:
~/.cache/gstreamer-1.0/registry.x86_64.bin
The inspected registry contained 274 plugin entries pointing into one ephemeral /tmp/.mount_Buzz_* directory and zero entries pointing at /usr/lib. A later plain gst-launch-1.0, with no Buzz environment, attempted to load a plugin from that stale AppImage path.
Because the AppImage mount path changes on every launch, this affects other GStreamer applications and creates stale registry entries across Buzz launches.
Diagnostic workaround tested
This removes the four plugin blacklist entries and isolates Buzz from the shared registry:
GST_REGISTRY="$HOME/.cache/buzz-gstreamer-registry.bin" \
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libnghttp2.so.14:/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0:/usr/lib/x86_64-linux-gnu/libsoup-3.0.so.0 \
./Buzz_0.4.23_amd64.AppImage
This is only a partial workaround. The gst_caps_append critical and the originally failing in-app sound remain.
Suggested fixes
- Give the AppImage a private GStreamer registry via
GST_REGISTRY, stored in Buzz's own data or cache directory.
- Do not bundle the host-identical
usr/lib/gstreamer-1.0 plugin directory. If it must remain, ensure the host plugin path is preserved rather than replaced.
- Build and ship WebKit, GStreamer core, plugins, and transitive libraries from one compatible distribution/runtime set. At minimum, remove the stale bundled
libnghttp2.so.14, libxkbcommon.so.0, and libsoup-3.0.so.0 when the compatible host libraries are intentionally used.
- Investigate the remaining
gst_caps_append failure in the bundled WebKitGTK 4.1 media path. The AppImage appears to run an older WebKit build against Ubuntu 26.04's GStreamer 1.28 core.
- Consider publishing a native
.deb for Ubuntu, so one coherent host dependency set is resolved by the package manager.
Open diagnostic detail
The four blacklisted plugins are not required by the basic MP3 playback pipeline, so they do not fully explain the remaining silent sound. The unresolved part of this report is the exact WebKit media caps incompatibility, not the AppImage library and registry issues above, which are independently reproducible.
Summary
Buzz 0.4.23's amd64 AppImage mixes older bundled libraries and WebKitGTK with Ubuntu 26.04's GStreamer 1.28.2 plugins and core libraries.
This produces three user-visible or system-visible failures:
/tmp/.mount_Buzz_*plugin paths into the desktop-wide GStreamer registry, so later non-Buzz GStreamer processes try to load plugins from a stale AppImage mount.gst_caps_appendcriticals, and the originally failing Buzz sound remains silent, even when the three known library mismatches are worked around.At least one Buzz notification sound did play during testing, so this is not a total failure of the host audio sink. Audio behavior is inconsistent, and the remaining silent path appears separate from the four blacklisted optional plugins.
Environment
0.4.23Buzz_0.4.23_amd64.AppImage7.0.0-27-genericx86_641.28.2Steps to reproduce
On Ubuntu 26.04, start the AppImage from a terminal:
Observe the initial GStreamer plugin scan.
Trigger media or an in-app sound handled by the WebKit process.
Quit Buzz, then run a normal host GStreamer command and inspect
~/.cache/gstreamer-1.0/registry.x86_64.bin.Expected behavior
Actual behavior
The AppImage plugin scan reports:
When media is initialized, the WebKit process reports:
The
gst_caps_appendcritical and the originally failing sound remain after relaunching with compatible host versions oflibnghttp2,libxkbcommon, andlibsouppreloaded.Confirmed packaging findings
The AppImage prepends its own library directories to
LD_LIBRARY_PATH, but its GStreamer plugins are from the Ubuntu 26.04 host generation. The result is a mixed dependency graph:libnghttp2.so.14libxkbcommon.so.0V_1.0.0V_1.10.0V_1.12.0libsoup-3.0.so.0soup_server_message_pauseabsentAdditional evidence:
usr/lib/gstreamer-1.0/were byte-for-byte identical to/usr/lib/x86_64-linux-gnu/gstreamer-1.0/.curl,fluidsynthmidi,ladspa, andwebrtc).filesrc ! decodebin ! audioconvert ! autoaudiosinkMP3 pipeline reachesPLAYINGand EOS under the AppImage environment, using PulseAudio. This suggests that the remaining silent Buzz path is above the basic decoder/sink pipeline.Shared registry contamination
AppRun.wrappedsets:When
GST_PLUGIN_SYSTEM_PATH_1_0was previously unset, this replaces GStreamer's compiled-in system plugin path. Buzz then uses the shared registry at:The inspected registry contained 274 plugin entries pointing into one ephemeral
/tmp/.mount_Buzz_*directory and zero entries pointing at/usr/lib. A later plaingst-launch-1.0, with no Buzz environment, attempted to load a plugin from that stale AppImage path.Because the AppImage mount path changes on every launch, this affects other GStreamer applications and creates stale registry entries across Buzz launches.
Diagnostic workaround tested
This removes the four plugin blacklist entries and isolates Buzz from the shared registry:
GST_REGISTRY="$HOME/.cache/buzz-gstreamer-registry.bin" \ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libnghttp2.so.14:/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0:/usr/lib/x86_64-linux-gnu/libsoup-3.0.so.0 \ ./Buzz_0.4.23_amd64.AppImageThis is only a partial workaround. The
gst_caps_appendcritical and the originally failing in-app sound remain.Suggested fixes
GST_REGISTRY, stored in Buzz's own data or cache directory.usr/lib/gstreamer-1.0plugin directory. If it must remain, ensure the host plugin path is preserved rather than replaced.libnghttp2.so.14,libxkbcommon.so.0, andlibsoup-3.0.so.0when the compatible host libraries are intentionally used.gst_caps_appendfailure in the bundled WebKitGTK 4.1 media path. The AppImage appears to run an older WebKit build against Ubuntu 26.04's GStreamer 1.28 core..debfor Ubuntu, so one coherent host dependency set is resolved by the package manager.Open diagnostic detail
The four blacklisted plugins are not required by the basic MP3 playback pipeline, so they do not fully explain the remaining silent sound. The unresolved part of this report is the exact WebKit media caps incompatibility, not the AppImage library and registry issues above, which are independently reproducible.