Microsoft обещает покончить с "адом DLL"

11.03.2003, 14:21

Microsoft обещает, что Windows Server 2003 положит конец одной из худших головных болей пользователей и администраторов Windows. Речь идет о проблеме библиотек Dynamic Link Libraries - программных модулей, которыми могут пользоваться разные приложения: с годами эта проблема только усугублялась.

Обычно неприятности возникают после установки программы, работающей с обновленной версией библиотеки DLL, которая уже используется другим приложением. Если первое приложение оказывается несовместимым с модернизированной библиотекой, то пользователь получает сообщение об ошибке; Windows и приложения для Windows не отслеживают номеров версий DLL, и поэтому установить причину проблемы бывает трудно.

Исторически обобщенные компоненты понадобились из-за дороговизны пространства памяти на диске и оперативной памяти. В последние годы цены на диски и память значительно понизились, и экономить дисковое пространство уже незачем. Но по мере увеличения размеров приложений и числа модулей (еще не так давно программы целиком умещались в единственном файле .exe) проблема общих библиотек DLL, которую прозвали "адом DLL", не только осталась, но и усугубилась. Теперь Microsoft надеется покончить с ней, встроив в Windows Server 2003 систему, предотвращающую удаление старых DLL при установке новыми приложениями усовершенствованных версий тех же DLL, так что существующие приложения смогут по-прежнему ими пользоваться.

"Это классическая проблема, - говорит менеджер Microsoft по .Net и инструментам разработки Айво Салме (Ivo Salmre). - Нас годами били за это по голове. Вы выпускаете приложение, которое использует компонент А. Кто-то другой пишет программу, которая тоже использует компонент А, но устанавливает его новую версию, в результате чего первое приложение перестает работать".

По словам Салме, Microsoft .Net 1.1, который войдет в новые операционные системы Windows Server 2003, поддерживает то, что компания называет "постоянными связями". "Это означает, что приложение или компонент можно привязать к определенной версии другого компонента, так что появится возможность либо обобществлять компоненты, либо использовать их индивидуально".

.Net 1.1 добавляет в операционные системы Windows Server 2003 так называемый "кэш глобальной сборки" (Global Assembly Cache). Это хранилище всех обобщенных компонентов .Net в пределах данного компьютера. "Когда компонент .Net устанавливается на машину, Global Assembly Cache регистрирует его версию, открытый ключ защиты, информацию о языке и создает постоянное имя компонента", - поясняет Салме. Затем компонент попадает в хранилище и индексируется по своему постоянному имени, так что никакой путаницы между разными версиями одного и того же компонента, или DLL, не будет - по крайней мере теоретически.

Кроме этого, в Windows 2003 Server будут соблюдаться правила, гарантирующие, что приложение всегда найдет нужный компонент (и нужную версию этого компонента). Сначала система пытается найти локальную версию данного компонента, а затем обращается в кэш, где ищет компонент по точному постоянному имени. Не найдя таковой, система использует эвристический алгоритм для поиска следующего наиболее подходящего компонента, но по умолчанию приложение всегда будет работать с тем компонентом, с которым оно создавалось и тестировалось. В исключительных случаях администраторы смогут изменить эти правила.

Другая особенность Windows Server 2003 заключается в том, что компоненты .Net не соблюдают политики регистрации. "Это означает, что можно легко найти компонент .Net на одном сервере и скопировать его на другой, - говорит Салме. Microsoft называет эту возможность xcopy-развертыванием - по имени команды DOS, которая использовалась для копирования файлов, каталогов и даже целых дисков из одной системы в другую. "Эта возможность очень полезна при наращивании систем: вместо того, чтобы переустанавливать приложения, их можно просто копировать. Весь процесс существенно облегчается", сообщает "ZDNet".

Читайте також