Defining Platforms, Frameworks, and Toolkits
As discussions around how to develop and deploy GEOINT apps become more prevalent, I’m frequently asked about platforms, frameworks, and toolkits that support app development and deployment. These terms are often confused, so I set out to find some definitions and distinctions. There is significant overlap between these concepts, and the terms are often used interchangeably with a variety of qualifiers. Here’s a short summary of my attempt to distill and define them:
A Platform is traditionally defined as the combination of hardware architecture and underlying software, including the operating system and fundamental runtime libraries required to run software applications. Very simply put, the platform is where the software application runs. For example, a basic platform might be Red Hat Linux and Java. Windows is a platform.
As tools and technologies have evolved, so have platforms. The term is used very simply, as I defined it above, but it is also used to define a robust environment that may include a framework (see below) for developing applications that includes tools for building and deploying the apps, as well as an infrastructure that facilitates the hosting, discovery, access, and use of apps. These robust platforms are sometimes referred to Ecosystems, which provides an entire environment that supports both the application developer and the end user. These ecosystems leverage the underlying hardware and software platform. ENVI/IDL and ArcGIS are Ecosystems.
A Framework is a well-defined environment that exposes a set of routines, functions, algorithms or applications that can be used to develop new applications. Frameworks, sometimes called application frameworks, are used to build apps. The framework,or at least parts of it, is included in the completed application. In addition to the functions used to build the apps, frameworks generally include a structure for creating the application, tools to build an executable version of the application, and, sometimes, a mechanism for deploying or running the application.
Frameworks accelerate application development because a baseline set of tools is included in the framework so the developer only needs to write custom code to meet the application requirements. The environment included with the framework also simplifies the work of structuring and building the application. Sometimes, frameworks are referred to as Application Frameworks. The terms Development Platform and Software Development Platform are also used to describe frameworks, which is part of the confusion. .NET and Ozone Widget Framework (OWF) are frameworks.
A Toolkit is a set of functions or routines that are incorporated into other applications to streamline development. If that sounds a lot like the definition of a framework, it is very similar. Toolkits are really framework’s little brothers. Toolkits only include routines or functions that are incorporated into applications. They don’t offer the development and deployment environments or basic application structures that one finds in a framework. Toolkits are often referred to as SDKs, or Software Development Toolkits. The term API, Application Programming Interface, can be used to define how the tools in the toolkit are meant to be called. Toolkits can be delivered as source code, or as a binary library, like a DLL on Windows. The API is of particular importance when the toolkit is delivered in binary form. This is how the developer knows how to call the tools from her custom code.
I don’t claim to have found all possible definitions, but I do hope that these definitions are helpful. Let me know how you define the terms, and what other ambiguities you’ve come across.