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!