Um calço é uma pequena biblioteca que intercepta e altera chamadas para outra biblioteca, principalmente para ajudar a compatibilidade.
A manutenção de múltiplas versões de uma biblioteca é necessária para suportar os seus clientes. As bibliotecas shim traduzem chamadas antigas para novas bibliotecas antes de encaminhar para a nova biblioteca.
Exemplo 1:
Instalações Linux normalmente vêm com uma única versão Ruby. Os programadores Ruby precisam de ter diferentes versões Ruby nos seus muitos projectos activos. Rbenv usa shims para resolver este problema.
Executar um comando Ruby no Linux significa verificar o executável no caminho – que procura da esquerda para a direita. Assim, correr o comando Ruby rails server
significa que o Linux encontra e corre o Rails, um executável Ruby, no primeiro directório.
Rbenv adiciona um directório shims
e carrega-o com shim scripts antes de pré-pender o Path. Existe um script shim para cada aplicação Ruby e correr uma aplicação Ruby agora significa correr o script shim correspondente. Então, correr Rails significa executar o script Rails no directório shims
e não a aplicação Rails em usr/local/bin
. O script funciona na versão Ruby necessária e depois corre a sua aplicação correspondente, neste caso Rails, sob aquela versão Ruby esperada.
Exemplo 2:
Microsoft usa shims para falsificar as chamadas Windows de uma aplicação. Quando uma aplicação faz uma chamada ao sistema, ela passa pela ‘Importar Tabela de Endereços’.
Pode alterar a tabela e substituir a chamada para o Windows por uma chamada para um calço. O calço no exemplo é um calço ‘version-lie’. A aplicação pensa que está numa máquina Windows 7.