In March of this year, the Open Application Model (OAM) specification reached the second draft milestone of the spec, dubbed v1Alpha2. This draft was a collaborative effort with the OAM community and the community behind Crossplane—a forward-thinking open source project that enables you to use the Kubernetes API to provision and manage cloud infrastructure, services, and applications. With last week’s v0.11 release, Crossplane reached an exciting milestone, now implementing the OAM specification.

How we got here

The Open Application Model was designed from the beginning with the ambitious goal of providing a standard way to declaratively model applications agnostic of any specific platform, while still allowing each platform that implements the spec to surface its unique features and capabilities. OAM provides an extendable model at its core, so that applications can be modeled consistently anywhere without being reduced to lowest-common-denominator feature sets.

OAM applications are made of three basic elements:

  • Components: the workloads you want to run
  • Traits: operational behaviors for individual components
  • Scopes: a flexible way to group components around common operational behaviors and form applications of all shapes and sizes.

These elements come together in a simple configuration file that defines all or part of an application.

The key to OAM’s design is that every platform that implements the spec can choose which types of components, traits, and scopes to support, as long as the platform implements the overall model as described in the spec. This allows all platforms to surface their unique features and capabilities through a consistent application model. The v1Alpha2 draft of OAM introduces subtle changes with big impacts on how platforms can implement the specification.

In the first draft of the OAM spec, we mainly focused on containerized workloads. Rudr, the reference implementation of the initial draft of OAM for Kubernetes, included controllers that deployed OAM applications with containerized workloads to Kubernetes clusters. Soon after its initial release, we started thinking about how to extend the model in a few important ways: 1) modeling other types of workloads, like functions, queues, and databases as components; 2) allowing users to bring their existing custom workloads, such as CRDs in Kubernetes, into an OAM application without having to modify them; and 3) making the core extension model around components, traits, and scopes easier to use.

Enter Crossplane

Typically, before you can deploy an application, you first must figure out what infrastructure it will run on. Oftentimes, this ends up coupling the application to the chosen infrastructure. To help decouple the application from the infrastructure, OAM defines three distinct roles: application developer, application operator, and infrastructure operator. Being an application model, the OAM spec focuses mainly on the first two roles. Crossplane defines the same three roles, but mainly focuses on the infrastructure operator role. As it turns out, OAM and Crossplane naturally complement each other: OAM defines the application and Crossplane defines the infrastructure on which the application runs.

The combined result is a powerful, team-centric platform that enables infrastructure operators to define and compose vendor-neutral infrastructure for applications, as well as enables application developers and application operators to define, run, and manage portable applications without concern for the complexities of that infrastructure. We often hear from users about the importance of the separation of concerns, which we see as two sides of the same coin. On one side, application developers want to focus on application code without the complexities of cloud infrastructure. On the other side, infrastructure operators need a way to manage the infrastructure on which those applications run. OAM and Crossplane together provide an elegant solution to both application developers and infrastructure operators.

What’s next

We’re excited about the capabilities that Crossplane brings to operators that manage infrastructure for applications and the huge potential in combining that power with OAM’s flexible and open standard for modeling applications. That’s why we are excited to make Crossplane the best open source implementation of OAM for Kubernetes and continue our journey to bring an open and standard application model for cloud and edge scenarios.

Questions or feedback? Please let us know in the comments.