An SDK can take the form of
application programming interfaces in the form of on-device
libraries of reusable functions used to interface to a particular
programming language, or it may be as complex as hardware-specific tools that can communicate with a particular
embedded system. Common
tools include debugging facilities and other
utilities, often presented in an
integrated development environment. SDKs may include sample software and/or technical notes along with documentation, and tutorials to help clarify points made by the primary reference material. SDKs often include
licenses that make them unsuitable for building software intended to be developed under an incompatible license. For example, a proprietary SDK is generally incompatible with
free software development, while a
GNU General Public License'd SDK could be incompatible with proprietary software development, for legal reasons. However, SDKs built under the
GNU Lesser General Public License are typically usable for proprietary development. In cases where the underlying technology is new, SDKs may include hardware. For example,
AirTag's 2012
near-field communication SDK included both the paying and the reading halves of the necessary hardware stack. The average
Android mobile app implements 15.6 separate SDKs, with gaming apps implementing on average 17.5 different SDKs. The most popular SDK categories for Android mobile apps are analytics and advertising. New technologies allow
app developers to control and monitor client SDKs in real time. Providers of SDKs for specific systems or
subsystems sometimes substitute a more specific term instead of
software. For instance, both
Microsoft and
Citrix provide a driver development kit for developing
device drivers. == Examples==