Skip to content

animaEngine 0.2.1 — startup-crash patch

Choose a tag to compare

@Alexandru2984 Alexandru2984 released this 02 Jun 22:47
· 686 commits to main since this release

animaEngine 0.2.1 — startup-crash patch

Patch release for a single nasty bug: 0.2.0 crashed on startup on
distros that don't ship libxkbcommon-x11 preinstalled. If your
0.2.0 install works, you don't need this update. If it died with

Library libxkbcommon-x11.so could not be loaded.

— this is the fix.

What went wrong

In 0.2.0 we turned on the AccessKit feature for egui-winit so
screen readers on Linux could see the UI. AccessKit on Linux uses
accesskit_unix, which dlopens libxkbcommon-x11.so.0 at runtime
rather than linking it through ELF NEEDED tags.

Three downstream consequences slipped through:

  • linuxdeploy couldn't see the dependency when packing the AppImage
    (it walks NEEDED tags, not dlopen calls)
  • cargo-deb's $auto reads the same NEEDED tags, so the .deb
    didn't declare a dependency either
  • The CI smoke test runs on a minimal Ubuntu image that doesn't
    pull libxkbcommon-x11 through any other package, so it crashed
    the same way

Three independent fixes, one root cause.

Fixes in this release

Surface Fix
AppImage scripts/build-appimage.sh now resolves libxkbcommon-x11.so.0 via ldconfig on the build host and passes it through --library to linuxdeploy. The library is bundled inside the AppImage.
.deb [package.metadata.deb] depends now explicitly lists libxkbcommon-x11-0, so apt install pulls it in on fresh systems.
CI All four jobs that compile Rust (clippy, test, build, smoke) now install libxkbcommon-x11-dev alongside the existing system deps.

Installing

Debian / Ubuntu (.deb)

wget https://github.com/Alexandru2984/animaEngine/releases/download/v0.2.1/anima-engine_0.2.1-1_amd64.deb
sudo apt install ./anima-engine_0.2.1-1_amd64.deb

AppImage (any distro)

wget https://github.com/Alexandru2984/animaEngine/releases/download/v0.2.1/animaEngine-0.2.1-x86_64.AppImage
chmod +x animaEngine-0.2.1-x86_64.AppImage
./animaEngine-0.2.1-x86_64.AppImage

Upgrading from 0.2.0

No config migration needed — ~/.config/animaEngine/config.toml is
read by both versions unchanged.

If you installed 0.2.0 via .deb:

sudo apt install ./anima-engine_0.2.1-1_amd64.deb

If you ran 0.2.0 via AppImage, just replace the binary.

If you built 0.2.0 from source on a machine that already had
libxkbcommon-x11-0 installed, you don't have to do anything — the
0.2.0 binary worked for you. But pulling the patch keeps your CI
green next time you push.

Verifying the build

SHA-256 checksums:

4ebc892578fc79bbe5187e472c3c71b0330c766174d9e043654dcc5cd5e589ad  anima-engine_0.2.1-1_amd64.deb
1e283bdeacdd574ec4bdddcc3ed1a6aa21394942668aa8c44f49b8a3dc1a8821  animaEngine-0.2.1-x86_64.AppImage

.deb depends on libxkbcommon-x11-0 explicitly now (verifiable with
dpkg-deb --field anima-engine_0.2.1-1_amd64.deb Depends).

AppImage bundles libxkbcommon-x11.so.0 directly (verifiable by
running ./animaEngine-0.2.1-x86_64.AppImage --appimage-extract 'usr/lib/libxkbcommon*').

Security hardening (from the post-Faza A audit)

This release also folds in four small hardening items from the
external security audit run against 0.2.0 + the 0.2.1 packaging
fix. None of these were release blockers; they're documented + fixed
now because the audit pass is fresh.

  • AT-SPI exposure documented in docs/threat-model.md §9. The
    AccessKit bridge enabled in 0.2.0 publishes every egui widget label
    (including the Ctrl+K palette query as you type) on the session bus.
    Same-UID processes were already inside the trust boundary, but the
    what wasn't visible — now it is. Opt-out path noted for operators
    who don't need a screen reader.
  • Locale rejection now logs warn! in i18n::init and
    i18n::set_locale. A hand-edited config.toml with
    locale = "../etc/passwd" previously fell back silently to English;
    now it leaves a tracing line so tampering is visible.
  • SECURITY: comment on Scene::reset_to_configs /
    append_character_config
    . These methods load
    CharacterConfig::asset_path without re-running drag-drop
    validation, because today every caller passes a hardcoded preset.
    The comment makes the invariant explicit so future contributors
    routing user input through these methods know to add the
    pre-validation back.
  • AppImage reproducibility envelope documented + a pinned build
    container shipped at packaging/Dockerfile.appimage-builder. The
    .deb is byte-reproducible; the AppImage is byte-reproducible only
    when built inside the container (bundled libxkbcommon-x11's hash
    is tied to the build host). Maintainers reproducing locally on a
    different distro should expect a different SHA256 unless they use
    the container.

The audit found 0 critical, 0 high findings against the new
0.2.0 + 0.2.1 surface. Baseline B.1-B.5 hardening (atomic writes,
asset caps, drag-drop validation, single-method D-Bus invariant,
license allowlist) was verified intact, no regressions.

Not changed

Everything user-facing in 0.2.0 carries over unchanged:
themes, tabbed sidebar, presets, command palette, ten locales,
AccessKit bridge.