http://codingrelic.geekhold.com/2008/11/six-million-dollar-l...
By default. Unlike in Windows (from what I understand), in Unix-like OSes (Linux, the BSDs, probably others) it's entirely possible for user programs to talk directly to the kernel via a published API.
In Linux, C programs can use the syscall(2) function and x86 and x86-64 assembly language programs can use either the sysenter opcode or the int 0x80 interface, which is why linux-gate.so.1 exists and is mapped into every process: The kernel determines which method at boot and so userspace code (inclusive of libc) can't know in advance, so it uses the linux-gate.so.1 interface, instead.
http://www.trilithium.com/johan/2005/08/linux-gate/
http://articles.manugarg.com/systemcallinlinux2_6.html
http://stackoverflow.com/questions/9506353/how-to-invoke-a-s...