The irony of the software industry is that we select terms that eventually (or initially) do not mean what they were supposed to mean or otherwise are very “cloudy”.
For example, cloud-native does not mean it runs in the cloud. It means, it surely can. But it rather means that the application or automation component has certain properties that, in fact, make it very convenient to run anywhere: on your laptop, inside a Raspberry Pi, inside an on-prem data center, or in any region of AWS, GCP, Azure, and other clouds.
On the contrary, you can run a non-cloud-native application inside the cloud as well. Take a big Java monolith running only on WebLogic, and deploy it to a big fat EC2 instance running as part of an EKS cluster in AWS. It will work. It does not make the app cloud-native, though.
The hub of cloud-native technologies - the Cloud Native Computing Foundation (CNCF) - defines it like that:
Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds.
Scalable, dynamic, modern. Those are the keywords. Cloud is just an example of the modern runtime environment, where we can deploy our cloud-native technology or application.
Did you know that F16 fighter jets also run on a cloud-native technology - Kubernetes? That is probably as close to the clouds as it gets.
Some other define cloud-native as leveraging the cloud computing model:
Cloud-native architecture and technologies are an approach to designing, constructing, and operating workloads that are built in the cloud and take full advantage of the cloud computing model.
According to the above definition, cloud-native is something that is built specifically for the cloud. Honestly, that would be a more correct and self-explanatory definition. But that’s not how people use the word.
All-in-all, it’s a nice marketing term that seems to be a synonym of cool and lightweight. Maybe we should blame the marketing department for the confusion.
Another term - Serverless - does not mean there are no servers. It rather means that servers are hidden enough by the platform abstraction layer. But they are there. For sure. Serverless is more about effective integration with existing managed services and cloud offerings. Serviceful, if you will. It’s reliable, scalable, event-driven.
Serverless tech is cloud-native, by the way.
Serverless is also a different billing model compared to the traditional server approach. Pay-as-you-go instead of pay-for-uptime. So, serverless is about billing and integrations, not about the absence of servers.
Software industry outsiders will definitely not get all the nuances 🙂. Insiders are confused as well. Sometimes.
P.S. On a side note, cloud computing actually happens on the ground. Sometimes underground. Sometimes underwater.