Graphical user interfaces (GUIs) can be implemented in a variety of ways. On a multi-tasking operating system, there is a need for some division between the application and the component that actually puts something on the screen. There are many different places that this division can be put, and a variety of ways information can flow across it.