&GAP; is a free, open and extensible software package for computation in discrete abstract algebra. The terms free and open describe the conditions under which the system is distributed -- in brief, it is free of charge (except possibly for the immediate costs of delivering it to you), you are free to pass it on within certain limits, and all of the workings of the system are open for you to examine and change. Details of these conditions can be found in Section .

The system is extensible in that you can write your own programs in the &GAP; language, and use them in just the same way as the programs which form part of the system (the library). Indeed, we actively support the contribution, refereeing and distribution of extensions to the system, in the form of &GAP; packages. Further details of this can be found in chapter , and on our website.

Development of &GAP; began at Lehrstuhl D für Mathematik, RWTH-Aachen, under the leadership of Joachim Neubüser in 1985. Version 2.4 was released in 1988 and version 3.1 in 1992. In 1997 coordination of &GAP; development, now very much an international effort, was transferred to St Andrews. A complete internal redesign and almost complete rewrite of the system was completed over the following years and version 4.1 was released in July 1999. A sign of the further internationalization of the project was the &GAP; 4.4 release in 2004, which has been coordinated from Colorado State University, Fort Collins.

More information on the motivation and development of &GAP; to date, can be found on our Web pages in a section entitled Release history and Prefaces.

For those readers who have used an earlier version of &GAP;, an overview of the changes from &GAP; 4.4 and a brief summary of changes from earlier versions is given in a separate manual .

The system that you are getting now consists of a core system and a number of packages. The core system consists of four main parts. A kernel, written in C, which provides the user with automatic dynamic storage management, which the user needn't bother about in his programming; a set of time-critical basic functions, e.g. arithmetic, operations for integers, finite fields, permutations and words, as well as natural operations for lists and records; an interpreter for the &GAP; language, an untyped imperative programming language with functions as first class objects and some extra built-in data types such as permutations and finite field elements. The language supports a form of object-oriented programming, similar to that supported by languages like C++ and Java but with some important differences. a small set of system functions allowing the &GAP; programmer to handle files and execute external programs in a uniform way, regardless of the particular operating system in use. a set of programming tools for testing, debugging, and timing algorithms. a read-eval-view style user interface. A much larger library of &GAP; functions that implement algebraic and other algorithms. Since this is written entirely in the &GAP; language, the &GAP; language is both the main implementation language and the user language of the system. Therefore the user can as easily as the original programmers investigate and vary algorithms of the library and add new ones to it, first for own use and eventually for the benefit of all &GAP; users. A library of group theoretical data which contains various libraries of groups, including the library of small groups (containing all groups of order at most 2000, except those of order 1024) and others. Large libraries of ordinary and Brauer character tables and Tables of Marks are included as packages. The documentation. This is available as on-line help, as printable files in PDF format and as HTML for viewing with a Web browser.

Also included with the core system are some test files and a few small utilities which we hope you will find useful.

&GAP; packages are self-contained extensions to the core system. A package contains &GAP; code and its own documentation and may also contain data files or external programs to which the &GAP; code provides an interface. These packages may be loaded into &GAP; using the command, and both the package and its documentation are then available just as if they were parts of the core system. Some packages may be loaded automatically, when &GAP; is started, if they are present. Some packages, because they depend on external programs, may only be available on the operating systems where those programs are available (usually UNIX). You should note that, while the packages included with this release are the most recent versions ready for release at this time, new packages and new versions may be released at any time and can be easily installed in your copy of &GAP;.

With &GAP; there are two packages (the library of ordinary and Brauer character tables, and the library of tables of marks) which contain functionality developed from parts of the &GAP; core system. These have been moved into packages for ease of maintenance and to allow new versions to be released independently of new releases of the core system. The library of small groups should also be regarded as a package, although it does not currently use the standard package mechanism. Other packages contain functionality which has never been part of the core system, and may extend it substantially, implementing specific algorithms to enhance its capabilities, providing data libraries, interfaces to other computer algebra systems and data sources such as the electronic version of the Atlas of Finite Group Representations; therefore, installation and usage of packages is recommended.

Further details about &GAP; packages can be found in chapter , and on the &GAP; website here: http://www.gap-system.org/Packages/packages.html.