MinGW ("Minimalist GNU for Windows"), formerly mingw32, is a
free and open source
Free and open-source software (FOSS) is a term used to refer to groups of software consisting of both free software and open-source software where anyone is freely licensed to use, copy, study, and change the software in any way, and the source ...
software development
Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components. Software development inv ...
environment to create
Microsoft Windows applications.
MinGW includes a
port
A port is a maritime facility comprising one or more wharves or loading areas, where ships load and discharge cargo and passengers. Although usually situated on a sea coast or estuary, ports can also be found far inland, such as ...
of the
GNU Compiler Collection
The GNU Compiler Collection (GCC) is an optimizing compiler produced by the GNU Project supporting various programming languages, hardware architectures and operating systems. The Free Software Foundation (FSF) distributes GCC as free sof ...
(GCC),
GNU Binutils for Windows (
assembler,
linker
Linker or linkers may refer to:
Computing
* Linker (computing), a computer program that takes one or more object files generated by a compiler or generated by an assembler and links them with libraries, generating an executable program or shar ...
,
archive manager
Archive Manager (previously File Roller) is the file archiver of the GNOME desktop environment.
Archive Manager can:
* Create and modify archives
* View the content of an archive
* View a file contained in the archive
* Extract files from the a ...
), a set of freely distributable Windows specific
header file
Many programming languages and other computer files have a directive, often called include (sometimes copy or import), that causes the contents of the specified file to be inserted into the original file. These included files are called copybooks ...
s and
static import libraries which enable the use of the
Windows API
The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces (APIs) available in the Microsoft Windows operating systems. The name Windows API collectively refers to several different platform implementations ...
, a Windows native build of the
GNU Project
The GNU Project () is a free software, mass collaboration project announced by Richard Stallman on September 27, 1983. Its goal is to give computer users freedom and control in their use of their computers and Computer hardware, computing devi ...
's
GNU Debugger
The GNU Debugger (GDB) is a portable debugger that runs on many Unix-like systems and works for many programming languages, including Ada, C, C++, Objective-C, Free Pascal, Fortran, Go, and partially others.
History
GDB was first writte ...
, and miscellaneous utilities.
MinGW does not rely on
third-party C runtime dynamic-link library
Dynamic-link library (DLL) is Microsoft's implementation of the shared library concept in the Microsoft Windows and OS/2 operating systems. These libraries usually have the file extension DLL, OCX (for libraries containing ActiveX controls) ...
(DLL) files, and because the runtime libraries are not distributed using the
GNU General Public License
The GNU General Public License (GNU GPL or simply GPL) is a series of widely used free software licenses that guarantee end user
In product development, an end user (sometimes end-user) is a person who ultimately uses or is intended to ulti ...
(GPL), it is not necessary to distribute the
source code
In computing, source code, or simply code, is any collection of code, with or without comment (computer programming), comments, written using a human-readable programming language, usually as plain text. The source code of a Computer program, p ...
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
Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which i ...
(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
SourceForge is a web service that offers software consumers a centralized online location to control and manage open-source software projects and research business software. It provides source code repository hosting, bug tracking, mirrori ...
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
The Bourne shell (sh) is a shell command-line interpreter for computer operating systems.
The Bourne shell was the default shell for Version 7 Unix. Unix-like systems continue to have /bin/sh—which will be the Bourne shell, or a symbolic link ...
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
Unix (; trademarked as UNIX) is a family of multitasking, multiuser computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
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 is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. Originally developed by Brad Cox and Tom Love in the early 1980s, it was selected by NeXT for its N ...
,
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
The printf format string is a control parameter used by a class of functions in the input/output libraries of C and many other programming languages. The string is written in a simple template language: characters are usually copied liter ...
-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
The GNU toolchain is a broad collection of programming tools produced by the GNU Project. These tools form a toolchain (a suite of tools used in a serial manner) used for developing software applications and operating systems.
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
.lib
and
.dll
conventions, as well as static libraries following the
lib.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
The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines both the system- and user-level application programming inte ...
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
The Bourne shell (sh) is a shell command-line interpreter for computer operating systems.
The Bourne shell was the default shell for Version 7 Unix. Unix-like systems continue to have /bin/sh—which will be the Bourne shell, or a symbolic link ...
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
A permissive software license, sometimes also called BSD-like or BSD-style license, is a free-software license which instead of copyleft protections, carries only minimal restrictions on how the software can be used, modified, and redistributed, ...
,
while the GNU ports are provided under the
GNU General Public License
The GNU General Public License (GNU GPL or simply GPL) is a series of widely used free software licenses that guarantee end user
In product development, an end user (sometimes end-user) is a person who ultimately uses or is intended to ulti ...
. 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
The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines both the system- and user-level application programming inte ...
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
The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines both the system- and user-level application programming inte ...
APIs which cannot easily be implemented using the Windows API, such as
fork()
,
mmap()
and
ioctl()
.
Applications written using a
cross-platform
In computing, cross-platform software (also called multi-platform software, platform-agnostic software, or platform-independent software) is computer software that is designed to work in several computing platforms. Some cross-platform software ...
library that has itself been ported to MinGW, such as
SDL,
wxWidgets
wxWidgets (formerly wxWindows) is a widget toolkit and tools library for creating graphical user interfaces (GUIs) for cross-platform applications. wxWidgets enables a program's GUI code to compile and run on several computer platforms with min ...
,
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
copyleft
Copyleft is the legal technique of granting certain freedoms over copies of copyrighted works with the requirement that the same rights be preserved in derivative works. In this sense, ''freedoms'' refers to the use of the work for any purpose, ...
ed 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
Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for serv ...
*
Mingw-w64
References
External links
Official MinGW websiteOfficial software repository in OSDN
nuwen 64-bit MinGW distro- maintained by
MXE- Makefiles to build MinGW on Unix and many common dependencies libraries, pre-built packages available
{{Unix-Windows interoperability
1998 software
C (programming language) compilers
C++ compilers
Cross-compilers
Fortran compilers
Free compilers and interpreters
Public-domain software