Un shim es una pequeña biblioteca que intercepta y cambia las llamadas a otra biblioteca, principalmente para ayudar a la compatibilidad.
Mantener varias versiones de una biblioteca es necesario para dar soporte a sus clientes. Las bibliotecas Shim traducen las llamadas de las bibliotecas antiguas a las nuevas antes de reenviarlas a la nueva biblioteca.
Ejemplo 1:
Las instalaciones de Linux normalmente vienen con una única versión de Ruby. Los desarrolladores de Ruby necesitan tener diferentes versiones de Ruby en sus muchos proyectos activos. Rbenv utiliza calzos para resolver este problema.
Ejecutar un comando Ruby en Linux significa buscar el ejecutable en la ruta – que busca de izquierda a derecha. Así, ejecutar el comando Ruby rails server
significa que Linux encuentra y ejecuta Rails, un ejecutable de Ruby, en el primer directorio.
Rbenv añade un directorio shims
y lo carga con scripts shim antes de anteponer la ruta. Hay un script de shim para cada aplicación Ruby y ejecutar una aplicación Ruby significa ahora ejecutar el script de shim correspondiente. Así, ejecutar rails significa ejecutar el script Rails en el directorio shims
y no la aplicación Rails en usr/local/bin
. El script calcula la versión de Ruby necesaria y luego ejecuta su aplicación correspondiente, en este caso Rails, bajo esa versión de Ruby esperada.
Ejemplo 2:
Microsoft utiliza shims para falsear las llamadas a Windows de una aplicación. Cuando una aplicación hace una llamada al sistema pasa por la ‘Tabla de Direcciones de Importación’.
Puede cambiar la tabla y sustituir la llamada a Windows por una llamada a un shim. El shim en el ejemplo es un shim ‘version-lie’. La aplicación piensa que está en una máquina con Windows 7.