Skip to content

[bug] moui@0.1.7 stable unusable on Linux/Wayland: build fails with [4018]; after workaround, exits on startup (explicit sync) #6

Description

@conglinyizhi

Description

  1. Build fails with Error [4018] ×5 — coming from the pinned dependency mizchi/image@0.4.2 (its assert_eq calls require Debug on ColorType under the current moon core; mizchi/image@0.4.3 fixes it).
  2. After working around the build issue, the app exits on startup — the window never appears. The wgpu swapchain fails to integrate with KWin's explicit sync (wp_linux_drm_syncobj), causing a Wayland protocol error (EPROTO).

Steps to reproduce

Environment: Arch Linux · moon 0.1.20260731 · KDE Plasma / Wayland · NVIDIA GT 730 + AMD Cezanne (Vega) hybrid GPU (wgpu via Vulkan)

Minimal repro repo (standalone, does not depend on the MoUI repo):

https://github.com/conglinyizhi/moui-minimal-repro
git clone https://github.com/conglinyizhi/moui-minimal-repro
cd moui-minimal-repro
make verify1   # Issue 1: build fails with [4018] ×5
make verify2   # Issue 2: exits on startup (explicit sync)

The Makefile bakes in the required environment (MOON_CC=clang, C_INCLUDE_PATH for freetype/harfbuzz) and tag switching. Two tags: bug1-build-fail (clean state, depends only on moui@0.1.7) and bug2-start-crash (with workaround applied). The app itself is the official counter example (26 lines).

Expected behavior

  • The stable release moui@0.1.7 should build out of the box on Linux (pinned dependencies compatible with the current moon toolchain).
  • After building, the minimal app should open a native window and render.

Actual behavior

Issue 1 (build):

Error: [4018]
  .mooncakes/mizchi/image/src/types.mbt:199:3
  assert_eq(color_type_from_png(0), Grayscale)
  Type ColorType does not implement trait @moonbitlang/core/debug.Debug: no `impl` is defined
(same error ×5, lines 199–203)

Failed with 0 warnings, 5 errors.
Error: failed to run build for target Native

Issue 2 (runtime, after applying the workaround):

wp_linux_drm_syncobj_surface_v1#20: error 4: explicit sync is used, but no acquire point is set
Wayland dispatch pending failed: errno=71 error=71

The process exits within 1–2 seconds; the window never appears.

Platform

Linux

Renderer

Native WGPU (diagnostic)

MoonBit toolchain version

moon 0.1.20260731 (81b634d 2026-07-31)

moon info (if API-surface related)

Relevant example

examples/counter/app (26-line copy; reproduces only as a standalone project against moui@0.1.7 — NOT inside the MoUI workspace, which vendors the fixed third_party/mizchi_image and bumps wgpu_mbt to 0.14.8; repro: https://github.com/conglinyizhi/moui-minimal-repro, make verify1 / make verify2)

Additional context

Neither issue reproduces on main:

  • Issue 1: main's workspace vendors third_party/mizchi_image (with derive(Eq, Debug) added in types.mbt), so its builds use the fixed local copy and never hit the error. However moui/moon.mod still declares mizchi/image@0.4.2, and the published 0.1.7 pins the unfixed upstream version — the release does not match main.
  • Issue 2: main already bumped wgpu_mbt from 0.14.3 to 0.14.8 (verified: main's window opens, no explicit sync error) — fixed on main, only the 0.1.7 release is affected.

In essence: the dependency pins of the 0.1.7 release lag behind main, making the stable Linux release unusable.

Linking also requires manually adding -lfreetype -lfontconfig -lharfbuzz for the linux wgpu backend (not configured in the package; already baked into the repro Makefile).

Environment details (for reproducing the explicit sync issue):

  • OS: Arch Linux, kernel 7.1.5-arch1-2
  • Desktop: KDE Plasma 6.7.3 (kwin 6.7.3, plasma-desktop 6.7.3), Wayland 1.25.0
  • GPU/driver actually used by wgpu: vulkaninfo reports deviceName AMD Radeon Graphics (RADV RENOIR), driverName radv, driverVersion 26.1.6, apiVersion 1.4.354 (machine also has an NVIDIA GT 730, but this path uses the AMD RADV device)
  • Dependency-resolution evidence: moon info linux_wgpu in the repro prints "Using cached mizchi/image@0.4.2" and then fails with the same [4018] — confirming the release pins the unfixed version

Optional follow-ups (main branch, separate from the two issues above):

  • The window submodule pin in the MoUI repo was invalidated by an upstream force-push (fresh --recursive clones fail to fetch it).
  • output_listener / flush_wayland_display are missing in window's native_wayland.c (Wayland builds fail to compile).
  • Dragging a window on main crashes with a scissor-rect out-of-bounds error: Scissor Rect { x:0, y:0, w:520, h:362 } is not contained in the render target (520, 360, 1).

Happy to file these separately if useful.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions