MinGW ("Minimalist GNU for Windows"), formerly mingw32, is a free and open source software development environment to create Microsoft Windows applications. 

MinGW includes a port of the GNU Compiler Collection (GCC), GNU Binutils for Windows (assembler, linker, archive manager), a set of freely distributable Windows specific header files and static import libraries which enable the use of the Windows API, a Windows native build of the GNU Project's GNU Debugger, and miscellaneous utilities.

MinGW does not rely on third-party C runtime dynamic-link library (DLL) files, and because the runtime libraries are not distributed using the GNU General Public License (GPL), it is not necessary to distribute the source code with the programs produced, unless a GPL library is used elsewhere in the program.

MinGW can be run either on the native Microsoft Windows platform, cross-hosted on Linux (or other Unix), or "cross-native" on Cygwin. Although programs produced under MinGW are 32-bit executables, they can be used both in 32 and 64-bit versions of Windows.

The development of the MinGW project has been forked with the creation in 2005–2008 of an alternative project called Mingw-w64.

History
MinGW was originally called mingw32 ("Minimalist GNU for W32"), following the GNU convention whereby Windows is shortened as "W32". The numbers were dropped in order to avoid the implication that it would be limited to producing 32-bit binaries. Colin Peters authored the initial release in 1998, consisting only of a Cygwin port of GCC. Jan-Jaap van der Heijden created a Windows-native port of GCC and added binutils and make. Mumit Khan later took over development, adding more Windows-specific features to the package, including the Windows system headers by Anders Norlander. In 2000, the project was moved to SourceForge in order to solicit more assistance from the community and centralize its development.

MinGW was selected as Project of the Month at SourceForge for September 2005.

MSYS (a contraction of "Minimal System") was introduced as a Bourne shell command line interpreter system with the aim of better interoperability with native Windows software.

In 2018, following a disagreement with SourceForge about the administration of its mailing lists, MinGW migrated to OSDN.

Fork 

In 2007, a fork of the original MinGW called Mingw-w64 appeared in order to provide support for 64 bits and new APIs. It has since then gained widespread use and distribution. MSYS2 ("minimal system 2") is a software distribution and a development platform for Microsoft Windows, based on Mingw-w64 and Cygwin, that helps to deploy code from the Unix world on Windows.

Programming language support
Most languages supported by GCC are supported on the MinGW port as well. These include C, C++, Objective-C, Objective-C++, Fortran, and Ada. The GCC runtime libraries are used (libstdc++ for C++, libgfortran for Fortran, etc.).

MinGW links by default to the Windows OS component library MSVCRT, which is the C library that Visual C++ version 6.0 linked to (the initial target was CRTDLL), which was released in 1998 and therefore does not include support for C99 features, or even all of C89. While targeting MSVCRT yields programs that require no additional runtime redistributables to be installed, the lack of support for C99 has caused porting problems, particularly where printf-style conversion specifiers are concerned. These issues have been partially mitigated by the implementation of a C99 compatibility library, libmingwex, but the extensive work required is far from complete and may never be fully realized. Mingw-w64 has resolved these issues, and provides fully POSIX compliant printf functionality.

Link compatibility
Binaries (executables or DLLs) generated with different C++ compilers (like MinGW and Visual Studio) are in general not link compatible. However, compiled C code is link compatible.

Components
The MinGW project maintains and distributes a number of different core components and supplementary packages, including various ports of the GNU toolchain, such as GCC and binutils, translated into equivalent packages. These utilities can be used from the Windows command line or integrated into an IDE. Packages may be installed using the command line via mingw-get.

MinGW supports dynamic libraries named according to the <name>.lib and <name>.dll conventions, as well as static libraries following the lib<name>.a naming convention common on Unix and Unix-like systems.

In addition, a component of MinGW known as MSYS (minimal system) provides Windows ports of a lightweight Unix-like shell environment including rxvt and a selection of POSIX tools sufficient to enable autoconf scripts to run, but it does not provide a C compiler or a case-sensitive file system.

mingwPORTs are user contributed additions to the MinGW software collection. Rather than providing these "add-ons" as precompiled binary packages, they are supplied in the form of interactive Bourne shell scripts, which guide the end user through the process of automatically downloading and patching original source code, then building and installing it. Users who wish to build any application from a mingwPORT must first install both MinGW and MSYS.

The implementation of Windows system headers and static import libraries are released under a permissive license, while the GNU ports are provided under the GNU General Public License. Binary downloads of both the complete MSYS package and individual MinGW GNU utilities are available from the MinGW site.

Comparison with Cygwin
Although both Cygwin and MinGW can be used to port Unix software to Windows, they have different approaches: Cygwin aims to provide a complete POSIX layer comprising a full implementation of all major Unix system calls and libraries. Compatibility is considered a higher priority than performance. On the other hand, MinGW's priorities are simplicity and performance. As such, it does not provide certain POSIX APIs which cannot easily be implemented using the Windows API, such as fork(), mmap() and ioctl(). Applications written using a cross-platform library that has itself been ported to MinGW, such as SDL, wxWidgets, Qt, or GTK, will usually compile as easily in MinGW as they would in Cygwin.

Windows programs written with Cygwin run on top of a copylefted compatibility DLL that must be distributed with the program, unless staticly linked. If dynamically linked, the program must also provide information on where to obtain Cygwin source. MinGW does not require a compatibility layer, since MinGW-based programs are compiled with direct calls to Windows APIs.

The combination of MinGW and MSYS provides a small, self-contained environment that can be loaded onto removable media without leaving entries in the registry or files on the computer.

It is also possible to cross-compile Windows applications with MinGW-GCC under POSIX systems. This means that developers do not need a Windows installation with MSYS to compile software that will run on Windows with or without Cygwin.

See also 
Cygwin
Windows Subsystem for Linux
Mingw-w64

References

External links
 Official MinGW website
 Official software repository in  OSDN
 nuwen 64-bit MinGW distro - maintained by a Microsoft employee
 MXE - Makefiles to build MinGW on Unix and many common dependencies libraries, pre-built packages available

1998 software
C (programming language) compilers
C++ compilers
Cross-compilers
Fortran compilers
Free compilers and interpreters
Public-domain software
MinGW(과거 이름: mingw32)는 마이크로소프트 윈도우로 포팅한 GNU 소프트웨어 도구 모음이다.

MinGW는 윈도우 API를 구현할 수 있는 헤더 파일들을 가지고 있으며 이로써 개발자들이 "자유롭게 쓸 수 있는" 컴파일러인 GCC를 사용할 수 있다. 시그윈 포팅을 사용할 경우 컴파일한 프로그램 결과물이 유닉스 계통의 기능을 가상으로 구현하는 런타임에 의존하는 반면, MinGW의 경우 이러한 기능에 의존하지 않고 마이크로소프트 윈도우 기반 프로그램들을 만들 수 있다.

이 MinGW 프로젝트는 두 개의 기본 꾸러미를 관리하고 배포한다. 첫째로는 포팅된 GCC 컴파일러들은 윈도 명령 줄에서, 아니면 IDE에 통합된 채로 쓸 수 있다. 아니면 둘째로는 MSYS(minimal system의 약자)를 쓸 수도 있는데, 이것은 가벼운 유닉스 계통의 셸 환경을 제공한다. 이러한 환경은 rxvt와 autoconf 스크립트들을 실행하는 데에 충분한 POSIX 도구들이 집약되어 있다.

두 개의 꾸러미들은 원래 시그윈 일부의 forks였으며 forks는 네이티브 윈도 기능 덕에 더 포괄적인 유닉스 계통의 지원을 제공한다. 두 개의 꾸러미들은 자유 소프트웨어이다. Win32 헤더 파일들은 공용 도메인에 공개된다. 반면 GNU에서 포팅되는 프로그램들은 GNU 일반 공중 사용 허가서 하에서 사용할 수 있다. 완전한 MSYS 꾸러미와 개별 MinGW GNU 유틸리티들의 바이너리 파일들은 MinGW 사이트에서 내려 받을 수 있다.

역사 
MinGW의 원래 이름은 mingw32 (Minimalist GNU for W32)이다. 32비트 바이너리를 만드는 것으로 제한되는 것으로 생각될 수 있었기에 이를 피하고자 숫자 32는 제거되었다. 콜린 피터스는 1998년 초판을 만들었고, 당시 GCC의 시그윈 포팅만으로 이루어져 있었다. Jan-Jaap van der Heijden는 GCC의 윈도우 네이티브 이식판을 만들었고 Binutils과 Make를 추가하였다. Mumit Khan은 나중에 Anders Norlander의 윈도우 시스템 헤더들을 포함하여, 윈도우 특화 기능들을 패키지에 더 추가하였다. 2000년에 이 프로젝트는 소스포지로 이동되어 커뮤니티의 도움을 받아 개발에 집중하고 있다.

MinGW는 2005년 9월 소스포지의 "이 달의 프로젝트"에 선정되었다.

2013년 마지막 분기에, 새로운 프로젝트가 시작되었는데, 그 이름은 MSYS2로, 32비트와 64비트 MinGW 패키지가 함께 포함되었다.

이름 붙이기 
MinGW라는 이름은 Minimalist GNU for Windows의 줄임말이다. MinGW는 Mingw32라고 말할 수도 있는데 Win32 API용 헤더를 제공하기 때문이다.

MinGW를 발음하는 데에 정해진 기준은 없다. 흔히 "밍 위", "민기 더블유", "밍 더블유", 아니면 "민 그누"라고 발음한다. 간혹 발음 상의 편의성을 위해 "민지"로 발음하는 부류도 있다.

기능 
MinGW와 MSYS의 결합은 작고 알찬 환경을 제공한다. 이로써 컴퓨터의 레지스트리나 파일의 항목을 남겨두지 않은 채 이동식 미디어로 불러들일 수 있다. 시그윈은 설치와 관리 면에서 더욱 복잡하다.

MinGW에서 응용 프로그램들을 크로스 컴파일할 수 있다. 시그윈 없이 윈도에서 돌아갈 소프트웨어를 컴파일하기 위해 개발자들이 MSYS의 윈도 설치판을 필요로 하지 않는다는 것을 말해 준다. 현재는 한때 지원하지 못하였던 윈도우 비스타와 윈도우 7과 완전히 호환된다.

시그윈과의 비교 
MinGW는 1.3.3의 시그윈에서 분리된 버전이다. 시그윈과 MinGW 둘 다 유닉스 소프트웨어에서 마이크로소프트 윈도우로 포팅되긴 했으나 그 둘의 목표는 다르다.

시그윈은 완전한 POSIX 레이어를 윈도 상에서 제공하는 데 초점을 두고 호환성이 필요한 곳에는 성능을 포기한다. 반면 MinGW는 자유 컴파일러와 도구 모음을 제공하는 데 힘을 쏟지만 성능을 우선한다.

시그윈과 달리, MinGW는 호환성 레이어 DLL을 요구하지 않으며, 그에 따른 런타임은 허가 라이선스 하에서 주어진다. MinGW가 POSIX API를 제공하지 않기 때문에, 시그윈으로 컴파일할 수 있는 유닉스 응용 프로그램들을 컴파일할 수 없다. 구체적으로 말해, 특정한 POSIX 기능을 요구하는 응용 프로그램들과 POSIX 환경에서 실행될 것으로 예정된 프로그램들을 말한다. SDL, wxWidgets, Qt, 또는 GTK+와 같은, 여러 플랫폼을 지원하는 라이브러리들을 사용하여 짜여진 응용 프로그램들은 보통 시그윈에서 하던 것처럼 MinGW 안에서 쉽게 컴파일할 수 있다.

빌드 
밍위(MinGW)는 크로스 플랫폼(cross platform) 응용 소프트웨어의 소스 코드 파일을 실행 코드로 변환하는 컴파일 과정을 포함하는 빌드(build) 환경을 제공하는데 주요한 설정 기반이다. 이러한 목적을 달성하는 파이썬, wget등은 온오프라인에서 주요한 위치를 차지한다.

같이 보기 
 시그윈
 유닉스

참조

외부 링크 
 (mingw.org의 공식 웹사이트) http://osdn.net/projects/mingw/
 

1998년 소프트웨어
C 컴파일러
C++ 컴파일러
포트란 컴파일러
크로스 컴파일러
자유 컴파일러와 인터프리터
퍼블릭 도메인 소프트웨어