Wine On Android Is Coming For Running Windows Apps
phoronix.com
phoronix.com
I honestly don't see how there would be that much of a market. Any native Android implementation of a particular program will be much nicer to use than a Wine emulated program. Really the only use I have ever found for Wine and other emulation programs is for running Windows games on other platforms and usually the performance is too poor or unreliable except in the case of very old games.
IME this is out-of-date.. I run PES 2013 with wine. (I haven't tried many other games, but quite a few are compatible). I have to run it on one setting lower, other than that its almost identical to running it on windows, wine is impressive these days. I agree it would be quite limited with ARM, although there are x86 phones.
I've also had things which have worked fine under wine get an update, or I've updated something else on my system and then all of a sudden it completely breaks.
Wine isn't an emulator (it's in the name!), it's a compatibility layer.
>usually the performance is too poor or unreliable
Nonsense. Wine being a compatibility layer means that, while some apps are quite a bit slower, performance is generally good.
There is a lot of software, especially on a formerly hegemonic platform like Windows with a decades-long history, that will never get ported or functionally recreated.
Most of it deservedly so, but some some of it is going to be valuable enough to enough people that a compatibility system will be just the right thing because a reimplementation would take too long and/or cost too much.
This is far from universally true - in my experience it is actually slightly backwards. A few years ago I had to benchmark a Windows program against a Linux one I had written, and the Windows program ran slightly faster under WINE than under Windows. (This was mostly computational, without much use of Windows APIs, and no graphics in the timed sections.)
Running an x86 program directly on ARM is … impossible. So maybe WINE on ARM can serve to run WinRT applications… but none of the existing x86 Windows applications can run without x86 emulation, which would be absurdly slow on Android devices.
Edit: Another commenter says that the project wiki suggests using qemu to run the x86 code on ARM, and then trap calls into native (ARM) WINE libraries. This approach seems unlikely to yield good performance. I am concerned that different C and C++ calling conventions means some additional work will have to be done to cleanup function arguments at every call, which is just more overhead on top of x86 emulation…
That would be a trick: How do you buy RT apps when not on a Microsoft-approved device?
It's analogous (performance-wise) to writing gui apps in python - provided you're not trying to do any heavy lifting in the actual application code, it could work quite well.
Apple's Rosetta technology for running PowerPC code on Intel Macs actually worked this way, and the performance for most apps was really quite acceptable. That said, Rosetta had the advantage of moving from relatively slow CPUs to the fastest in the world. In the case of ARM / Android, you would be trying to run Windows apps on a slower CPU, so the results wouldn't be as good as Rosetta...
In short, unless you have specialized hardware for this (Transmeta!) it's going to be a massive undertaking.... so if you're confused by the host code produced by qemu, it's a lot harder to produce than you might think, although the primary reason is that producing better code often is not worth it because of the translation time. There may have been recent work to move some of the research in PL JIT over to translation, e.g. progressively translating better code the more it's run, but I haven't looked in a while.
Still architecture differences are significant, but in this case for what you really want to accomplish ARM is reasonably similar to i386.
There is already similar project about running x86 windows application on top of Windows RT:
http://forum.xda-developers.com/showthread.php?t=2095934
It will be interesting to compare.
"""Possible goals: run the assembler parts of x86 in qemu and call function in Wine compiled for ARM"""
P.S. knowing this dude's previous work (coLinux), he's pretty good :)
WINE is more likely to be glitchy & unreliable with many programs, will require special configuration in some cases and may not work at al in others. However since it doesn't have to emulate a computer (it basically re-implements parts of the Windows API) the performance is usually on a par or only slightly worse than native windows. You don't need a Windows license to run WINE however.