Asynchronous - must do serveral things at once. Handles interupts, and must change what it is doing thousands of times a second - and still get work done. General purpose - must do many different things. Run Doom, Java, Fortran, Lisp, Startrek, Databases, Web Servers, etc. Everybody wants their stuff to run well.
Operating systems are an unsolved problem.
Most do not work very well. Crash too often, too slow, awkward to use, etc. Usually they don't do everything they were designed to do. Do not adapt to changes very well. New devices, processors, applications.