Different software programs are designed for different
operating systems, and most won't work on systems that they
weren't designed for. Windows programs, for example, won't run
in Linux because they contain instructions that the system can't
understand until they're translated by the Windows environment.
Linux programs, likewise, won't run under the Windows operating
system because Windows is unable to interpret all of their
instructions.
This situation presents a fundamental problem for anyone who
wants to run software for both Windows and Linux. A common
solution to this problem is to install both operating systems on
the same computer, known as "dual booting." When a Windows
program is needed, the user boots the machine into Windows to
run it; when a Linux program is then needed, the user then
reboots the machine into Linux. This option presents great
difficulty: not only must the user endure the frustration of
frequent rebooting, but programs for both platforms can't be
run simultaneously. Having Windows on a system also creates
an added burden: the software is expensive, requires a separate
disk partition, and is unable to read most filesystem formats,
making the sharing of data between operating systems difficult.
Wine makes it possible to run Windows programs alongside any
Unix-like operating system, particularly Linux. At its heart,
Wine is an implementation of the Windows Application
Programing Interface (API) library, acting as a bridge between
the Windows program and Linux. Think of Wine as a compatibility
layer, when a Windows program tries to perform a function that
Linux doesn't normally understand, Wine will translate that
program's instruction into one supported by the system. For
example, if a program asks the system to create a Windows
pushbutton or text-edit field, Wine will convert that
instruction into its Linux equivalent in the form of a command
to the window manager using the standard X11 protocol.
If you have access to the Windows program's source code, Wine
can also be used to recompile a program into a format that Linux
can understand more easily. Wine is still needed to launch the
program in its recompiled form, however there are many advantages
to compiling a Windows program natively within Linux. For more
information, see the Winelib User Guide.
Throughout the course of its development, Wine has continually
grown in the features it carries and the programs it can run.
A partial list of these features follows:
Support for running Win32 (Win 95/98, NT/2000/XP), Win16
(Win 3.1) and DOS programs
Optional use of external vendor DLL files (such as those
included with Windows)
X11-based graphics display, allowing remote display to any
X terminal, as well as a text mode console
Desktop-in-a-box or mixable windows
DirectX support for games
Good support for various sound drivers including OSS and ALSA
Support for alternative input devices
Printing: PostScript interface driver (psdrv) to standard
Unix PostScript print services
Modem, serial device support
Winsock TCP/IP networking support
ASPI interface (SCSI) support for scanners, CD writers,
and other devices
Advanced unicode and foreign language support
Full-featured Wine debugger and configurable trace
logging messages for easier troubleshooting