Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rz7d/4e699498d339a5837f016b3108631a2b to your computer and use it in GitHub Desktop.
Save rz7d/4e699498d339a5837f016b3108631a2b to your computer and use it in GitHub Desktop.

Cygwin, MSYS, MSYS2, MinGW, mingw-w64, WSL, WSL2 の違い

名称 役割 説明
MinGW コンパイラ Windows 用の GNU ツールチェーン。
とにかく Windows 用の gcc や GNU ld。
"Windows 用" とは、Windows 上で動作したり、Windows 用のアプリが作れたりすること。
要するに Visual C++ や Clang/LLVM みたいなもの。
mingw-w64 コンパイラ MinGW のフォーク。Win64 向けの改良が加わっており、2021 年現在の主流。
Cygwin POSIX 環境 Windows 用の POSIX 環境。cygwin1.dll とリンクすると POSIX 環境をエミュレーションできる。POSIX 環境は Cygwin の目標。
MSYS POSIX 環境 MinGW の補助用の POSIX 環境。Cygwin のフォーク。POSIX 環境は互換性のためのもの。 あくまでも configure スクリプトなどの実行用。
MSYS2 POSIX 環境 開発補助用の POSIX 環境。Cygwin のフォーク。mingw-w64 の主な入手手段。POSIX 環境は互換性のためのもの。
MSYS2 - MSYS2 POSIX 環境 MSYS2 のための開発環境であり、POSIX エミュレーションが有効。
MSYS2 - MinGW32 Win32 開発環境 MSYS2 と mingw-w64 を使用した Win32 ネイティブ アプリの開発環境。(POSIX と互換性なし)
MSYS2 - MinGW64 Win64 開発環境 MSYS2 と mingw-w64 を使用した Win64 ネイティブ アプリの開発環境。(POSIX と互換性なし)
WSL POSIX 環境 Microsoft が開発した Windows (NT カーネル) 上で動作する Linux 互換レイヤー。
WSL 2 Linux NT カーネル上ではなく Hyper-V 仮想化環境で動作する Linux カーネルを使用した WSL。

ポイント

  • MinGW (mingw-w64) はいわばただの "Windows 用 gcc" のことであり、例えば GNU/Linux でも動作する

選び方

動機 ソフトウェア
クロスコンパイルで Windows に対応したアプリをビルドしたい。
Windows アプリのコンパイラを (速度や標準準拠のために) gcc に変えたい。
MinGW (mingw-w64)
MinGW (mingw-w64) をかんたんにインストールしたい。
Windows ネイティブに対応しているが、autoconf/automake や configure スクリプトを使わないといけないアプリをビルドしたい。(nginx)
MSYS2
Windows API も使う POSIX ベースのアプリを動かしたい。
Cygwin 用のスクリプトがあり、MSYS2 だと動かない。(OpenJDK など)
Cygwin
Windows と連携できる GNU/Linux 環境がほしい。
Docker Desktop を使いたい。
シェルスクリプトを爆速で動かしたい。
WSL 2
MSYS2 だと configure が遅くて困ってる。
依存パッケージがややこしいため、GNU/Linux 上でクロスコンパイルしたい。(Bitcoin Core など)
WSL 2 + mingw-w64 (クロスコンパイル)
Windows とより密に連携できる GNU/Linux 互換環境がほしい。 WSL 1

個人的に Cygwin のことは好きですが、本当にマニアックなものだと思っていて、あまり期待しないほうが良いと思います。Cygwin 向けのパッチはよくテストしてから送りましょう。
Visual C++ でコンパイルできるならそれが一番楽です。make は nmake か Win32 ネイティブ版の GNU make を使いましょう。

うんちく

  • Cygwin は cygwin1.dll が頑張って Win32 上でエミュレーション、WSL はカーネルモード (サブシステム) でエミュレーション。
  • NT カーネルの構造が原因なのかしらんが、Cygwin (と MSYS, MSYS2) および WSL では fork を始めとした一部のシステムコールは非常に遅い。WSL 2 は本物の Linux カーネルを動かしてるのでそんなことは起きない。
  • MSYS, MSYS2, Cygwin の POSIX コアは Cygwin ベースであり、役割は同じ。(関数名とかファイルパス等は全く違う)
  • mintty は PuTTY ベースの端末エミュレータ。Cygwin 用のターミナルであるが、MSYS2 や WSL (wsltty) でも動作する。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment