Цифровой журнал «Компьютерра» 2012 № 29 (129) | страница 7
- Здесь немалую роль играет понятие свободы и независимости. Отрицать этого нельзя. В сообществе есть множество идей и предложений, как сделать управление программами проще и понятней. Возможность их сначала экспериментального, а затем и постоянного внедрения — вопрос перспективности дистрибутива. В частности, ситуация, когда пакеты с пользовательскими приложениями идут вперемешку с пакетами библиотек, вспомогательных данных и пр., явно не может способствовать распространению дистрибутива среди массовых пользователей: человек просто теряется. У нас устойчивой была тема формирования списка доступных программ на основе desktop-файлов в сочетании с дополнительной идеей удаления пакетов-библиотек после удаления использующих их приложений. Хорошо это или плохо — так делать, сказать наперёд никто не может, это надо пробовать; шансы хорошие, но более конкретного ответа пока нет. По этой причине информационная подсистема у нас выделена в отдельную компоненту, в которой можно делать многие вещи, не боясь задеть скрупулёзно настраиваемый механизм обработки зависимостей.
С обработкой зависимостей тоже не всё просто. Уже не секрет, что точная обработка запроса пользователя на установку или удаление программы в нынешнем Linux — это NP-полная задача, то есть в точной постановке с гарантированным ответом нерешаемая. Научные материалы предлагают ряд приближенных эвристических алгоритмов, и на их основе есть реализации библиотек обработки зависимостей пакетов, как, например, libsolv, но мы говорим в том числе и о задаче формирования сборочного окружения, в которой какое-либо приближённое или вероятностное поведение нежелательно.
Собственная реализация обработки зависимостей Deepsolver основана на полиномиальном полностью детерминированном алгоритме с наложением некоторых дополнительных ограничений на задачу, которая должна дать гарантированный минимум, подходящий под требования промышленного применения. Последующее добавление приближенных алгоритмов без ограничений на задачу не запрещается, обязательно будем пытаться делать это, чтобы удобство пользователя попутно не страдало. Начнём, скорее всего, с попытки задействования libsolv. Если всё пройдёт удачно — отлично, если же нет — выполним свою реализацию minisat или другого подходящего алгоритма.
Deepsolver предоставляет некоторый достаточный и отшлифованный минимальный функционал по умолчанию, но прочие идеи не запрещаются. Это одно из ключевых положений нашей архитектуры. В целом подобных деталей очень много, и устраниться от них нельзя. Реализовать их в APT крайне тяжело, это был бы в любом случае почти новый APT, не говоря уже о том, что скорость работы существующей системы не удовлетворяет современным требованиям масштабируемости.