I know that we can run windows (.exe) programs with the help of Wine.
I want to know how Wine works and runs .exe
programs on Ubuntu. As they're two different operating systems – Windows (closed source) and Ubuntu (Linux open-source) – and they work differently: Ubuntu is based on package management (e.g. apt,dpkg).
Why is Wine important and what does it mean by "Wine Is Not an Emulator"?
As I know it creates ~/.wine/drive_c/windows
etc. directories. Does it work similarly to Windows and USE the same files in windows/system32
as a real Windows platform?
I want to know the working and importance of it, because why it is projected (what is need/why it should allow to) to run Windows programs on Ubuntu? However it is not fully supporting all Windows software and graphics.
And what are parallel packages like 'Cross-Over' and 'Play on Linux'?
Best Answer
As says wikipedia: http://en.wikipedia.org/wiki/Wine_(software)
So, WINE is set of in-house developed libraries, one side of which (visible to programs) is the Windows API, and the other side (visible to linux kernel and linux libraries, like glibc and libX11) is POSIX, Linux and X11 API. Also, there is special loader of windows programs which can read EXE file, load it and all needed DLL libraries to the memory, connect everything with internal Wine libraries and system libraries and run it. There can be several helper programs inside WINE too.
Wine provides its own versions of various Window system DLLs. Wine also has the ability to load native Windows DLLs. Attempting to call into the Windows kernel directly is unsupported. If your Windows program makes calls that Linux can handle, then Wine passes them on to the Linux kernel. If the program wants to do something that Linux can't do, then Wine translates the call into something that Linux can deal with first.
Both OSs (Windows and Ubuntu) have different APIs (and ABIs (Application Binary Interface)). Windows has WinAPI, and Linux has POSIX API, with some additional Linux-specific APIs, graphics APIs (like X11) and with its own Linux ABI. Different APIs don't let you, for example, open the file, and read from it, if you are using wrong API. This difference is not about package management, but about interfacing between programs, libraries, and OS kernels.
An emulator should load program instructions, parse them, and imitate their actions. So, emulators of ARM are possible on x86 (Intel). For example, there is the great
qemu
(name decoded as "Quick EMUlator"), or an older x86 emulator written in C -bochs
. Emulators usually emulate an entire PC, starting from the BIOS, processors and HDDs, and they boot into the OS you install on this virtual PC.WINE is not an emulator because it doesn't interpret instructions of target binary or simulate processors. It just loads a program into memory and provides an API translation from WinAPI to the host's POSIX/Linux APIs (and Xlib for graphics and mouse, and some other API for sound, etc).
WINE was projected much before Ubuntu was created, the project was started in 1993 after Solaris's similar project "Wabi". It is useful to have the capability to start applications that are made to run on another OS, especially if this other OS is used widely, and has a lot of software (and games) created exclusively for it which can't be started directly from any other OS like Unix, Solaris or Linux.
WINE can't have the exact implementation of all WinAPI (some parts of it are undocumented) and all needed libraries. Some Windows programs are using APIs or libraries which are not implemented, so they can't work with WINE.
Crossover is commercial variant of WINE with better support, some helper GUI tools (to easy install some software) and verified compatibility list of working windows programs and games. Usually you should pay some (40 US$) money to CodeWeavers, developers of CrossOver, in order to use the package for long time and have support. CodeWeavers (small company) supports wine project, by resending all patches to it, and by paying to several wine developers. According to wikipedia: