Разработчик Fresh пытался сделать установку своей программы простой для всех — и в итоге увяз в болоте Linux-пакетов. Для Windows и macOS всё терпимо: там winget (некрасиво, но работает) и homebrew. А вот под Linux пришлось выпускать Fresh сразу в куче форматов: npm, cargo на crates.io, cargo-binstall, AppImage, Flatpak, deb, rpm, AUR (исходники и готовый -bin), nix, mise, homebrew for Linux, Terra, Gentoo GURU, плюс tar-архив с готовыми бинарниками. Каждый вариант подходит кому-то, но ни один не подходит всем, и у каждого свои болячки.
Например, Flatpak — это песочница для GUI-приложений, а Fresh — терминальный TUI, который спокойно лазает по системе и сети. Чтобы заставить Flatpak работать, приходится передавать ужасные флаги. AppImage стартует слишком медленно из-за FUSE и squashfs, требует FUSE в системе, а из-за минимальной версии libc всё равно не работает на старых дистрибутивах. Так что статическая линковка решила бы проблему лучше, чем AppImage. Плюс многие пользователи просто не доверяют AppImage, Flatpak и Snap.
Особенно больно с Debian-семейством. Чтобы попасть в официальные репозитории Debian и Ubuntu, нужно упаковать все зависимости Rust тоже как пакеты Debian. Политика правильная, но времени на это нет, а вендорить исходники в deb-пакет нельзя. Плюс старые Ubuntu не могут запустить бинарник, собранный под новые, из-за libc. Приходится либо собирать в старом контейнере с непропатченными пакетами, либо бросать пользователей старых машин.
deb и rpm не в официальных репозиториях — значит, нет и автоматических обновлений через apt-get upgrade или dnf. Было бы здорово, если бы apt и dnf умели сами ходить по URL и проверять новую версию отдельного пакета, но сейчас так нельзя.
Были и неожиданные сюрпризы. mise работал, а потом сломался без изменений со стороны разработчика: GitHub ротировал сертификат системы сборки, а mise упорно держал старый доверенный корень. Пришлось чинить самому. AUR тем временем перешёл в read-only из-за инцидентов безопасности, так что Fresh пропустил несколько релизов. Выход — попытаться попасть в Arch extra вместо AUR.
Вывод: дистрибутивные каналы не вывозят. Поэтому Fresh переходит на статически слинкованный бинарник на musl со встроенным самообновлением, которое пользователь запускает по команде. Это станет основным способом установки. Старые пакеты пока продолжат поддерживать, но статический бинарник — рекомендованный вариант. Да, это риск: портируемость может подкинуть сюрпризы. Зато Fresh весит ~12MB при скачивании и ~35MB распакованный, а автор ещё и ужимает размер. В общем, он фактически пишет свой мини-менеджер пакетов. Потому что иначе никак.