torok said:
Wine isn't an emulator. Even Wine means "Wine is not an emulator". An emulator must reproduce the software or hardware environment precisely. Virtualization isn't emulation too, because the hardware isn't simulated (a lot of physical hardware is passed through directly and shared. That's why virtualization today can reach sometimes 80% or more of the performance of a native OS).
Wine is translating because what it does is translate one language to another. He gets the instructions for a Windows software and converts in real time to calls for Linux equivalent operations, like translating the calls to draw a button in Windows to equivalent calls to X.Org on Linux. It isn't emulating a Windows environment, it's simply translating Assembly code in real time.
Emulation demands that you simulate other hardwares using software. Emulation never can come any close to the original in performance, demanding a much more powerful hardware. Hardware implementation is much faster than software and they can't change it. Anything that gives an almost 1:1 performance, like virtualization, isn't emulation.
|
WinE originally meant Windows Emulator.
What you're calling translation isn't translation. Translation is taking C++ and converting it into C# or VB#. Windows calls aren't a language. Nor are Linux calls.
Every computer language is meaningless to a computer other than binary. From Assembly on up to Javascript is simply a computer coding language intended to make programming easier for programmers. If I open a file in Basic, C++, or Perl, I'm issuing essentially the same commands in Binary. I'm just using an easier language to do so. Where as it may take 3,000 lines of code to open a file in binary, it may only take four in VB or two in C.
So when an application makes a call to the OS to open a file, such as Word may do in Windows, the programmer makes a reference to a C Lib to open the file and pass it onto the application, where then the application does more with it. That call to the OS that the application makes is the same in Windows as it is on Linux. Now to save a file, the OS may do something different. Maybe when the file is saved the application gives the user the ability to associate a unique icon with the file (as Word does), this may require a call to another file. In order for WinE to emulate that or handle that call gracefully, they would need to emulate that call OR gracefully error out.
While WinE doesn't have access to original source code to understand every hook and relied upon reverse engineering to identify the calls to the OS that applications were making, it is still an emulator. What you're calling translation is actually what happens when you emulate a system. You take a call that an application makes, then you emulate that call on a facimile of it. Most of the time people are emulating (virtualizing) the hardware in software, WinE is simply emulating a portion of an OS functionality.
Where WinE differs from a true emulator is that it doesn't emulate the entirety of Windows or even the hardware. It is an application layer that emulates Windows calls. Much in the same way that Windows NT itself could run POSIX and OS/2 applications, or OS/2 could run Windows 3.1 applications. They're application layers that emulate a different OS.
I would encourage you to educate yourself. Emulation is a subset of virtualization. They are almost synonmous.