Microkernels are a way of solving this problem. In a microkernel operating system, the kernel deals only with critical activities, such as controlling the memory and CPU, and nothing else. Drivers and other functions that monolithic kernels would normally include within the kernel are moved outside the kernel, where they are under control. Instead of being an uncontrollable part of the kernel the beta driver is, therefore, no more likely to cause a crash than a beta web browser. That is, if a driver goes wrong it can simply be restarted by the kernel. Unfortunately, creating microkernel based operating systems is very difficult and there are no common microkernel operating systems. Minix and QNX are both microkernel operating systems.