Cygwin に関する予備知識
Cygwin とは Windows 95/98、Windows NT/2000(Win32 環境) 上に移植された GNU 開発ツール群及びその他の UNIX 上で動作するツール一式からなる、 GPL に従ったオープンソースのフリーソフトウェアです。 ここでは、Cygwin を使うと何が出来るのか、Cygwin を使うと何が嬉しいのかについて説明します。
予備知識
Cygwin とは何か?
Cygwin とは Windows 95/98/Me、Windows NT/2000/XP などの Win32 環境上に移植された GNU 開発ツール群及びその他の UNIX 上で動作するツール一式からなる、GPL に従ったオープンソースのフリーソフトウェアです。
Cygwin ユーザーズガイド でも述べられているように、Cygwin は GNU の開発ツールを Windows 環境(Win32 環境)へと移植するプロジェクトから始まりました。 しかしながら UNIX 上で使用される開発ツール群を 単純に Win32 環境に移植するのでは膨大な時間がかかってしまいますので、Cygwin の開発チームは「Win32 API に不足しているが UNIX 環境には必要な機能群」を備えた DLL を作成するといったアプローチを取りました。
開発ツールの移植から始まっているとは言え、現在の Cygwin は開発者以外のユーザにも十分に使いやすい環境へと進化しつつあります。 UNIX 環境に馴染んでいるユーザであれば、Cygwin が提供する各種コマンド群は魅力的に映るのではないでしょうか。
Cygwin は実際には以下の二つの部分から構成されています。
- Windows に対して POSIX エミュレーション層を提供する共有ライブラリ
Cygwin DLL。この DLL は UNIX 上には存在するが Windows
上では提供されていない、或いは「同名のものはあるが、UNIX
と Windows では挙動が異なる」システムコールや関数(
fork、spawn、シグナル、select、ソケットなど)を提供するもので、このライブラリが提供する API は「Cygwin API」と呼ばれています。Cygwin DLL は、Cygwin Project によって開発されています。 - Cygwin DLL を利用して Win32 環境上に移植された GNU 開発ツール及びその他の UNIX 系ツール群。 これらのツールは実行時に Cygwin DLL を動的にリンクして動作します。 Cygwin Project によって開発されたものや Cygwin Project によって移植されたものもありますが、その大多数は Cygwin のユーザがボランティアとして移植したものです。
Cygwin は元々 Cygnus Solutions によって開発及び保守がなされていましたが、 2000 年の Red Hat, Inc. による Cygnus の買収に伴い、現在は Red Hat の製品となっています。
Cygwin の本家サイトは http://cygwin.com/ であり、ここから最新の Cygwin DLL、Cygwin 用にコンパイルされたソフトウェア、各種ドキュメントなどが入手できます。
Cygwin のバージョン
Cygwin のバージョンは中核となる Cygwin DLL のバージョンで呼び習わされます。2004/9/6 現在、Cygwin DLL の最新のバージョンは 1.5.11 となっています。
現在公開されている Cygwin はあくまでも開発中のプロダクトであり、「Net Release」と呼ばれています。 一般的に入手可能であった「安定版」の最新バージョンは 1999 年 10 月に登場した 1.0 ですが、これはかつて Red Hat が $99 で販売していた商品(CD-ROM 版)であり、ネットワーク上では入手出来ません。
バージョン 1.1.x の頃、次の安定版としてバージョン 1.2 が 2001 年早期にリリースされるという話がありました。このバージョン 1.2 は CD-ROM に収められた「商品」となる予定だったのですが、1.2 の CD-ROM は結局発売されることがなく、 1.2 というバージョンは欠番同様となってしまいました。 また、バージョン 1.4 は少なくとも一般のユーザの目に触れる場所には出ていないはずです。
ややこしいのですが、1.0 の前の Cygwin のバージョンは beta 18(b18)や beta 20(b20)というバージョン番号を持ち、 その名称も現在の「Cygwin」ではなく、「GNU-Win32」というものでした。 「GNU-Win32」から「Cygwin」へ名称変更された理由は、Cygwin 配布物中には GNU のソフトウェアでないもの(Cygwin DLL そのものも!)も含まれているからです。
b20 以前の Cygwin は、Cygwin DLL と各種 UNIX 系ツール群を一纏めにして「b20」といったバージョン番号を付与していました。 これに対して、現在の「1.x.x」というバージョン番号はあくまでも Cygwin DLL のバージョン番号であり、各 UNIX 系ツール群はそれぞれ固有のバージョン番号を保持しています。 例えば、2004/8/24 現在の bash のバージョンは 2.05b です。
情報収集上の注意
Cygwin がある程度広く使われだすようになったのは b18 の頃からで、特に b20 になってからは安定性も上がり、各種のアプリケーションもコンパイルしやすくなった為、 それなりに多くの人が使うようになります。 そのため現在でも b20 や b20.1 をベースに書かれたドキュメントが Web 上で大量に見つかりますが、それらの記述内容や配布物は現状にそぐわないことがあり得ますから、 気をつけなければなりません。特に、b20.1 と 1.x.x の間では Cygwin の内部構造の変更に伴いライブラリの互換性が失われていますので、b20.1 以前のバージョンでコンパイルされたライブラリは 1.x.x では使用できません(実行形式は b20.1 時代のものでも使用可能です)。 尤も、現在ではそんな古いライブラリは配布されていないでしょうが。
また、b20 と 1.x.x では配布ファイルの形態やインストール方法が大幅に変わっており、 b20 以前のバージョンのインストール方法は 1.x.x では何の役にも立ちません。 Cygwin のインストール方法を紹介するページでよく「『full.exe』を持ってきて…」というような記述を見ますが、 これは b20 以前のインストール方法であり、現在の方法とは異なります (こともあろうに、Cygwin の本家が出している Cygwin ユーザーズガイドでさえ、つい最近までこのような記述をしていました)。
CVS とは何か?
CVS とはバージョン管理システムの名称です。詳細については CVS のサイト を参照して下さい。
Cygwin を構成する要素のうち、Cygwin Project によって開発されているものは Cygwin Project の CVS を用いて管理されています。 開発の最優先事項は勿論 Cygwin DLL ですが、インストーラである setup.exe や、幾つかのシステムツール(mount や ps など)も Cygwin Project の CVS によって管理されています。
CVS での開発が進み、ある程度安定したと判断された時点で、 正式に「1.5.3」のようなバージョン番号が振られて公開版となります。
snapshot とは何か?
Cygwin Project の CVS で管理されているもののうち、Cygwin DLL 及びその周辺のツールについては、毎日その日の最新の CVS の内容が tar で固められて Cygwin のサイトで公開されます。これらは「snapshot」と呼ばれています。
snapshot はその名の通り開発過程のスナップショットであり、機能が追加されていることもありますがバグの嵐が吹き荒れていることもあります。 何か問題が発生した場合に、自らソースコードを読んで何が問題なのかを見極める自信がなければ、手を出すべきではありません。
Cygwin を使う意義
UNIX を使うことは即ち高価なワークステーションを購入すること、であったような太古の昔と異なり、現在では UNIX を使おうと思ったら Linux なり *BSD なりの、所謂「PC UNIX」を PC にインストールすれば済むだけの話です。 それでは、何故にわざわざ Windows 上に UNIX 的な環境を構築する必要があるのでしょう??
あくまでも私見ですが、個人的にはこのあたりがメリットかと考えています。
Windows のコマンドライン環境を強化できる
UNIX のコマンドライン環境に慣れていると、Windows のそれは堪らなく貧弱で嫌になりますが、Cygwin が提供する GNU ツール群(或いは自分でコンパイルしたツール群)を使うことによって、Windows の貧弱なコマンドライン環境を強化できます。
Windows でもやはり UNIX 上のコマンドを使用したい
例えば Windows 上で grep や awk を使いたい、という要求は UNIX を少しでも使っていれば自然と湧き出てきます。ネイティブの Win32 や DOS 環境に移植されたこれらのツールを使うという手もありますが、ネイティブのツールは UNIX 環境上で使用することを前提にされたソースコードを逐次 Win32 API と共に使用出来るように個別に修正しなければならないため、どうしても UNIX 上のツールよりもバージョンが古くなりますし、また全てのツールが Win32 / DOS 環境上へと移植されているわけではありません。 Cygwin が提供する環境を使えば、ソースコードの変更なしで(必要であったとしても、ネイティブの Win32 / DOS 環境へ対する移植と比べて比較的小さな修正で) UNIX 上のツールが Win32 環境で使用できるようになります。勿論、Meadow や TeX との連携にも便利です。
Windows マシンしか使用できない環境にいる
UNIX が好きで UNIX 上で作業をするほうが何かと好都合でも、Windows を使用せざるを得ない状況というのは世の中に腐るほどあります。 例えば、職場で使える PCが一台しかなかった場合、しかも Windows アプリケーションが使えないと業務に支障が出る場合、職場の PC の Windows を消してまで俗に言う「PC UNIX」をインストールするようなことは出来ないでしょう。 Cygwin をインストールしておけば、そのような環境でも UNIX ツール群の恩恵に与ることが出来ます。
とりあえず、Windows のメリットも享受したい
上とも関係するのですが、Cygwin を使えば、ある程度 UNIX と Windows の「いいとこ取り」的環境が構築出来ます。例えば、PC UNIX 上では PostPet が使えません。サウンドが鳴らなかったり、鳴っても許せないほどショボい音しか出なかったりすることもあります。 自分が持っているプリンタは Ghostscript ではプリントアウトできないかもしれません。 Word や Excel でドキュメントを作成しないと、上司からどやされる場合もあるでしょう。
PC UNIX でどこまで出来るか頑張ったり、自分でドライバを書いたりハックしたりするのも勿論アリですが、 そこまで根性や技術や時間がない人(というよりも、 それに費やす労力と自分が受け取る結果のトレードオフになります)には、 「Windows をメインにして Cygwin で作業環境を補完する」というのも有効な選択肢でしょう。
Windows 上で各種 OS / MPU 用のクロス開発環境が作成できる
一般の人にはあんまり関係ない話かもしれませんが、こういうメリットもあります。 一般の人には関係がないので詳説しませんが。
とりあえず UNIX がどんなものか触ってみたい
最近、Linux や FreeBSD がブレイクしたおかげで、猫も杓子も所謂「PC UNIX」を自分の PC にインストールしたがるという傾向があります。 それはそれで良い流れだとは思うのですが、果たして UNIX 系をインストールしてそれをどう使うのか、を問うてみると、 「インストールしてみたかった」とか「UNIX の勉強用に」という意見しか返ってこないことが多いのはちょっと疑問です。
「家庭内サーバにする」などといった何らかの明確な目的があるならば別ですが、もし UNIX というものがどういうものか触ってみたいという程度の意図でしたら、 わざわざディスク領域を縮小してから UNIX 系をインストールして、各種の設定で泣きそうな思いをするよりも、 Cygwin を使ってみるというのも良いのでは、などと最近は考えています。 特に「UNIX の勉強用に」という、漠然とした目的(何を勉強するのかさっぱりわからない)の場合は有効でしょう。 勿論、「Linux のカーネルの動作を勉強する」、或いは 「GNOME をゴリゴリ切り刻んでやるぜ」などといったいう明確な目的があるなら別ですが。
但し、Cygwin は本物の UNIX ではありませんので、全く何も知らない人が使うと 「Google で見つけたページの通りにやったのですが…(ダメでした)」「本に書いてある通りにやったのですが…(うまく動きません)」ということになりかねません。一般的な UNIX 系 OS と Cygwin の間に存在する差異に明るい、有識者による適切な助言の下に使えればよいのですが。
タダの開発環境が欲しい
あまり「タダ」的側面が強調されるのは好きではないのですが、とりあえずCygwin の開発環境はタダかもしれません。 「しれません」というのは、要するに「手に入れるためにはお金がかかるかもしれません」ということです。 また、Cygwin DLL の存在を前提としたアプリケーションは GPL に従って配布する必要がある(バイナリだけの配布は認められない) というのもネックになるでしょうし、 GPL に従わない配布方法を取るなら、高額のライセンス料がかかるということも覚えておく必要があります。
それでも、Windows 上で GNU の開発ツール群が使えるのは大きなメリットです。 Cygwin の開発環境では Win32 API もある程度使えますし、Cygwin DLL をリンクしない形式(つまり、通常の Win32 アプリケーションとして)でアプリケーションを作成することも可能です。 Cygwin DLL をリンクしないアプリケーションでは Cygwin DLL が提供する機能は利用できませんが、出来上がったアプリケーションの配布に際して Cygwin DLL は必要ありません。勿論、Cygwin DLL に関わる GPL の縛りもなくなります。
但し、過度の期待は禁物です。 Cygwin は Win32 API 全てをサポートしているわけではありませんし、IDE(統合開発環境)もありません。 要するに「Cygwin 一つで Windows アプリケーションを作る」ためには、かなりの手間を掛けなければならないということです。 下手をすると 何らかの IDE 製品をを購入したほうが安上がりである、という位に。
UNIX アプリケーションを(なるべく簡単に)Windows に移植したい
UNIX アプリケーションを Windows 環境に移植しようとすると、API の違いやコンパイラの違いで結構苦労します。 Cygwin の開発環境なら(特殊な例を除き)UNIX上の開発環境とほぼ同様ですし、 Cygwin API を使えば UNIX のシステムコールなども使用することが出来ます。
俺は自分でコンパイルしたアプリケーションしか信じない
いや、こういう主義主張もありでしょう。漢らしいと思います。