An SDK (Software Development Kit) is a set of tools designed to assist developers in building applications on a particular platform or device, and sometimes in a particular programming language. SDKs are composed of a number of modular components like a compiler, code libraries, and debugging and testing tools, but they also frequently include critical documentation resources (like API docs) and sample code that help developers get up and running quickly.
Imagine if the manufacturer of a car sold independent mechanics an “all in one” kit for working on a given brand of vehicle, including all the tool adapters needed, repair manuals, wiring diagrams, diagnostic equipment, and a few disassembled parts to learn common jobs on. Without such resources, the mechanics would be forced to start from scratch, and many repairs may not even be possible. That’s kind of how you can think of an SDK!
SDKs are commonly referred to in the context of operating systems like Windows, iOS, and Android, each of which have their own SDKs. Without those SDKs, developers wouldn’t be able to build applications for those operating systems (at least, not without a lot of reverse engineering). But SDKs are frequently crucial for cloud services (AWS, Azure, Google Cloud), Software-as-a-Service (SaaS) tools, and data providers, where integrating rich functionality requires the use of APIs and custom code connecting a client’s data to various services and resources. For example, AWS (Amazon Web Services) publishes its own SDK for JavaScript that allows developers to more quickly create applications that work with AWS.
What’s in an SDK?
An SDK isn’t strictly defined. Conceptually, it’s a large, installable bundle of all the necessary resources to get started with development on an OS, application, or programming language. Here are some of the common elements in an SDK.
- Compiler: This tool takes non-native code and compiles (translates) it into the native code used by the target OS, application, or programming language of the SDK. For example, an SDK may support writing your code in a language like Python or JavaScript, but this is then translated into the native “machine” code that actually runs on the end device or service the SDK targets.
- Libraries: SDKs include libraries of code for commonly-used functions. If, for example, you want to call a particular function like opening a system dialogue window, sending a notification, or autofilling text, the SDK may provide libraries with pre-built code (which, often, can be customized to a developer’s specific need). Without libraries, it would be nearly impossible to develop complex applications for most operating systems or enterprise software tools.
- APIs and API documentation: References that show the specific APIs (application programming interfaces) the target OS or application you can interact with. For example, if you work with a Google Maps Platform SDK, that SDK will include documentation showing how to work with the various maps APIs (custom POI, routing, traffic, etc.) available for Google Maps.
- Testing and analytics tools: Prebuilt software applications that will run the compiled code you’ve created and test its performance, quality, and compatibility. Testing suites may spot common errors, or identify functionality that breaks the terms of usage for a platform or service (i.e., will result in rejection from an app store or other marketplace). Performance testing tools can help benchmark your application and identify issues causing slowdowns.
- Debugging tools: Prebuilt tools that will identify errors in your code and, potentially, propose fixes as part of the debugging process.
- Documentation and sample code: Arguably, no SDK is complete without documentation. Documentation may include things like sample code, API references, instructions for using tools in the SDK (like the compiler, debugger, and analytics), instructions for SDK setup, and best practices for development on a given OS or platform. As the old saying goes: RTFM!
What Are Some Common Examples of SDKs?
SDKs, as we stated before, tend to exist in relation to operating systems, complex software tools, and programming languages. Here are some examples of SDKs.
- iOS SDK: This SDK is published by Apple for developers building applications for the iPhone.
- Android Studio: This toolset published by Google includes not only the necessary SDK packages for Android, but also a complete development environment where apps can be built, designed, tested, and emulated.
- .NET SDK: An open platform SDK published by Microsoft used to build applications on or that interface with the web, but also natively on platforms like Windows.
- Square SDK: Allows the integration of web-based payments on the Square platform using the Square API.
- Unity SDK: An SDK for the Unity Engine and Unity platform for building games and other immersive experiences across multiple platforms.
- AWS SDK: An SDK for creating applications that work with Amazon’s AWS cloud infrastructure that is available in many different programming languages (JavaScript, Ruby, .NET, GO, C++, etc.)
- CUDA SDK: A suite of SDKs published by NVIDIA for building applications on its CUDA processing cores, frequently used by AI developers.
The list of SDKs out there is basically endless. Many hardware companies (for example, chipset vendors) publish a huge variety of SDKs to enable specific use cases for specialty silicon or chipsets. Device manufacturers, like game console vendors, automotive companies, and manufacturing firms may also use “closed SDKs” — shared under NDA with customers and partners, and often only able to run on authorized devices, called HDKs (Hardware Development Kits). Most SDKs today are open SDKs, in large part because of the explosive growth of mobile devices, the web, and cloud services.
How Do Enterprises Use SDKs?
Enterprise software tools may offer SDKs for integration with their platform or service. Typically, SDKs in the enterprise application space exist to serve very specific customer needs. For example, an MDM (Mobile Device Management) vendor will almost always need to publish an SDK and associated API (or APIs) for customers to enable programmatic, automated, and custom control of their managed devices and content. (We publish our Esper SDK for Android.)
When enterprises need their applications to behave in very specific ways, to connect to controlled resources, or to automate an application or service’s behavior on a device, an SDK provides a faster, more reliable way to build that functionality. Imagine you have a fleet of self-ordering kiosks at dozens of quick-service restaurants across multiple states. You want to update the content on those devices weekly, and to do so with a code-driven automation that pulls the content from one of your own connected cloud buckets where that new content is uploaded. An MDM SDK might allow you to create the code for this automation through use of a REST API, sending this command through the cloud, to the MDM infrastructure, where the command is then executed.