Shim. A shim is a library that brings a new API to an older environment, using only the means of that environment.
Polyfill. In October 2010, Remy Sharp blogged about the term “polyfill” [via Rick Waldron]:
A polyfill is a piece of code (or plugin) that provides the technology that you, the developer, expect the browser to provide natively. Flattening the API landscape if you will.Thus, a polyfill is a shim for a browser API. You typically check if a browser supports an API and load a polyfill if it doesn’t. That allows you to use the API in either case. The term polyfill comes from a home improvement product (quoting Remy Sharp):
Polyfilla is a UK product known as Spackling Paste in the US. With that in mind: think of the browsers as a wall with cracks in it. These [polyfills] help smooth out the cracks and give us a nice smooth wall of browsers to work with.
|Polyfilla – image from tooled-up.com [via Paul]|