On 6/21/19 6:03 PM, Dmitry Timoshkov wrote:
"Erich E. Hoover" erich.e.hoover@gmail.com wrote:
On Fri, Jun 21, 2019 at 6:41 AM Rosanne DiMesio dimesio@earthlink.net wrote:
... I'm not qualified to explain the technical issues, beyond saying Wine does it the same way as Windows (WoW64). I need help framing an answer in terms a typical Ubuntu user can understand that I can put in the FAQ and on the forum.
Well, part of the problem is that we don't implement WoW64 the exact same way Windows does. All the 32-bit Windows routines have thunks that transition to 64-bit code, call the 64-bit API equivalent, and then transition back to 32-bit code.
That's probably true only for low level things like ntdll, user32, gdi32 and ws2_32, but everything else that doesn't need to access kernel level OS functionality (like gdiplus/windowscodecs) don't need to perform the 32-bit to 64-bit transition.
Yeah it only applies to low level components. As a simple case, the syswow64 directory contains the (non-SxS) 32-bit libraries and its size is pretty large by itself, and so are the 32-bit libraries under winsxs. If it were just thunks it would be very small on Windows but that's not the case.
In theory, it's possible to thunk calls to external dependencies, but other than just a pretty severe performance loss, it will require a lot of work especially when it involves pointers. And callbacks from said libraries would be *really* problematic.