One of the major accomplishments in the specification of OpenGL
[14,10] was the isolation of window system dependencies
from OpenGL's rendering model. The result is that OpenGL is window
system independent.

Window system operations such as the creation of a rendering window and
the handling of window system events are left to the native window
system to define. Necessary interactions between OpenGL and the window
system such as creating and binding an OpenGL context to a window are
described separately from the OpenGL specification in a window system
dependent specification. For example, the GLX specification
[3] describes the standard by which OpenGL interacts with
the X Window System.

The predecessor to OpenGL is IRIS GL [15,16]. Unlike
OpenGL, IRIS GL does specify how rendering windows are created
and manipulated. IRIS GL's windowing interface is reasonably popular
largely because it is simple to use. IRIS GL programmers can worry
about graphics programming without needing to be an expert in
programming the native window system. Experience also demonstrated that
IRIS GL's windowing interface was high-level enough that it could be
retargeted to different window systems. Silicon Graphics migrated from
NeWS to the X Window System without any major changes to IRIS GL's
basic windowing interface.

Removing window system operations from OpenGL is a sound decision
because it allows the OpenGL graphics system to be retargeted to
various systems including powerful but expensive graphics workstations
as well as mass-production graphics systems like video games, set-top
boxes for interactive television, and PCs.

Unfortunately, the lack of a window system interface for OpenGL is a
gap in OpenGL's utility. Learning native window system APIs such as
the X Window System's Xlib [6] or Motif [7]
can be daunting. Even those familiar with native window system APIs
need to understand the interface that binds OpenGL to the native window
system. And when an OpenGL program is written using the native window
system interface, despite the portability of the program's OpenGL
rendering code, the program itself will be window system dependent.

Testing and documenting OpenGL's functionality lead to the development
of the tk and aux toolkits. The aux toolkit is used
in the examples found in the OpenGL Programming Guide
[9]. Unfortunately, aux has numerous limitations and
its utility is largely limited to toy programs. The tk library
has more functionality than aux but was developed in an ad
hoc fashion and still lacks much important functionality that IRIS GL
programmers expect, like pop-up menus and overlays.

GLUT is designed to fill the need for a window system independent
programming interface for OpenGL programs. The interface is designed
to be simple yet still meet the needs of useful OpenGL programs.
Features from the IRIS GL, aux, and tk interfaces are
included to make it easy for programmers used to these interfaces
to develop programs for GLUT.