Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Wowfunhappy

macrumors 68000
Original poster
Mar 12, 2019
1,809
2,108
During their 2020 WWDC keynote, Apple announced the reintroduction of Universal Binaries, for developers to create apps that work on both Intel and Arm Macs during the transition.

But Universal Binaries never really went away the first time! You can run PPC-Intel apps on Mojave, and I assume also Catalina. Also, many Intel-only apps are still "universal," in that they contain versions for both i386 (32bit Intel) and x86_64 (64bit Intel).

Thus, I am intensely curious: would it be possible for a developer to create a single universal binary that works natively on all four architectures: PPC, i386, x86_64, and ARM?
 
Last edited:
One of the first things I want to try on an ARM Mac is Rollercoaster Tycoon 3: Platinum. A game that was originally released for PowerPC, then updated with universal binary support, then updated with 64-bit Intel support. So I’m very curious to see if it runs smoothly on ARM. One timeless game that has supported PPC, 32bit Intel, 64bit Intel, and now potentially ARM over a time span of 15 years.
 
One of the first things I want to try on an ARM Mac is Rollercoaster Tycoon 3: Platinum. A game that was originally released for PowerPC, then updated with universal binary support, then updated with 64-bit Intel support. So I’m very curious to see if it runs smoothly on ARM. One timeless game that has supported PPC, 32bit Intel, 64bit Intel, and now potentially ARM over a time span of 15 years.
Office'08 would be another candidate to check. (I'm using starting with Tiger/Leopard on PPC up to MojavePatch)
 
While I'll also be interested to see old apps working in general, what I really want to know is if an app could work on both PPC and Arm (and Intel) without Rosetta. That means Roller Coaster Tycoon is out, barring a minor miracle at least.
 
While I'll also be interested to see old apps working in general, what I really want to know is if an app could work on both PPC and Arm (and Intel) without Rosetta.
Well, no PPC/x86 UB would be coded with ARM code too, and no ARM/x86 UB (whatever they will call these binaries) will have PPC code in them. So likely there will need to be a translation layer like Rosetta somewhere.
 
  • Like
Reactions: Gamer9430
Well, no PPC/x86 UB would be coded with ARM code too, and no ARM/x86 UB (whatever they will call these binaries) will have PPC code in them. So likely there will need to be a translation layer like Rosetta somewhere.
But is there a reason you can't create an ARM/x86/PPC binary?
 
But is there a reason you can't create an ARM/x86/PPC binary?
I don't believe there's anything stopping you except for maybe the fact that the app would have to be 32 bit and 64 bit at the same time, but if you wanted to support all three architectures it would be likely more efficent to have three separate apps. :p
 
  • Like
Reactions: lepidotós
I don't believe there's anything stopping you except for maybe the fact that the app would have to be 32 bit and 64 bit at the same time.

Oh, but that part is easy! As I alluded to above, a lot of Intel-only apps are actually still universal binaries, with code for both i386 and x86_64. They use the exact same multi-arch system that's used to support PPC and i386.

I just want to know if it can be done or not. Because it would be cool.
 
Last edited:
  • Like
Reactions: lepidotós
I don't believe there's anything stopping you except for maybe the fact that the app would have to be 32 bit and 64 bit at the same time, but if you wanted to support all three architectures it would be likely more efficent to have three separate apps. :p

This is easy to do. CFLAGS=-arch i386 -arch x86_64
 
  • Like
Reactions: lepidotós
Oh, but that part is easy! As I alluded to above, a lot of Intel-only apps are actually still universal binaries with code for both x86-32 and x86-64. They use the exact same multi-arch system that's used to support PPC-x86-32.

I just want to know if it can be done or not. Because it would be cool.
That's fair, it would be pretty neat :p

This is easy to do. CFLAGS=-arch i386 -arch x86_64
Oh, okie! cool :3
 
  • Like
Reactions: lepidotós
That's fair, it would be pretty neat :p


Oh, okie! cool :3

To answer the original question, If you compile for arch ppc, ppc64, i386, and x86_64 using CFLAGS or Xcode settings it should work for 10.5-10.11.

Without serious hacking I don’t think a native arm-ppc-ppc64-i386-x86_64 binary could happen, at least not with current Xcode for sure.
 
Last edited:
  • Like
Reactions: RogerWilco6502
To answer the original question, If you compile for arch ppc, ppc64, i386, and x86_64 using CFLAGS or Xcode settings it should work for 10.5-10.11.

Without serious hacking I don’t think a native arm-ppc-ppc64-i386-x86_64 binary could happen, at least not with current Xcode for sure.
That would be a sght to behold for sure. Maybe a port of ffmpeg or something so it could be ensured to take full advantage of each processor? Just looking for practical uses. :3
 
That would be a sght to behold for sure. Maybe a port of ffmpeg or something so it could be ensured to take full advantage of each processor? Just looking for practical uses. :3


I’ve gotten the latest FFMPEG compiled for Mac OS X 10.3.9 G3, G4, and G5 natively (The one in PPCMC) so I don’t doubt it.

If anyone wants to test some binaries that would theoretically work on everything discussed let me know I’ll throw something together with good old Xcode 3 on PPC Leopard.
 
Last edited:
You could presumably make the ppc binary with an earlier Xcode and then use lipo to bundle it up with the newer ones.

Does that work in practice however? The last OS X to support PPC64 target was 10.5. The last to support any PPC was 10.6 AFAIK.

If Lipo really can combine binaries that different, I am beyond words.
 
I suppose it all depends on whether lipo actually 'does something' with the binaries or whether it just blindly shoves them all together. I don't know the answer.
 
I suppose it all depends on whether lipo actually 'does something' with the binaries or whether it just blindly shoves them all together. I don't know the answer.

It’s always more then just shove them together. Believe me, universal binaries definitely ‘just work’. Apple did something special with universal binaries that many other operating systems never attempted.

I’d even argue one of the most impressive things Apple has ever done is each arch switch so gracefully. With Leopard you could compile for 5 different targets natively without issue usually.
 
My understanding is that universal binaries literally just include multiple copies of the binary—one for each architecture—with a special header at the top. It's super nifty and clever, but I don't think it deserves quite so much praise as you're giving it. :)
 
My understanding is that universal binaries literally just include multiple copies of the binary—one for each architecture—with a special header at the top. It's super nifty and clever, but I don't think it deserves quite so much praise as you're giving it. :)

It really does though, it just works. Old Apple magic I swear...

Only limitations is you really need Leopard if you want to compile something to work on all I discussed. And lots of frameworks might be incompatible, I’m really just discussing straight C/C++ code. But in no means is that irrelevant, just look at PPCMC A.K.A. the only YouTube stream, download & Convertor app that cares to support Panther.

I use Leopard to compile PPCMC for Panther G3/G4/G5, but I can’t make it compile both panther and Big Sur compatible binaries AFAIK.
 
Last edited:
I’ve gotten the latest FFMPEG compiled for Mac OS X 10.3.9 G3, G4, and G5 natively (The one in PPCMC) so I don’t doubt it.

If anyone wants to test some binaries that would theoretically work on everything discussed let me know I’ll throw something together with good old Xcode 3 on PPC Leopard.
Well a few things that come to mind are ffmpeg, maybe a version of tar, and maybe something like dd? I'm trying to think of things where the differences in architecture would be noticable, so something that makes full use of the CPU such as a video encoder or a compression/archive utility.

I can test on PPC OS X (G3 and G4) and on Intel OS X (10.6 and 10.11) :)
 
Well a few things that come to mind are ffmpeg, maybe a version of tar, and maybe something like dd? I'm trying to think of things where the differences in architecture would be noticable, so something that makes full use of the CPU such as a video encoder or a compression/archive utility.

I can test on PPC OS X (G3 and G4) and on Intel OS X (10.6 and 10.11) :)

The only thing I hate of FFMPEG is the requirement of AltiVec.

You can specify Altivec enabled which optimizes for G4/G5, or disable the altivec optimizations which makes it work on G3’s and above at much worse performance.

PPCMC does the latter as I will always support G3’s no matter the consequences.
 
The only thing I hate of FFMPEG is the requirement of AltiVec.

You can specify Altivec enabled which optimizes for G4/G5, or disable the altivec optimizations which makes it work on G3’s and above at much worse performance.

PPCMC does the latter as I will always support G3’s no matter the consequences.
...it's actually a shame you can't make universal binaries for G3/G4/G5. I wonder why Apple never did that. IIRC the whole multiarch binary framework was inherited from NextStep, so it's not like it hadn't been invented yet.
 
You can specify Altivec enabled which optimizes for G4/G5, or disable the altivec optimizations which makes it work on G3’s and above at much worse performance.

PPCMC does the latter as I will always support G3’s no matter the consequences.

It does?

Is there a reason you cannot simply offer a G3 version alongside an AltiVec-optimized version? That would make things a lot easier for G4s+ with heavy day to day media processing workloads.
 
Thus, I am intensely curious: would it be possible for a developer to create a single universal binary that works natively on all four architectures: PPC, i386, x86_64, and ARM?

Well, mach-O does support fat binaries... meaning that you can add any target you like. The practical challenge would be finding the toolchain to do it though.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.