The term "cloud native" is tossed around constantly these days. It's used in so many different ways and contexts that the actual definition seems quite vague -- even by the notoriously low standards of tech buzzwords.
Cloud native, as a phrase, entered the IT vernacular in the summer of 2015, when the Cloud Native Computing Foundation (CNCF) was founded. The CNCF, which is a project of the Linux Foundation, declared at the time that its goal was "to advance the state-of-the-art for building cloud native applications and services."
The CNCF launch announcement didn't explicitly define what cloud native meant. It did, however, mention open source software, containers, microservices, APIs and orchestration tools. Thus, these technologies became associated early on with the meaning of cloud native. However, there was little clarification -- then or now -- about how these technologies come together to produce an app that qualifies as cloud native.
To get closer to a true definition of cloud native, let's explore the ways different organizations use the term, along with some perspective on when it is or is not a useful descriptor.
The many meanings of cloud native
The definition of cloud native has become more confusing as organizations and IT professionals incorporate it into their everyday usage, despite defining the term in different ways.
The most oft-cited definition is the murky CNCF definition that was introduced in 2018. That cloud native definition mostly reiterates the points that the CNCF made when it launched in 2015, though it does emphasize some concepts not included at the CNCF launch, such as automation, observability and resiliency.
Still, the current CNCF definition doesn't explain exactly what counts as cloud native and what doesn't. That is, unless you think any type of application that uses containers and microservices or relies on automation or resiliency counts as cloud native.
The CNCF definition also doesn't justify why "cloud" is part of "cloud native." Many of the technologies that the CNCF associated with cloud native are not unique to cloud computing. You can run containers or use microservices on premises. You can automate processes anywhere you want. The cloud, it appears, isn't an essential part of cloud native.
In that sense, it's reminiscent of the term "free software," coined by Richard Stallman in the 1980s to refer to software with freely available source code. The phrase caused generations of laymen to conflate free software with freeware. Similarly, cloud native will confuse a lot of people into thinking you have to use the cloud if you want to build a cloud native app.
Nonetheless, many other organizations have followed CNCF's lead in their own attempts to define cloud native. Microsoft's explanation is a good example of a long-winded discussion of how automation, resiliency, containers and microservices converge to enable cloud native. The New Stack's cloud native definition builds upon CNCF principles, but adds a few new ideas into the mix -- such as policy-driven resource allocation and the separation of stateful from stateless services.
Other efforts to define cloud native borrow partly from the CNCF definition but bring DevOps more explicitly into the mix. CNCF only alludes to ideas that are associated with DevOps -- like automation. From this point of view, a cloud native app is one that is developed and delivered according to the guidelines of DevOps, as well as one that uses containers and microservices.
Cloud native as a synonym for cloud
Perhaps unsurprisingly, there are also plenty of instances where cloud native is basically used to refer to anything that runs in the cloud.
For example, if you search for "cloud native" in the AWS marketplace, you'll find dozens of third-party apps or services that claim to be cloud native. But many of them don't cater uniquely to applications that involve automation, containers, microservices or the other technologies prominently featured in most definitions of cloud native.
To take just one example, Dynatrace calls itself "cloud native," and its monitoring platform can indeed be used to observe applications that you might define as cloud native. However, Dynatrace can also be used to monitor other types of applications. It's not as if it only works with containers, or only works with apps that are designed to be highly resilient or delivered using DevOps processes.
Another instance to consider is Blu Genius, which bills itself as a tool for "cloud native migration." But, it would probably be more accurate to say that it enables cloud migration. Nothing about the type of migration that Blu Genius supports is explicitly or uniquely cloud native, if you take cloud native to mean how CNCF defines it.
So, what does cloud native actually mean?
If the varying definitions and usages of cloud native are any indication, the term ultimately means whatever people want it to mean.
At a high level, certain technologies, like containers and microservices, form an important part of what many people consider to be cloud native. Yet, there is virtually no specific guidance from any organization regarding how, exactly, these technologies need to be used in order for an app to meet the requirements of the cloud native definition.
Lots of apps are deployed using containers, but it seems like it would be simplistic to say that any app that is containerized automatically counts as cloud native. Likewise, lots of apps rely heavily on automation, and almost any competent production app is designed to be resilient, but that doesn't make every app with these features cloud native.
However, the same criticisms could be made of other popular tech buzzwords. There's no consensus on what, exactly, DevOps means; there may be some common themes but there is no single formula or tool set that defines what counts as DevOps and what doesn't.
So maybe we shouldn't be too harsh on people who vigorously embrace the cloud native label. Yes, it's vague, and it may be misused by marketers who really just mean "cloud" when they say "cloud native." But there is value in the principles of efficiency and resiliency that are promoted by most of the definitions. Think of it as a useful guideline for designing and deploying apps effectively, as long as you don't take the term too literally.