# Gifsicle 1.96 — corresponding source & build recipe **Binary covered:** `gifsicle` (VidConvert's optional GIF post-optimization pass). **Version:** 1.96 (© Eddie Kohler). **License basis:** gifsicle is **GPLv2-only** (`COPYING` in the tarball, no "or later" clause), so its complete corresponding source is provided under **GPLv2 §3(a)** — the source shipped on the same medium/host, next to the binary, free of charge, kept available for as long as the gifsicle binary is distributed. ## Source Download `gifsicle-1.96.tar.gz` (≈590 KB) from the author's official site: https://www.lcdf.org/gifsicle/gifsicle-1.96.tar.gz Mirror (identical release): https://github.com/kohler/gifsicle (tag `v1.96`). Stage the tarball beside this file as `gifsicle-1.96.tar.gz` before publishing, and record its SHA-256: shasum -a 256 gifsicle-1.96.tar.gz # write the result into SHA256SUMS here **Staged tarball** (from `https://www.lcdf.org/gifsicle/gifsicle-1.96.tar.gz`, staged 2026-07-14): sha256 `fd23d279681a6dfe3c15264e33f344045b3ba473da4d19f49e67a50994b077fb`, size 587298 bytes. Verified: valid gzip, top-level dir `gifsicle-1.96/`, contains `COPYING` (GPLv2), `configure.ac` → `AC_INIT([gifsicle],[1.96])` — matches the pinned gifsicle 1.96 in `Vendor/MANIFEST.md`. ## Build recipe (upstream's documented one-liner) The vendored macOS/arm64 binary is produced from the unmodified tarball with gifsicle's own documented build: tar -xzf gifsicle-1.96.tar.gz cd gifsicle-1.96 ./configure make # binary at ./src/gifsicle No configure flags, no patches, no third-party libraries. `otool -L` on the shipped binary shows it links **only** `/usr/lib/libSystem.B.dylib` (the macOS System Library) — covered by the GPL System Library exception — so **no additional third-party source enters gifsicle's corresponding-source scope**. This replaces the earlier provenance note in `Vendor/MANIFEST.md` ("copied from /opt/homebrew/bin/gifsicle"), which was not a build recipe; the binary is byte-reproducible from the steps above. ## Note on VidConvert's use gifsicle runs as an *optional, failure-tolerated* post-pass (`[--lossy[=N]] -O3`); if it is absent or fails, VidConvert keeps the unoptimized ffmpeg GIF. It is a separate helper executable invoked via `Process`/argv — never linked into the app.