Windows 用の UNIX ユーザーランド。
GPL.
2016-06-27:
cygwin1.dll が LGPL3 に変更されたらしい。
2016-06-27:
cygwin1.dll が LGPL3 に変更されたらしい。
- mynavi / 2016-06-27: Cygwinのビジネス利用拡大へ - Red Hat、Cygwinのライブラリライセンスを変更
Cygwin が遅いことや、ソースコード互換性等を理由に
VirtualBox や VMWare で Linux や *BSD 動かしたほうがマシって意見を散見するんだけど
そういう人はそもそも cygwin を必要としていたのかどうかが疑わしい。
Cygwin の存在意義は Windows とシームレスに連携可能な POSIX 環境って点に尽きる。
具体的には以下のような点。
逆に言えばこれらを必要としないなら無理して cygwin を使う意義はない。
速度や互換性と上記のメリットを天秤にかけてどちらを選ぶかという選択である。
もちろん無理しない範囲であれば cygwin を使う意義は大いにある。
少なくとも C 言語で hello world するとかその程度の段階であれば問題が生じる余地すらないだろう。
次に、サイズ及びインストールにかかる時間をやり玉に挙げる人がいるが、これも根本的に的外れである。
現在 Cygwin が提供しているパッケージがどれほどあるか調べた結果は以下の通りである。
http://ftp.jaist.ac.jp/pub/cygwin にミラーされているアーカイブのうち
prev や test 扱いされていない標準的なパッケージは
7,599 パッケージ、14,025,501,274B ≒ 13.1GiB に達していることが分かる。
これは小規模な Linux ディストリビューションに匹敵しており、
仮にフルインストールでもしようものなら終わるわけがないのである。
一方で、拙作の cygwin_autoinstall.bat を用いて私家版 apt-cyg を利用可能な最小構成でインストールした直後の状況は以下のようになる。
インストール後のサイズもたかだか 270,639,925B ≒ 258.1MiB に過ぎない。
そこそこ高速なブロードバンド環境と SSD がありさえすれば 3 分とはかからない大きさである。
さて、一般的な Linux ディストリビューションを盲目的にフルインストールして、
あまつさえその大きさに文句を言う人がどれだけいるだろうか?
普通はそんな人はいないし、仮にいたとしても情弱認定されるのが関の山だろう。
フルインストールとか酔狂な真似をしておいて、サイズに文句を言っている人は、
そもそもフルインストールが必要のない人なのである。
別の言い方をすれば、使い方を根本から間違っているのであり、
大き過ぎるというのは批判としては極めて的外れと言える。
ひょっとすると cygwin のサイズに文句を言っている人は
Windows で POSIX 環境を使うための簡易ツール的な認識なのかもしれない。
しかし cygwin を見くびってはいけない。
現実は上記の通り、
パッケージの充実度は小規模な Linux ディストリビューションに比肩している。
つまり批判の対象になっている馬鹿でかいサイズは、馬鹿でかければ馬鹿でかいほど、
それは逆にパッケージの充実度と言う意味で褒られて然るべき点なのである。
Linux を使う場合、必要最小限度の環境をインストールした後、
必要に応じてパッケージを追加して行くのがセオリーであるのと同じように、
Cygwin もインストール時は必要最小限の環境に留め、
必要に応じてパッケージを追加して行くのが正しい使い方と言えるだろう。
まとめると以下の2点になる。
VirtualBox や VMWare で Linux や *BSD 動かしたほうがマシって意見を散見するんだけど
そういう人はそもそも cygwin を必要としていたのかどうかが疑わしい。
Cygwin の存在意義は Windows とシームレスに連携可能な POSIX 環境って点に尽きる。
具体的には以下のような点。
- Change directory した状態で terminal を開くことが可能。
- Win32 api を叩くことが可能。延いては OLE/COM を叩くことが可能。
- レジストリを叩くことが可能。
逆に言えばこれらを必要としないなら無理して cygwin を使う意義はない。
速度や互換性と上記のメリットを天秤にかけてどちらを選ぶかという選択である。
もちろん無理しない範囲であれば cygwin を使う意義は大いにある。
少なくとも C 言語で hello world するとかその程度の段階であれば問題が生じる余地すらないだろう。
次に、サイズ及びインストールにかかる時間をやり玉に挙げる人がいるが、これも根本的に的外れである。
現在 Cygwin が提供しているパッケージがどれほどあるか調べた結果は以下の通りである。
$ apt-cyg update; date "+%F %T" Cache directory is *********************************************** Mirror is http://ftp.jaist.ac.jp/pub/cygwin Updating setup.ini signature verified: setup.bz2.sig signature verified: setup.ini.sig Updated setup.ini 2016-02-05 21:29:58 $ # number of packages $ apt-cyg packages-total-count 7599 $ # size of archives $ apt-cyg packages-total-size 14025501274以上より 2016-02-05 21:29:58 現在、
http://ftp.jaist.ac.jp/pub/cygwin にミラーされているアーカイブのうち
prev や test 扱いされていない標準的なパッケージは
7,599 パッケージ、14,025,501,274B ≒ 13.1GiB に達していることが分かる。
これは小規模な Linux ディストリビューションに匹敵しており、
仮にフルインストールでもしようものなら終わるわけがないのである。
一方で、拙作の cygwin_autoinstall.bat を用いて私家版 apt-cyg を利用可能な最小構成でインストールした直後の状況は以下のようになる。
$ # files except tar file under the mirror dir $ { cd "$(apt-cyg pathof cache/mirrordir)"; find . -type f; } | grep -v tar ./x86_64/setup.bz2 ./x86_64/setup.bz2.sig ./x86_64/setup.ini ./x86_64/setup.ini.sig $ # number of archives which was installed $ apt-cyg packages-cached-count 107 $ # size of archives which was installed $ apt-cyg packages-cached-size 53768498 $ # size of minimum cygwin environment that is required by apt-cyg of my own version $ du -sb /cygdrive/c/cygwin64 270639925 /cygdrive/c/cygwin64ご覧のようにインストールされたアーカイブは 107 パッケージ、53,768,498B ≒ 51.3MiB に過ぎず、
インストール後のサイズもたかだか 270,639,925B ≒ 258.1MiB に過ぎない。
そこそこ高速なブロードバンド環境と SSD がありさえすれば 3 分とはかからない大きさである。
さて、一般的な Linux ディストリビューションを盲目的にフルインストールして、
あまつさえその大きさに文句を言う人がどれだけいるだろうか?
普通はそんな人はいないし、仮にいたとしても情弱認定されるのが関の山だろう。
フルインストールとか酔狂な真似をしておいて、サイズに文句を言っている人は、
そもそもフルインストールが必要のない人なのである。
別の言い方をすれば、使い方を根本から間違っているのであり、
大き過ぎるというのは批判としては極めて的外れと言える。
ひょっとすると cygwin のサイズに文句を言っている人は
Windows で POSIX 環境を使うための簡易ツール的な認識なのかもしれない。
しかし cygwin を見くびってはいけない。
現実は上記の通り、
パッケージの充実度は小規模な Linux ディストリビューションに比肩している。
つまり批判の対象になっている馬鹿でかいサイズは、馬鹿でかければ馬鹿でかいほど、
それは逆にパッケージの充実度と言う意味で褒られて然るべき点なのである。
Linux を使う場合、必要最小限度の環境をインストールした後、
必要に応じてパッケージを追加して行くのがセオリーであるのと同じように、
Cygwin もインストール時は必要最小限の環境に留め、
必要に応じてパッケージを追加して行くのが正しい使い方と言えるだろう。
まとめると以下の2点になる。
- Windows との親和性よりも速度と互換性を重視するなら仮想環境へ。
- フルインストールは時間がかかって当り前。インストールは最小構成に。
説明には
supported platforms にはしっかりと cygwin が挙がっているんだけどひょっとしてこれで幸せになれるの?
ネタ元:
pkgsrc is a framework for building third-party software on NetBSD and other UNIX-like systems, currently containing over 14000 packages.とあってパッケージ数がちょっとヤバイ
supported platforms にはしっかりと cygwin が挙がっているんだけどひょっとしてこれで幸せになれるの?
ネタ元:
version 2 にメジャーバージョンが挙がってからじゃないかと思うんだけど、
ネットワークドライブ上のスクリプトに chmod +x しておいても permission denied と言われて実行出来なくなった orz
ネットワークドライブ上でシンボリックリンクも出来なったし、なぜどんどん改悪されるんだ、、、(- -)
ざっと検索してみたが、あまり参考になるポストがなかった、、、
この辺は関係あるのかな???
追記: 2015-06-11
apt-cyg dist-upgrade してみたら改善した。
どうも一時的な不具合だった模様。良かった。
ネットワークドライブ上のスクリプトに chmod +x しておいても permission denied と言われて実行出来なくなった orz
ネットワークドライブ上でシンボリックリンクも出来なったし、なぜどんどん改悪されるんだ、、、(- -)
ざっと検索してみたが、あまり参考になるポストがなかった、、、
この辺は関係あるのかな???
- Using Cygwin / Chapter 3. POSIX accounts, permission, and security
追記: 2015-06-11
apt-cyg dist-upgrade してみたら改善した。
どうも一時的な不具合だった模様。良かった。
ネタ元:
Cygwin の kill だと exit code が 0 以外になるが、Windows の taskkill だと 0 になるという話。
因みに通常は、0〜127 がアプリケーションの終了コード、128 は未使用、128 + n はシグナル n を受け取って終了した場合のデフォルトの終了コードとなる模様。
参考:
Cygwin の kill だと exit code が 0 以外になるが、Windows の taskkill だと 0 になるという話。
因みに通常は、0〜127 がアプリケーションの終了コード、128 は未使用、128 + n はシグナル n を受け取って終了した場合のデフォルトの終了コードとなる模様。
参考:
- Unix Exit Code 137 143
- JM / bash (1) # 単純なコマンド(Simple Commands)
私家版 apt-cyg には既に実装していたのだが、
Cygwin のインストールで死にそうに時間がかかるという声を耳にするので、
インストール前でも最適なミラーを決定できるようにバッチファイルを書いてみた。
以下の oneliner で実行出来る。
Cygwin のインストールで死にそうに時間がかかるという声を耳にするので、
インストール前でも最適なミラーを決定できるようにバッチファイルを書いてみた。
- Gist / kou1okada / benchmark_cygwin_mirrors.bat
以下の oneliner で実行出来る。
powershell -Command "Import-Module BitsTransfer; Start-BitsTransfer https://gist.githubusercontent.com/kou1okada/9581971e32cadc6306fc/raw/benchmark_cygwin_mirrors.bat" && benchmark_cygwin_mirrors.bat
cygcheck -sv | grep "^Last downloaded files" | sed -e "s/^[^:]*: //g" | awk '{gsub("tp:","tp%3a");gsub("/", "%2f");printf("%s\\", $0);}END{printf("setup.ini");}'
以下に解説がある。
setup.ini 作成に必用な upset package の入手先として示されている http://xarch.tu-graz.ac.at/publ/cygwin/ は 2008-10-24 現在 not responsed.
移転先は http://rurban.xarch.at/software/cygwin/ かな?
Google code に以下のプロジェクトとして登録されている。
以下も参考になるだろう
upset をインストールするためだけに上記のリポジトリを追加するのが面倒なら以下のようなスクリプトで簡易的に代替しても良いだろう。
もうちょっとマシなの作ってみた。
追記: 2015-06-03
cygport というパッケージがあってこれを使うと、cygwin 用の package をサックリ作れる模様。
setup.ini 作成に必用な upset package の入手先として示されている http://xarch.tu-graz.ac.at/publ/cygwin/ は 2008-10-24 現在 not responsed.
移転先は http://rurban.xarch.at/software/cygwin/ かな?
Google code に以下のプロジェクトとして登録されている。
以下も参考になるだろう
- 不安定な心理 / 2010-02-17 20:02 Cygwin 自作パッケージ作成方法
upset をインストールするためだけに上記のリポジトリを追加するのが面倒なら以下のようなスクリプトで簡易的に代替しても良いだろう。
もうちょっとマシなの作ってみた。
追記: 2015-06-03
cygport というパッケージがあってこれを使うと、cygwin 用の package をサックリ作れる模様。
setup.exe は GUI なので、いちいちパッケージを探して回るのが面倒臭い。
apt-get とか yum のようにコマンドラインから CUI でパッケージを自動インストールしたい場合
setup.exe に -q -P オプションを与えれば良い。
例えば、aria2 と curl パッケージをインストールしたい場合、以下の様にすれば良い。
ただし、Vista 以降では UAC が介入してくるので、以下のような制約が出る模様。
Cygwin の公式ツールではないが、以下のようなツールもある。 これは bash で実装されており、Vista 以降でも UAC の介入を受けることなく利用出来る。
ただし、2011-10-26 現在、インストールされたファイルの GID が root ではなく None になるようなので、ひょっとすると何か不具合が出るかも?
参考:
apt-get とか yum のようにコマンドラインから CUI でパッケージを自動インストールしたい場合
setup.exe に -q -P オプションを与えれば良い。
例えば、aria2 と curl パッケージをインストールしたい場合、以下の様にすれば良い。
setup.exe -q -P aria2,curlオプションの意味は以下。
- -q 対話処理をせず実行
- -P インストールするパッケージの指定。与えるパッケージ名はコンマで連ねる。
ただし、Vista 以降では UAC が介入してくるので、以下のような制約が出る模様。
- UAC のダイアログが操作出来ないので、リモートからは出来ないかも。
- UAC の関係か Cygwin からは(実行ビット立ててても) Permission denied が出て実行出来ない。
Cygwin の公式ツールではないが、以下のようなツールもある。 これは bash で実装されており、Vista 以降でも UAC の介入を受けることなく利用出来る。
ただし、2011-10-26 現在、インストールされたファイルの GID が root ではなく None になるようなので、ひょっとすると何か不具合が出るかも?
参考:
- Cygwin FAQ
- Super User / 2009-09-14: Installing Cygwin packages from the command-line
2011-11-14 現在、Cygwin は 32bit アプリなので、64bit版 Windwos では System32 へのアクセスが SysWOW64 へリダイレクトされてしまう模様。
結果、64bit版 System32 へのアクセス手段がない状況。
参考:
結果、64bit版 System32 へのアクセス手段がない状況。
参考:
- Certain files in the system32 directory are not listed
- たんころぽん / 2008-06-28: system32の偽装
2013-07-22 リリースの Cygwin 1.7.22 から 64 bit 版が正式リリースされた模様。
- cygwin-announce archive / 2013-07-22: Updated: Cygwin 1.7.22 (First offical 64 bit release)
要 Vista 以降らしいんだけど、以下のように環境変数 CYGWIN に winsymlinks って追加しておくと ln -s で Windows native の symbolic link を張ってくれるらしい。
まぁ cygwin 的 symbolic link も SMB 上だとファイル属性が上手く設定出来ないため、ただのファイルになっちゃうのでどっちがマシかって話ではある。
これって、昔の cygwin みたいにショートカットをシンボリックリンク扱いしてくれた方が幸せなんじゃないのか???
参考:
export CYGWIN="winsymlinks $CYGWIN"やってみたらローカルでは上手く行くんだけど SMB 上だとショートカットになっちゃう。
まぁ cygwin 的 symbolic link も SMB 上だとファイル属性が上手く設定出来ないため、ただのファイルになっちゃうのでどっちがマシかって話ではある。
これって、昔の cygwin みたいにショートカットをシンボリックリンク扱いしてくれた方が幸せなんじゃないのか???
参考:
- rcmdnk’s blog / 2015-01-24: MobaXterm: Windowsでのcygwinに代わるターミナル環境
- Cygwin User's Guide / Chapter 3. Using Cygwin # Symbolic links
- Cygwin ML / 2014-02-13: Testers needed: New passwd/group handling in Cygwin
2019-08-23: 追記
上のライセンスの所でも書いているが、ソースコードの winsup 以下、つまり cygwin1.dll のライセンスは、2016-03-24 のコミットにより Cygwin version 2.5.2 以降は GPLv2+ から GPLv3+ に変更されたため、以前はあった非GPLプロダクトとのリンクの問題はなくなっている。
非 GPL のプロジェクトに利用する場合には注意が必要。
まず cygwin1.dll が GPL である。この DLL をリンクから外す必要がある。
これは -mno-cygwin オプションで行う。
C++ を使う場合は標準ライブラリのライセンスにも注意しなくてはならない。
Cygwin に付属しているC++の標準ライブラリには GPL の記述がある。
# locate iostream 等して見つかったファイルを調べて見ると良い。
従って、別途、非 GPL の標準ライブラリがを用意する必要がある。
STLport は iostream まで含むので、これを標準ライブラリといて利用すると良いかもしれない。
例外条項の記述があった、、、orz
上のライセンスの所でも書いているが、ソースコードの winsup 以下、つまり cygwin1.dll のライセンスは、2016-03-24 のコミットにより Cygwin version 2.5.2 以降は GPLv2+ から GPLv3+ に変更されたため、以前はあった非GPLプロダクトとのリンクの問題はなくなっている。
- Cygwin FAQ # 4. Using Cygwin # 4.22. Can I bundle Cygwin with my product for free?
- 上記 winsup/doc/faq-using.xml の該当箇所変更点
例外条項の記述があった、、、orz
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
- Tera Term
- とりあえず不満はないレベル。2010-01-08 現在、愛用中。
- 2010-01-08 現在 Cygwin1.7 だと .*/デスクトップ/以下のフォルダに cygterm here できない罠。
- Poderosa
- Tera Term と比べると高機能だけど重たい印象
- mintty
- PuTTY
- 日本語環境的には PuTTYごった煮版 or PuTTYjp が良いのかも?
- Wikipedia / PuTTY も参考に
- ck terminal emulator [take me back]
- ck terminal emulator ver3 [最終版 mirror?]
- cygwin1.7 ck
- 参考: Cygwin使っている人いますか? その19
タグ
コメントをかく