Les cales en programmation servent le même objectif que les cales en génie mécanique : elles permettent à deux choses dont la conception ne correspond pas entièrement de fonctionner ensemble.
Je suis un cycliste passionné et un constructeur de vélos. En cyclisme, vous pouvez constater qu'une tige de selle ou une potence ne correspond pas précisément à la largeur du tube (partie du cadre du vélo) dans lequel elle doit être insérée. Pour remédier à cela, vous pouvez utiliser une cale - une fine feuille de métal qui comble l'espace entre le tube extérieur et le cylindre intérieur.
Pour prendre un exemple de logiciel, le gestionnaire de fenêtres Gnome était autrefois installable sur n'importe quel UNIX. Cependant, depuis la version 3.14, Gnome a une dépendance à systemd, un composant spécifique à Linux. Cela empêcherait normalement Gnome d'être utile sur d'autres variantes d'UNIX (FreeBSD, etc.) ou sur des distributions Linux qui n'incluent pas syystemd. Pour résoudre ce problème, des personnes ont écrit des bibliothèques qui fournissent l'API de systemd et les traduisent en appels au système d'exploitation sous-jacent. Comme ces bibliothèques ne sont qu'une fine couche permettant à deux systèmes plus importants avec des interfaces incompatibles de travailler ensemble, "shim" est un nom très approprié pour eux.