"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.
Our 32-bit libraries call the 32-bit Linux equivalents, since this is massively easier and "just works". I vaguely remember a conversation a number of years ago where someone talked about doing similar thunking to Windows and there was concern that it is too hard to get this thunking correct for every API call, but I don't remember the details as to why that's the case.
win16 is very small in comparison with win32, so it was relatively easy to implement it on top of 32-bit code, it's practically impossible to do the same thing to implement 32-bit on top of 64-bit.