Введение

Тип компьютерной программы

Портативное приложение (portable app), иногда также называемое автономным, — это программа, разработанная для работы без изменения других файлов или необходимости установки дополнительного программного обеспечения. Таким образом, его можно легко добавлять, запускать и удалять с любого совместимого компьютера без установки или побочных эффектов. На практике портативное приложение часто хранит созданные пользователем данные и настройки конфигурации в той же директории, где и находится само приложение. Это упрощает перенос программы с пользовательскими предпочтениями и данными между разными компьютерами. Программа, не имеющая параметров конфигурации, также может быть портативным приложением, или хранить свои файлы конфигурации (например, INI-файл) в профиле пользователя, но сегодня многие портативные приложения это делают; однако многие по-прежнему хранят файлы конфигурации в портативной директории. Другой вариант, поскольку пути к файлам часто отличаются на разных компьютерах из-за различий в назначении букв дисков, заключается в том, что портативные приложения могут хранить их в относительном формате. Хотя некоторые приложения предоставляют опции для поддержки такого поведения, многие программы не предназначены для этого. Распространенным методом для таких программ является использование программы-запуска, которая копирует необходимые настройки и файлы на хост-компьютер при запуске приложения и возвращает их обратно в директорию приложения при закрытии. Альтернативной стратегией для обеспечения переносимости приложений в Windows, не требующей изменений в исходном коде приложения, является виртуализация приложения: приложение "секвенируется" или "упаковывается" относительно уровня выполнения, который прозрачно перехватывает его обращения к файловой системе и реестру, а затем перенаправляет их в другое постоянное хранилище без ведома приложения. Такой подход оставляет приложение неизменным, но делает его переносимым. Тот же подход используется для отдельных компонентов приложения: библиотек времени выполнения, COM-компонентов или ActiveX, а не только для всего приложения. В результате, когда отдельные компоненты переносятся таким образом, они могут быть: интегрированы в оригинальные портативные приложения, многократно инстанцированы (виртуально установлены) с различными конфигурациями/настройками на одной операционной системе (ОС) без взаимных конфликтов. Поскольку переносимые компоненты не влияют на защищенные сущности ОС (реестр и файлы), для их установки и управления не требуются административные привилегии. Microsoft осознала необходимость в специализированном реестре приложений для своей операционной системы Windows еще в 2005 году. В конечном итоге она включила часть этой технологии, используя вышеупомянутые методы через свою базу данных совместимости приложений с использованием библиотеки кода Detours в Windows XP. Однако она не предоставила доступ к этим технологиям через свои системные API.

Переносимость на Unix-подобных системах

Программы, написанные с учетом принципов Unix, часто не делают никаких предположений. В то время как многие программы Windows предполагают, что пользователь является администратором — что было очень распространено в эпоху Windows 95/98/ME (и в некоторой степени в Windows XP/2000, хотя не в Windows Vista или Windows 7) — это быстро приводило бы к ошибкам "Отказано в доступе" в Unix-подобных средах, поскольку пользователи чаще оказываются в непривилегированном состоянии. Поэтому программы обычно разрабатываются с использованием переменной окружения HOME для хранения настроек (например, $HOME/.w3m для браузера w3m). Динамический компоновщик предоставляет переменную окружения LD_LIBRARY_PATH, которую программы могут использовать для загрузки библиотек из нестандартных каталогов. Если предположить, что /mnt содержит переносимые программы и конфигурацию, командная строка может выглядеть так:

HOME=/mnt/home/user LD_LIBRARY_PATH=/mnt/usr/lib /mnt/usr/bin/w3m www.example.com

Linux-приложение, не требующее взаимодействия с пользователем (например, адаптации скрипта или переменной окружения) в зависимости от различных путей к каталогам, можно реализовать с помощью опции GCC Linker $ORIGIN, которая позволяет использовать относительный путь поиска библиотек. Однако не все программы поддерживают эту функцию — некоторые полностью игнорируют $HOME и вместо этого выполняют поиск пользователя в /etc/passwd для определения домашнего каталога, что препятствует переносимости. Существуют также кросс-дистрибутивные форматы пакетов, не требующие прав администратора для запуска, такие как Autopackage, klik (теперь известный как AppImage) или CDE, но они получили лишь ограниченное признание и поддержку в сообществе Linux в 2000-х годах. Около 2015 года идея портативной и независимой от дистрибутива упаковки для экосистемы Linux получила большее распространение, когда Линус Торвальдс обсудил эту тему на DebConf 2014 и позже одобрил AppImage для своего приложения для ведения журнала погружений Subsurface. Например, MuseScore и Krita последовали этому примеру в 2016 году и начали использовать сборки AppImage для распространения программного обеспечения. Red Hat выпустила в 2016 году систему Flatpak, которая является преемником проекта glick Александра Ларссона, вдохновленного klik (теперь AppImage). Аналогично, Canonical выпустила в 2016 году пакеты Snap для Ubuntu и многих других дистрибутивов Linux. Многие приложения для macOS, которые можно установить простым перетаскиванием, по своей сути являются переносимыми, поскольку представляют собой пакеты приложений macOS. Примеры включают Mozilla Firefox, Skype и Google Chrome, которым не требуется доступ администратора и которые не нужно помещать в центральную, защищенную область. Приложения, помещенные в папку /Users/username/Applications (~/Applications), регистрируются в macOS LaunchServices так же, как и приложения, помещенные в основную папку /Applications. Например, щелкнув правой кнопкой мыши на файле в Finder и выбрав "Открыть с помощью", будут показаны приложения, доступные как из /Applications, так и из ~/Applications. Разработчики могут создавать установщики для macOS, которые позволяют пользователю выполнить установку в домашний каталог, обозначенную как "Установить только для меня" в пользовательском интерфейсе установщика. Такая установка выполняется от имени пользователя.