Linux is Operating System similar to Classic Unix.
There are many different distributions, or software configurations.
Linux consists of:
- System Libraries,
- System Tools.
Kernel provides realization of all important Operating System abstractions, including such elements as Virtual Memory & Processes.
Kernel uses idea of Dynamically Loaded Modules.
Modules are Kernel parts, which can be loaded into Kernel and unloaded from Kernel as needed or neccessary.
We do not need CD-ROM driver functionality of a kernel if we do not have CD-ROM.
Once we plug the hardware in or out, we can load or unload the driver responsible for hardware as needed.
Not all modules are drivers responsible for hardware, however... there can be also other functionalities such as software tools for scheduling processes, or other parts of the Operating System's 'software infrastructure'. By changing, loading / unloading module, we can change implementation of Operating System's Process Scheduler as we wish.
To change Operating System's behavior on such a basic level is risky, and we do not need to recompile whole Kernel to achieve the change. We can write a Kernel Module, or use / modify existing a Kernel Module, then unload / load it as needed.
Hackers can rewrite Kernel Module to hide chosen files from Operating System's users, as an example. Or to log (record) keystrokes and exact details of mouse moves, including system clock's reading and logged user information and screenshots in a hidden file on a hard drive, as an another example.
System Libraries define standard set of functions that can be used in users' programs to access the Kernel.
System Libraries also provide certain functionalities that does not require full privileges of a Kernel Code, such as Mathematical Functions, Sorting Algorithms, String Operations etc... There are application standards, such as UNIX, POSIX, that require functionalities provided by System Libraries to allow applications to meet them.
If neccessary, even a Driver For Mathematical Unit (Such as Processor Part, or a Graphics Card) can be part of System's Kernel. System libraries can use this possible Kernel Modification. Perhaps there are standards however deciding what is put in Kernel, and what in System Libraries, what needs 'privileged Kernel mode', what does not.
Operating System as Abstraction over Hardware. Operating System as the Software Infrastructure.
Applications are usually written not for particular Hardware, but for a certain Computing System, a combination of both Hardware & Operating System, perhaps other Software as well.
It's easier to depend on an abstract hardware driver & system libraries, than to include code for all possible concrete CD-ROM models, sorting algorithms & such, in our software, if we want to read data from a CD-ROM as part of our functionality.
System tools are programs useful in managing or using Computer System.
They are executed & used as many times as we prefer, to edit a text file for example... or are constantly working in background (daemons), to respond to signals from the Network, for example.
System tools can be executed from a console terminal as written commands, or are using Graphic User Interface. Their execution can be also automated, and happen as part of Operating System starting.
Source: , Wikipedia.