DLL-Konflikt
Der Ausdruck DLL Hell (auf deutsch "DLL-Hölle") stammt aus dem Computerjargon und bezeichnet Probleme, die durch die Installation von Dynamic Link Library (DLLs) auf einem Betriebssystem entstehen können. Da solche DLLs von verschiedenen Programmen oft mehrfach bzw. in unterschiedlichen Versionen installiert werden, kann es mit fortschreitender Betriebszeit des Systems zum Vorhandensein verschiedener Versionen gleicher Bibliotheken (DLLs), einer zu großen Anzahl verschiedener Bibliotheken oder überflüssigen, mehrfach vorhandenen Kopien ein- und derselben DLL kommen. Diese Redundanz führt nicht nur zur Belegung zusätzlicher Festplattenkapaziät, sondern kann auch zu Einbußen bei der Rechenleistung eines Systems führen, zum Beispiel aufgrund längerer Suchzeiten für DLLs, die zur Laufzeit nachgeladen werden. Die DLL Hell ist ein Beispiel schlechten Softwaredesigns.
Das Problem
Grundsätzlich erlauben DLLs Computerprogrammen, auf ihren Programmcode und ihre Ressourcen zuzugreifen, um so identischen Code, den sonst jedes Programm selbst mitbringen müsste, zusammenzufassen. Jedoch bringen neue Programme oft auch neue Versionen einer bereits vorhandenen DLL (shared library) mit. Nun hat das Programm die Wahl, ob es bei der Installation die alte DLL überschreibt (was aber zu Kompatibilitätsproblemen mit anderen Programmen führen kann) oder eine weitere Kopie auf dem System installiert (was aber zusätzlichen Festplattenspeicher und Hauptspeicher verbraucht und die Ausführungsgeschwindigkeit von Programmen verlangsamt, da das System nun längere Zeit benötigt, um die für das Programm jeweils richtige DLL-Version zu finden).
Je länger eine Betriebssystems-Installation benutzt wird, desto größer wird die Wahrscheinlichkeit für das Auftreten des DLL Hell Problems. Da installierte Programme, die vom Benutzer wieder deinstalliert werden, keine Möglichkeit haben, zu überprüfen, ob ein anderes Programm von den von ihnen installierten DLLs abhängig ist, werden die DLLs oft auf dem System belassen und damit zu potenziellen "DLL-Leichen". Das kann zu einer unüberschaubaren Menge verschiedener DLL-Dateien führen, die zum Teil vom Betriebssystem selbst benötigt werden (und deshalb auf keinen Fall entfernt werden sollten), zum Teil aber auch unbenötigte Restbestände früherer Installationen darstellen, die, mittlerweile nutzlos geworden, unnötig Festplattenkapazität und eventuell Rechenleistung beanspruchen. Auf modernen System kann zwar davon ausgegangen werden, dass die verfügbare Festplattenkapazität durch redundante DLL-Versionen kaum beeinträchtigt sein wird, jedoch stellt (ähnlich wie bei verwaisten Registry Einträgen) alleine die Tatsache, dass das System immer größere Zustände des Chaos aufweist und somit unbegründet Rechenleistung verbraucht sowie auch potenzielle Instabilitäten erzeugt, ein grundsätzliches Problem dar.
Auftreten
Die DLL Hell stellt insbesonders bei älteren Versionen von Microsoft Windows ein sehr häufiges Problem dar, da diese nur beschränkte Möglichkeiten besitzen, um System-Dateien und DLL-Bibliotheken zu verwalten (und vorhandene Programme, die diesen Zweck erfüllen sollen, ignorieren oft das bestehende System und tragen nur dazu bei, zukünftige Fehler bereinigen bzw. zu vermeiden). Das Problem betrifft hauptsächlich Microsoft Windows; bei anderen Betriebssystemen ist das DLL Hell Problem nicht so stark ausgeprägt. Nur bei älteren Versionen von Mac OS X treten ähnliche Probleme auf, die als extension conflicts (Erweiterungs-Konflikte) bezeichnet werden. Aus technischer Sicht liegen die Ursachen für diese Konflikte aber woanders.
Einer ähnlichen Problematik wie dem DLL Hell Problem steht aktuell die Gecko Runtime Engine gegenüber, die unter anderem vom Mozilla Projekt für diverse Anwendungsprogramme unter Microsoft Windows, Linux und Mac OS X verwendet wird. Diese Anwendungsprogramme enthalten oft verschiedene Versionen der Gecko Runtime Engine, begründet in den teils sprunghaften Änderungen der API. Also wird von Thunderbird, Firefox und Sunbird jeweils eine eigene Kopie der (benötigten Version der) GRE Engine mitgeliefert. Zusätzlich greift zum Beispiel Nvu wiederum auf spezielle Versionen der Engine zurück. Nun benötigen aber Programme, die ebenfalls auf die Gecko Runtime Engine angewiesen sind, wie in etwa Epiphany, eventuell eine andere Version der Engine, als jene, die auf dem System schon teilweise mehrfach vorhanden ist, was zu Komplikationen führen kann.
Methoden zur Vermeidung
Es gibt einige Empfehlungen, die Probleme wie die DLL Hell zu vermeiden helfen sollten. Diese Empfehlungen können jedoch nur wirksam sein, wenn sie in ihrer Gesamtheit umgesetzt werden.
- Das Betriebssystem sollte über einen leistungsfähigen Paketmanager verfügen, der imstande ist, DLL-Abhängigkeiten von Programmen zu verfolgen. Um dessen Wirksamkeit zu gewährleisten, muss er natürlich auch von jedem Softwarehersteller zur Installation der Programme eingesetzt werden.
- Bibliotheken sollten im System zentral verwaltet werden. Eine solche zentrale Verwaltung kann zum Beispiel die Kompatibilität alter Bibliotheksversionen zu neuen überprüfen und, sollte eine solche Versionsverträglichkeit nicht vorhanden sein, diese über den Einbau einer Schnittstelle in die Bibliothek wieder gewährleisten.
- Wenn Softwareentwickler Änderungen an einer DLL vornehmen müssen und sich die ursprüngliche Bibliothek nicht in die neue einbinden lässt, dann müssen die Entwickler entweder den Programmcode direkt in ihr Programm einbauen (d.h. die Bibliothek statisch linken) oder ein neues Paket (mit einer anderen Bezeichnung) für diese Bibliothek erstellen.
- Sorgfalt und Bedachtsamkeit muss bei der Entwicklung vorrangig sein. Die Idee hinter einer DLL ist, dass sie modular von vielen Programmen gleichzeitig verwendet werden kann. Sollte sie diesen Zweck nicht erfüllen, so ist es besser wenn sie direkt ins Programm übernommen wird. Im Vergleich zu vielen verschiedenen DLL-Versionen im System spart das Platz und kann unter Umständen zu einer Geschwindigkeitssteigerung führen.
DLL Hell als Herausforderung für .NET
2001 veröffentlichte Microsoft die .NET Umgebung, welche ihr eigenes Packet-Management-System, die sogenannten assemblies mitbringt [1]. Diese Umgebung stellt vielverwendete Funktionen in einer Bibliothek bereit (es wird vor allem Programmcode aus mehreren DLLs in einer Klasse zusammengefasst).
Kritik an der DLL Hell
Die Idee, verschiedene Versionen einer Datei zu verwalten, wird oft als Überrest veralteter Programmiertechniken angesehen. Viele Betriebssysteme, so zum Beispiel bereits OpenVMS, fanden Möglichkeiten, mit dem Problem umzugehen - vor allem deshalb wird die immer noch vorhandene Aktualität der Problematik von Kritikern gerne als Beispiel der technischen Unterlegenheit von Microsoft Windows zitiert. Oftmals weisen solche Argumentationen aber auch starken ideologischen Charakter auf und ähneln dabei in ihrer mangelnden Sachlichkeit der häufigen Kritik an Linux, keine komfortable, standardisierte Installationssoftware für Programme zur Verfügung stellen zu würden.