a key concept to almost all microkernels is breaking down a single large kernel into a set of communicating "servers". instead of having a single large program in control of the entire hardware side of the computer system, these sorts of duties are handed out to smaller programs that are given rights to control different parts of the machine. for instance, a particular server might be given control of the networking hardware, while another has the task of managing the hard drives. another server would handle the file system, calling both of these lower-level servers. user applications ask for services by sending "messages" to these servers, using some form of inter-process communications (ipc), as opposed to asking the kernel to do this work via a "syscall" or "trap".