Agreed.
The
kernel is the foundation-layer... primarily concerned with hardware control.
User programs almost
never communicate directly with the kernel: they use "libraries" such as
glibc (or hundreds of others) which do this for them. The essential reason, of course, is
so that applications are generally able to be un-concerned about the environment that they're operating in.
In the Linux world, after all, your program could find itself running on anything from a huge IBM mainframe to a cellular telephone!
