- PVSM.RU - https://www.pvsm.ru -
TL;DR: может ли Haiku получить надлежащую поддержку пакетов приложений, к примеру каталогов приложений (как .app
в Mac) и/или образов приложений (Linux AppImage
)? Мне кажется, это будет достойным дополнением, которое правильно внедрить проще, чем в других системах, поскольку большая часть инфраструктуры уже есть.
Неделю назад [1] я открыл для себя Haiku, неожиданно хорошую систему. Ну а поскольку я давно интересуюсь каталогами и образами приложений (вдохновленными простотой Macintosh), то неудивительно, что мне в голову пришла идея…
Для полного понимания: я создатель и автор AppImage, формата распространения приложений Linux, нацеленного на простоту Mac и предоставляющего полное управление авторам приложений и конечным пользователям (хотите знать больше — см. wiki [2] и документацию [3]).
Давайте немного, чисто теоретически, порассуждаем: что нужно сделать для того, чтобы получить AppImage [4], или нечто подобное, на Haiku? Необязательно создавать что-то прямо сейчас, ведь система, которая уже есть в Haiku, работает удивительно, а вот воображаемый эксперимент получился бы неплохой. А еще он демонстрирует утонченность Haiku, по сравнению с рабочими окружениям Linux, где подобные вещи ужасно трудны (имею право так говорить: 10 лет уже маюсь с отладкой).
На Macintosh System 1 каждое приложение было отдельным файлом, "управляемым" в Finder. Используя AppImage я пробую пересоздать этот же пользовательский опыт на Linux.
Во-первых, а что такое AppImage? Это система для выпуска приложений сторонних разработчиков (к примеру, Ultimaker Cura [5]), позволяющая выпускать приложения, когда и как им охота: не нужно знать особенности различных дистрибутивов, политик сборки или инфраструктуры сборки, не нужна поддержка сопровождающих, и они не указывают пользователям, что (не)можно устанавливать у себя на компьютерах. AppImage следует понимать как что-то, похожее на пакет для Mac в формате .app
внутри образа диска .dmg
. Основное отличие в том, что приложения не копируются, а остаются внутри AppImage всегда, примерно так же, как пакеты Haiku .hpkg
монтируются, и никогда не устанавливаются в обычном смысле.
AppImage за более чем 10 лет существования получил некоторую притягательность и популярность: сам Линус Торвальдс публично одобрил его, а распространенные проекты (к примеру, LibreOffice, Krita, Inkscape, Scribus, ImageMagick) приняли его в качестве основного способа распространения непрерывных или ночных сборок, не мешающих установленным или не установленным приложениям пользователей. Однако рабочие окружения и дистрибутивы Linux чаще всего по-прежнему цепляются за традиционную, централизованную модель распространения на основе сопровождающих и/или продвигают собственные корпоративные бизнес и/или инженерные программы на основе Flatpak [6] (RedHat, Fedora, GNOME) и Snappy [7] (Canonical, Ubuntu). Доходит до смешного [8].
runtime.c
), с последующим образом файловой системы SquashFS [9].Вроде все просто.
А эти вещи все усложняют:
/usr/share
. Это надо как-то исправлять. Помимо этого надо либо экспортировать LD_LIBRARY_PATH
, либо исправлять rpath
для того, чтобы загрузчик мог найти связанные библиотеки. У первого способа есть свои недостатки (которые обходятся сложными способами), а второй просто громоздкий..desktop
в нужное место в /usr
для общесистемной установки, или в $HOME
для индивидуальной. Иконки определенных размеров, согласно спецификации XDG, нужно поместить в определенные места в usr
или $HOME
, после чего запустить команды в рабочем окружении для обновления кэша иконок, или надеяться, что менеждер рабочего окружения сообразит и автоматически все обнаружит. Аналогично с типами MIME. В качестве обходного способа предлагается использовать тот же сервис, который помимо установки признака исполнимости будет, при наличии иконок и проч. в AppImage, копировать их из AppImage в нужные места согласно XDG. При удалении или перемещении сервис предполагаемо будет зачищать все. Конечно, есть различия в поведении у каждого рабочего окружения, в форматах графических файлов, их размерах, местах хранения и способах обновления кэшей, что и рождает проблему. Короче, этот способ — костыль./usr
и $HOME
. Также этот сервис выполняет зачистку если AppImage удаляется или перемещается. Из-за того, что каждый менеджер рабочего стола ведет себя чутка по-разному, к примеру, в каких форматах принимает иконки, в каких размерах или местах, это все реально болезненно.1.png
надо открывать с помощью Krita, а 2.png
— с помощью GIMP.
Местом хранения cross-desktop спецификаций, используемых в GNOME [15], KDE [16] и Xfce [17] является freedesktop.org
Достижение уровня утонченности, глубоко вплетенного в рабочее окружение Haiku, затруднено, если не сказать «невозможно», из-за спецификаций XDG от freedesktop.org [18] для cross-desktop, а также реализаций менеджеров рабочего стола на основе этих спецификаций. В качестве примера можно привести одну общесистемную иконку Firefox: видимо, авторам XDG и в голову не пришло, что у пользователя может быть установлено несколько версий одного и того же приложения.
Иконки разных версий Firefox
Мне было интересно, чему мир Linux мог бы научиться у Mac OS X, чтобы не лажать при системной интеграции. Если у вас есть время и вы занимаетесь таким — обязательно почитайте, что сказал Арно Гурдол, один из первых инженеров Mac OS X:
Мы хотели, чтобы установить приложение было так же просто, как перетащить иконку приложения откуда-нибудь (сервер, внешний диск) на диск вашего компьютера. Для этого в пакете приложения сохранена вся информация, включая иконки, версию, обрабатываемый тип файла, тип схем URL, которую система должна знать для обработки приложения. Сюда же относится информация для 'централизованного хранения' в базе данных Icon Services и Launch Services. Для поддержки производительности приложения 'обнаруживаются' в нескольких 'хорошо известных' местах: в системном и пользовательском каталоге Applications, а также в некоторых других автоматически, если пользователь перешел в Finder в каталог, содержащий приложение. На практике это очень хорошо сработало.
https://youtu.be/qQsnqWJ8D2c [19]
Apple WWDC 2000 сессия 144 — Mac OS X: упаковка приложений и распечатка документов.
Ничего подобного из этой инфраструктуры нет на рабочих окружениях Linux, поэтому мы ищем обходные пути вокруг структурных ограничений в проекте AppImage.
Неужто Haiku спешит на помощь?
И еще: платформы Linux в качестве основы рабочих окружений, как правило, до того недоспецифицированны, что многие вещи, которые весьма просты в согласованной системе с полным стеком, разочаровывают фрагментированностью и сложностью в Linux. Я посвятил целый доклад вопросам, связанным с платформой Linux для рабочих окружений (знающие разработчики подтвердили: все так и останется еще очень надолго).
Мой доклад по проблемам рабочих окружений Linux в 2018
Даже Линус Торвальдс признал, что именно из-за фрагментации идея рабочих окружений не удалась.
Приятно видеть Haiku!
Хотя наивный подход к "переносу" AppImage на Haiku заключается в простой попытке сборки (в основном runtime.c и сервиса) его компонентов (что может быть даже и возможно!), это не принесет особой пользы для Haiku. Потому что на самом деле большинство этих проблем решено на Haiku и концептуально обоснованно. Haiku предоставляет именно те кирпичики для системной инфраструктуры, которые я так долго искал в рабочих окружениях на Linux и не мог поверить, что их там нет. А именно:
Верите или нет, но это не могут побороть многие пользователи Linux. На Haiku все делается автомагически!
Два файла png. Обратите внимание на разные иконки, показывающие, что они будут открываться разными приложениями по двойному щелчку. Также обратите внимание на выпадающее меню "Открыть с помощью:", где пользователь может выбрать отдельное приложение. Как просто!
Выглядит так, что многие костыли и обходные пути, нужные AppImage на Linux, становятся ненужными на Haiku, имеющую в своей основе простоту и утонченность, благодаря которым она справляется с большинством наших нужд.
Это подводит к большому вопросу. Если бы на Haiku создать систему вроде AppImage оказалось на порядок проще, чем на Linux, стоило бы этим заняться? Или же Haiku с ее системой пакетов hpkg фактически устранила необходимость разработки подобной идеи? Что ж, для ответа надо взглянуть на мотивацию существования AppImages.
Посмотрим на нашего конечного пользователя:
Один из разработчиков пишет:
По сути, обоснование такое: сценарий использования настолько редкий, что оптимизация для него не имеет смысла; обработка его, как особого случая, в HaikuPorts, кажется более чем приемлемой.
Комментарий разработчика:
Технически, это уже возможно с командой mount. Конечно, мы сделаем GUI для этого, как только наберется достаточно заинтересованных пользователей.
.hpkg
, которые переносят, к примеру python, из тысяч файлов в один. Но если есть, к примеру, Scribus, использующий python, то мне приходится иметь дело минимум с двумя файлами. И я должен позаботиться о том, чтобы сохранить их работающие друг с другом версии.
Многочисленные версии AppImages, запущенный рядом на одном Linux
Давайте посмотрим с точки зрения разработчика приложений:
.exe
для Windows, .dmg
для Mac и .AppImage
для Linux. А может, я захочу монетизировать доступ к этой странице, все может быть? Что мне надо разместить там для Haiku? Достаточно файла .hpkg
с зависимостями только от HaikuPorts.hpkg
, но скорее всего, такое не приветствуется.
Обычная страница загрузки приложения. Что же разместить здесь для Haiku?
Станут ли комплекты (существующие в виде каталогов приложений, как AppDir или .app
в стиле Apple) и/или образы (в виде сильно модифицированных AppImages или .dmg
от Apple) приложений полезным дополнением для рабочего окружения Haiku? Или это разбавит целостную картину и приведет к фрагментации, а следовательно, добавит сложности? Я разрываюсь: с одной стороны, красота и утонченность Haiku основаны на том, что обычно есть один способ сделать что-то, а не много. С другой стороны, большая часть инфраструктуры для каталогов и/или комплектов приложений уже на месте, поэтому система взывает к тому, чтобы на свои места встали и оставшиеся несколько процентов.
Согласно разработчику mr. waddlesplash [20]
На Linux они (каталоги и комплекты приложений, — прим. переводчика) скорее всего являются техническим решением системных проблем. На Haiku мы предпочитаем просто решать системные проблемы.
Подождите, сделаем быструю проверку на реальность: по факту каталоги приложений — уже часть Haiku:
Каталоги приложений уже существуют на Haiku, но пока не поддерживаются в файловом менеджере
Они просто не так хорошо поддерживаются, как, скажем, в Macintosh Finder. Насколько было бы круто, если бы каталог QtCreator имел бы в верхнем левом углу имя и иконку "QtCreator", запускающие приложение по двойному щелчку?
Немного ранее я уже спрашивал [21]:
Вы уверены, что запустите свои приложения десятилетней давности сегодня, когда все магазины приложений и репозитории дистрибутивов забудут о них и их зависимостях? Вы уверены, что по-прежнему сможете получить доступ к своей нынешней работе в будущем?
Имеется ли уже ответ со стороны Haiku, или каталоги и комплекты приложений смогут тут помочь? Я думаю, смогут.
Согласно mr. waddlesplash:
Да, у нас есть ответ на вопрос: мы просто будем поддерживать эти приложения столько, сколько нужно, пока кто-нибудь не сможет правильным способом прочитать их форматы файлов или обеспечить функциональность один к одному. Наше стремление поддерживать работу приложений BeOS R5 на Haiku — прямое тому доказательство...
Это точно!
Я могу представить мирное сосуществование hpkg, каталогов и образов приложений:
.hpkg
.hpkg
(примерно 80% всех случаев).hpkg
, приложения выиграют при переходе на инфраструктуру с каталогами приложений (к примеру, QtCreator): они будут распространяться в виде .hpkg
, как и раньше.mr. waddlesplash пишет:
Если все, что нужно, это — просмотр приложений в
/system/apps
, вместо этого надо сделать каталоги в Deskbar более управляемыми для пользователей, поскольку/system/apps
не предназначен для того, чтобы пользователи регулярно открывали и смотрели его (в отличие от MacOS). Для таких ситуаций у Haiku другая парадигма, но этот вариант, по идее, приемлем.
.hpkg
, монтируемые средствами системы, а после завершения приложения — размонтируемые. (Возможно, файловый менеджер мог бы помещать файлы .hpkg
в образы приложений, автоматически или по требованию пользователя — ну, как когда перетаскиваешь приложение на сетевой каталог или внешний диск. Это же просто песня! А точнее поэзия — хайку.) С другой стороны, пользователь может захотеть установить содержимое образа в виде файлов.hpkg
, после чего они будут обновляться и обрабатываться точно также, как если бы были установлены через HaikuDepot… Надо провести мозговой штурм).Цитата от mr. waddlesplash:
Запуск приложений с внешних дисков или сетевых каталогов потенциально может быть полезным. А добавление возможности настройки большего количества "зон" для pkgman определенно станет хорошей функцией.
Подобная система будет использовать преимущества hpkg, каталогов и образов приложений. Они хороши и по отдельности, но вместе станут непобедимы.
Для Haiku есть инфраструктура, предоставляющая простой и утонченный пользовательский интерфейс для ПК, и далеко выходящая за рамки того, что обычно предоставляется для ПК на Linux. Система пакетов .hpkg
— один из таких примеров, но остальные части системы также пропитаны утонченностью. Тем не менее, от правильной поддержки каталогов и образов приложений Haiku бы выиграла. Как это лучше всего сделать — стоит обсудить с людьми, знающими Haiku, ее философию и архитектуру намного лучше, чем я. В конце концов я пользуюсь Haiku чуть больше недели. Но тем не менее, я считаю, что этот свежий взгляд окажется полезен дизайнерам, разработчикам и архитекторам Haiku. По крайней мере, я с радостью побуду для них «спарринг-партнером». У меня более 10 лет практического опыта работы с каталогами и комплектами приложений для Linux, и мне хотелось бы найти им применение для Haiku, для концепции которой, по моему мнению, они подходят идеально. Предложенные мною потенциальные решения вовсе не являются единственно верными для проблем, которые я описал, и если команда Haiku решит найти другие, более изящные, — я только всеми руками за. В принципе, я уже обдумываю идею того, как сделать систему hpkg
еще более удивительной, не меняя способа ее работы. Оказывается, команда Haiku давно думала о комплектах приложений при внедрении системы управления пакетами, но к сожалению, (мне кажется) идея ушла в "устаревшие". Может быть, пришло время возродить ее?
Попробуйте сами! Ведь проект Haiku предоставляет образы для загрузки с DVD или USB, формируемые ежедневно [22].
Появились вопросы? Приглашаем вас в русскоязычный telegram-канал [23].
Обзор ошибок: Как выстрелить себе в ногу в C и C++. Сборник рецептов Haiku OS [24]
От автора [25] перевода: это восьмая и заключительная статья из цикла про Haiku.
Список статей: Первая [1] Вторая [26] Третья [27] Четвертая [28] Пятая [29] Шестая [30] Седьмая [31]
Автор: Finnix
Источник [32]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/329110
Ссылки в тексте:
[1] Неделю назад: https://habr.com/ru/company/southbridge/blog/461141/
[2] wiki: https://ru.wikipedia.org/wiki/AppImage
[3] документацию: https://docs.appimage.org/
[4] AppImage: https://appimage.org/
[5] Ultimaker Cura: https://ultimaker.com/software/ultimaker-cura
[6] Flatpak: https://ru.wikipedia.org/wiki/Flatpak
[7] Snappy: https://ru.wikipedia.org/wiki/Snappy_%28%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0%D0%BC%D0%B8%29
[8] до смешного: https://blogs.gnome.org/hughsie/2019/07/12/gnome-software-in-fedora-will-no-longer-support-snapd/
[9] SquashFS: https://en.wikipedia.org/wiki/SquashFS
[10] excludelist: https://github.com/AppImage/pkg2appimage/blob/master/excludelist
[11] установить исполняемый бит: https://discourse.appimage.org/t/how-to-run-an-appimage/80
[12] обсуждение: https://wiki.kubuntu.org/ELFIconSpec
[13] реализации: https://github.com/pld-linux/elficon
[14] уведомления: https://developer.gnome.org/notification-spec/
[15] GNOME: https://ru.wikipedia.org/wiki/GNOME
[16] KDE: https://ru.wikipedia.org/wiki/KDE
[17] Xfce: https://ru.wikipedia.org/wiki/Xfce
[18] XDG от freedesktop.org: https://www.freedesktop.org/wiki/
[19] https://youtu.be/qQsnqWJ8D2c: https://youtu.be/qQsnqWJ8D2c
[20] mr. waddlesplash: https://medium.com/u/f103a52f4b96?source=post_page-----1803a11f9748----------------------
[21] спрашивал: https://medium.com/@probonopd/historic-software-can-your-package-manager-handle-this-86563a46f8b5
[22] ежедневно: https://download.haiku-os.org/?source=post_page---------------------------
[23] telegram-канал: https://t.me/HaikuOS_RU_chat
[24] Как выстрелить себе в ногу в C и C++. Сборник рецептов Haiku OS: https://habr.com/ru/company/pvs-studio/blog/461255/
[25] автора: https://habr.com/ru/users/Finnix/
[26] Вторая: https://habr.com/ru/company/southbridge/blog/461451/
[27] Третья: https://habr.com/ru/company/southbridge/blog/462815/
[28] Четвертая: https://habr.com/ru/company/southbridge/blog/463105/
[29] Пятая: https://habr.com/ru/company/southbridge/blog/463803/
[30] Шестая: https://habr.com/ru/company/southbridge/blog/464819/
[31] Седьмая: https://habr.com/ru/company/southbridge/465241/
[32] Источник: https://habr.com/ru/post/466301/?utm_campaign=466301&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.