== Summary == Starting from mingw-w64 version 12 and onwards, UCRT (Universal C Runtime) will be the default CRT runtime, unless specified otherwise during the minwgw-64 build process. We believe that this configuration is the best choice for the majority of users. While we encourage users to consider switching to UCRT, we understand that it may not always be desirable, especially for compatibility reasons. Therefore, all previously supported configurations will continue to be supported. Users who wish to continue using msvcrt.dll can easily do so by adding the --with-default-msvcrt=msvcrt argument to both the mingw-w64-headers and mingw-w64-crt configure scripts. == Background == mingw-w64 provides C runtime libraries that directly or indirectly utilize Microsoft DLLs at runtime. Over the years, Microsoft has released various versions of these DLLs, some of which were designed for specific MSVC versions while others aimed for backward compatibility. When building the mingw-w64 toolchain, users can specify a version of the runtime DLL using the --with-default-msvcrt= configure option. The most commonly used versions are ucrt (utilizing ucrtbase.dll) and msvcrt (utilizing msvcrt.dll). The implementation of msvcrt.dll dates back to the Windows 9x era. While it has been extended for a period, it eventually became frozen in favor of providing separate DLLs for future MSVC versions. Although msvcrt.dll continues to be shipped with modern Windows versions, it remains compatible with the version from the 1990s. msvcrt.dll is known to deviate from standard behavior in many aspects. mingw-w64 includes compatibility wrappers and extensions to improve standard compatibility, but there are limitations to what can be practically achieved. On the other hand, ucrtbase.dll was introduced with MSVC 14 and is currently included with all Windows versions supported by Microsoft. It is also available as a redistributable package for older versions of Windows. ucrtbase.dll aims to replace MSVC version-specific DLLs and has been used by all MSVC versions since its introduction. It offers a more modern approach compared to msvcrt.dll and provides better standard compatibility out of the box, reducing overhead on the mingw-w64 side. == Compatibility == When switching between toolchains that use different runtime libraries, it is generally advised not to mix static libraries, unless certain exceptions apply. If in doubt, it is recommended to rebuild all static libraries when switching the toolchain's runtime DLL. Dynamic libraries are less likely to be affected. If the CRT is not part of the ABI of a library you intend to use, meaning it does not involve passing FILE structs or similar types between modules or depending on the CRT allocator of other modules, it should remain unaffected. Otherwise, a compatible build of that library will be required. == See Also == "MSVCRT vs UCRT": https://www.msys2.org/docs/environments/