Binding generally refers to a mapping of one thing to another. In the context of software libraries, bindings are wrapper libraries that bridge two programming languages so that a library written for one language can be used in another language. Many software libraries are written in system programming languages such as C or C++; in order to use these libraries from another (usually higher-level) language such as Java, Common Lisp, Python or Lua, a binding to the library must be created in that language, possibly requiring the recompilation of the language's code depending on the amount of modification necessary. However, most languages offer an interface to foreign functions, such as Python's and OCaml's ctypes, and Embeddable Common Lisp's cffi and uffi.
For example, Python bindings are used when an already existing C library written for some purpose is to be used from Python. Another example is libsvn, which is written in C and provides an API for accessing Subversion; in order to access Subversion from within Java code, libsvnjavahl can be used, which depends on libsvn being installed and acts as a bridge between the Java programming language and libsvn, thus providing an API that invokes functions from libsvn to do the real work.
Software reuse is a major motivation for creating library bindings, reducing reimplementation of a library in several languages. Another is the impossibility[clarification needed] of implementing certain[which?]algorithms efficiently in high-level languages.