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