Разница между Cygwin и MinGW заключается в том, что инструменты Cygwin (и сгенерированные исполняемые файлы) полагаются на cygwin DLL, которая обеспечивает POSIX-подобный уровень для приложения.
MinGW - это нативные инструменты Win32 (в том смысле, что им не требуется наличие библиотеки Cygwin DLL), которые создают собственные исполняемые файлы Win32, которым не нужна библиотека Cygwin.
Я лично предпочитаю MinGW, но если вы собираетесь создавать программы с наследием Unix, набор инструментов Cygwin, скорее всего, поможет вам создать программу для работы в Windows больше, чем набор инструментов MinGW.
Я не уверен, каковы последствия лицензирования связи с Cygwin DLL (я забыл, если это GPL или LGPL).