Cos’è uno shim?

Una shim è una piccola libreria che intercetta e modifica le chiamate a un’altra libreria, principalmente per aiutare la compatibilità.

Mantenere più versioni di una libreria è necessario per supportare i tuoi clienti. Le librerie di shim traducono le chiamate dalla vecchia alla nuova libreria prima di inoltrarle alla nuova libreria.

Esempio 1:

Le installazioni Linux sono normalmente fornite con una sola versione di Ruby. Gli sviluppatori Ruby hanno bisogno di avere diverse versioni di Ruby sui loro molti progetti attivi. Rbenv usa gli spessori 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 serversignifica che Linux trova ed esegue Rails, un eseguibile Ruby, nella prima directory.

Eseguire Rails App Normalmente

Rbenv aggiunge una directory shims e la carica con gli script shim prima di aggiungere il Path. C’è uno script shim per ogni applicazione Ruby ed eseguire 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 calcola la versione di Ruby richiesta e poi esegue l’applicazione corrispondente, in questo caso Rails, sotto la versione di Ruby prevista.

Esempio 2:

Microsoft usa gli shim per simulare le chiamate a Windows di un’applicazione. Quando un’applicazione fa una chiamata di sistema passa attraverso la ‘Import Address Table’.

Un’applicazione che chiama in Windows da IAT

È possibile cambiare la tabella e sostituire la chiamata a Windows con una chiamata a uno shim. Lo shim nell’esempio è uno shim ‘version-lie’. L’applicazione pensa di essere su una macchina Windows 7.

Una chiamata applicativa reindirizzata allo shim da IAT

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.