Uno shim è una piccola libreria che intercetta e cambia le chiamate a un’altra libreria, principalmente per aiutare la compatibilità.
È necessario mantenere più versioni di una libreria per supportare i client. Le librerie Shim traducono le chiamate dalla vecchia alla nuova libreria prima di inoltrarle alla nuova libreria.
Esempio 1:
Le installazioni Linux vengono normalmente con una singola versione di Ruby. Gli sviluppatori di Ruby devono avere diverse versioni di Ruby sui loro numerosi progetti attivi. Rbenv utilizza shim per risolvere questo problema.
Eseguire un comando Ruby in Linux significa controllare l’eseguibile nel percorso — che cerca da sinistra a destra. Quindi, eseguire il comando Ruby rails server
significa che Linux trova ed esegue Rails, un eseguibile Ruby, nella prima directory.
Rbenv aggiunge un shims
directory e carica con spessore script prima di anteporre il Percorso. Esiste uno script shim per ogni applicazione Ruby e l’esecuzione di un’applicazione Ruby ora significa eseguire lo script shim corrispondente. Quindi, eseguire rails significa eseguire lo script Rails nella directory shims
e non l’applicazione Rails in usr/local/bin
. Lo script elabora la versione di Ruby richiesta e quindi esegue la sua applicazione corrispondente, in questo caso Rails, sotto quella versione di Ruby prevista.
Esempio 2:
Microsoft utilizza shim per falsificare le chiamate Windows di un’applicazione. Quando un’applicazione effettua una chiamata di sistema passa attraverso la ‘Tabella degli indirizzi di importazione’.
È possibile modificare la tabella e sostituire Windows chiamata con una chiamata al supporto. Lo shim nell’esempio è uno shim ‘version-lie’. L’applicazione pensa che sia su una macchina Windows 7.