Musl libc and DeltaChat

It seems like Flatpak is currently on track to abandon non-systemd setups: Flatpak will depend on systemd – OSnews

Since many systems using musl libc also don’t use systemd, it seems like an AppImage with musl support would be needed to use DeltaChat on these systems. Since apparently, flatpak will no longer be available for these situations. (I am curious to see why anybody would still bother then with distributing anything via flatpak, but it is what it is.)

It would also be nice if the AppImage learned to warn the user once a newer release is known to exist. It’s easy to forget to manually update.

If I were to try to build it from source, does anybody know if musl builds would work? Without rebuilding chromium (which I can’t with my machine)? So is it even supported?

I was curious and expected electron for musl libc to be the problem, but interestingly I got this error instead:

error: could not compile `keyboard-types` (lib)

Caused by:
  process didn't exit successfully: `rustc --crate-name keyboard_types --edition=2021 /home/ellie/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/keyboard-types-0.7.0/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=80 --crate-type lib --emit=dep-info,metadata,link -C opt-level=z -C embed-bitcode=no -C debuginfo=2 -C debug-assertions=on --cfg 'feature="default"' --cfg 'feature="serde"' --cfg 'feature="unicode-segmentation"' --cfg 'feature="webdriver"' --check-cfg 'cfg(docsrs,test)' --check-cfg 'cfg(feature, values("default", "serde", "unicode-segmentation", "webdriver"))' -C metadata=6e77b49a11deaa7b -C extra-filename=-8e1594e13d81f77a --out-dir /home/ellie/Projects/Code/deltachat-desktop/target/debug/deps -L dependency=/home/ellie/Projects/Code/deltachat-desktop/target/debug/deps --extern bitflags=/home/ellie/Projects/Code/deltachat-desktop/target/debug/deps/libbitflags-ce96f25c2681ce39.rmeta --extern serde=/home/ellie/Projects/Code/deltachat-desktop/target/debug/deps/libserde-5e778748ccfa612e.rmeta --extern unicode_segmentation=/home/ellie/Projects/Code/deltachat-desktop/target/debug/deps/libunicode_segmentation-3e4503f7491ee343.rmeta --cap-lints allow` (signal: 4, SIGILL: illegal instruction)
warning: build failed, waiting for other jobs to finish...

deltachat-rpc-server is buildable with musl. electron seems to exist in Alpine Linux, built with many patches: electron - Alpine Linux packages

Where does keyboard-types come from? Are you building Tauri version?

My bad, I was using an old commit. Sadly, latest deltachat desktop won’t build with musl either:

   Compiling slh-dsa v0.0.3
   Compiling ml-dsa v0.0.4
   Compiling dsa v0.6.3
   Compiling stop-token v0.7.0
   Compiling p521 v0.13.3
   Compiling p256 v0.13.2
   Compiling p384 v0.13.1
   Compiling aes-kw v0.2.1
   Compiling k256 v0.13.4
   Compiling ocb3 v0.1.0
   Compiling futures-concurrency v7.6.3

thread 'lto cgu.0' (5012) has overflowed its stack
fatal runtime error: stack overflow, aborting
error: could not compile `p521` (lib)

Caused by:
  process didn't exit successfully: `rustc --crate-name p521 --edition=2021 /home/user/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/p521-0.13.3/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=80 --crate-type lib --emit=dep-info,metadata,link -C opt-level=z -C embed-bitcode=no -C debuginfo=2 -C debug-assertions=on --cfg 'feature="alloc"' --cfg 'feature="arithmetic"' --cfg 'feature="default"' --cfg 'feature="digest"' --cfg 'feature="ecdh"' --cfg 'feature="ecdsa"' --cfg 'feature="ecdsa-core"' --cfg 'feature="getrandom"' --cfg 'feature="pem"' --cfg 'feature="pkcs8"' --cfg 'feature="rand_core"' --cfg 'feature="sha512"' --cfg 'feature="std"' --check-cfg 'cfg(docsrs,test)' --check-cfg 'cfg(feature, values("alloc", "arithmetic", "default", "digest", "ecdh", "ecdsa", "ecdsa-core", "getrandom", "hash2curve", "jwk", "pem", "pkcs8", "rand_core", "serde", "serdect", "sha512", "std", "test-vectors", "voprf"))' -C metadata=f8874f2d89d9e373 -C extra-filename=-ea0906095437985d --out-dir /home/user/Projects/Code/deltachat-desktop/target/debug/deps -L dependency=/home/user/Projects/Code/deltachat-desktop/target/debug/deps --extern base16ct=/home/user/Projects/Code/deltachat-desktop/target/debug/deps/libbase16ct-541300546aca77fa.rmeta --extern ecdsa_core=/home/user/Projects/Code/deltachat-desktop/target/debug/deps/libecdsa-fc6e58df7d1cf1aa.rmeta --extern elliptic_curve=/home/user/Projects/Code/deltachat-desktop/target/debug/deps/libelliptic_curve-72bdabb4da961f7a.rmeta --extern primeorder=/home/user/Projects/Code/deltachat-desktop/target/debug/deps/libprimeorder-ea9e772e60991abb.rmeta --extern rand_core=/home/user/Projects/Code/deltachat-desktop/target/debug/deps/librand_core-df4a810427e79a73.rmeta --extern sha2=/home/user/Projects/Code/deltachat-desktop/target/debug/deps/libsha2-44320b5604c71899.rmeta --cap-lints allow` (signal: 6, SIGABRT: process abort signal)

Regarding electron, I think the main question is whether deltachat-desktop’s build script will know how to even find and link it on a musl system.

It seems like I forgot this p521 issue will be fixed in the next release, which sadly isn’t available yet. Once it is, I’ll report back here on how far a musl build gets.

Okay, I noticed the README wants me to ignore the cargo build process entirely and just use pnpm, although I don’t get how it would then have a musl compatible core at all, but anyway here is what happens:

$ pnpm -w start:electron
[WARN] The "pnpm" field in package.json is no longer read by pnpm. The following keys were ignored: "pnpm.supportedArchitectures", "pnpm.onlyBuiltDependencies", "pnpm.overrides". See https://pnpm.io/settings for the new home of each setting.

> deltachat-desktop@2.52.0 start:electron /home/user/Projects/Code/deltachat-desktop
> pnpm --filter=@deltachat-desktop/target-electron start


> @deltachat-desktop/target-electron@2.52.0 start /home/user/Projects/Code/deltachat-desktop/packages/target-electron
> NODE_OPTIONS=--enable-source-maps electron . --devmode --disable-http-cache --translation-watch

/home/user/Projects/Code/deltachat-desktop/node_modules/.pnpm/electron@41.7.1/node_modules/electron/index.js:17
    throw new Error(
    ^

Error: Electron failed to install correctly, please delete node_modules/electron and try installing again
    at getElectronPath (/home/user/Projects/Code/deltachat-desktop/node_modules/.pnpm/electron@41.7.1/node_modules/electron/index.js:17:11)
    at Object.<anonymous> (/home/user/Projects/Code/deltachat-desktop/node_modules/.pnpm/electron@41.7.1/node_modules/electron/index.js:23:18)
    at Module._compile (node:internal/modules/cjs/loader:1854:14)
    at Object..js (node:internal/modules/cjs/loader:1985:10)
    at Module.load (node:internal/modules/cjs/loader:1577:32)
    at Module._load (node:internal/modules/cjs/loader:1379:12)
    at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
    at Module.require (node:internal/modules/cjs/loader:1600:12)
    at require (node:internal/modules/helpers:153:16)
    at Object.<anonymous> (/home/user/Projects/Code/deltachat-desktop/node_modules/.pnpm/electron@41.7.1/node_modules/electron/cli.js:5:18)

Node.js v24.17.0
/home/user/Projects/Code/deltachat-desktop/packages/target-electron:
 ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @deltachat-desktop/target-electron@2.52.0 start: `NODE_OPTIONS=--enable-source-maps electron . --devmode --disable-http-cache --translation-watch`
Exit status 1
 ELIFECYCLE  Command failed with exit code 1.

Electron fails to install with new Node.js currently:

The problem is fixed with new Electron, but it is not updated in deltachat-desktop yet.

Okay, I tested again today with latest git main and this is the result:

$ pnpm -w start:electron
$ pnpm --filter=@deltachat-desktop/target-electron start
$ NODE_OPTIONS=--enable-source-maps electron . --devmode --disable-http-cache --translation-watch
Downloading Electron binary...
Downloading electron-v42.5.0-linux-arm64.zip: [=========] 100% ETA: 0.0 seconds 

Error relocating /home/user/Projects/Code/deltachat-desktop/node_modules/.pnpm/electron@42.5.0_supports-color@8.1.1/node_modules/electron/dist/electron: unsupported relocation type 1032
Error relocating /home/user/Projects/Code/deltachat-desktop/node_modules/.pnpm/electron@42.5.0_supports-color@8.1.1/node_modules/electron/dist/electron: unsupported relocation type 1032
Error relocating /home/user/Projects/Code/deltachat-desktop/node_modules/.pnpm/electron@42.5.0_supports-color@8.1.1/node_modules/electron/dist/electron: unsupported relocation type 1032
Error relocating /home/user/Projects/Code/deltachat-desktop/node_modules/.pnpm/electron@42.5.0_supports-color@8.1.1/node_modules/electron/dist/electron: unsupported relocation type 1032
Error relocating /home/user/Projects/Code/deltachat-desktop/node_modules/.pnpm/electron@42.5.0_supports-color@8.1.1/node_modules/electron/dist/electron: unsupported relocation type 1032
/home/user/Projects/Code/deltachat-desktop/packages/target-electron:
[ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL] @deltachat-desktop/target-electron@2.53.1 start: `NODE_OPTIONS=--enable-source-maps electron . --devmode --disable-http-cache --translation-watch`
spawn ENOENT
[ELIFECYCLE] Command failed with exit code 1.
$ 

My best guess is that it’s trying to launch a glibc electron build on a musl system, which doesn’t work. (There is gcompat, but electron afaik is too far down the absurd glibc-specific non-standard special features rabbithole.)