<chapter id="overview"><title>Cygwin Overview</title>

<sect1 id="what-is-it"><title>What is it?</title>

<para>The Cygwin tools are ports of the popular GNU development
tools and utilities for Windows NT and 9x. They function through the
use of the Cygwin library which provides the UNIX system calls and
environment that these programs require.</para>

<para>With the tools installed, programmers may write Win32
console or GUI applications that make use of the standard Microsoft
Win32 API and/or the Cygwin API. As a result, it is possible to
easily port many significant UNIX programs without the need for
extensive changes to the source code.  This includes configuring and
building most of the available GNU software (including the development
tools included with the Cygwin distributions). Even if the
compiler tools are of little to no use to you, you may have
interest in the many standard UNIX utilities. They can be used both
from the bash shell (provided) or from the command.com.</para>

</sect1>

<sect1 id="are-free"><title>Are the Cygwin tools free software?</title>

<para>Yes. Parts are GNU software (gcc, gas, ld, etc...), parts are
covered by the standard X11 license, some of it is public domain,
some of it was written by Red Hat and placed under the GPL. None of it
is shareware. You don't have to pay anyone to use it but you should be
sure to read the copyright section of the FAQ more more information on
how the GNU General Public License may affect your use of these
tools. If you intend to port a proprietary application using the Cygwin
library, you may want the Cygwin proprietary-use license.
For more information about the proprietary-use license, please go to
<ulink URL="http://cygwin.com/cygwin-redhat.com">http://cygwin.com/cygwin-redhat.com
</ulink>.  Customers of the native Win32 GNUPro should feel free to submit bug
reports and ask questions through the normal channels.  All other
questions should be sent to the project mailing list
<email>cygwin@cygwin.com</email>.</para>

</sect1>

<sect1 id="brief-history"><title>A brief history of the Cygwin project</title>

<para>The first thing done was to enhance the development tools (gcc,
gdb, gas, et al) so that they could generate/interpret Win32 native
object files.</para>

<para>The next task was to port the tools to Win NT/9x. We could have
done this by rewriting large portions of the source to work within the
context of the Win32 API. But this would have meant spending a huge
amount of time on each and every tool. Instead, we took a
substantially different approach by writing a shared library
(the Cygwin DLL) that adds the necessary UNIX-like functionality
missing from the Win32 API (fork, spawn, signals, select, sockets,
etc.).  We call this new interface the Cygwin API. Once written, it
was possible to build working Win32 tools using UNIX-hosted
cross-compilers, linking against this library.</para>

<para>From this point, we pursued the goal of producing native tools
capable of rebuilding themselves under Windows 9x and NT (this is
often called self-hosting). Since neither OS ships with standard UNIX
user tools (fileutils, textutils, bash, etc...), we had to get the GNU
equivalents working with the Cygwin API. Most of these tools were
previously only built natively so we had to modify their configure
scripts to be compatible with cross-compilation. Other than the
configuration changes, very few source-level changes had to be
made. Running bash with the development tools and user tools in place,
Windows 9x and NT look like a flavor of UNIX from the perspective of
the GNU configure mechanism. Self hosting was achieved as of the beta
17.1 release.</para>

</sect1>

DOCTOOL-INSERT-ov-ex-unix
DOCTOOL-INSERT-ov-ex-win
<sect1 id="highlights"><title>Highlights of Cygwin Functionality</title>
DOCTOOL-INSERT-ov-hi-intro
DOCTOOL-INSERT-ov-hi-win9xnt
DOCTOOL-INSERT-ov-hi-perm
DOCTOOL-INSERT-ov-hi-files
DOCTOOL-INSERT-ov-hi-textvsbinary
DOCTOOL-INSERT-ov-hi-ansiclib
DOCTOOL-INSERT-ov-hi-process
DOCTOOL-INSERT-ov-hi-signals
DOCTOOL-INSERT-ov-hi-sockets
DOCTOOL-INSERT-ov-hi-select
</sect1>
</chapter>
