MSYS2 is based on a fork of recent Cygwin, just like MSYS is a fork of ancient Cygwin.
The idea behin MSYS was to create a stripped down Cygwin that doesn't provide a complete Unix or Linux-like environment on Windows, but provides only a toolchain: compilers and some common tools for building programs. That toolchain cross-compiles programs to Windows, using the system library MSVCRT.DLL as their run-time. That toolchain, supported by the MSYS run-time, is called "MinGW". MinGW-copmiled programs are not MSYS programs. MSYS is not so easy to extend.
The MinGW toolchain (or rather just its compilers) are available under Cygwin as a package. If you want to build MinGW programs, Cygwin with the MinGW package is a way better way to go: you can easily use any build tool that you need. Adding new utilities to Cygwin is easier than extending MSYS. You have the host environment there with the host compiler. Does your MinGW program need Ninja or CMAKE? or AntLR? Just build them and use them.
MSYS2 is basically more of the same as MSYS, just forking from a newer Cygwin. The cross-toolchain is now called MinGW-Win64 or something. Programs built with this now don't just link to MSVCRT.DLL; there is now some run-time library material, like a package of POSIX threads and whatnot.
MinGW and MinGW64 are not very good systems if your software requires a significant POSIX layer. I couldn't port the TXR Language to Windows using either of these. The Cygnal project is much smarter for this requirement area: about twenty or so well-targeted patches to the Cygwin DLL to bring about more Windows-y behaviors where Cygwin goes overboard with the POSIX simulation.
For instance, one thing that my program needs from the environment is a working POSIX termios: #include <termios.h>, tcsettattr/tcgetattr and so on. Plus working ANSI/VT100 escape sequences.
All that stuff ports to Windows with Cygwin/Cygnal.
The fact that "termios" isn't a "native" component in Windows is a completely immaterial, emotional argument. A Python list comprehension isn't native Windows either, and neither is a C++ std::map.
If my program relies on "termios", then a run-time which provides a faithful rendition of it is more convenient than one where I have to port all that console handling code to use the Win32 Console API.