home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2017/10/09/MSYS2,MinGW64,Cygwinの違い

日記/2017/10/09/MSYS2,MinGW64,Cygwinの違い

日記 / 2017 / 10 / 09 / MSYS2,MinGW64,Cygwinの違い
id: 1422 所有者: msakamoto-sf    作成日: 2017-10-09 21:51:48
カテゴリ: Cygwin MSYS,MSYS2,MinGW,MinGW64 

会社のPCを入れ替えることになり、Windows上のunixツール環境、今度はどうしようかと考えた。
今まではCygwin使いだったが、apt-cygの動向があるのと、QiitaなどでMSYS2の記事が増えてるので、MSYS2に乗り換えてみようか、とも思う。

実は一度新PCにMSYS2とCygwinを入れてみたのだが、MSYS2はそもそもスタートアップメニューのショートカットがMSYS2とMinGW64/32で分かれてるのがそもそも理解不能だったし、Cygwinのsetup-x86_64.exeの使い勝手も相変わらず悪かった。
とはいえ、apt-cygが一向に公式に取り入れられないなどCygwinに頼り切るのはどうもなぁ・・・という感じ。

apt-cygのゴタゴタ参考:

で、MSYS2だがいまいちMinGW64との違いや関係が理解できない。
これ読んでもまだピンとこない。

一応MSYS2のHistoryも読んでみたが・・・。

やっぱり分からん。つーか、やっぱり何でスタートメニューのショートカットでMSYS2/MinGW64/32で分かれるんや。
ぐぐってたら以下のQAを見つけて、これでようやく腑に落ちた。

つまりこういうことかな?

  • MSYS2とMinGW64の最大の違いは、POSIXエミュレーションを介しているか否か。
  • MSYS2は実はCygwinをupstreamとしたforkで、POSIXエミュレーションとして msys-2.0.dll を使い、パスを変換したりしている。
    • つまり、MSYS2のexeはMSYS2用のDLLやPATH環境じゃないと使えないし、Windowsのファイルパスは扱えない。
  • 一方で MinGW64 はPOSIXエミュレーションは使っておらず、GNUのツールをそのままWindowsに移植したもの。そのためWindowsのファイルパスをそのまま扱える。
    • つまり MinGW64のexeは単体でWindowsアプリとして実行可能となっている。コマンドプロンプト(cmd.exe)からも利用可能。
  • 以下に、pacmanなどではMSYS2を使えとか書いてあるのは、要はMSYS2/MinGW64のパッケージ管理をMSYS2側のpacmanで行えるように統合しているため。
  • スタートメニューからのMinGW64/32のシェルメニューでは、/mingw64, /mingw32 の bin ディレクトリをPATHの先頭に置いて、次に(MSYS2の)/usr/bin を置いている。
    • つまり、gccなどを MinGW64/32 のコマンドを優先して使うように調整している。

自分の中で整理(間違ってるかも):

  • MSYS2がPOSIXエミュレーションを使った一般的なunixのCUI環境を整えて、その上でMinGW64が動いて、OSSをWindowsに移植する作業環境として使う、みたいなのを想定している。
  • MSYS2自身にもgccはあるけど、それはWindowsネイティブexeをビルドするものではなく、あくまでもPOSIXエミュレーションを行う = MSYS2でしか動かないツールをビルドするのにしか使えない。
  • よって、MSYS2が提供するスタートメニューのショートカットのシェルは、以下のように使い分ける。
    • MSYS2 : MSYS2のツールしか使わない(=Cygwinのfork)用途であればこれで問題ない。
    • MinGW64/32 : Windowsネイティブexeを開発したい場合にはこちらを使う。あるいは MinGW64 側にしかパッケージがないコマンドを使いたい場合もこちら。

この辺、MSYS2のintroductionにもはっきり書かれてないので、分かりづらかった。(表現に注意すれば、書かれていなくはないのだが、ストレートに読み取り辛い・・・)

結局MSYS2はCygwinのupstreamを追いかけるforkということは確かで、それならパッケージの種類は問題ないよね・・・と思いきや、上記Wikiでも "msys2 subsystem is pretty small" とある通り、パッケージ一覧を見ても本当に必要最低限のunixツールセット、という感じ。

むしろ "mingw-w64-" prefixの方がパッケージが充実してる・・・。

が、結局はCygwinのサブセットなので、Cygwin側のパッケージ数には劣る。

とはいえとはいえ、MSYS2側の調整でファイルパスの "/cygwin" prefixが省略できたり、マウントにnoaclがデフォルトとなるのは多少楽、ではあるが・・・。

うーん、開発に使いたいわけではなく、便利なunixのCUIツールをWindowsで使いたいだけなので、正直MSYS2/MinGW64の住み分けの考え方は余分なんだよなぁ・・・。
パッケージ数としてもCygwin本家の方が圧倒的なので、結局 Cygwin + apt-cyg の方が良いのではなかろうか・・・。

正直、なんでQiitaでみんなしてMSYS2使ってるのか分からん・・・。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2017-10-09 21:52:13
md5:84821906b64d35fe1481f1b548c1a072
sha1:a219bdc0edd1cd8bb75fcc26b34f4dd3f0e010ae
コメント
コメントを投稿するにはログインして下さい。