Shim on pieni kirjasto, joka sieppaa ja muuttaa kutsuja toiseen kirjastoon, lähinnä yhteensopivuuden helpottamiseksi.
Kirjastojen useiden versioiden ylläpitäminen on välttämätöntä asiakkaiden tukemiseksi. Shim-kirjastot kääntävät vanhan kirjaston kutsut uudeksi kirjastokutsuksi ennen kuin ne siirtyvät uuteen kirjastoon.
Esimerkki 1:
Linux-asennuksissa on yleensä yksi Ruby-versio. Ruby-kehittäjät tarvitsevat eri Ruby-versioita monissa aktiivisissa projekteissaan. Rbenv käyttää shimejä tämän ongelman ratkaisemiseen.
Ruby-komennon suorittaminen Linuxissa tarkoittaa suoritettavan tiedoston tarkistamista polusta – jota se etsii vasemmalta oikealle. Ruby-komennon rails server
suorittaminen tarkoittaa siis sitä, että Linux etsii ja suorittaa Rubyn suoritettavan Railsin ensimmäisestä hakemistosta.
Rbenv lisää shims
-hakemiston ja lataa siihen shim-skriptit, ennen kuin se edeltää Pathia. Jokaiselle Ruby-sovellukselle on olemassa shim-skripti, ja Ruby-sovelluksen ajaminen tarkoittaa nyt sitä vastaavan shim-skriptin ajamista. Railsin ajaminen tarkoittaa siis Rails-skriptin suorittamista hakemistossa shims
eikä Rails-sovellusta hakemistossa usr/local/bin
. Skripti laskee vaaditun Ruby-version ja ajaa sitten sitä vastaavan sovelluksen, tässä tapauksessa Railsin, tällä odotetulla Ruby-versiolla.
Esimerkki 2:
Microsoft käyttää shimpejä väärentääkseen sovelluksen Windows-kutsuja. Kun sovellus tekee järjestelmäkutsun, se kulkee ’Import Address Table’ -taulukon kautta.
Taulukkoa voi muuttaa ja Windows-kutsun voi korvata kutsulla shimiin. Esimerkin shim on ’version-lie’ shim. Sovellus luulee olevansa Windows 7 -koneessa.
.