Shim (computing)
In computer programming, a shim is a small library that transparently intercepts API calls and changes the arguments passed, handles the operation itself, or redirects the operation elsewhere.[1][2] Shims can be used to support an old API in a newer environment, or a new API in an older environment. Shims can also be used for running programs on different software platforms than they were developed for.
Shims for older APIs typically come about when the behavior of an API changes, thereby causing compatibility issues for older applications which still rely on the older functionality; in such cases, the older API can still be supported by a thin compatibility layer on top of the newer code. Shims for newer APIs are defined as: "a shim is a library that brings a new API to an older environment, using only the means of that environment."[3]
Examples
- Web polyfills implement newer web standards using older standards and JavaScript, if the newer standard is not available in a given web browser.[3]
- Support of AppleTalk on Macintosh computers, during the brief period in which Apple Computer supported the Open Transport networking system. Thousands of Mac programs were based on the AppleTalk protocol; to support these programs, AppleTalk was re-implemented as an OpenTransport "stack", and then re-implemented as an API shim on top of this new library.
- The Microsoft Windows Application Compatibility Toolkit (ACT) uses the term to mean backward compatible libraries. Shims simulate the behavior of older versions of Windows for legacy applications that rely on incorrect or deprecated functionality, or correct the way in which poorly written applications call unchanged APIs, for example to fix least-privileged user account (LUA) bugs.[4]
- bind.so is a shim library for Linux that allows any application, regardless of permissions, to bind to a listening socket or specify outgoing IP address.[5]
See also
- Adapter pattern
- Application virtualization
- Driver wrapper
- Glide wrappers
- Shim (disambiguation)
- Thunk (compatibility mapping)
- Windows on Windows
- Wrapper library
References
- ↑ "Your company's apps incompatible with Windows 7? Shim them, says Microsoft". Computerworld. 2009-03-21. Retrieved 2014-04-05.
- ↑ "Demystifying Shims - or - Using the App Compat Toolkit to make your old stuff work with your new stuff". Microsoft TechNet. 2011-06-17. Retrieved 2014-04-05.
- 1 2 Axel Rauschmayer (2014). Speaking JavaScript. Shims Versus Polyfills.
- ↑ "Microsoft Application Compatibility Toolkit 5.0". Microsoft. 2007-12-11. Retrieved 2008-06-24.
- ↑ "Source code of bind.so". Daniel Ryde. 2010-01-09. Retrieved 2014-04-05.
External links
- Microsoft Dev-Center - Windows 8 Client and Server 2012 application Compatibility
- Microsoft TechNet - Understanding Shims