While Windows adopts a monolithic kernel architecture, Linux is composed of a multitude of "bricks" software.
For example under Windows, it is almost impossible to operate without the GUI or even change the GUI manager.
Under Linux simply remove the corresponding brick and replaced by another (e.g replace Gnome with KDE or XFCE)..
The kernel space is the heart of the operating system. It manages the hardware (disk, video card, network ...) and provides access to software and libraries located in the user layer.
Thus, if the software or libraries the user layer fail, it doesn't affect the system.
From the graphical point of view, as you can see from the above diagram, a software can make use - for example - the features of Gnome, GTK +, or use directly X. .. or nothing at all and run without a GUI.
This scheme is simple:
All the bricks are not represented
All relationships between bricks are not reported
The internal structure of each brick is not detailed
There are thousands of bricks software available for Linux. They are in the form of executable or library.
For example, if you want to create a program that makes HTTP requests, you don't need to create it yourself: just use the libcurl library or the curl library.
If you want an idea of ??available software components, run Synaptic and look at the packages starting with "lib ...": It does give you an idea of ??all that is available.
In the above diagram, the window manager KWin and Metacity are shown, but there are dozens more availble.