The first computers probably most of us have been in touch with are traditional PCs. They have specific hardware and operating systems (OSs), and, back in the days, all of our applications have been installed on such machines. Interestingly, the idea of virtualizing computer systems pre-dates the PC by decades. In the late 1960s, IBM created a new mainframe that supported CP/CMS (Control Program/Cambridge Monitor System) developed earlier at MIT. This was the first OS based on a virtual machine (VM).

VMs are an emulation of a complete computer system and multiple of them can run on a single physical server’s CPU. This efficient approach has now been used at a massive scale by cloud provider who use VMs to separate distinct applications. Like for actual hardware, in each of these machines, an operating system has to be installed. In a sense, virtualization technology is deeply engraved in Runa Capital’s DNA. Our founding partners Ilya and Serguei made heavy use of this technology to build their company Parallels known e.g. for powerful technology to run Windows on your Mac.

A step even further is OS-level virtualization by so-called containers. An early approach for this were the LXC container or Parallel's OpenVZ (Open Virtuozzo) technology (fun fact: one of the brains behind the container technology Kirill Korotaev is one of Runa's longstanding technical advisors). Nowadays, technologies like Docker have become more popular. Containers are very similar to VMs, but they do share the same operating system making them much more lightweight. Note that containers need a Linux kernel, but in principle are decoupled from the underlying infrastructure, which makes them very fast to spin-up and recycle. A nice side effect is that they can be ported to other systems fairly easy. See Fig. 1 to understand the different approaches.

Fig. 2: Containers are great and practical.

With containers, developers have found a good way to abstract away the hardware and to run applications. However, your system still needs to be managed. This can be done with orchestration software. The winning platform is clearly Kubernetes (K8s) designed by Google and consequently open-sourced in 2014. However, there are quite a few competing cluster management tools like RedHats' OpenShift or Apache Mesos. You may find an exhaustive list of container orchestration software here. These platforms take care of the things few people enjoy dealing with: service discovery, load balancing, storage orchestration, automated rollouts/rollbacks, automatic bin packing, self-healing and secret/configuration management. Sounds like a lot? Good that such platforms are taking care that everything is launched and running properly!

Multi-cloud

Cloud providers like AWS constantly update their services and develop new ones in order to make their platforms even more attractive. This may lead to increased switching costs and a kind of vendor lock-in for their clients. Cloud-native applications may liberate developers once again.

Containers and orchestration software help to split large applications into small and independent microservices. While you are able to set up such systems from scratch, there are some third-party tools like Weaveworks or Terraform which automate deployment and remove manual processes. A side effect of abstracting away the hardware is making it easier to switch between data centres.

There are some interesting companies out there that unify the user interface of the different cloud providers and allow to seamlessly move cloud-native applications between clouds, on-prem or to the edge. Examples are Meshcloud, Kublr, Rancher, Humanitec or Loodse’s Kubermatic. Each one with a slightly different focus, they have built easy-to-use tools for management of enterprise Kubernetes.