google / google/capsem

Ship a musl/Alpine package so Alpine is supported, not just refused

Open
#182 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
72
Forks
13
Avg merge
1d 2h
Merged PRs (30d)
5

Description

## Why

The glow-up platform matrix now runs the package on Alpine 3.21–3.24 and proves it **cannot** run there:

```
ok Alpine 3.24 musl 1.2.6 cannot run, as declared
ok Alpine 3.23 musl 1.2.5 cannot run, as declared
ok Alpine 3.22 musl 1.2.5 cannot run, as declared
ok Alpine 3.21 musl 1.2.5 cannot run, as declared
```

Proving the refusal is honest, but the goal is to serve those users. musl is not an older glibc, so lowering the glibc floor (#181) does nothing here — it needs a separately linked package.

## Scope

This is real work, not a packaging flag:

1. **Link the host cohort against musl.** `x86_64-unknown-linux-musl` and `aarch64-unknown-linux-musl` are already in the toolchain (the guest agent cohort uses them), so the pure-Rust binaries — `capsem`, `capsem-service`, `capsem-process`, `capsem-tui`, `capsem-mcp*`, `capsem-gateway`, `capsem-admin`, `capsem-mock-server`, `capsem-bench-rs` — are the tractable part.
2. **Decide what happens to `capsem-app`.** The Tauri shell links webkit2gtk/GTK. Alpine carries those, but Tauri on musl is the unproven piece. A CLI/service-only Alpine package may be the right first cut, with the desktop shell out of scope.
3. **Service registration.** The installer emits systemd units on Linux; Alpine is OpenRC. `generate_unit()` gains a sibling, and the install/uninstall/update paths need to select between them.
4. **`.apk` packaging and signing**, alongside the existing `.deb` and macOS `.pkg` rails.
5. **`install.sh`** currently hard-fails without `apt`; it needs an `apk` branch.
6. **Manifest and release lanes** carry a third artifact family.

## Done when

The four Alpine rows in `[platforms.linux.distributions]` flip from `cannot run` to `runs`, driven by the musl package rather than by editing the expectation. The proof derives the expectation from each image's real libc, so it follows this change without being updated.

## Related

- #174 — the deb declared no libc floor at all (fixed)
- #181 — lower the glibc floor to cover Ubuntu 22.04 / Debian 12

Contributor guide

Open the contributing guide

Research direction

Start by inspecting the existing musl guest-agent toolchain targets and the current .deb packaging and release lanes. Then trace generate_unit(), the install/uninstall/update paths, and install.sh to determine service selection and the apk branch; done means the four Alpine platform rows report runs using the musl package, with the manifest and release artifacts included.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust, shell
Domain
build-system, devops, release
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.