Shim jest małą biblioteką, która przechwytuje i zmienia wywołania do innej biblioteki, głównie w celu zapewnienia kompatybilności.
Utrzymywanie wielu wersji biblioteki jest niezbędne do obsługi klientów. Biblioteki podkładowe tłumaczą wywołania starej biblioteki na nowe przed przekazaniem ich do nowej biblioteki.
Przykład 1:
Instalacje systemu Linux zazwyczaj dostarczane są z jedną wersją Ruby. Deweloperzy Rubiego potrzebują mieć różne wersje Rubiego w swoich wielu aktywnych projektach. Rbenv używa podkładek, aby rozwiązać ten problem.
Wykonanie polecenia Ruby w Linuksie oznacza sprawdzenie, czy w ścieżce znajduje się plik wykonywalny, który jest przeszukiwany od lewej do prawej. Tak więc, uruchomienie komendy Ruby rails server
oznacza, że Linux znajdzie i uruchomi Rails, plik wykonywalny Ruby, w pierwszym katalogu.

Rbenv dodaje katalog shims
i ładuje go skryptami shim przed dodaniem ścieżki. Istnieje skrypt shim dla każdej aplikacji Rubiego i uruchomienie aplikacji Rubiego oznacza teraz uruchomienie odpowiadającego jej skryptu shim. Tak więc, uruchomienie rails oznacza wykonanie skryptu Rails w katalogu shims
, a nie aplikacji Rails w usr/local/bin
. Skrypt oblicza wymaganą wersję Ruby, a następnie uruchamia pasującą do niej aplikację, w tym przypadku Rails, pod tą oczekiwaną wersją Ruby.

Przykład 2:
Microsoft używa podkładek do podrabiania wywołań systemowych aplikacji w Windows. Kiedy aplikacja wywołuje system, przechodzi przez „Tablicę adresów importu”.

Możesz zmienić tabelę i zastąpić wywołanie Windows wywołaniem podkładki. Podkładka w przykładzie jest podkładką typu „version-lie”. Aplikacja myśli, że znajduje się na maszynie z systemem Windows 7.

.