An operating system is software that lays between the application layer and the hardware layer. This allows application developers to have a consistent platform to build apps for. All the app has to do is communicate with the OS (operating system) and the OS worries about communicating with all of the hardware.

We can ignore specific details of how things work by viewing this as an abstraction. We can also layer these things by displaying them in a way that represents how they are designed. A user must speak through the application, which speaks to the OS, which speaks to the hardware.