A user interface is the portion of an application that is concerned with managing the terminal, i.e., the collection of input and output devices through which a person interacts with an application. As there are many sorts of terminals, there are also many sorts of user interfaces. For example, there are character-cell interfaces, such as CURSES and Emacs Lisp, for managing character-cell terminals. There are also graphical user interfaces (GUIs), such as the X Window System and Microsoft Windows, for managing window systems. Indeed, there are many sorts of interfaces, or styles, available for the X Window System, such as Motif and OpenLook.
The problem of portability
A platform is a combination of a particular architecture of computer and an operating system. For an application to be considered portable, it must be possible to compile the sources code on more than one platform (with perhaps very minor changes), then to run the object modules on their respective platforms to obtain equivalent results. When we consider user interfaces, however, we must also be concerned with the style our ported application takes on. Ideally, an application will take on a style appropriate to the terminal used to interact with it.
An interesting problem arises with networked window systems such as the X Window System: a single terminal may display may applications running on multiple platforms, each with its own style! Apart from being unaesthetic, this can be quite confusing to users. What we would really like is to be able to impose a consistent style on all applications displayed on the terminal.