22 октября 2015 г. в 18:09
0install и светлое будущее распространения ПО в Linux

С некоторого периода использования GNU/Linux Debian я стал чувствовать, что в устройстве репозиториев что-то не так.

Тяжело так настроить получение пакетов, чтобы игры и браузеры всегда имели самые последние версии, а системные компоненты оставались наиболее стабильными, т.к. тогда будут возникать проблемы зависимостей. Добавить свой пакет в официальный репозиторий является огромным трудом, т.к. обычного прохожего туда так просто не пустят, а при использовании PPA (Personal Package Archives) пользователю сперва необходимо добавить ваш репозиторий к себе в систему, прежде чем он увидит вашу программу в своём пакетном менеджере.

Тогда для решения этой проблемы я написал заготовку для аналога AUR (Arch User Repository). Суть в том, что существовал список программ в git репозитории, в котором описывалась информация о программах и команды для компиляции программ на своём компьютере. Но и такая схема работы мне не нравилась, хотя бы потому, что пользователю будет необходимо держать весь пакет для разработки на своей машине, чтобы иметь возможность компилировать приложения.

Тогда я узнал о проекте 0install, который хоть и мало известен в рунете, но и по сей день успешно развивается.

Что такое 0install

0install, или же zero install - это децентрализованное кроссплатформенное решение для установки программного обеспечения для Linux, Unix, OS X и Windows. Репозиторием является сайт распространителя ПО, поддерживаются автообновление и цифровые подписи для источников информации о ПО. 0install не имеет собственный формат упаковки программ, а использует обычные tar или zip архивы. Мета-информация о программах хранится в xml файле.

В отличие от других попыток создать единый стандарт для пакетов Linux программ, 0install ставит целью распространение лишь прикладного ПО, оставляя традиционным пакетным менеджерам распространение системного обеспечения. Более того, он интегрируется в систему (список поддерживаемых платформ), позволяя использовать необходимые для работы библиотеки из системы, если такие присутствуют.

А чё там у каноникл?

Click пакеты, которые скоро будут внедрены в Ubuntu, близки к тому, что я хотел бы видеть. Canonical предоставляет удобную среду разработки, где эти пакеты можно генерировать, каждый из пакетов запускается в песочнице, чтобы не навредить системе и хоть отсутствует система зависимостей, но можно ссылаться на фреймворки, которые загружаются автоматически и используются несколькими программами одновременно.

Однако, не решена проблема централизации: как и в традиционных системах управления пакетами, существует официальный репозиторий, пусть и с упрощёнными требованиями к принятию пакетов, а остальные репозитории необходимо подключать вручную.

Внутри click пакеты устроены как deb пакеты, с добавлением нескольких новых файлов. Я считаю, можно было бы упростить формат. Ну и главное, на данный момент click пакеты поддерживаются только в Ubuntu и скорее всего, так и останется, т.к. часто решения Ubuntu слишком сильно интегрированы в этот дистрибутив.

Устройство zero install

Информация об программах хранится на серверах распространителей ПО в xml файлах, которые можно открыть и из браузера. Достаточно перетащить адрес такой страницы в открытое окно 0install, чтобы был добавлен источник и 0install подготовился для установки программы. Если подтвердить установку, то по указанным в xml файле ссылкам будут скачаны программа и зависимости (если такие имеются) и каждая из программ будет размещена в папке ~/.config/

В список приложений вашей системы, как и обычно, добавится пункт для открытия нового приложения, но если посмотреть, его адрес будет представлять собой нечто вида 0launch http://evil.com/corp.xml

Таким образом, если вы удалите кэш, программа просто будет заново скачана и всё равно запущена. Тем не менее, это не означает, что при отсутствии интернет-соединения нельзя открыть приложения: если кэш на месте, то возможность запуска не пропадает.

Зависимости

Для сопровождающего существует возможность указать зависимости для программы. В случае, если уже установлена библиотека, которую поддерживает и другая программа, то обе программы будут использовать эту библиотеку. Иначе, нет проблемы в том, чтобы иметь несколько версий библиотек одновременно. Также, можно установить несколько версий одной и той же программы и они не будут конфликтовать, в отличии от традиционных пакетных менеджеров, т.к. находятся в разных папках и не взаимодействуют между собой.

Безопасность

Как же быть уверенным в том, что некий вредоносный код не перезапишет бинарник программы? В 0install генерируются контрольные суммы для каждого из файлов программы. Если хотя бы один из них отличается, то запуск будет прерван и будет предложено заново скачать программу. XML файлы с источниками программ также имеют подпись ключом сопровождающего, поэтому даже в случае взлома сервера сопровождающего, злоумышленник не будет иметь возможности вернуть вам вредоносную версию программы не имея закрытого ключа сопровождающего.

Минусы

Но несмотря на все достоинства, 0install не готов к широкому использованию прямо сейчас. На странице всех известных источников программ общее количество программ не дотягивает до 2 тысяч, при этом большинство из них сильно устарели. Проекту требуется наполнение современным и качественным контентом. Также пользователи 0install вынуждены доверять сопровождающим, как и при использовании традиционных систем репозиториев, потому что на данный момент ещё не внедрён механизм запуска программ в песочницах. Но в этом направлении ведутся работы, а протестировать можно устаревший прототип песочницы (за 2010 год).

Я тоже создал свой репозиторий для 0install, который намерен наполнять и обновлять. Уже там есть несколько приложений. Первая версия 0install была выпущена ещё в 2005 году. К сожалению, проект развивается медленно, но разработка не останавливается и у разработчиков ещё множество идей по улучшению программы. Уверен, что 0install облегчит распространение прикладных программ в GNU/Linux, что всем пойдёт на пользу.

Upd 2016-07-07: У 0install есть интересные особенности, но вцелом я давно разочаровался в проекте. Развитие идёт больше 10 лет, но в каталоге программ мало, и из тех большинство только для windows, эксперимент с песочницой так и остался экспериментом, да и утилиты для подготовки пакетов неудобные, чаще вручную редактировал xml файлики. Ну а ещё я написал статью о новых самодостаточных пакетах snap и flatpak и различиях в них, рекомендую почитать.