----

31 декабря 2008 г.

Я за программы, не требующие установки

Уже много лет я использую программы, не требующие установки.

Переустанавливаю операционки, меняю жесткие диски и компьютеры, а мои программы всегда со мной и всегда готовы к работе.

На самом деле, конечно, не все и не всегда. Когда я устанавливаю программу впервые, то еще не знаю, будет ли она работать после переустановки ОС или просто на другой машине.

Хорошо, когда у программы есть портабельная (portable) или переносимая (то же, но по-русски) версия. Тогда программа может быть запущена откуда угодно и, по идее, не оставляет следов в системе. Причем, последнее важно, не потому что "следы! оооо!", а потому что работа программы от этих самых следов не зависит, т.е. конфигурация, и все такое, хранится в одном каталоге с самой программой или даже в ее коде (да, есть и такие, самомодифицирующиеся программы).

Признаюсь, тема portable applications мной еще не освоена. Единственное, что я умею с такими программами делать это запускать их :) Есть у меня мысль разобраться в этом подробнее, посмотреть как работает U3, как самому делать программы переносимыми и какие есть тонкости в этом деле. Напишу об этом в будущем.

Хорошо, когда у программы есть версия "для опытных пользователей", как ее часто называют разработчики. Это просто все файлы программы, "как бы уже установленной", упакованные в архив. Распаковал архив в выбранную папку, "вот и вся установка". Осталось только настроить программу под себя, если она это позволяет.

Почему я взял в кавычки выражения со словом "установка"? Да потому что нет тут никакой установки, в принципе, и не нужна она. Просто слово, как и соответствующий процесс, всем знакомо.

Вспоминается известный лайфхак: "Чтобы сделать что-то или кому-то хорошо, надо сначала сделать плохо, а потом вернуть, как было". Так и с программами. Лет 15 назад, выдумали установку на пустом месте, а теперь иногда отказываемся от нее, выдавая это за достоинство программы.

Вспомним, что такое вообще установка программ.

Когда-то под установкой понималось два процесса: install и set up. Сейчас уже никто, наверное, их не различает (к суровым парням юниксоидам это не относится, в их лагере попрежнему в порядке).

Инсталляция - это перенос файлов программы с дистрибутивных носителей на рабочий, например с дискет или компакт-диска на винчестер. В простейшем случае, инсталляция ограничивается копированием файлов. В более сложном присутствует стадия распаковки.

Тут главное знать, какие файлы в какой каталог записать. Когда все файлы программы находятся в одном каталоге не возникает никаких сложностей. А почему, собственно, бывает по-другому? Об этом позже.

Set up - это настройка программы на конкретные условия работы. Установка видеорежима, конфигурация звуковой подсистемы, задействование или отключение опций и т.п. Сейчас многое из этого уже делать не нужно в явном виде. Например, режимы работы видео, звука и прочего железа устанавливает ОС.

Раньше со многими программами поставлялся файл типа setup.exe. Запускаешь его и настраиваешь программу, как тебе надо. Потом запускаешь настроенную программу и работаешь. Сейчас почти все настройки доступны из соответствующих диалогов основной программы и это не очень плохо.

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

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

Теперь инсталлятор умеет создавать ярлык на Рабочем столе и в меню Пуск. Хотя, пользователь сам может создать ярлык вообще, где угодно, а точнее там, где нужно.
Теперь инсталлятор умеет записывать всякие настройки в реестр. Хотя настройки это вообще не его дело и использовать реестр, возможно, не самая мудрая мысль.
Теперь инсталлятор умеет записывать разные файлы в разные каталоги. Хотя в этом и нет необходимости. Но почему-то же он это делает?

Тут надо рассказать как устроены многие современные программы. Они состоят из т.н. исполняемого модуля (exe-файл) и динамически-подключаемых библиотек функций (dll-файлы). Фишка в том, что часть функционала может быть реализована в тех самых библиотеках, причем реализована она может быть совсем другими программистами. Плюс масса библиотек входит в состав ОС. Это очень удобно.
Кроме того, одна и таже библиотека может быть использована сразу многими программами. Это тоже удобно. Имеем всего один файл - раз, да и в память библиотека загружается только однажды - два.

А раз у нас один файл, так давайте его хранить в каком-то специальном каталоге, куда будем складывать и все другие библиотеки. Эта функция была возложена на инсталляторы.

Что не так?

Во-первых, уже не скопируешь просто так настроенную программу с одного компьютера на другой. Кроме каталога программы, нужно еще знать где и какие находятся библиотеки. В специальном каталоге их сотни. Как найти нужные?

Во-вторых, программисты все никак не угомонятся. Программы свои меняют, якобы совершенствуют. И библиотеки тоже. А теперь вспомните, что библиотеки и использующие их программы пишут разные люди. Одна программа может использовать несколько библиотек. Одну библиотеку могут использовать несколько программ. Причем одной программе нужна одна версия библиотеки, другой - более новая или, наоборот, более старая.

Наверное библиотеками должна была бы управлять операционная система. Но программисты сделали хитрее, не стали полагаться на ОС, а просто стали включать нужные им библиотеки в дистрибутивы своих программ и научили инсталляторы эти библиотеки в специальный каталог записывать. Часто старые версии поверх новых. Причем системных библиотек, а ведь ОС имеет их сотни и в более новой ОС и библиотеки новые.

Прикладные программы, как оказалось, могут меняться реже ОС. И это правильно, прикладные программы выполняют полезные функции их незачем менять, а ОС просто обеспечивает работу прикладных программ. И имеет право становиться в этом деле все лучше :)

Какой бардак начался, сташно сказать. Проблемы контроля версий библиотек стали настолько серьезны, что в операциооной системе появились даже какие-то инструменты по восстановлению системных библиотек, подмене разных версий, так чтобы каждая программа получила то, что ей надо.

Короче, в очередной раз было найдено решение придуманной проблемы.

Между тем, нужно ли было все это делать? Контроль версий библиотек и прочее... Нет.

Когда загружается программа, она ищет нужные ей библиотеки в нескольких каталогах. Сначала в своем родном каталоге, потом, если не находит, смотрит специальные каталоги, список которых определен настройками ОС (и хранится в переменной среды окружения %PATH%).

Не знаю, все ли из вас успевают за полетом моей мысли :) ... Сначала програма ищет библиотеки в своем каталоге, потом, если не находит... Стоп. А почему она должна их не найти? Потому что инсталлятор, зачем-то, записал их в другое место, чем вызвал все описанные выше трудности.

Ух, как хорошо, что переносимые программы и версии "для опытных пользователей" имеют все необходимые библиотеки в своем каталоге. Да, тут есть небольшая неэкономия места на диске, но зато сколько проблем сразу исчезает.

Плохо, когда программа должна использовать библиотеки, которых в ее каталоге нет. Особенно плохо, когда их нет в составе операционной системы (в специальных каталогах).
Вот тут бы помог инсталлятор - предупредил пользователя об отсутствии библиотек и скачал их из Интернета. Но такой функцией инсталлятор никто не наделил.

Приходится, как в старые добрые времена, пользователю все делать самому.

Если я понимаю, что устанавливаю программу, которую буду использовать долго, возможно дольше, чем операционную систему (а у меня есть программы, которыми я пользуюсь больше 10 лет), я устанавливаю ее на диск, отличный от системного (диск D:).

Если программа переносимая - отлично. Она имеет в своем каталоге все нужные файлы и хранит все настройки.

Если программа имеет версию "для опытных пользователей" - хорошо. Она имеет все нужные файлы в своем каталоге. Если и настройки хранятся тут же - просто отлично. Если настройки хранятся в реестре или каких-то системных папках, то при переносе программы на другой диск (компьютер, ОС) они будут потеряны (если не перенести их вручную, о чем обычно забываешь или не имеешь возможности, в случае аварии, наример). Придется настроить программу заново.

Если программа не попадает в две предыдущие группы, то при переносе она может не только потерять настройки, а и вообще отказаться работать из-за нехватки нужных библиотек.
К счастью, в этом случае, при запуске программы будет выдано сообщение о том, что такая-то библиотека не найдена там-то и там-то (приводится список каталогов, где библиотеку не удалось найти).

Идем на сайт http://www.dll-files.com/ и ищем там нужную библиотеку. Другие подобные сайты легко находятся в Гугле по названию библиотеки.

Скачиваем файл библиотеки и записываем его в ... правильно!... в каталог с программой. По возможности, избегаем соблазна записать библиотеку в системный каталог, помним о проблемах, к которым это может привести.

Запускаем капризную программу еще раз. Если мы скачали правильную версию библиотеки, то увидим сообщение о том, чего еще не хватает, и идем искать очередную библиотеку. В противном случае, можно получить сообщение, о том, что "не найдена точка входа ...". Как правило, оно означает, что в библиотеке нет нужной функции. В 99% это значит, что нужна более новая версия библиотеки, т.к. функции чаще добавляются, чем исчезают.

Найдя все необходимы библиотеки, получим версию "для опытных пользователей", кем мы после всего проделанного и являемся :)

И совсем плохо (с т.з. переносимости), если программа требует тесной интеграции с ОС. Ее придется инсталлировать традиционным способом каждый раз и специально заботиться о резервировании ее настроек.

Но таких программ у меня крайне мало. Это, например, антивирус.

Я за программы, не требующие установки!

И не только я. Еще раз процитирую Алана Купера. Вот, что он говорил про установку программ еще в 1999 году:


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

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

Если отвлечься от вопросов установки, браузеры слабы, как новорожденные котята – доисторические идиомы взаимодействия с человеком, архитектура, напоминающая плоскую шутку, гибкость не лучше, чем у сосулек. Любая программа, работающая внутри браузера, обязана принести в жертву невероятную производительность и возможности. Меня приводит в ярость желание некоторых руководителей вырезать своему приложению сердце, перенеся его на платформу Web, чтобы получить преимущества, связанные с отсутствием процесса установки, когда они могли бы получить то же самое, просто вежливо попросив своих разработчиков избавиться от этого процесса.



Интересные вещи говорил и Дмитрий Завалишин (dz). В частности, на своем семинаре в рамках фестиваля Chaos Constructions 2008 он рассказывал про разрабатываемую операционную систему Phantom (доступна аудио- и видеозапись этого семинара). Установка программ одна из надуманных проблемм современных ОС, пережиток прошлого. Более того, Дмитрий смело заявляет, что запуск и останов (закрытие) программ тоже уже не нужны. Программы должны всегда работать, запоминания  и сохраняя свое состояние, когда не используются.

От концепции файлов тоже предлагается отказаться. Хотя это и не по теме поста, но все равно интересно. Действительно, зачем нужны файлы?

Если есть возможность, скачайте и посмотрите семинар (или послушайте, слайды Дмитрий не делал).

Про качество записи ничего не скажу - не видел, не слышал. Так как, был на семинаре лично :).

UPD от 02.01.2009: В тему: Фрагмент статьи Андрея Колесова, опубликованной на CitForum еще в 2000 году - Общая проблема модели Windows-приложений
.

Комментариев нет: