Mingw-w64はMicrosoft Windows PEアプリケーションを制作・クロスコンパイルするためのフリーかつオープンソースなソフトウェア開発環境である。 2005–2010年にMinGW (Minimalist GNU for Windows)からフォークされた。

Mingw-w64にはGNUコンパイラコレクション (GCC)の移植、Windows用のGNU Binutils (アセンブラ、リンカ、アーカイブマネージャ)、自由に配布可能なWindows専用のヘッダファイルとWindows APIを利用可能にする静的リンクライブラリ、WindowsネイティブのGNUデバッガ、その他ユーティリティが含まれる。

Mingw-w64はMicrosoft Windowsプラットフォーム上でネイティブに、Linuxや他のUnix系システム上でクロスホストに、もしくはMSYS2またはCygwinにより「クロスネイティブ」に動作する。32ビットまたは64ビットのx86実行ファイルを生成できる。ターゲット名はそれぞれ`i686-w64-mingw32`と`x86_64-w64-mingw32`を使用する。

## 歴史

2005年 (2005)、MinGWプロジェクトが重要な新しいAPIや64ビットへの対応に向けた更新を行わないことに対し、OneVision Softwareによりクリーンルーム手法の原則に基づき作成された。2008年 (2008)にはオープンソースとして継続することを条件に、主任開発者の一人であるKai Tietzにコードが譲渡された。当初は元のMinGWプロジェクトに対して申し出ていたが、非公開もしくはプロプライエタリな情報が利用されている可能性があるとして拒否された。さまざまな理由により、Kai TietzはMinGWとの連携を諦めた。

MinGW-w64はWin32 APIをより完全に実装する。主な追加項目は以下のとおりである。

- C99の対応の改善
- POSIXスレッド (pthreads)に対応し、GCCのlibstdc++のC++11のスレッドに関する機能を有効にすることも可。
- GCC multilibにより、32ビットと64ビットのライブラリを並列にインストールすることが可能。
- Unicodeアプリケーションのエントリポイント (wmain/wWinMain)
- DDK (ReactOSより)
- DirectX (Wineより)
- Large-file support
- Win64
- Structured Exception Handling - x86-64においてDWARFやsjljの代替として、gcc 4.8以降より追加。
- その他の便利ツール - MinGWの`pexportsを改良したgendef`や、WineのMIDLコンパイラの`midl`など。

また、Mingw-w64プロジェクトでは`winpthreads`ライブラリも開発する。これは`pthreads-win32`に似たラッパーライブラリであるが、GCCでこれをスレッドライブラリとして利用することで、動作する`<thread>`、`<future>`、`<mutex>`などのC++11のスレッドライブラリを構築できるという特徴をもつ。

## MSYS2

MSYS2はMicrosoft Windows向けのソフトウェアの配布・構築環境である。Mingw-w64とCygwinを基盤として、Unix用に書かれたコードをWindowsで利用可能にする補助を行う。MinGWに対するMSYSに値する。

Unixのソフトウェア資産をWindowsマシンで利用可能にするプロジェクトは他にCygwinやWindows Subsystem for Linux (WSL)が挙げられる。WSLは仮想機械を通してELFバイナリを動作させる。CygwinはWindowsのDLLとしてPOSIX環境を構築し、EXEファイルにコンパイルされたアプリケーションはUnix環境にあるかのように動作する。

Cygwinが包括的な環境を提供するのに対し、MSYS2はあくまでWindows上での開発・展開プラットフォームを目標とする。

- 標準のMSYS2環境はパッケージ管理システムとUnixの標準的なシステムツール群を含む。これはCygwinの仮想環境から派生しており、似た働きをもつ。MSYS2自身を管理するときこれを通してでUnixのツール群を変更せずに使用できる。また、この仮想環境にビルドツールをインストールしてネイティブAPIではなくPOSIX互換レイヤーに依存するソフトウェアすることもできる。
- 上記のもの以外に4つの環境が提供されている。これらは32ビットまたは64ビットのWindowsネイティブのアプリケーションを構築するコンパイラ、ビルドツール、およびライブラリを含む。このうちネイティブな2つで構築されたプログラムは仮想化を全く行わないため、通常のネイティブアプリと同様に配布できる。
  - MINGW64とMINGW32 - gcc, msvcrt, libstdc++を使用する。他の環境の派生元でもある。
  - UCRT64 - MINGW64をucrtを使用するよう変更したもの。
  - CLANG64 - UCRT64をclangおよびlibc++を使用するよう変更したもの。

CygwinもMinGW-w64のコンパイラとライブラリを提供するが、利用可能なライブラリは少なく、プレフィックスもつけられていないため管理が複雑である。

標準のMSYS2環境にはArch Linuxのパッケージ管理システムであるPacmanやbashシェル、その他のUnixプラグラムが付随している。POSIX実装にはCygwinのcygwin1.dllより派生した20MBほどのランタイムライブラリmsys-2.0.dllを使用する。Cygwinの開発を追うように常に開発が進められている。ソフトウェア開発者がPacmanを使い管理し、各種ツールを実行する開発環境としての機能を期待されている。それに不要と判断された機能は削除されている。

Cygwinと同様に、MSYS2の環境から外部のプログラムを呼び出す際にはファイルパスの翻訳を行う。例えば、`notepad++ /c/Users/John/file.txt`と実行すると、Windowsのパス`C:\Users\John\file.txt`に変換してエディタを起動する。

MSYS2とそれに付随するbash環境はGitやGNU OctaveのWindows版に利用されている。

## コンパイラ

GCCが扱える言語のほとんどはMingw-w64による移植でも対応している (C, C++, Objective-C, Objective-C++, Fortran, Adaなど)。C++ならlibstdc++、Fortranならlibgfortranといった具合にGCCのランタイムライブラリが使用される。また、LLVMを使用するclangもMSYS2を通じて使用できる。ARM版のWindowsにも対応する (`aarch64-w64-mingw32`および`armv7-w64-mingw32`)。

Mingw-w64のGCCとVisual Studioなどといったように、異なるC++コンパイラで生成したバイナリ実行ファイルやDLLはABIや名前修飾の手法の違いにより、基本的にリンク互換でない。それに対して、C言語で書かれたプログラムはリンク互換である。また、 ClangはMSVCのC++ ABIをサポートしており、例外的に互換性をもつ。

Windows固有のフォーマットとそれを扱うためのツールに関してはBinutilsのユーザー文書に最新の情報がある。