DLL hell (DLL-coșmar, literalmente: DLL -hell) este un blocaj asociat cu gestionarea DLL-urilor dinamice în sistemul de operare Microsoft Windows .
O problemă similară în alte sisteme de operare se numește Dependency Hell .
Esența problemei constă în conflictul versiunilor DLL concepute pentru a suporta anumite funcții. DLL Hell este un exemplu de concept de programare prost care, ca o mină ascunsă, duce la o creștere bruscă a complexității și îmbunătățirea sistemului.
Conform ideii originale, DLL-urile ar trebui să fie compatibile de la o versiune la alta și interschimbabile în ambele direcții.
Implementarea mecanismului DLL este de așa natură încât incompatibilitatea și neinterschimbabilitatea devin mai degrabă regula decât excepția, ceea ce duce la o mulțime de probleme.
Pentru a evita conflictele, este obișnuit să folosiți multe copii redundante ale DLL pentru fiecare aplicație, ceea ce învinge ideea originală de a profita de DLL-uri ca module standard care sunt stocate o dată în memorie și partajate de multe sarcini. În plus, cu o astfel de experiență, după repararea erorilor dintr-un DLL sau restaurarea unui sistem dintr-o arhivă, numărul de DLL-uri diferite care au același nume și îndeplinesc aceleași funcții crește, iar actualizarea automată a versiunii sau corectarea erorilor devine imposibilă.
Această problemă a apărut la primele versiuni ale Microsoft Windows .
Versiunile timpurii de Mac OS X s-au confruntat cu probleme similare , dar folosind tehnologii diferite.
Problema reapare atunci când programul este încercat să fie rulat cu un alt DLL față de care a fost testat, ceea ce arată defectul original al conceptului general care permite înlocuirea arbitrară a versiunilor de module.
Se recomandă ca aceste măsuri să fie luate simultan pentru cele mai bune rezultate:
În 2001, Microsoft a definit subsistemul .NET Framework pentru dezvoltarea pachetelor ( ansambluri : vezi aici ). Acest subsistem a început să suporte o bibliotecă de rulare comună prin atașarea unui DLL la clasa principală de executabil.