The most difficult task a computer undertakes is simply to communicate its computations with other software, hardware, computers & through them us humans!
Communicating to another program involves "serializing" the data into a common usually-bytestream format for it to "lex" then "parse", same for sending data into the future. If the communication/storage channel is unreliable we need error-correction/detection. If it doesn't have enough bandwidth we need compression/decompression.
In many cases that becomes a back & forth communication, especially when communicating humans or other computers. This becomes challenging in kernelspace with all the hardware wanting to set the schedule.
Drivers beneath, within, & above Linux abstracts this communication into a common interface. Fileformats & helper libs aid generating sheer quantity of output data.
Or the hardware needs to be emulated.
& libraries like GTK need to establish a shared language to communicate with humans.
An OS (Operating System) is mostly a collection of software, including reusable code, pulling all of the software necessary for I/O together. And providing a user interface, a "shell", asking users what they want to do. What software they wish to run.
I enjoy going through all these components, figuring out how they work, & communicating that!
3/2 Truly fin!
For people who care about, support, or build Free, Libre, and Open Source Software (FLOSS).