Before we get started with virtualization and containers, let's briefly go over some basics of operating systems. An operating system is a piece of software that sets up a platform for user apps to run seamlessly and these apps share low-level system resources, such as memory and CPU cycles via the OS.
The application calls to access resources are translated to system calls. The system calls access the kernel (embedded within the OS), which talks to connected hardware via drivers. A popular family of operating systems, such as macOS, Windows, and Linux are packaged with a robust kernel and supporting drivers for all the major hardware products. The preceding description of the operating system is highly shortened to keep things simple.