En shim er et lille bibliotek, der opfanger og ændrer kald til et andet bibliotek, primært for at fremme kompatibiliteten.
Det er nødvendigt at vedligeholde flere versioner af et bibliotek for at understøtte dine klienter. Shim-biblioteker oversætter gamle til nye biblioteksopkald, før de videresender til det nye bibliotek.
Eksempel 1:
Linux-installationer leveres normalt med en enkelt Ruby-version. Ruby-udviklere har brug for at have forskellige Ruby-versioner på deres mange aktive projekter. Rbenv bruger shims til at løse dette problem.
Afvikling af en Ruby-kommando i Linux betyder at kontrollere, om der er en eksekverbar fil i stien – som den søger fra venstre mod højre. Så hvis du kører Ruby-kommandoen rails server
betyder det, at Linux finder og kører Rails, en Ruby-kørefil, i den første mappe.
Rbenv tilføjer en shims
-mappe og indlæser den med shim-scripts, før Path tilføjes med et præfiks. Der er et shim-script for hver Ruby-applikation, og at køre en Ruby-applikation betyder nu at køre det tilsvarende shim-script. Så at køre rails betyder at udføre Rails-scriptet i mappen shims
og ikke Rails-applikationen i usr/local/bin
. Scriptet regner den krævede Ruby-version ud og kører derefter det tilsvarende program, i dette tilfælde Rails, under den forventede Ruby-version.
Eksempel 2:
Microsoft bruger shims til at forfalske et programs Windows-opkald. Når et program foretager et systemkald, går det gennem “Import Address Table”.