GNU-Win32 ツールは、広く普及している GNU の開発ツールを、x86 および PowerPC プロセッサの Windows NT/95 上に移植したものです。このツールを 用いて開発されたアプリケーションは、 Microsoft Win32 API にも Cygwin32 API にも同様にアクセスできます。この Cygwin32 API は、unix ソケットや プロセスコントロールを含む UNIX 風の機能を提供し、fork や select など が動作します。
これらのツールをインストールすることにより、標準 Microsoft Win32 APIお よび Cygwin32 API を使っての Win32 コンソールアプリケーション、または GUI アプリケーションの作成が可能になります。またたくさんの GNU のツー ルを、ソースから configure し、ビルドすることが簡単にできます。これは gnu-win32 開発ツール自身も含めて、です。さらに、他の多くの Unixでの重 要なプログラムを、ソースコードを大きく変更することなく Windows NT/95 に移植することができます。あるいは単に bash やその他の、完全な unix 風 環境を実現するたくさんのユーティリティを使うこともできます。これらは bash からでも command.com からでも利用可能です。
はい。いくつかは GNU のソフトウェア(gcc、gas、ld、など)で、いくつかは Berkeley license などのライセンスに含まれます。シェアウェアではありま せん。あなたはこれを使用するために、誰かにお金を支払う必要はありません。 あなたがこれらのツールを使用する上で、GNU General Public License がど のように影響を与えるかについての詳細な情報は、この FAQ の copyright の 項を参照してください。
最初は開発ツール(gcc、gdb、gas など)の強化が行われました。これで Win32 ネイティブオブジェクトファイルの生成、解釈ができるようになりました。
次の仕事はツールを Win NT/95 に移植することでした。これをソースの大部 分を Win32 API の文脈内で動作するように書き換えることによって行いまし た。しかしこれはそれぞれのツール全てに対して、膨大な時間を費やすことに なってしまいました。その代りに、共有ライブラリ(cygwin.dll)を書くという 全く異なったアプローチを取ることにしました。これは必要な unix 風の機能 でWin32 API に不足しているもの(fork、spawn、シグナル、select、ソケット など) を追加する、というライブラリです(私たちはこの新しいインタフェー スを Cygwin32 API と呼んでいます)。一旦これが書かれたあとは、unix 上で クロスコンパイラを使って、このライブラリをリンクして、動作する Win32 ツールをビルドすることが可能になりました。
この時点から、私たちは Windows NT でネイティブにリビルドすることができ るネイティブツールを生成する、という目標を達成しようとしました。 Windows NT にも Windows 95 にも 標準的な unix ユーティリティは付属して こないので、cygwin32 API 上で動作する GNU の同種のユーティリティ (fileutils、 textutils、 bash など)が必要になりました。移植作業のほと んどは configure 機構の変更に関するものでした。というのは、ほとんどの ものは箱から(tarfile から?)出してクロスコンパイラで構築する、というわ けにはいかなかったからです。開発ツールとこれらの付加的「ユーザ」ツール が役目を果たすようになり、bash シェルが動いていると、Windows 95 と NT も、GNU configure 機構用の unix の一種のように見えてきました(変なやつ だけどね)。
beta 17.1 リリース以降では、x86 の Windows NT と Windows 95 上でのネイ ティブでリビルドが動作します。
もっとも最新のリリースへのリンクは以下で見つけることができます。
`ftp://ftp.cygnus.com/pub/gnu-win32/latest'
これは重要なリリースです。新しい cygwin.dll は以前リンクされたアプリケー ションとのバックワードコンパチビリティがありますが、内容は大きく変わっ ています。
インストール処理が完全に変更され、 InstallShield5 ベースのインストーラ を使うようになっています。これにより過去に経験した数々のインストール時 の問題を減らしてくれます。しかしながら、以下で説明するように、環境変数 は未だに手で設定する必要があります(将来のgnu-win32 インストーラには、 これを自動的に行う機能を持たせるかもしれません)。
GCC のコンパイル時間が fork() の代りに spawn() を使うことによって、 20-30% 向上しました。
GCC は、環境変数(COMPILER_PATH、 LIBRARY_PATH、 C_INCLUDE_PATH、 CPLUS_INCLUDE_PATH、 OBJC_INCLUDE_PATH)の値に、 Win32 と POSIX 形式 のパス名(あるいはパス名リスト)のどちらでも受け付けます。
GDB には tcl/tk ベースの GUI(gdbtk) が付属します。"gdb -nw" として起動 することによって、コマンドライン gdb を起動することもできます。
bash は起動時に、 /tmp が存在しており、かつそれがディレクトリであるこ とを確認します。そうでない場合には文句を言います。
gcc と ld に -s をつけて実行すると不正な実行ファイルが作成されていまし た。これに関する bfd のバグが修正されました。
String.h と string.h(と同様なヘッダファイルの組)が衝突して、インクルー ドしたものと違う方が読まれてしまうことを修正しました。
トップレベルの install-sh スクリプトは、foo をインストールしようとして foo が存在しない時は、foo.exe をインストールしようとします。これで多く の Unix ソフトウェアのインストールの問題が解決します。
dlltool に -I オプションをつけて起動することにより、.def ファイルの IMPORT 宣言が試験的にサポートされます。ぜひ気軽にこれを経験してみてく ださい。ただしこの機能がより広くテストされるようになったら、このフラグ はなくなるでしょう。
time はバージョン 1.7 に上がりました。
make はバージョン 3.75 に上がりました。
make は VPATH 変数で、Win32 と POSIX のパス名リストをどちらでも受け付 けます。
以下がサポートされています:
以下の関数が追加されました:
かなり改善されたシグナル、例外ハンドラがサポートが追加されています。 kill シグナルはかなり良く働くようになりました(bash で コントロールC が 働きます)。
シェルスクリプトが、常にデフォルトの /bin/sh ではなく、#! の後ろに指定 されたシェルで動くようになっています。
浮動小数点レジスタが crt0.o の中で正しく初期化されるようになっています。
com ポートのようなディスク以外のファイルのオープン時には、シンボリック リンクであるか、実行可能であるかというチェックはもはや行いません。
コンソールタイトルは、実行中のプロセスの名前がセットされるようになって います。
winsock はアプリケーションの起動時に初期化されるようになっています。
reent_data がプライベートアドレス空間から cygwin.dll に移動しました。
system() 呼び出しは、fork()/exec() ではなく spawnvp() を呼び出すように なっています。
NT 拡張属性に対するサポートが追加されましたが、あまりにも遅くなってし まうので今のところ無効にしてあります。これをシンボリックリンクや実行可 能属性のファイル状態を記憶するのに使用したいのです。
NT 上でのみ、 mkpasswd と mkgroup ユーティリティが、正しい /etc/passwd と /etc/group を生成します。
以前のリリースではマウントポイントはレジストリの "Cygnus Support" 以下 に格納されていました。これは beta 18 より "Cygnus Solutions" に変更さ れました。レジストリエディタ(NTでは regedit)を使って古いエントリの名前 を変更するか、あるいは単にもう一度マウントを行ってください。そうすれば cygwin.dll が自動的に新しいものを作ります。
マウントポイントは、30 文字ではなく、最大 MAX_PATH までの長さを取るこ とができます。
以下のパッケージがフルリリースの中に含まれています。
Cygnus Developer's Kit (CDK): binutils, byacc, diff, flex, gas, gcc, gdb, ld, libg++, libstdc++, make, patch
user tools: bash, fileutils, findutils, gawk, grep, gzip, m4, sed, shellutils, tar, textutils, time
これらのツールに対してソースコードが全て利用可能です。これは上記の二つ の部分に別れています。
まず、古いバージョンの gnu-win32 ツールをあなたの $PATH から削除してく ださい(あるいは本体を削除する)。
ftp サーバに接続し、以下のディレクトリに移動します。
`ftp://ftp.cygnus.com/pub/gnu-win32/latest'.
もしあなたが開発ツールと GNU configure 機構を実行するのに必要なプログ ラムが欲しければ、全リリースをダウンロードしなければなりません。
`cdk.exe' をダウンロードします。
ネットワークコネクションの信頼性が低いときは、代りに小さな塊に分割され たバイナリをダウンロードしてください。分割 cdk インストーラは、 `cdk-split'サブディレクトリからファイルを取得してください。ダ ウンロードが終わったら、コマンドプロンプトから以下のようにして分割ファ イルを結合してください。
copy /b xaa + xab + xac + ... + xag + xah cdk.exe del xa*.*
`cdk.exe' を実行し、指示に従ってツールをインストールしてくだ さい。デフォルトのインストール場所は `<systemdrive>:\gnuwin32\b18' です。以下の例では、 <systemdrive> が C ドライブで、このディレクトリへインストール することを前提としています。
次に gnu-win32 関連の環境変数を四つ設定しなければなりません。そうしな いとツールは正しく動作しません。これらのツールを bash からと同様に command.com からも使えるようにするため、この設定を bash の外で行った方 が良いかもしれません。つまり、NT ではコントロールパネルの `System' を使うか、Windows 95 では autoexec.bat を修正する、 ということです。
インストール場所を `C:\gnuwin32\b18' と仮定します。
1) GCC_EXEC_PREFIX 環境変数を以下の値に設定する。
`C:\gnuwin32\b18\H-i386-cygwin32\lib\gcc-lib\'
最後のバックスラッシュは重要です!
2) 以下を $PATH に追加する。これはバイナリが存在する場所です。
`C:\gnuwin32\b18\H-i386-cygwin32\bin;C:\gnuwin32\b18\tcl\bin'
3) TCL_LIBRARY 環境変数を以下の値に設定する。
`C:/gnuwin32/b18/tcl/lib/tcl7.6'
この変数では、前向きのスラッシュ `/' を使用しなければなりません。
4) GDBTK_LIBRARY 環境変数を以下の値に設定する。
`C:/gnuwin32/b18/share/gdbtcl'
この変数では、前向きのスラッシュ `/' を使用しなければなりません。
さまざまなプログラムでは `/bin/sh' が参照できるようになってい る必要があります。`/bin' ディレクトリを、もし存在しなければ作 成し、そこに `sh.exe' をコピーしなくてはなりません。 `mount' ユーティリティを使って、どのドライブ文字を `/' としてマウントするかを選択することができます。 `mount' に関する詳細は情報は Frequently Asked Questions (FAQ) ファイルを参照してください。
bash や byacc を含む多くのプログラムでは `/tmp' を参照する必 要があります。 `/tmp' が `/' としてマウントされてい るドライブに存在することを確認して、もし必要なら作成してください。
これで終わりました!
もしこのツールをアンインストールしたいと思ったときには、コントロールパ ネルの「アプリケーションの追加と削除」("Add/Remove Programs")によって できるでしょう。
もし単に bash 、fileutils、textutils やその他のユーティリティだけが必 要で開発ツールが必要でなければ、全部のリリースをインストールする必要は ありません。
`usertools.exe' をダウンロードしてください。
ネットワークコネクションの信頼性が低いときには、代りに小さな塊に分割さ れたバイナリをダウンロードしてください。分割されたユーザツールのインス トーラは、`usertools-split' サブディレクトリ以下のファイルを 取得してください。ダウンロードが終わったら、コマンドプロンプトから以下 を行って、分割ファイルを結合してください。
copy /b xaa + xab + xac + xad + xae usertools.exe del xa*.*
`usertools.exe' を実行して、指示に従ってツールをインストール してください。デフォルトのインストール場所は `<systemdrive>:\gnuwin32\b18' です。以降の例では <systemdrive> が C ドライブのこのディレクトリにインストールす るものと仮定しています。
次に $PATH に実行ファイルの場所を追加する必要があります。これらのツー ルを bash からと同様にcommand.com からも使えるようにするため、この設定 を bash の外で行った方が良いかもしれません。つまり、NT ではコントロー ルパネルの `System' を使うか、Windows 95 では autoexec.bat を 修正する、ということです。
`C:\gnuwin32\b18' にインストールする場合、以下の値を $PATH に 追加してください。
`C:\gnuwin32\b18\H-i386-cygwin32\bin'
さまざまなプログラムでは `/bin/sh' が参照できるようになってい る必要があります。`/bin' ディレクトリを、もし存在しなければ作 成し、そこに `sh.exe' をコピーしなくてはなりません。 `mount' ユーティリティを使って、どのドライブ文字を `/' としてマウントするかを選択することができます。 `mount' に関する詳細は情報は Frequently Asked Questions (FAQ) ファイルを参照してください。
bash を含む多くのプログラムでは `/tmp' を参照する必要がありま す。 `/tmp' が `/' としてマウントされているドライブ に存在することを確認して、もし必要なら作成してください。
これで終わりました!
もしこのツールをアンインストールしたいと思ったときには、コントロールパ ネルの「アプリケーションの追加と削除」("Add/Remove Programs")によって できるでしょう。
このリリースに対応するソースコードをダウンロードする前に、上記のツール (全リリースかまたはユーザツールのみのどちらか)をインストールしなければ なりません。
ソースコードの住処となるディレクトリを作成し、そこに `cd' し ます。
ftp サーバに接続し、次のディレクトリに cd します。
`ftp://ftp.cygnus.com/pub/gnu-win32/latest'.
ユーザツールのソースコードが必要ならば、`usertools-src' サブ ディレクトリに`cd' し、そこにあるファイルをダウンロードして ください。Cygnus Developer's Kit のソースが必要なら、 `cdk-src' サブディレクトリに `cd' して、そこにあるファ イルをダウンロードしてください。
command.com に戻ります。ユーザツールのソースの場合:
copy /b xba + xbb + xbc + xbd + ... + xbk + xbl usersrc.tar.gz del xb*.* gunzip -d usersrc.tar.gz tar xvf usersrc.tar
コンパイラツールのソースの場合:
copy /b xca + xcb + xcc + xcd + ... + xck + xcl cdksrc.tar.gz del xc*.* gunzip -d cdksrc.tar.gz tar xvf cdksrc.tar
どちらも `src' というディレクトリの中に展開します。
これで終わりでしょう…。
GNU-Win32 プロジェクトのメインの WWW ページは
http://www.cygnus.com/misc/gnu-win32/
ツール毎の情報はここで見つかります。
http://www.cygnus.com/library/
さらなるドキュメントへのリンクはメインの web ページからアクセスできます。
aux.sh
というファイ
ルがあります。perl のコンフィグレーションでは aux.sh
ファ
イルが存在することを確認しようとしますが、`aux' という魔法の文字が含ま
れているファイルを操作しようとしてハングしてしまうでしょう。
malloc
という名前の関数を定義
していて、DLL(cygwin32.dll) とリンクした場合、 DLL はあなたの
malloc
を呼び出します。あなたの malloc がきちんと動くか確
認した方が良いです。
プログラムを bash からではなく DOS コマンドプロンプトから実行した場合、
DLL はコマンドラインのワイルドカードを展開しようとします。この処理はあ
なたの main 関数の処理を開始する 前に malloc
を
呼び出します。もしあなたのmalloc
が、main
が
呼び出された後に起こる初期化を必要とするようにかかれている場合、間違い
なくおかしくなるでしょう。
メインの ftp サイトは `ftp://ftp.cygnus.com/pub/gnu-win32' で す。他にもいくつかミラーサイトがあります。
gnu-win32 の WWW ページにはたくさんのリンクがあります。
`http://www.cygnus.com/misc/gnu-win32/'
最低限 Release Notes とメインの WWW ページは目を通しておきましょう。 何か書いてあるかも知れません。
ツールのみに関する情報はここにあります。
`http://www.cygnus.com/library/'
gnu-win23 メーリングリストに参加するには以下にメールを送ってください。
gnu-win32-request@cygnus.com
メッセージの本文は以下のように書いてください。
subscribe gnu-win32 <your-email-address-here>
ここで <your-email-address-here> はあなたのメールアドレスです。
メーリングリストを脱会するには以下にメールを送ります。
gnu-win32-request@cygnus.com
脱会する時はメッセージの本文は以下のように書いてください。
unsubscribe gnu-win32 <your-email-address-here>
メーリングリストの過去のアーカイブは以下にあります。
`http://www.cygnus.com/ml/gnu-win32'
現在使用しているアーカイブ用のプログラムは非常にやわなので、最新の状態 に保つには問題があります。これは近々直そうとしています。ご迷惑をおかけ します。
"gcc: installation problem, cannot exec `cpp': No such file or directory" というエラーが出た場合は、GCC_EXEC_PREFIX という環境変数が 正しく設定されていません。その場合は、このリリースに付属している README.txt を読み直すべきです。というのは、他にも /tmp を作成するなど の必要な作業がされていないかもしれないからです。
多くの Unix のツール(bash、byacc など)は /tmp が常に存在するものと思っ ています。これは Win32 の国では保証されていません。/tmp を作るか、適当な ディレクトリを選んで、/tmp にマウントしてください。
ちゃんと /tmp を作りました? beta 18 以降では bash は /tmp が見つからな いときは警告を出します。
そのエラーが、"Tcl_Init failed: Can't find a usable init.tcl..." とい うものであれば、おそらく TCL_LIBRARY 環境変数の値が間違って設定されて います。c:\gnuwin32\b18 以下にインストールしたのであれば、TCL_LIBRARY の値は C:/gnuwin32/b18/tcl/lib/tcl7.6 (スラッシュはすべて前向き `/')に 設定されていなければなりません。
"Unable to find main.tcl..." というエラーであれば、GDBTK_LIBRARY 環境 変数が正しいパスではありません。c:\gnuwin32\b18 以下にインストールした のであれば、GDBTK_LIBRARY は C:/gnuwin32/b18/share/tcl (スラッシュはす べて前向き `/')に設定されていなければなりません。
"invalid command name 'create_command_window'" などのようなエラーの場 合には、おそらく GDBTK_LIBRARY 環境変数の値に、前向きのスラッシュ`/' ではなくバックスラッシュ`\' が含まれています。
以前のリリースでは、マウントポイントはレジストリの "Cygnus Support" 以 下に格納されていました。これは beta 18 から "Cygnus Solutions" に変更 されました。レジストリエディタ(NT では regedit)を使って古いエントリの 名前を変更するか、あるいは単にもう一度マウントを行ってください。 cygwin.dll は自動的に新しい名前で作成します。
明らかな理由として、私たちは全てのツールを Cygwin32 ツールとして動作す るように移植し、バイナリ配布を提供し保守を行うことは実行不可能です。そ の代りに、Cygnus はその労力を、核となる開発ツールに集中するべきである と考えています。たぶん V や wxwin も含めるべきかな? less や man コマン ドは、満足できる程度に動くものができれば、それも含めるようになるでしょ う。
他の移植されたツールは、正式なリリースに追加修正されているはずなので、 そのツール用のソースから素直にコンパイルできます。もしそれが不可能な場 合は、他の誰か(理由によってはもしかしたら Cygnus)が diff を保守し、ftp できるところに置くでしょう。おそらくそのようなツールはgnu-win32 の Web サイト上でリストを作ることができるでしょう…。
which コマンドは含まれていないのですが、ほとんど同様のことを行う bash のビルトインコマンド "type" を使うことができます。
コマンドが見つからないからです。コマンド名を間違えたか、そのコマンドが パスの中に入っていないかのどちらかです。
ほとんどの場合、これは自分自身がパスに含まれていないからです。bashを実 行する前に、bash が置いてあるディレクトリがあなたのパスに含まれている かどうか確認してください。また、bash のコピーを /bin/sh.exe としてイン ストールすることも忘れないでください。
シェルスクリプトを実行しようとして、それが間違いなく存在しているにも関
わらず `no such file or directory' のようなエラーが出た場合には、おそ
らくbash が /bin/sh
を見つけらないのが問題なのです。
Unix スタイルの API を提供する C のライブラリがあります。アプリケーショ ンはそれとリンクされて…、ほら、Windows 上で動きました。
目標は、あなたのアプリケーションを Windows で動かすために必要な全ての 行儀の悪いやつを、C ライブラリに追加することです。そうすればあなたのア プリケーションは、ソースレベルでの変更無しに、Unix と Windows で動くで しょう。
この C ライブラリは DLL 内にあり、基本的なアプリケーションはとても小さ くなります。またこれにより、DLL の変更時にバックワードコンパチビリティ を残すことで、Win32/Unix 翻訳層のアップグレートを容易にアップグレード できます。
Cygwin32 ライブラリや kernel32 ライブラリなどのいくつかはデフォルトで 含まれますが、非常に良く使われる Win32 API 呼び出し以外のものを使って いる場合には、リンク時にライブラリを追加する必要があるかもしれません。 以下が提供されている追加 Win32 ライブラリのリストです。
advapi32 largeint ole32 scrnsave vfw32 cap lz32 oleaut32 shell32 win32spl comctl32 mapi32 oledlg snmp winmm comdlg32 mfcuia32 olepro32 svrapi winserve ctl3d32 mgmtapi opengl32 tapi32 winspool dlcapi mpr penwin32 th32 winstrm gdi32 msacm32 pkpd32 thunk32 wow32 glaux nddeapi rasapi32 url wsock32 glu32 netapi32 rpcdce4 user32 wst icmp odbc32 rpcndr uuid imm32 odbccp32 rpcns4 vdmdbg kernel32 oldnames rpcrt4 version
最後に、コンソールウィンドウが出てこないようにさせるには、GCC のコマン ドラインに "-Wl,--subsystem,windows" の文字列を追加してください。
`Microsoft Open Tools License agreement' の セクション 2.d.f には、 「エンドユーザに対して再配布可能の形でさらに再配布することは認められな い」、とあるようです。私たちはこれを、私たちがあなたにあげることはでき るけれども、それをあなたが他の誰かにあげることはできない、という意味だ と取りました。これは Cygnus としては賛成できないことです。ですが幸運に も、私たちはほぼ完璧な、独自の Win32 ヘッダを持っています。
/etc を正しく設定するには(そうすると例えば "ls -l" がユーザ情報を正し く表示するようになる)、もしあなたが NT を使っているのなら(NTFS ファイ ルシステムの方が良い)、単に / としてマウントされているファイルシステム に/etc ディレクトリを作り、そして mkpasswd と mkgroup を使って、 /etc/passwd と /etc/group をそれぞれ作成してください。Windows 95 の Win32 API は不完全なので、もしあなたが Windows 95 を使っているのなら残 念でした。
ソースが /src にあり、/obj ディレクトリでビルドし、/install にツールを インストールしたい、仮定します。
bash cd /obj /src/configure --prefix=/install -v > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1
開発中は、私たちは Samba の動いている Unix マシンと NT/Windows 95 デュ アルブートマシンの両方を使っています。私たちはよく Unix 上のクロスコン パイラを使ってビルドしてバイナリとソースを NT/Win 95 システムにコピー したり、あるいは単に Samba でマウントされたパーティション上で直接いじ くりまわしたりしています。これらのツールは NTFS 上でもちゃんと動くはず ですが、通常私たちは、 Windows 95 上からもアクセスできるように FATファ イルシステムを使用しています。
Cygwin32 の fork() は、本質的には `non-copy on write' 方式(古い Unix のバージョンで取られていた方式)の fork() のように動作します。このため、 多少遅いです。
beta 18 ではこのように動作します。
親は、子のための Cygwin プロセステーブルの領域を初期化します。親は Win32 の CreateProcess に自分が起動されたときと同じパスを与えて、中断 した子を生成します。親は setjmp を呼び出してコンテキストを保存し、この ポインタを Cygwin32 の共有メモリ領域にセットします(この領域は全ての Cygwin32タスク間で共有されてます)。親は、子の .data と .bss セクション を、自分のアドレス空間から中断した子のアドレス空間へとコピーして埋めま す。そして親はその子を開始させます。親は mutex によって、子が安全な地 点に来るまで待ちます。子は開始して fork されたのがわかったら、保存され たジャンプバッファを使って longjump します。子は親の待っている mutexを セットし、そして親がスタックとヒープを埋めてくれるまで、別の mutex 上 でブロックします。親は子が安全な領域に入ったことを知って、スタックとヒー プを自分のものから子の中へコピーし、子が待っている mutex を解放して、 fork 呼び出しからリターンします。子はブロックしている mutex から起きて、 共有領域を通して渡された mmap 領域を再作成し、fork 自身からリターンし ます。
CYGWIN.DLL を使うアプリケーションが起動して、その時 PID
環境変数が見つからない場合は、これは DOS スタイルのコマンドプロンプト
から起動されたものとみなします。これはまず間違いはありません。というのも、
他のツール(bash も含めて)は起動時に新しいプロセスの PID がいくつである
かを知るために PID を設定するからです。
DLL が、これは DOS スタイルのプロンプトから来たと思ったときは、与えら
れたコマンドラインに対してファイル名の展開を実行します。これはつまり、
DOS から LS *.EXE
とタイプした場合、あなたが期待している
であろう動作を行う、ということです。
注意: ファイル名展開はmalloc
を使用します。もしあなたのア
プリケーションが malloc
を定義しているのなら、それが使用
されます。これはあなたにとってとんでもないことかもしれません(訳注: ユーザ定義 malloc 参照のこと)。
beta 16 以降では、任意のドライブ文字をパスに含めて参照することができま す。ドライブ a: に対して ls を実行するには、以下のようにします。
bash$ ls //a/
あるいは、"mount" コマンドを使って一つのスラッシュだけで参照することも できます。
bash$ mount a:/ /mnt/floppy bash$ ls /mnt/floppy ....
raw デバイスに書き込みたい場合には、A ドライブには
/dev/fd0
、B ドライブには /dev/fd1
を使いま
す。
例
bash$ tar cf /dev/fd0 *.exe bash$ tar tvf /dev/fd0 ....
また、UNC パスに対しても標準的な方法でアクセスできることも覚えておいて ください。上記で述べたドライブ文字のショートカットのために、UNC パスの マシン名は、一文字よりも長くなくてはなりません。
`mount' コマンドを使ってマウントすることができます。例えば、
$ mount i:/a /a $ mount i:\a on /a type dos (normal) c:\ on / type dos (normal)
これはファイルがオープンされるときに文字列の置き換えによって行われます。
従って、上記のようにマウントされている上で ls /a/bar
を行
うと、内部の仕掛けが ls i:/a/bar
に変換します。
ドライブをマウントするのはただ一度だけでよいことを覚えておいてください。 この対応づけはレジストリ内に保存されるので、マウントはずっと永遠に有効 になります。マウントを取り除くには umunt コマンドを使います(あるいはレ ジストリエディタか)。
`-m' オプションを与えると、mount に対して「大文字、小文字混在モード」 (訳注: ファイル名の大文字と小文字を区別するモード。次項 GNU-Win32 ではファイル名の大文字、小文字の混在が可能な のですか? を参照のこと)を有効にしたいという指示になります。`-b' オプションはバイナリモードでマウントします。
もしこのリリースを `C' ドライブ以外のドライブに置きたい場合には、先に
進むためには mount
コマンドを使用しなければいけません
。
例えば、f:/fish
以下にツリーをインストールしたとします。
すなわち、バイナリの行き場所はf:/fish/bin
以下、などにな
ります。
$ mount f:/fish /usrこの意味は、
ls /usr/bin
を実行すると、CYGWIN.DLL は
f:/fish/bin
を見に行く、ということです。
いくつかの Unix プログラムでは、同じ綴りのファイル名を大文字、小文字を
違えて使い分けられることができると期待しています。重大な例として perl
のコンフィグレーションスクリプトがあり、これは Makefile
と makefile
を必要とします。WIN32 はただ大文字、小文字だ
けが違うこれらのファイルを区別できず、コンフィグレーションは失敗します。
この機能の使用は現時点では推奨はしませんが、`mixed'マウント属性を有効 にすることによって回避することができます(訳注: と原文には書いてありま すが、b18 ではこの機能は動作しない、という報告が GNU-Win32 mailing list の方にありました)。
これが有効になっていると、cygwin32 はファイル名中の大文字、小文字が変
わるところに `^' 記号を入れます。これで Foo
と
FOO
というファイルを作ることができます。そのディレクトリ内
では、幕の後ろで^f^oo
と ^foo
というファイル
が作成されています。
あなたが全て cygwin32 上で書かれたアプリケーションの中で生活するのであ れば、舞台裏でどのように名前がつけられるかは問題ではありませんが、しか し cygwin32 と「実生活」とを行き来したい場合には、たぶんこのスイッチは オフにした方が良いでしょう。
もしインストール時にこのスイッチを無効にしていて、その後でこれを有効に
すると、いくつかのことができなくなります。例えば、
/usr/include/_G_config.h
があって、その後このディレクトリ
で大文字、小文字混在のパス名を有効にすると、もはや
_G_config.h
に辿り着くことはできなくなります。なぜならば、
_G_config.h
を要求すると、cygwin32 はこの要求を
_^G_^config.h
という存在しないものに変えてしまうからです。
この問題は一方を混在モード、もう一方を非混在(通常)モードという二つのディ レクトリツリーにマウントして、それらの間でファイルをお手玉することによっ て回避することができます。でもそうまでして苦労する価値はたぶんないでしょ う。
gnu-win32 プロジェクトの web ページ (http://www.cygnus.com/misc/gnu-win32)上に、この手順を説明した文書があ ります。
ごめんなさい、そういうものなんです。DLL と 全ての gnu-win32 アプリケー ションにリンクされる crt0.o の間には依存関係があります。このインタフェー スはそうしばしば変更されることはありませんが、それが変更された場合には 全てリンクし直す必要があります。gnu-win32 ツールが時を重ねていくにつれ て、再リンクが必要な変更はなくなっていくでしょう。beta 16 と 17 のリリー スでビルドされたプログラムは、beta 18 の cygwin.dll と一緒でも、期待さ れるように動くようになっています。
このリリースの前は、これらがとても混乱していて、とても「良く」定義され ていました。今は、Win32 API にアクセスするためには _WIN32 、DLL によっ て提供される cygwin32 環境にアクセスするためには __CYGWIN32__ がありま す。
_WIN32 を選んだのは、これが Microsoft が VC++ の中で定義しているもので あり、VC++ のサンプルに従えるようコンパチビリティを持つのは良いことだ と考えたからです。私たちは _MFC_VER を使って VC++ でコンパイルされるべ きコードを指示しています。
ときたま、これらのツールは単に止まってしまいます(aux.sh というファイル を読んでみると簡単に止められます)。元の世界に戻るには、^C を押して bash か cmd プロンプトに戻ってください。
もし別のシェルを起動していて、それでアプリケーションが動かなかったのな ら、暴走したプロセスがまだどこかで動いてると思った方がいいです。
pview があるのなら、それを起動して kill してください(aux 関係であれば、 アプリケーションは cp という名前になっているかも知れません)。pview か それと同様なものがなければ、おそらくログアウトしなければならないでしょ う。
デフォルトでは、バイナリを扱うツール(objdump など)は、unix 風のバイナ リモードで操作し、テキストファイルを扱うツール(bash など)はテキストモー ドで操作します。
テキストファイルモードにおける DOS の CR/LF 改行は、レジストリの
fmode-binary を 0 に設定することで有効にできます。私はファイルタイプは
「自然」のままにしようとしてきました。デフォルトではファイルはテキスト
モードでオープンされますが、これは open
呼び出しの2つめ
の引数に O_BINARY
を付け加えるか、 fopen
呼び
出しの2つめの引数に"b"
を付け加えることによって変更できま
す。
lseek
は現在はバイナリモードでのみ動作します。
LD はリロケーション情報を生成できますが、デフォルトでは生成しません。 現在の構造では、dlltool とリンカのよる別のパスが必要とされ、出力イメー ジは常に大きくなります。
もしリロケーション情報が必要であれば、以下のようなことをしなければなり ません。
gcc -o foo.o foo.c gcc -o bar.o bar.c ld -s -o foo.jnk --base-file foo.base foo.o bar.o dlltool --dllname foo.exe --base-file foo.base --output-exp foo.exp ld -s -o foo.exe foo.o bar.o foo.exp
最初のリンクは、どこでリロケーションが必要なのかを探し出すだけのもので、 そのリストを foo.base に作ります。そして dlltool がこれを読み出し、リ ロケーションデータが含まれる foo.exp を生成します。2つめのリンクは再び 全てを一つにまとめあげます。
GDB を使ってあなたのアプリケーションをデバッグすることができます(-g フ
ラグをつけてコンパイルするのを忘れないでね!)。問題が cygwin.dll 内部に
あるときには、set strace=1
することで、アプリケーションを
実行したときに全てのデバッグ用情報が山ほどスクリーンに表示されます。こ
の値は 1で全部をオン、4
でシステムコール表示を有効にする、
などがあります(詳細情報は winsup/include/sys/strace.h
を見てく
ださい)。
bash を使っているのなら、export STRACE=1
とすることで、
cygwin.dll 内のバグを追いかけるのに有用な syscall 風の詳細な出力が見ら
れます。
CYGWIN.DLL はマジックヘッダを持つリンクファイルを生成します。どこかに リンクされているファイルまたはディレクトリをオープンすると、そのマジッ クヘッダに書かれてあるファイルまたはディレクトリをオープンします。
ありがちなエラーとして、コマンドライン上のライブラリを、それが必要とさ れるものより前に置いてしまうというものがあります。
これは間違い。 gcc -lstdc++ hello.cc
これは正しい。 gcc hello.cc -lstdc++
その関数は恐らくヘッダファイルで宣言されていないか、UNICODE 用のものが 入っていないかでしょう。
はい。
ファイルに対して unix スタイルの属性ビットを操作するときは、ライブラリ は WIN32 API で提供されていないいくつかの情報を埋めなくてはなりません。
これはファイル名が .exe か .bat であれば実行可能と判断しますし、またファ イルの先頭文字に "#!" を持つものも同様です。
それはおそらく、あなたの質問はすでに FAQ の中にあるからです。また、お そらく誰もあなたの質問に答える時間がないのでしょう。あるいは、誰も答え を知らないのかも…。
cygwin32 におけるネットワークサポートは Unix API の提供を想定しており、 winsock API ではありません。
API 上では同じ名前の関数でも、意味の違う関数が存在します。
例えば、Unix の select システムコールは標準ファイルハンドルとソケット のハンドルに対して待つことができますが、winsock の select コールはソケッ トのみです。このため、cygwin.dll はさまざまな winsock/win32 関数に、無 理矢理 Unix select と同じようなことをさせるために、裏でかなり汚いこと をやっています。
もしすでに winsock を使っているアプリケーションを移植しようとしている のであれば、 cygwin32 のネットワークサポートを使用するには間違っていま す。
しかしそれでもネイティブの winsock も cygwin32 も使うことはできます。 cygwin.dll が export している関数は 'cygwin32_<name>' という名 前です。 たくさんのマクロ定義が、標準の Unix 名から DLL で export され ている名前への関連付けを行っているのです。 include/netdb.h を覗いてみて ください。
..etc.. void cygwin32_setprotoent (int); void cygwin32_setservent (int); void cygwin32_setrpcent (int); ..etc.. #ifndef __INSIDE_CYGWIN_NET__ #define endprotoent cygwin32_endprotoent #define endservent cygwin32_endservent #define endrpcent cygwin32_endrpcent ..etc..
これは標準 Unix ヘッダファイルを include すると Unix->cygwin32 の マッピングが行われる、というアイデアです。これを使った場合、 libwinsock.a をリンクする必要はありません。ネットワークに必要な全ての ものは DLL 内にあります。
あなたのアプリケーション用に your-app->winsock マッピングを行う必 要はありません。単に winsock.h を include して(これはディストリビュー ションには含まれません。ごめんなさい)、libwinsock.a をリンクするだけで す。
mywinsock.h ファイルは、標準 winsock.h をハックしたもので、標準 Unix API と衝突するビット値や他のヘッダで定義されていたりするものを削除した ものです。 例えば、mywinsock.h においては struct hostent の定義は削除 されています。これは Unix マシンでは netdb の中にあるものだからです。 これをあなたのアプリケーションで使うのは良いことではありません。
どうして cpp.exe、cc1.exe などは bin ディレクトリにはないの?
どうして lib や include ディレクトリが一つじゃないの?
H-i386-cygwin32\lib\gcc-lib\...\cygnus-2.7.2-960712\include x86-cygwin32\include x86-cygwin32\H-i386-cygwin32\i386-cygwin32\include
この方法では、違ったホスト、ターゲット間での複数のリリースが、同じツリー の中で共存できます。 H-i386-cygwin32 は、i386-cygwin32 によってホスト されるという意味で、全てのホストで共有される共通ファイルはトップレベル のディレクトリにあり、ターゲット毎のファイルは H-i386-cygwin32/i386-cygwin32 以下にある、といった具合です。
もし ppc NT マシンと x86 NT マシンとでファイルを共有するサーバがあった とすれば、H-i386-cygwin32 と H-powerpcle-cygwin32 の両方のディレクトリ を持ち、トップレベルにある共通のファイルはそれぞれのマシン毎に重複して 持つことはありません。もし i386-cygwin32 と m68k-coff 間のクロスコンパ イラでビルド、インストールした場合には(それが今あるのかどうかは良く分 からないけど、まあ、単なる例として)、H-i386-cygwin32/m68k-aout という ターゲット依存ファイルの入ったディレクトリができて、m68k-aout- のプレ フィックスがついたバイナリがいくつか H-i386-cygwin32/bin にできるでしょ う。
通常、リリースを識別するためにさらに上のレベルのディレクトリを作ります。 もし 複数の gnuwin32 リリースが別々の DLL バージョンとして共存する場合 には、以下のようなディレクトリができるでしょう。
gnuwin32/b16/H-i386-cygwin32 gnuwin32/b17/H-i386-cygwin32 ...
どちらにしろ、これはディレクトリ構造をさらに複雑にさせますが、さらに複 雑なインストールを行う人々のためには価値があることです。
はい、おそらく動きます。キーポイントはリンクするのに、 GNU ld ではなく MS の LINK.EXE を使うことのようです。C++/Obj C のコンストラクタに関す る問題があるようです。
これらは cygwin.dll には含まれていないのですが、標準的な GNU の ftp サ イトで入手できるライブラリに含まれています。
$PATH の中に . (ドット)が必要です。Makefile から起動される全てのシェル スクリプトの前にいちいち /bin/sh を付け加える必要はありません。
私たちはソースの中では GNU-WIN32 は少しずつ除去していこうとしています。 これは2つのもっともな理由によるものです - a) 全てが GNU のコードではな い。b) WIN32 API を提供しているものではない。
私たちはとりあえず、コンフィグレーションの合言葉として cygwin32 を使っていますが、もっと良い名前があれば変更されるでしょう。
この名前の構成にはちょっとばかり理屈があります。これらのツール一式全部 を `gnu-win32' と呼び、これらが動作するライブラリ、API を Cygwin32 API と呼びます。
(`http://www.cs.unm.edu/~wampler/aboutv.html' より抜粋)
V は、異なったグラフィックインタフェースプラットフォーム上でさまざまな アプリケーションを開発するための、汎用 C++ GUI フレームワークです。こ れは、全て最新のインタフェース部品を使った最高水準の商用アプリケーショ ンには向かないでしょうけれども、非常に完成度が高く、カスタムGUIアプリ ケーションの大部分に適しているものです。 V を使って開発されたアプリケー ションは、プラットフォームネイティブの look&feel を持ち、さらにプラッ トフォームを超えた移植性があります。
V では、メニュー、ステータスバー、ツールバー、描画キャンバスなどを持っ たウインドウ、汎用コントロール(ボタン、リスト、ラベル、テキストエント リ、チェックボタン、ラジオボタンなど)を持ったモーダルおよびモードレス ダイアログを含む、ほとんどの GUI オブジェクトをサポートしており、また ポータブルな印刷もサポートしています。
...
V はまた、多くのカスタムアプリケーションを作るためのすばらしいツールで もあります。 これは研究所、小さなカスタムソフトウェアショップ、エンジ ニアリング会社、または個人でも、グラフィカルユーザインタフェースを必要 とするとするアプリケーション開発、特に複数プラットフォーム上での必要が ある人に向いているツールです。その設計のおかげで、V はネイティブの GUI ツールキットよりもとても簡単に学び、使うことができます。また、MFC や OWL のような大きなフレームワークよりも、簡単に学ぶことができます。これ はフリーウェアですが、GNU Library General Public License に基づいてラ イセンスされ、公共の使用のためにソースコードが常に利用できます。
さらなる情報は、以下の V の WWW ページをご覧ください。 `http://www.cs.unm.edu/~wampler/vgui/vgui.html'.
DJGPP は同じようなアイデアですが、これは Win95 や Windows NT ではなく DOS 用のものです。DJGPP はアプリケーションに対して道理の通った操作イン タフェースを提供するために、"DOS extender" を使っています。GNU-WIN32で は全てのアプリケーションはネイティブ WIN32 なので、その必要はないので す。GNU-WIN32 では全ての Win32 API 関数を呼び出すことができ、Windows の GUI を使ったプログラムを書くこともできるのです。おそらくいつの日か、 GNU-WIN32 は Alpha や MIPS プロセッサ上でも同じように動くようになるで しょう。
DJGPP に関する詳しい情報は以下で取得できます。
`http://www.delorie.com'.
私は Geoff Noer (noer@cygnus.com) です。私は Cygwin32 API ライブラリの 現在の保守者で、公開用 beta のビルドなどを管理しています。私は受け取っ たパッチや質問にはできる限り責任を持つように努力していますが、実際には 私には全てのメールに対して答えることは不可能です。win32 関連のネットワー ク上でのリリース作成やヘルプは私の本来の仕事ではないので、いくつかのこ とには答えられません。ごめんなさい。
Steve Chamberlain (sac@transmeta.com)は、このプロジェクトでの win32 依 存のコードのオリジナルをほとんど書きました。彼は beta 14 までのリリー スを仕上げ、その他の多くの gnu のツールを NT で動作するように移植し、V を gnu-win32 ツールと一緒に動くように移植するなどを行ってくれました。
Doug Evans (dje@cygnus.com) は beta 16 においてパス名を扱うコードを書 き直すのに多大な時間を費やし、その他の数え切れない問題を修正してくれま した。 Jason Molenda と Mark Eichin もまた多くの重要な貢献をしてくれま した。
Kim Knuttila と Michael Meissner は PowerPC への移植に長時間参加してく れています。
そしてこのツールを使って、アドバイス、バグリポート、コード修正といった 形でのたくさんの助力をして頂いた皆さん、とてもありがとう。私たちは本当 に感謝しています!
商用サイトでは、ネイティブ GNU-Win32 ツールと NT/Win 95 上のクロスコン パイラのサポートを、Cygnus より購入することができます。詳細は info@cygnus.com へメールをお送りください。
これは重要なリリースです。新しい cygwin.dll は以前リンクされたアプリケー ションとのバックワードコンパチビリティがありますが、内容は大きく変わっ ています。
インストール処理が完全に変更され、 InstallShield5 ベースのインストーラ を使うようになっています。これにより過去に経験した数々のインストール時 の問題を減らしてくれます。しかしながら、配布ファイルに付属している README.txt で説明されているように、環境変数は未だに手で設定する必要が あります(将来のgnu-win32 インストーラには、これを自動的に行う機能を持 たせるかもしれません)。
GCC のコンパイル時間が fork() の代りに spawn() を使うことによって、 20-30% 向上しました。
GCC は、環境変数(COMPILER_PATH、 LIBRARY_PATH、 C_INCLUDE_PATH、 CPLUS_INCLUDE_PATH、 OBJC_INCLUDE_PATH)の値に、 Win32 と POSIX 形式 のパス名(あるいはパス名リスト)のどちらでも受け付けます。
GDB には tcl/tk ベースの GUI(gdbtk) が付属します。"gdb -nw" として起動 することによって、コマンドライン gdb を起動することもできます。
bash は起動時に、 /tmp が存在しており、かつそれがディレクトリであるこ とを確認します。そうでない場合には文句を言います。
gcc と ld に -s をつけて実行すると不正な実行ファイルが作成されていまし た。これに関する bfd のバグが修正されました。
String.h と string.h(と同様なヘッダファイルの組)が衝突して、インクルー ドしたものと違う方が読まれてしまうことを修正しました。
トップレベルの install-sh スクリプトは、foo をインストールしようとして foo が存在しない時は、foo.exe をインストールしようとします。これで多く の Unix ソフトウェアのインストールの問題が解決します。
dlltool に -I オプションをつけて起動することにより、.def ファイルの IMPORT 宣言が試験的にサポートされます。ぜひ気軽にこれを経験してみてく ださい。ただしこの機能がより広くテストされるようになったら、このフラグ はなくなるでしょう。
time はバージョン 1.7 に上がりました。
make はバージョン 3.75 に上がりました。
make は VPATH 変数で、Win32 と POSIX のパス名リストをどちらでも受け付 けます。
以下がサポートされています:
以下の関数が追加されました:
かなり改善されたシグナル、例外ハンドラがサポートが追加されています。 kill シグナルはかなり良く働くようになりました(bash で コントロールC が 働きます)。
シェルスクリプトが、常にデフォルトの /bin/sh ではなく、#! の後ろに指定 されたシェルで動くようになっています。
浮動小数点レジスタが crt0.o の中で正しく初期化されるようになっています。
com ポートのようなディスク以外のファイルのオープン時には、シンボリック リンクであるか、実行可能であるかというチェックはもはや行いません。
コンソールタイトルは、実行中のプロセスの名前がセットされるようになって います。
winsock はアプリケーションの起動時に初期化されるようになっています。
reent_data がプライベートアドレス空間から cygwin.dll に移動しました。
system() 呼び出しは、fork()/exec() ではなく spawnvp() を呼び出すように なっています。
NT 拡張属性に対するサポートが追加されましたが、あまりにも遅くなってし まうので今のところ無効にしてあります。これをシンボリックリンクや実行可 能属性のファイル状態を記憶するのに使用したいのです。
NT 上でのみ、 mkpasswd と mkgroup ユーティリティが、正しい /etc/passwd と /etc/group を生成します。
以前のリリースではマウントポイントはレジストリの "Cygnus Support" 以下 に格納されていました。これは beta 18 より "Cygnus Solutions" に変更さ れました。レジストリエディタ(NTでは regedit)を使って古いエントリの名前 を変更するか、あるいは単にもう一度マウントを行ってください。そうすれば cygwin.dll が自動的に新しいものを作ります。
マウントポイントは、30 文字ではなく、最大 MAX_PATH までの長さを取るこ とができます。
mount
コマンドを使って、別のディレクトリをマウントできま
す。
最低限の ANSI 端末エミュレーションが含まれました。
パッケージがより小さく、論理的なまとまりに分割されました。
/d<name> 機構はなくなりました。
多くのユーティリティは GNU GPL で保護されており、他のいくつかはパブリッ クドメインであり、その他は Berkeley スタイルの著作権を持っています。こ れでも全部分類しきれてないかもしれません。GNU GPL の「制限」を全うする と、基本ルールは、もし何かのバイナリを配布すれば、ソースも利用できるよう にしなければならない、ということです。
バイナリを配ることにお金を請求することもできますが、そのバイナリを手に した人には誰にでも、ソースをも手に入れる機会を与えなくてはなりません。 また、その人たちには、そのバイナリとソースをさらに他の人に配る権利も与 えなくてはなりません。
ソースコードの winsup サブディレクトリにある Cygwin32 API ライブラリも また、GNU GPL によって保護されています。デフォルトでは全ての実行ファイ ルはこのライブラリをリンクしているので、beta 17 でコンパイルされている ツールもまたこの GPL のもとで配布されるフリーソフトウェアとなり、ソー スコードも全ての人が利用可能です。
ftp サイトのツリーをミラーするのは、何も問題はないはずです -- 単にソー スコードも利用できるかどうかを確認してもらえれば。もしあなたがミラーを するなら、 `noer@cygnus.com' にメールを送っていただけるとあり がたいです。それであなたのミラーサイトが適切なリストに追加されるでしょう。
もしこの中から選択して取り出したい(場合によっては i386 のものではなく PowerPC バイナリのみを運び出したいと思うでしょう)という場合でも大丈夫 です。
GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> v Copyright (C) 19yy <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
Geoffrey Noer noer@cygnus.com
この文書の翻訳は Keisuke Mori(ksk@kt.rim.or.jp) が行いました。ただし訳者はこの文書の内容に 関していかなる責任も負うものではなく、また Cygnus に対していかなるサポー トを行うものでもありません。もちろん誤訳の指摘、その他アドバイスなどは 歓迎いたします。
なお、訳文中特に断りなく "DLL"、"(これらの)ツール" などとある場合、ほ とんどはそれぞれ cygwin.dll と、GNU-Win32 の(usertools などの)ディスト リビューションに含まれるツール類、のことを指しています。