sqzass.git

sqzass

~ A static site generator written in Rust
git clone https://github.com/debuman/sqzass.git
commit fa3eac57026abcb2c908dd633dd86ca72233936a
parent 385fba8592cb5a31aaf8a71bc1bbd573cc695b6b
Author: sqzer <110329244+sqzer-x@users.noreply.github.com>
Date: Fri, 31 Jul 2026 23:57:31 +0900

배포 채널을 curl·cargo·AUR 셋으로 못박는다

Homebrew·Snap·Nix를 조사했고 셋 다 하지 않기로 했다. 코드로 만든 건 없어서
되돌릴 것도 없지만, 근거를 안 적어 두면 같은 조사를 다시 하게 된다.

셋을 고른 기준은 승인받을 사람이 없다는 것이다. 우리가 고치면 그날 반영되고,
대상도 겹치지 않는다 — curl은 CI와 서버, cargo는 Rust를 이미 가진 사람,
AUR은 Arch 사용자다.

안 하는 이유는 셋 다 "안 된다"가 아니다.

Homebrew는 core의 notability 기준에 걸린다(스타·포크·워처 전부 0). 자기 탭은
오늘도 되지만 릴리스의 macOS 타깃이 aarch64 하나뿐이라 소스 빌드 formula여야
하고, 그건 `cargo install`과 거의 같은 것을 준다.

Snap은 strict + home + network-bind로 기술적으로 된다. 이 도구는 홈 디렉터리
조회도 Command::new도 런타임 HTTP 클라이언트도 없다. 안 하는 건 관객 문제다 —
snap의 관객은 Ubuntu 데스크톱인데 이 도구의 사용자는 이미 셋을 가진 개발자이고,
배포 문서 1순위가 ubuntu-latest에서 cargo run으로 도는 GitHub Pages라 snapd가
낄 자리가 없다. 결정적으로 개발 머신이 Arch라 snapd도 LXD도 없어 검증할 수
없다. 눈으로 확인하기 전에 완료라고 하지 않는 레포에서 그건 그냥 못 하는 것이다.

Nix는 오히려 잘 맞는다. Cargo.lock이 커밋돼 있고 락에 git 소스가 0건이라
cargoLock.lockFile 한 줄로 벤더링이 끝나며, 네트워크 없는 네임스페이스에서
`cargo test --release --offline --locked`가 147개 전부 통과한다 — Nix 샌드박스가
요구하는 조건을 이미 만족한다는 뜻이다. 그런데도 미루는 건 이 머신에 nix가 없어
nix build를 돌려 볼 수 없고, Nix 사용자가 있다는 신호가 아직 없어서다.

다시 꺼낼 조건도 적어 뒀다. "있으면 좋겠다"가 아니라 그 생태계 사용자의 요청,
또는 검증할 환경이 생기는 것이다.

곁가지로 AUR README가 아직 "올리기 전"처럼 읽혀서 등록 완료 사실을 첫 줄에
적었다. 실제로 어제 올렸는데 문서만 그 이전 상태였다.

Diffstat:
Apackaging/README.md | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpackaging/aur/README.md | 4++++
2 files changed, 58 insertion(+), 0 deletion(-)

diff --git a/packaging/README.md b/packaging/README.md
@@ -0,0 +1,54 @@
+# 배포 채널
+
+셋만 지원한다. **curl**, **cargo**, **AUR**이다.
+
+| 채널 | 무엇 | 어디 |
+|---|---|---|
+| curl | `install.sh` 한 줄, 그리고 릴리스 타르볼을 직접 받는 길 | `docs/static/install.sh`, `.github/workflows/release.yml` |
+| cargo | `cargo install --git`, 소스 빌드 | 별도 파일 없음 |
+| AUR | 소스에서 짓는 `sqzass` 패키지 | `aur/` |
+
+셋을 고른 기준은 하나다. **승인받을 사람이 없고, 우리가 고치면 그날 반영된다.**
+셋 다 대상이 겹치지 않는다 — curl은 CI와 서버, cargo는 Rust를 이미 가진 사람,
+AUR은 Arch 사용자다.
+
+## 안 하기로 한 것
+
+셋 다 "안 된다"가 아니라 "지금 할 값이 아니다"이다. 근거를 적어 두는 건
+같은 조사를 두 번 하지 않기 위해서다.
+
+**Homebrew.** homebrew-core는 notability 기준이 있고 이 레포는 스타·포크·워처가
+전부 0이라 지금 내면 거절된다. 자기 탭은 승인이 필요 없어 오늘도 되지만, 릴리스가
+내는 macOS 타깃이 `aarch64-apple-darwin` 하나뿐이라 바이너리 formula로는 인텔 맥이
+깨지고 소스 빌드 formula여야 한다. 그 formula가 주는 건 `cargo install`과 거의
+같다.
+
+**Snap.** strict confinement + `home` + `network-bind`로 기술적으로는 된다 —
+이 도구는 홈 디렉터리 조회도, `Command::new`도, 런타임 HTTP 클라이언트도 없는
+얌전한 CLI다. 안 하는 이유는 관객이다. snap의 관객은 Ubuntu 데스크톱이고 이
+도구의 사용자는 이미 curl·cargo·AUR을 가진 개발자다. 배포 문서 1순위(weight 10)가
+`ubuntu-latest`에서 `cargo run`으로 도는 GitHub Pages라 snapd가 낄 자리가 없다.
+비용은 반대로 확실하다: `snapcraft.yaml`은 `./`·`snap/`·`build-aux/snap/`에만
+놓을 수 있어 이 디렉터리 관례를 깨야 하고, 이름 등록이 수동 심사이며, 스토어
+토큰이 1년마다 만료된다. 무엇보다 **개발 머신이 Arch라 snapd도 LXD도 없어서
+검증할 수 없다** — 이 레포는 눈으로 확인하기 전에 완료라고 하지 않는다.
+
+**Nix.** 기술적으로는 오히려 잘 맞는다. `Cargo.lock`이 커밋돼 있고 락에 git
+소스가 0건이라 `cargoLock.lockFile` 한 줄로 벤더링이 끝나고, 네트워크 없는
+네임스페이스에서 `cargo test --release --offline --locked`가 147개 전부
+통과한다(Nix 샌드박스가 요구하는 조건을 이미 만족한다는 뜻이다). `ldd`가
+libc·libm·libgcc_s만 말해서 `buildInputs`도 빈다. 그런데도 안 하는 이유는 둘이다.
+**개발 머신에 nix가 없어 `nix build`를 돌려 볼 수 없고**, Nix 사용자가 실제로
+있다는 신호가 아직 없다. nixpkgs는 별개로 더 무겁다 — 머지되면 버전 범프와
+MSRV 파손 대응을 영구히 떠안는다.
+
+## 다시 꺼낼 조건
+
+"있으면 좋겠다"는 근거가 아니다. 이런 게 근거다.
+
+- 그 생태계 사용자가 **요청한** 이슈나 PR
+- 검증할 환경이 생겼을 때 — Nix는 nix 있는 머신, Snap은 Ubuntu VM
+- Homebrew core는 notability를 넘겼을 때
+
+늘릴 때 드는 진짜 비용은 파일 하나가 아니라 릴리스마다 반복되는 절차와, 그
+채널에서만 나오는 질문에 답하는 시간이다.
diff --git a/packaging/aur/README.md b/packaging/aur/README.md
@@ -1,5 +1,9 @@
 # AUR
 
+<https://aur.archlinux.org/packages/sqzass> — **2026-07-31 등록 완료**,
+메인테이너 `sqzer`, v0.1.0-1. 아래 "처음 올릴 때"는 이미 지난 절차이고, 지금
+필요한 건 "버전을 올릴 때"뿐이다.
+
 소스에서 빌드하는 `sqzass` 패키지다. 미리 빌드된 바이너리를 받는 `sqzass-bin`은
 만들지 않았다 — Rust 도구를 소스에서 빌드하는 건 Arch에서 정상이고, 패키지가 둘이면
 어느 쪽이 최신인지 묻는 이슈가 생긴다.