Cygwin のより完全な歴史については、Geoffrey J. Noer による 1998 年の論文 「Cygwin32: A Free Win32 Porting Layer for UNIXョ Applications」を参照して下さい。これは 第 2 回 USENIX Windows NT シンポジウム オンライン議事録 から手に入ります。
Cygwin の開発は Cygnus Solutions(現在は Red Hat Software の一部門となっています)
によって 1995 年から始められました。まず、開発ツール(gcc、
gdb、gas など)の強化が行われました。
これによって Win32 ネイティブオブジェクトファイルの生成と解釈が出来るようになりました。
次の仕事はツールを Windows NT/95 に移植することでした。ソースの大部分を Win32 API
の文脈で動作するように書き換えることでも出来たでしょうが、
その方法では個々のツール全てに対して膨大な時間を費やすことになります。
その代わりに我々は、共有ライブラリ(Cygwin DLL)を書くという全く異なったアプローチを取ることにしました。
このライブラリは UNIX 風の環境に必要な機能
(fork、spawn、signals、
select、socketsなど)のうち、
Win32 API に欠けているものを追加します。
我々はこの新しいインタフェースを Cygwin API と呼んでいます。
このライブラリが作成された後は、
UNIX 上のクロスコンパイラを使ってこのライブラリをリンクし、
動作する Win32 ツールをビルドすることが可能になりました。
この時点で我々は、Windows 95/NT 上で自分自身を再構築可能なネイティブツールを作成する、という目標を達成しました(これはよく「セルフホスティング」と呼ばれます)。 95 にも NT にも UNIX 上の標準的なユーザツール(fileutils、textutils、 bash などなど)は付属していないので、私たちは Cygwin API と共に動作する同様の GNU ツールを手に入れる必要がありました。 それまで、これらのツールの殆どは Windows 専用にビルドされていたため、 configure スクリプトをクロスコンパイルできるように修正する必要がありました。 その変更以外にも、ごく僅かですがソースレベルの変更が必要でした。 bash が開発ツールやユーザツールと共に正しく動作すれば、 Windows 95 も NT も、GNU configure のメカニズムから見れば UNIX の一種のように見えます。セルフホスティングは 1996 年 10 月にリリースされた beta 17.1 以降で達成されました。
完全な Cygwin ツールセットは、単一の巨大な存在としてのみインストール可能でした。
2000 年 4 月に、プロジェクトは
新しい Cygwin Net Release をアナウンスしました。
Net Release では、パッケージを個々にインストール及びアップデートするためのネイティブ
Win32 プログラムである setup.exe が提供されています。
Cygwin DLL と setup.exe は、今も継続して開発されています。