Un shim este o mică bibliotecă care interceptează și modifică apelurile către o altă bibliotecă, în principal pentru a ajuta la compatibilitate.
Menținerea mai multor versiuni ale unei biblioteci este necesară pentru a oferi suport clienților dumneavoastră. Bibliotecile shim traduc apelurile de la biblioteca veche la cea nouă înainte de a le redirecționa către noua bibliotecă.
Exemplu 1:
Instalările Linux vin în mod normal cu o singură versiune Ruby. Dezvoltatorii Ruby trebuie să aibă versiuni Ruby diferite pe numeroasele lor proiecte active. Rbenv folosește shims pentru a rezolva această problemă.
Executarea unei comenzi Ruby în Linux înseamnă verificarea executabilului în calea de acces – pe care o caută de la stânga la dreapta. Astfel, rularea comenzii Ruby rails server
înseamnă că Linux găsește și rulează Rails, un executabil Ruby, în primul director.
Rbenv adaugă un director shims
și îl încarcă cu scripturi shim înainte de a preda calea. Există un script shim pentru fiecare aplicație Ruby și rularea unei aplicații Ruby înseamnă acum rularea scriptului shim corespunzător. Astfel, rularea aplicației Rails înseamnă executarea scriptului Rails din directorul shims
și nu a aplicației Rails din usr/local/bin
. Scenariul calculează versiunea Ruby necesară și apoi execută aplicația corespunzătoare, în acest caz Rails, sub acea versiune Ruby așteptată.
Exemplu 2:
Microsoft folosește shims pentru a falsifica apelurile Windows ale unei aplicații. Atunci când o aplicație face un apel de sistem, aceasta trece prin „Import Address Table”.
Puteți modifica tabelul și înlocui apelul Windows cu un apel către un shim. Shim-ul din exemplu este un shim „version-lie”. Aplicația crede că se află pe o mașină Windows 7.
.