3. Initial Goals
The original goal of Cygwin was simply to get the development
tools working. Completeness with respect to POSIX.1
and other relevant UNIX standards was not a
priority.
Part of our definition of "working native tools" is having a build
environment similar enough to UNIX to support rebuilding the tools
themselves on the host system, a process we call self-hosting. The
typical configuration procedure for a GNU tool involves running
"configure", a complex Bourne shell script that determines information
about the host system. The script then uses that information to
generate the Makefiles used to build the tool on the host in
question.
This configuration mechanism is needed under UNIX because of the large
number of varying flavors of UNIX. If Microsoft continues to produce
new variants of the Win32 API as it releases new versions of its
operating systems, it may prove to be quite valuable on the Win32 host
as well.
The need to support this configuration procedure added the
requirement of supporting user tools such as sh, make, file utilities
(e.g. ls and rm), text utilities (e.g. cat, tr), shell utilities
(e.g. echo, date, uname), sed, awk, find, xargs, tar, and gzip, among
many others. Previously, most of these user tools had only been built
natively (on the host on which they would run). As a result, we had
to modify their configure scripts to be compatible with
cross-compilation.
Other than making the necessary configuration changes, we wanted to
avoid Win32-specific changes since the UNIX compatibility was to be
provided by Cygwin as much as possible. While we knew this would be
a sizable amount of work, there was more to gain than just achieving
self-hosting of the tools. Supporting the configuration of the
development tools would also provide an excellent method of testing
the Cygwin library.
Although we were able to build working
Win32-hosted toolchains with cross-compilers relatively soon after the
birth of Cygwin, it took much longer than we expected before the
tools could reliably rebuild themselves on the Win32 host because of
the many complexities involved.
|