DLL-ад

DLL hell (DLL-кошмар, буквально: DLL-ад) — тупиковая ситуация, связанная с управлением динамическими библиотеками DLL в операционной системе Microsoft Windows.

Сущность проблемы заключается в конфликте версий DLL, призванных поддерживать определённые функции. DLL hell — пример плохой концепции программирования, которая, подобно скрытой мине, приводит к резкому возрастанию трудностей при усложнении и совершенствовании системы. Поэтому эксперты рекомендуют избегать или ограничивать применение DLL, обуславливающих такого рода конфликты.

Содержание

Описание проблемы

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

Реализация механизма DLL однако такова, что несовместимость и невзаимозаменяемость становится скорее правилом чем исключением, что приводит к большому количеству проблем.

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

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

История проблемы

Эта проблема возникла в ранних версиях Microsoft Windows.

С подобными же проблемами сталкивались ранние версии Mac OS X, но с использованием других технологий. Не избгают подобных проблем дистрибуторы библиотек Open Source.

Поэтому, когда речь идёт о не-майкрософтовской среде, эту ситуацию называют dependency hell (кошмар зависимостей).

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

Меры против DLL hell

Данные меры рекомендуют предпринимать одновременно для получения наилучшего результата:

  • Операционная система должна поставляться совместно с пакетным менеджментом, чтобы иметь возможность прослеживать все взаимозависимости DLL, при этом использование пакетного менеджента должно поощряться, а индивидуальная инсталяция DLL по возможности отвергаться.
  • Централизация процедуры распространения библиотек через единую инстанцию.
  • Допустить возможность параллельного использования нескольких версий одной и той-же DLL [1].
  • При кустомизации программного обеспечения поставлять также кустомизированные версии DLL для личного.
  • Обязательно во время проектирования должна тщательно продумываться концепция DLL, функций и версий. DLL не должны использоваться без необходимости, а библиотеки, связанные с только одним приложением, должны подключаться статически (в EXE-файл).

DLL hell как мотивация проекта .NET

В 2001 фирма Майкрософт определила подсистему .NET Framework для разработки пакетов (assemblies: см. здесь). Эта подсистема стала поддерживать общую библиотеку времени исполнения, присоединяя DLL к основному исполняемому классу.

Ссылки

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home