名称 | 役割 | 説明 |
---|---|---|
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) でも動作する。