One of the core principles to DevOps and SRE is a skill that a lot of new engineers are losing, which is the understanding of systems (servers, for example) and operating systems. Not too long ago, as an engineer, you had to understand how to install Linux. You needed to know how to dedicate storage to the OS, mount volumes, install the operating system itself, and configure the operating system.
Now, things are slightly different ever since we started living in a cloudy world. Getting a system up and running is as easy as logging into a cloud portal and clicking a few buttons.
The problem with not knowing about operating systems is; regardless how much abstraction there is, systems are still needed. For example, a Docker container is running a flavor of Linux or a version of Windows. You can't run an application in a container without it.
In this blog post, you'll learn about operating systems, systems, and what it all means.
Windows
Windows is an operating system, just like Linux. It has two primary flavors that users and engineers typically use:
- Windows server
- Windows desktop
Windows server is used for several purposes, like user authentication, security, file storage, and a whole lot of other features. It can also be used to run applications. If you have an application that's written for .NET, you can run it on a Windows server. You can also run other types of applications, written in Go, Python, etc., as long as the appropriate binaries, libraries, and dependencies are installed.
Windows desktop is what a lot of people use for their day-to-day work. It's what is installed on your laptop (unless you have a Mac). You won't really see Windows desktop being used as a server to run an application, although, never say never...
Windows is closed-source, so you can't "open it up" and dive into the kernel like you can with Linux.
If you want to get started with Windows server, you can check out the Microsoft docs here.
Linux
Linux has been the de facto standard for pretty much any server running an application that isn't on the .NET framework. It's also used for a lot of workloads pertaining to networking, storage, and pretty much any SMTP.
Linux distributions (distros), typically called Linux flavors, are vast. There are several different Linux distros, which are made up from multiple organizations and even end users. The reason why is because in reality, anyone who can understand the Linux kernel can create their own Linux operating system.
The top two most popular are:
- Ubuntu by Canonical
- Red Hat enterprise/Fedora community
Not only are there just server versions of Linux, but there are also desktop versions. For example, there's an Ubuntu server version and an Ubuntu desktop version.
If you want to get started with Linux, you can check out this getting started guide by PCMAG here.
Containers
By definition, containers use OS-level virtualization to run applications. The applications are packaged up into Docker images and the Docker images run as Docker containers.
Even though containers are OS-level virtualization, don't get this confused with standard server virtualization. Remember, standard virtualization like ESXi and Hyper-V are system-based virtualization. Containers are Operating System (OS) based virtualization.
When you think about a Docker image, it's running some operating system. Nine times out of ten in today's world, it's some sort of Linux distro. Some of the OS's running on containers can be insanely watered down and used strictly for the application to run. For example, some containerized distros won't even let you run basic Bash commands. Why? Because the container as one purpose; to run the app. It's lightweight for a reason.
There are also Windows Docker images and Windows containers. Truth be told, they aren't used as much Linux distros in containers, but they're available.