Las cuñas de software sirven para lo mismo que las cuñas de ingeniería mecánica: permiten que dos cosas cuyo diseño no coincide del todo funcionen juntas.
Soy un ciclista entusiasta y constructor de bicicletas. En el ciclismo, puede ocurrir que una tija de sillín o una potencia no coincidan exactamente con la anchura del tubo (parte del cuadro de la bicicleta) en el que debe insertarse. Para solucionarlo, se puede utilizar una cuña: una fina lámina de metal que rellena el hueco entre el tubo exterior y el cilindro interior.
Por poner un ejemplo de software, el gestor de ventanas Gnome solía poder instalarse en cualquier UNIX. Sin embargo, desde la versión 3.14, Gnome depende de systemd, un componente específico de Linux. Esto normalmente impediría que Gnome fuera útil en otras variantes de UNIX (FreeBSD, etc.) o en distribuciones de Linux que no incluyan syystemd. Para solucionar esto, la gente ha escrito bibliotecas que proporcionan la api de systemd y las traducen en llamadas al SO subyacente. Dado que estas bibliotecas son sólo una fina capa que permite que dos sistemas más grandes con interfaces incompatibles trabajen juntos, "shim" es un nombre muy adecuado para ellos.