Summary
Buzz Desktop opens a window that never renders any UI on Ubuntu 26.04 (Wayland, Intel iGPU). The Rust backend runs fine: identity persists, the media proxy binds, the repos dir resolves, and buzz-acp connects to the relay, discovers channels, and reports presence set to online. The webview alone fails. Buzz logs nothing about it, so the app appears to start cleanly.
WebKitWebProcess aborts itself seconds after exec. I confirmed that with strace and an apport core dump. Downgrading WebKit one revision stops the abort and the window stays blank, so two separate problems exist.
Environment
|
|
| Buzz |
0.5.14 and 0.5.17 (.deb from GitHub releases) |
| OS |
Ubuntu 26.04 LTS (resolute), upgraded in place from 22.04 |
| Kernel |
7.0.0-29-generic |
| Session |
Wayland, GNOME Shell 50.1 |
| GPU |
Intel Alder Lake-P GT2 [Iris Xe] 8086:46a6, i7-1260P (no NVIDIA) |
| WebKitGTK |
libwebkit2gtk-4.1-0 2.52.3-0ubuntu0.26.04.3, also tested .2 |
| libsoup3 |
3.6.6-1 |
| GStreamer |
1.28.2-1 |
| GLib |
2.88.0-1 |
| GTK3 |
3.24.52-0ubuntu1 |
Two failure modes
| WebKitGTK |
WebKitWebProcess |
UI |
2.52.3-0ubuntu0.26.04.3 |
execs, spawns ~20 threads, then SIGABRT (core dumped) |
blank |
2.52.3-0ubuntu0.26.04.2 |
survives, 50 threads, holds ~12% CPU |
blank |
Evidence
I ran strace -f -e trace=execve,clone,clone3 on a blank launch. WebKit does launch the web process, so nothing fails at spawn time:
<pid> execve("/usr/lib/x86_64-linux-gnu/webkit2gtk-4.1/WebKitWebProcess",
[".../WebKitWebProcess", "4", "35"], 0x... /* 100 vars */) = 0
<pid> clone3(...) x ~20 threads
<pid> --- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=<same pid>, si_uid=1000} ---
<pid> +++ killed by SIGABRT (core dumped) +++
si_code=SI_TKILL with si_pid matching its own pid means the process called abort() on itself.
No external kill, no OOM.
The apport report (/var/crash/..._WebKitWebProcess.1001.crash) records:
ProblemType: Crash
Signal: 6
ExecutablePath: /usr/lib/x86_64-linux-gnu/webkit2gtk-4.1/WebKitWebProcess
Package: libwebkit2gtk-4.1-0 2.52.3-0ubuntu0.26.04.3
ProcCmdline: /usr/lib/x86_64-linux-gnu/webkit2gtk-4.1/WebKitWebProcess 4 35
StacktraceTop:
pthread_kill () from /usr/lib/x86_64-linux-gnu/libc.so.6
raise () from /usr/lib/x86_64-linux-gnu/libc.so.6
abort () from /usr/lib/x86_64-linux-gnu/libc.so.6
?? () from /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.1.so.0
?? () from /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.1.so.0
apport captured no AssertionMessage, and no assertion text appears anywhere in the report. That fits a RELEASE_ASSERT or CRASH() in a release build.
Ubuntu 26.04 gives no way to symbolize this. libwebkit2gtk-4.1-0-dbgsym exists on ddebs for ...26.04.2 and returns 404 for ...26.04.3. The archive holds no newer WebKit either: I probed .4, 2.52.4, 2.52.5 and 2.54.0, all 404.
A blank launch logs the lines below. A launch that rendered logs the same lines in the same order:
buzz-desktop: WebKit rendering left as-is — no NVIDIA GPU and not an AppImage
buzz-mesh: installed tokio runtime with 8 MiB worker stacks
buzz-desktop: team-membership-repair: repaired N record(s)
buzz-desktop: persisted identity pubkey <redacted>
buzz-desktop: media proxy listening on 127.0.0.1:<port>
buzz-desktop: repos dir resolved at boot — REPOS symlinked to configured <redacted>
buzz-mesh: status report after startup failed: relay unreachable: could not connect to relay
buzz-acp connects one second later, so that relay unreachable line misleads.
Leads
unsetenv() runs after thread creation. With G_MESSAGES_DEBUG=all, GLib flags two calls on every launch, both after the tokio runtime starts:
buzz-mesh: installed tokio runtime with 8 MiB worker stacks
(buzz-desktop:PID): GLib-DEBUG: unsetenv() is not thread-safe and should not be used after threads are created
(buzz-desktop:PID): GLib-DEBUG: unsetenv() is not thread-safe and should not be used after threads are created
unsetenv() after threads exist can corrupt environ, and WebKit copies environ into each auxiliary process it forks (see /* 100 vars */ above). Launches that rendered show the same warning, so I cannot tie it to the symptom. It stands as a thread-safety bug on its own. I suspect the code that strips reserved env keys, or the code that manages WEBKIT_DMABUF_RENDERER_FORCE_SHM.
WebKitGPUProcess never starts. A full strace contains two WebKit execs, WebKitNetworkProcess and WebKitWebProcess. On WebKitGTK 2.52 the GPU process composites content, so its absence could explain a live webview that paints nothing.
The surviving web process holds ~12% CPU on WebKit .2 instead of idling. The 0.5.17 entry fix(desktop): eliminate mounted-view CPU burn may relate, though 0.5.17 fails as well.
Ruled out, with evidence
WEBKIT_DMABUF_RENDERER_FORCE_SHM=1 causes a blank window on 2.52.3. It helped on an earlier WebKit build, then inverted after an Ubuntu WebKit update. I removed it.
--safe-rendering also gives a blank window. It refuses to start while FORCE_SHM is set, so testing the flag requires unsetting the variable first.
- WebKitGTK works on this machine.
/usr/lib/x86_64-linux-gnu/webkit2gtk-4.1/MiniBrowser about:blank spawns its WebKitWebProcess and renders on every attempt, same library, same session.
- The WebKit sandbox works. Zero AppArmor denials for buzz, webkit or bwrap, with
kernel.apparmor_restrict_unprivileged_userns=1 set. glycin uses bwrap in the same process.
- systemd app-scope limits are not involved:
MemoryMax=infinity, MemoryHigh=infinity, TasksMax=37305, no OOM events. Launching detached via setsid, outside any app scope, fails the same way.
- No resource pressure: 21 GB of 30 GB available, swap at 0 B, PSI memory pressure
0.00 (3 µs total for the whole boot), zero OOM kills.
/dev/shm sits at 3% of 16 GB. The process holds 62 file descriptors against a 524288 limit.
- libsoup3 is 3.6.6, past the 3.4 floor, so the GitButler #12885 mismatch pattern does not apply.
- One leftover
~ubuntu24.04 GStreamer plugin exists (gstreamer1.0-icamera), and gst-inspect-1.0 icamerasrc loads it against GStreamer 1.28.2 with exit 0.
- WebKit installed matches candidate.
apt update && apt upgrade changes nothing.
- The relay answers HTTP 200, and
buzz-acp connects, subscribes and goes online.
- A second instance launched while another shuts down produces a guaranteed blank window, with a truncated log that stops after the rendering line and the tokio line. I excluded that case by confirming no other process was alive before each run above.
Reproduction
- Ubuntu 26.04, Wayland, Intel iGPU,
libwebkit2gtk-4.1-0 2.52.3-0ubuntu0.26.04.3.
- Install the Buzz 0.5.17
.deb and launch it, from the dock icon or a shell.
- The window opens and draws its decorations. The content area stays empty.
ps -C WebKitWebProcess returns nothing, and /var/crash/ gains a SIGABRT report.
On 0.5.14 the UI rendered on some launches, which pointed at a race. I measured those hit rates using a live WebKitWebProcess as a proxy for a rendered UI, and that proxy fails: on WebKit .2 the process lives while the window stays blank. Discount any frequency I quote. Only visual confirmation counts.
Questions
- Does Buzz expect
WebKitGPUProcess to start on WebKitGTK 2.52? Its absence looks significant.
- Can the
unsetenv() calls move ahead of tokio runtime startup, or use an approach that leaves
environ alone?
- Could Buzz log
WebKitWebView::web-process-terminated? A dead webview currently produces silence,
which cost me two days of bisecting the wrong layers.
I can run more diagnostics. I hold strace traces, 18 labelled launch logs, and a failure that reproduces on every launch of 0.5.17.
Summary
Buzz Desktop opens a window that never renders any UI on Ubuntu 26.04 (Wayland, Intel iGPU). The Rust backend runs fine: identity persists, the media proxy binds, the repos dir resolves, and
buzz-acpconnects to the relay, discovers channels, and reportspresence set to online. The webview alone fails. Buzz logs nothing about it, so the app appears to start cleanly.WebKitWebProcessaborts itself seconds after exec. I confirmed that with strace and an apport core dump. Downgrading WebKit one revision stops the abort and the window stays blank, so two separate problems exist.Environment
.debfrom GitHub releases)8086:46a6, i7-1260P (no NVIDIA)libwebkit2gtk-4.1-02.52.3-0ubuntu0.26.04.3, also tested .2Two failure modes
2.52.3-0ubuntu0.26.04.32.52.3-0ubuntu0.26.04.2Evidence
I ran
strace -f -e trace=execve,clone,clone3on a blank launch. WebKit does launch the web process, so nothing fails at spawn time:si_code=SI_TKILLwithsi_pidmatching its own pid means the process calledabort()on itself.No external kill, no OOM.
The apport report (
/var/crash/..._WebKitWebProcess.1001.crash) records:apport captured no
AssertionMessage, and no assertion text appears anywhere in the report. That fits aRELEASE_ASSERTorCRASH()in a release build.Ubuntu 26.04 gives no way to symbolize this.
libwebkit2gtk-4.1-0-dbgsymexists on ddebs for...26.04.2and returns 404 for...26.04.3. The archive holds no newer WebKit either: I probed.4,2.52.4,2.52.5and2.54.0, all 404.A blank launch logs the lines below. A launch that rendered logs the same lines in the same order:
buzz-acpconnects one second later, so thatrelay unreachableline misleads.Leads
unsetenv()runs after thread creation. WithG_MESSAGES_DEBUG=all, GLib flags two calls on every launch, both after the tokio runtime starts:unsetenv()after threads exist can corruptenviron, and WebKit copiesenvironinto each auxiliary process it forks (see/* 100 vars */above). Launches that rendered show the same warning, so I cannot tie it to the symptom. It stands as a thread-safety bug on its own. I suspect the code that strips reserved env keys, or the code that managesWEBKIT_DMABUF_RENDERER_FORCE_SHM.WebKitGPUProcessnever starts. A full strace contains two WebKit execs,WebKitNetworkProcessandWebKitWebProcess. On WebKitGTK 2.52 the GPU process composites content, so its absence could explain a live webview that paints nothing.The surviving web process holds ~12% CPU on WebKit
.2instead of idling. The 0.5.17 entryfix(desktop): eliminate mounted-view CPU burnmay relate, though 0.5.17 fails as well.Ruled out, with evidence
WEBKIT_DMABUF_RENDERER_FORCE_SHM=1causes a blank window on 2.52.3. It helped on an earlier WebKit build, then inverted after an Ubuntu WebKit update. I removed it.--safe-renderingalso gives a blank window. It refuses to start whileFORCE_SHMis set, so testing the flag requires unsetting the variable first./usr/lib/x86_64-linux-gnu/webkit2gtk-4.1/MiniBrowser about:blankspawns itsWebKitWebProcessand renders on every attempt, same library, same session.kernel.apparmor_restrict_unprivileged_userns=1set. glycin usesbwrapin the same process.MemoryMax=infinity,MemoryHigh=infinity,TasksMax=37305, no OOM events. Launching detached viasetsid, outside any app scope, fails the same way.0.00(3 µs total for the whole boot), zero OOM kills./dev/shmsits at 3% of 16 GB. The process holds 62 file descriptors against a 524288 limit.~ubuntu24.04GStreamer plugin exists (gstreamer1.0-icamera), andgst-inspect-1.0 icamerasrcloads it against GStreamer 1.28.2 with exit 0.apt update && apt upgradechanges nothing.buzz-acpconnects, subscribes and goes online.Reproduction
libwebkit2gtk-4.1-02.52.3-0ubuntu0.26.04.3..deband launch it, from the dock icon or a shell.ps -C WebKitWebProcessreturns nothing, and/var/crash/gains a SIGABRT report.On 0.5.14 the UI rendered on some launches, which pointed at a race. I measured those hit rates using a live
WebKitWebProcessas a proxy for a rendered UI, and that proxy fails: on WebKit.2the process lives while the window stays blank. Discount any frequency I quote. Only visual confirmation counts.Questions
WebKitGPUProcessto start on WebKitGTK 2.52? Its absence looks significant.unsetenv()calls move ahead of tokio runtime startup, or use an approach that leavesenvironalone?WebKitWebView::web-process-terminated? A dead webview currently produces silence,which cost me two days of bisecting the wrong layers.
I can run more diagnostics. I hold strace traces, 18 labelled launch logs, and a failure that reproduces on every launch of 0.5.17.