<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %W  overview.xml              GAP documentation         Joachim Neubueser -->
<!-- %% -->
<!-- %H  @(#)<M>Id: preface.tex,v 4.44 2006/06/27 21:37:08 gap Exp </M> -->
<!-- %% -->
<!-- %Y  Copyright (C) 1997, Lehrstuhl D für Mathematik, RWTH Aachen, Germany -->
<!-- %% -->
<!-- %%  This file contains a part of the preface to the tutorial and reference manual -->
<!-- %% -->
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

&GAP; is a <E>free</E>, <E>open</E> and <E>extensible</E> software package for
computation in discrete abstract algebra. The terms <Q>free</Q> and <Q>open</Q> 
describe the conditions under which the system is distributed -- in brief, it 
is <E>free of charge</E> (except possibly for the immediate costs of delivering 
it to you), you are <E>free to pass it on</E> within certain limits, and 
all of the workings of the system are <E>open for you to examine and change</E>.
Details of these conditions can be found in Section 
<Ref Sect="Copyright and License" BookName="ref"/>.
<P/>
The system is <Q>extensible</Q> 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  <Q>library</Q>).  Indeed,  we  actively
support the contribution, refereeing and distribution  of  extensions  to
the system, in the form of <Q>&GAP; packages</Q>.  Further details of  this
can be found in Chapter <Ref BookName="ref" Chap="Using and Developing GAP Packages"/>,
and on our website.
<P/>
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;&nbsp;4.4 release in 2004, which has been coordinated from 
Colorado State University, Fort Collins.
<P/>
More information on the motivation and development of &GAP; to date,
can be found on our website in a section entitled
<Q>Some History of &GAP;</Q>:
<URL>https://www.gap-system.org/Doc/History/history.html</URL>.
<P/>
For those readers who have used an earlier version of &GAP;, an
overview of the changes from &GAP;&nbsp;4.4 and a brief 
summary of changes from earlier versions is given in <F>CHANGES.md</F>
file in the main directory.
<P/>
The system that you are getting now consists of a <Q>core system</Q> and
a number of packages. The core system consists of four main parts.
<Enum>
<Item>
    A  <E>kernel</E>, written in C, which provides the user with
    <List>
    <Item>
      automatic dynamic storage management, which the user needn't bother
      about when programming;
    </Item>
    <Item>
      a   set of  time-critical basic   functions, e.g.   <Q>arithmetic</Q>,
      operations for integers, finite fields,  permutations and words, as
      well as natural operations for lists and records;
    </Item>
    <Item>
      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.
    </Item>
    <Item>
      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. 
    </Item>
    <Item>
      a  set  of programming tools  for   testing, debugging, and timing
      algorithms.
    </Item>
    <Item>
      a <Q>read-eval-view</Q> style user interface.
    </Item>
    </List>
</Item>
<Item>
A much larger <E>library of &GAP; functions</E> 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 a user can, as easily as the original programmers,
  investigate and vary algorithms of the library and add new ones to
  it, first for their own use and eventually for the benefit of all &GAP;
  users.
</Item>
<!-- Is the following point now out of date? -->
<Item>
A <E>library of group theoretical data</E> 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.
</Item>
<Item>
    The <E>documentation</E>.  This is available as on-line help, as
    printable files in PDF format and as HTML for viewing
    with a Web browser.
</Item>
</Enum>
<P/>
Also included with the core system are some test files and a few
small utilities which we hope you will find useful.
<P/>

&GAP; <E>packages</E> 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 <Ref Func="LoadPackage" BookName="ref"/> 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;.
<P/>
<!-- TODO update this paragraph -->
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.
<P/>
Further details about &GAP; packages can be found in chapter 
<Ref BookName="ref" Chap="Using and Developing GAP Packages"/>, and on the
&GAP; website here: <URL>https://www.gap-system.org/Packages/packages.html</URL>. 

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %E -->

