CygwinとSFU(Interix)のどちらがよいのか、優位性があるのかを記事にしようとしたのですが、2012年にMicrosoftの公式アナウンスとしてSUAの開発、Interixサブシステムの廃止、Cygwinへの移行を推奨という残念なニュース(マイクロソフト公式サイトによるアナウンス)が発表されました。
UnixとWindowsサーバのマイグレーション案件などでひっそりと利用されていたSFU・SUAですが、これはなんと言ってもマイクロソフトが公式にサポートしている純正のネイティブUnix/Posixであるということが大きなメリットであったと感じます。何かあればマイクロソフトがサポートしてくれますし、品質などもある程度担保してもらえるため、大規模システムなどでUnixのバッチ処理などをWindowsへ移植する際に大変大きな魅力でした。
で、この記事を書こうと思い始めた時期のInterixとCygwinの差異としては下記の特徴があげられました。
topコマンド実行結果
- |
Interix |
Cygwin |
UNIX環境 |
UNIXネイティブ (*1) |
Linuxシミュレータ |
実行速度 |
高速 |
低速 (*2) |
64bit対応 |
32bit |
32bit / 64bit |
アプリケーション数 |
少ない |
非常に多い |
仕様・オプション |
古典的なものが多い |
新しい |
文字コード |
Shift-JIS |
utf-8 |
サポート |
マイクロソフト |
レッドハット |
*1のInterixがUNIXネイティブである点については、truss コマンドにより pwd プロセスをトレースすると、open、readなどUNIXのシステムコールが呼び出されていることからも確認することができる。
*2の実行速度についてInterixが高速でCygwinが低速だというのは知られていましたが、Cygwinはシミュレータのためネイティブ環境に比べるとどうしても動作コストが大きくなってしまうという問題がありました。シェル上でのコマンド投入ですら妙なひっかかりを感じた人は多いのですが、この記事を書いている2015年現在はコンピュータの速度がそれ以上に十分に速くなってしまったためかCygwin側で高速化が行われたのかわかりませんが、そのようなもたつきやひっかかりはなく、非常に快適に使うことができるようになっています。
実用上は問題がないのですが、パフォーマンスにどの程度の差があるのか簡単なベンチマーク試験をやってみました。下記のシェルスクリプトをCドライブに配置し、Interix、Cygwinのそれぞれから実行しタイムを計算します。同一の仮想マシン一台にInterixとCwgwinをインストールし、同じ環境で実行しています。
#!/bin/ksh
LANG=C
printf "START "; date '+%Y/%m/%d %H:%M:%S'
cnt=0; while [ ${cnt} -lt 30000 ]
do
cnt=$(expr ${cnt} + 1)
done
printf "FINISH "; date '+%Y/%m/%d %H:%M:%S'
|
ベンチマークの内容は簡単な足し算を三万回繰り返すだけのシンプルなものです。 結果は次のとおり。
Cygwinは128秒、 Interixは51秒とInterixが倍以上のスコアを残しました。
動くツールも少なく廃止が決まっているInterixですが、文字コードがSJISであること、速度面やマイクロソフトのサポートがうけられる点は非常にメリットなのではないかと思います。
公式に廃止が決まったInterixサブシステムですが、Windows8 と Windows 2012 では動作しますので、しばらくはWindows上でネイティブUNIX環境を利用してさまざまなタスクを処理していくことも可能です。InterixとCygwinは文字コードが異なるため、扱いたいデータによって使い分けるのも良いかと思います。
以上 |