this post was submitted on 27 Oct 2023
30 points (94.1% liked)

Android

17653 readers
204 users here now

The new home of /r/Android on Lemmy and the Fediverse!

Android news, reviews, tips, and discussions about rooting, tutorials, and apps.

🔗Universal Link: [email protected]


💡Content Philosophy:

Content which benefits the community (news, rumours, and discussions) is generally allowed and is valued over content which benefits only the individual (technical questions, help buying/selling, rants, self-promotion, etc.) which will be removed if it's in violation of the rules.


Support, technical, or app related questions belong in: [email protected]

For fresh communities, lemmy apps, and instance updates: [email protected]

💬Matrix Chat

💬Telegram channels / chats

📰Our communities below


Rules

  1. Stay on topic: All posts should be related to the Android OS or ecosystem.

  2. No support questions, recommendation requests, rants, or bug reports: Posts must benefit the community rather than the individual. Please post to [email protected].

  3. Describe images/videos, no memes: Please include a text description when sharing images or videos. Post memes to [email protected].

  4. No self-promotion spam: Active community members can post their apps if they answer any questions in the comments. Please do not post links to your own website, YouTube, blog content, or communities.

  5. No reposts or rehosted content: Share only the original source of an article, unless it's not available in English or requires logging in (like Twitter). Avoid reposting the same topic from other sources.

  6. No editorializing titles: You can add the author or website's name if helpful, but keep article titles unchanged.

  7. No piracy or unverified APKs: Do not share links or direct people to pirated content or unverified APKs, which may contain malicious code.

  8. No unauthorized polls, bots, or giveaways: Do not create polls, use bots, or organize giveaways without first contacting mods for approval.

  9. No offensive or low-effort content: Don't post offensive or unhelpful content. Keep it civil and friendly!

  10. No affiliate links: Posting affiliate links is not allowed.

Quick Links

Our Communities

Lemmy App List

Chat and More


founded 1 year ago
MODERATORS
top 4 comments
sorted by: hot top controversial new old
[–] [email protected] 5 points 1 year ago (1 children)
[–] [email protected] 7 points 1 year ago* (last edited 1 year ago) (1 children)

Fascinating question you've asked! The answer is quite complicated. Skip to the end of my post for TLDR.

First, let's review the purpose of WoW64. This is a compatibility layer that enables 32-bit applications to work with a 64-bit Windows installation. More concretely, it appears to enable applications that are compiled for the binary x86 architecture to work with with Windows operating system that is compiled for x64. Interfaces to the operating system have changed, so a translation layer is needed to talk to 64-bit Windows.

Please note that I'm talking about the common case and ignoring the implementation of WoW64 on Itanium because this version of WoW64 never saw wide consumer adoption. For our purposes I'm considering specifically the x86/64 variants only and pretending Itanium never existed like Intel would like us to believe today to keep the explanation simple.

There's a temptation to think that this is the same problem as running 32-bit ARM on 64-bit hardware. It's similar in the sense that you are trying to run in 64-bit mode, but if you examine the differences between x86 and x64 and then compare something like Armv7-A (32-bit) and Armv9 (64-bit) on these upcoming chips, you'll notice an extremely important difference between their Intel counterparts.

These 64-bit chips can't decode the 32-bit instructions! You cannot feed the instruction stream to this hardware. It doesn't look like anything it knows how to execute. It's so different that it's completely unreadable.

With Intel or Amd, you can simply directly execute 32-bit binary code on the 64-bit CPU (and 16-bit too!) and fix up interactions with other binaries. In the ARM version of the problem, the CPU can't understand the instruction stream at all. You can't just set it back to 32-bit mode and translate system calls. You're going to have to rewrite it.

WoW64 is like someone from New York learning to talk to an American with a deep southern accent. New Armv9 chips trying to execute 32-bit code is like an American learning German. I'd argue they're not even the same language. This kind of binary translation is significantly more challenging because your new CPU cannot understand the 32-bit instructions whereas your 64-bit Intel chip still has the hardware to understand the legacy instructions.

[–] [email protected] 1 points 1 year ago

Didn't expect to get such a detailed answer but wow that's informative, thanks.

[–] [email protected] 2 points 1 year ago

Hopefully other manufacturers will have something like this implemented as well