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

danupsher

macrumors member
Original poster
Hey all,

I've been working on a browser for Mac OS X 10.4 Tiger on PowerPC called MachFox. It's a fork of Jazzzny's PowerFox (which targets Leopard/Snow Leopard), modified to build and run on Tiger. The whole thing is cross-compiled entirely
from Linux using GCC 15 and Apple's ld64 linker ported to run natively on Linux .

Just put out v3.1 which fixes a pretty stupid bug from v3.0. The runtime libraries (libgcc and libstdc++) that get statically linked into the binary were built with G5-only instructions, things like fcfid which don't exist on G3/G4. So v3.0 would crash immediately with EXC_BAD_INSTRUCTION on anything that wasn't a G5. To fix it I had to rebuild libstdc++ from the GCC 15 source with -mcpu=G3 targeting the Tiger SDK, which turned into a bit of an eye opener, the cross-compile configure detected a bunch of Linux host functions as available (aligned_alloc, posix_memalign, secure_getenv etc) that Tiger obviously doesn't have, and the assembler wrapper needed patching to run our exception handling fixup script on all assembly. But it's all sorted now, every object file in every runtime library has been scanned and verified, zero G5 instructions.

I'm testing on an iMac G5 (PowerMac8,2, 2GHz, 1GB RAM, Tiger 10.4.11) and everything runs fine. I don't have any G3 or G4 hardware though, so if anyone has a machine they can test on that would be massively helpful. Even just "it
launched" or "it crashed on startup" is useful.

Some features:
- GPU-accelerated compositing (OpenGL 1.5 compatible)
- Fixes for vintage GPUs (Radeon 9600 era, non-power-of-two textures etc)

All the Tiger compatibility patches are on GitHub — the hope is that some of this work could eventually help PowerFox implement 10.4 support upstream too.

Download: https://github.com/danupsher/machfox-browser/releases/tag/v3.1

I'll use this thread for future releases, bug reports and general discussion. Let me know if you run into any issues or have questions about the build process.
 
Hey all,

I've been working on a browser for Mac OS X 10.4 Tiger on PowerPC called MachFox. It's a fork of Jazzzny's PowerFox (which targets Leopard/Snow Leopard), modified to build and run on Tiger. The whole thing is cross-compiled entirely
from Linux using GCC 15 and Apple's ld64 linker ported to run natively on Linux .

Just put out v3.1 which fixes a pretty stupid bug from v3.0. The runtime libraries (libgcc and libstdc++) that get statically linked into the binary were built with G5-only instructions, things like fcfid which don't exist on G3/G4. So v3.0 would crash immediately with EXC_BAD_INSTRUCTION on anything that wasn't a G5. To fix it I had to rebuild libstdc++ from the GCC 15 source with -mcpu=G3 targeting the Tiger SDK, which turned into a bit of an eye opener, the cross-compile configure detected a bunch of Linux host functions as available (aligned_alloc, posix_memalign, secure_getenv etc) that Tiger obviously doesn't have, and the assembler wrapper needed patching to run our exception handling fixup script on all assembly. But it's all sorted now, every object file in every runtime library has been scanned and verified, zero G5 instructions.

I'm testing on an iMac G5 (PowerMac8,2, 2GHz, 1GB RAM, Tiger 10.4.11) and everything runs fine. I don't have any G3 or G4 hardware though, so if anyone has a machine they can test on that would be massively helpful. Even just "it
launched" or "it crashed on startup" is useful.

Some features:
- GPU-accelerated compositing (OpenGL 1.5 compatible)
- Fixes for vintage GPUs (Radeon 9600 era, non-power-of-two textures etc)

All the Tiger compatibility patches are on GitHub — the hope is that some of this work could eventually help PowerFox implement 10.4 support upstream too.

Download: https://github.com/danupsher/machfox-browser/releases/tag/v3.1

I'll use this thread for future releases, bug reports and general discussion. Let me know if you run into any issues or have questions about the build process.
hello! I test out the new build on my imac g3, and i figured out that the current build "runs" but it crashes after one second because of a missing package, here is the error:

Date/Time: 2026-03-05 15:23:12.268 +0100OS Version: 10.4.11 (Build 8S165)Report Version: 4Command: basiliskPath: /Applications/MachFox.app/Contents/MacOS/basiliskParent: WindowServer [85]Version: 52.9.0 (5226.3.5)PID: 1279Thread: UnknownLink (dyld) error:Symbol not found: __ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEmmm Referenced from: /Applications/MachFox.app/Contents/MacOS/XUL Expected in: dynamic lookup
 
Hey all,

I've been working on a browser for Mac OS X 10.4 Tiger on PowerPC called MachFox. It's a fork of Jazzzny's PowerFox (which targets Leopard/Snow Leopard), modified to build and run on Tiger. The whole thing is cross-compiled entirely
from Linux using GCC 15 and Apple's ld64 linker ported to run natively on Linux .

Just put out v3.1 which fixes a pretty stupid bug from v3.0. The runtime libraries (libgcc and libstdc++) that get statically linked into the binary were built with G5-only instructions, things like fcfid which don't exist on G3/G4. So v3.0 would crash immediately with EXC_BAD_INSTRUCTION on anything that wasn't a G5. To fix it I had to rebuild libstdc++ from the GCC 15 source with -mcpu=G3 targeting the Tiger SDK, which turned into a bit of an eye opener, the cross-compile configure detected a bunch of Linux host functions as available (aligned_alloc, posix_memalign, secure_getenv etc) that Tiger obviously doesn't have, and the assembler wrapper needed patching to run our exception handling fixup script on all assembly. But it's all sorted now, every object file in every runtime library has been scanned and verified, zero G5 instructions.

I'm testing on an iMac G5 (PowerMac8,2, 2GHz, 1GB RAM, Tiger 10.4.11) and everything runs fine. I don't have any G3 or G4 hardware though, so if anyone has a machine they can test on that would be massively helpful. Even just "it
launched" or "it crashed on startup" is useful.

Some features:
- GPU-accelerated compositing (OpenGL 1.5 compatible)
- Fixes for vintage GPUs (Radeon 9600 era, non-power-of-two textures etc)

All the Tiger compatibility patches are on GitHub — the hope is that some of this work could eventually help PowerFox implement 10.4 support upstream too.

Download: https://github.com/danupsher/machfox-browser/releases/tag/v3.1

I'll use this thread for future releases, bug reports and general discussion. Let me know if you run into any issues or have questions about the build process.
I’ve got a PowerBook I could do builds on for you, if you wanted a way to build/test 32-bit builds. Would take a while to build though, only 2GB of RAM.
 
  • Like
Reactions: danupsher
hello! I test out the new build on my imac g3, and i figured out that the current build "runs" but it crashes after one second because of a missing package, here is the error:

Date/Time: 2026-03-05 15:23:12.268 +0100OS Version: 10.4.11 (Build 8S165)Report Version: 4Command: basiliskPath: /Applications/MachFox.app/Contents/MacOS/basiliskParent: WindowServer [85]Version: 52.9.0 (5226.3.5)PID: 1279Thread: UnknownLink (dyld) error:Symbol not found: __ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEmmm Referenced from: /Applications/MachFox.app/Contents/MacOS/XUL Expected in: dynamic lookup

Hey Yumiko, thanks for testing! You downloaded the build right before I pushed another updated fix. The _M_need_rehash symbol issue was an archive format bug that's now sorted. Can you re-download from the same link? The current files there have the fix.

https://github.com/danupsher/machfox-browser/releases/tag/v3.1
 
Hey Yumiko, thanks for testing! You downloaded the build right before I pushed another updated fix. The _M_need_rehash symbol issue was an archive format bug that's now sorted. Can you re-download from the same link? The current files there have the fix.

https://github.com/danupsher/machfox-browser/releases/tag/v3.1
just tried thanks, now it opens but does this error (after trying open from terminal in safe mode too)

I think it's related with the graphics card

37e8 of class NSCFString autoreleased with no pool in place - just leaking

GfxInfo::GetDeviceInfo: IOGLBundleName: ATIRage128GLDriver

CGBitmapContextGetWidth: invalid context

Bus error
 
ATI Rage 128 is too old for the GPU compositing the browser uses. I've just pushed another update that adds it to the GPU blocklist so it falls back to software rendering automatically. Same link, re-download one more time:
https://github.com/danupsher/machfox-browser/releases/tag/v3.1
Might work might not. Worth a try. Id love an Imac G3 so think ill look at adding one to my collection soon!
thank you but nothing seems to be changed...

edit: here is the error:
 

Attachments

  • Like
Reactions: danupsher
Hey, sorry about that, the last DMG had an issue caused by how I re-linked the libraries. The G5 instruction fix and ATI Rage blocklist were in there, but the app wouldn't work because of a Mach-O structure mismatch.

I'm doing a full clean rebuild right now which might sort that out. Everything gets built together properly this time instead of individual libraries being swapped in after the fact.

Appreciate your patience testing these. really helpful having someone on a other hardware to catch this stuff. The current build is no good and not worth trying currently.

Will post a new DMG once it's ready and tested on the G5. If nobody has any luck i will wait until I have G4 and G3 hardware to test on before releasing any more builds.
 
I noticed on your profile that you're a university student, I'm sure there's gotta be a Power Mac G4 collecting dust in a broom closet somewhere on campus! (lol) Joking aside, you deserve some major academic props for this effort. In a twist of irony, you've probably delivered more concrete product than anyone out there vibe coding a new food delivery app or something.
 
I noticed on your profile that you're a university student, I'm sure there's gotta be a Power Mac G4 collecting dust in a broom closet somewhere on campus! (lol) Joking aside, you deserve some major academic props for this effort. In a twist of irony, you've probably delivered more concrete product than anyone out there vibe coding a new food delivery app or something.
You might be joking, but could be correct. At my old high school about 7 years ago, I found an old Pentium II PC in the electronic recycling bin. Perfectly working running XP. It had probably been sitting around in a closet for years. Unfortunately I couldn't keep it as the school was worried about the hard drive having personal info, but I got to mess around with it for a while and even got it (very insecurely) online via ethernet with Firefox 12. Also found a PII ThinkPad, and a PIII laptop that I ran Firefox 49? on. Schools will put stuff in storage for years, decades even, and forget about it. It's legitimately worth asking around!
 
I modified the source and got it to build and work on a G4. Packaging it is tougher, but I am optimistic that I can figure that out within a week.
Meanwhile, if anyone wants to build from source on PowerPC hardware for Tiger, I can pass along the files I patched to make that happen.
 

Attachments

  • IMG_20260308_153543309.jpg
    IMG_20260308_153543309.jpg
    1.8 MB · Views: 56
I modified the source and got it to build and work on a G4. Packaging it is tougher, but I am optimistic that I can figure that out within a week.
Meanwhile, if anyone wants to build from source on PowerPC hardware for Tiger, I can pass along the files I patched to make that happen.
I think making the source for such an advance in some form is important.
 
I modified the source and got it to build and work on a G4. Packaging it is tougher, but I am optimistic that I can figure that out within a week.
Meanwhile, if anyone wants to build from source on PowerPC hardware for Tiger, I can pass along the files I patched to make that happen.
Awesome dude
 
Hey all,

Just a quick update. Ive been focusing on a G5-optimized build and
am currently working on getting the PPC Baseline JIT compiler fully working on 10.4.

The browser already launches and loads pages, but without JIT, JavaScript execution is interpreter-only, which is painfully slow, the interpreter path causes excessive memory pressure and the browser OOMs on JS-heavy sites. The JIT compiles JavaScript to native PPC machine
code on the fly, which is dramatically faster and more memory-efficient.


Similar to TenFourFox (which implemented a PPC JIT for its Firefox fork), i'm implementing a PPC Baseline JIT backend
for the UXP/Basilisk engine. While I can't directly reuse TenFourFox's code due to the different engine architecture, their work proved it's possible.

Current status: the JIT compiles and executes JavaScript correctly for many cases. Im working through the remaining edge cases.

For now I'm concentrating on the G5 build only, I don't have any G4 hardware to test on at the moment, so I want to get the G5 fully solid
before branching out. Once I can get my hands on a G4 machine, I'll look at a G4-targeted build.

It's also great to see others in the community working on G4 source builds, really speaks to the dedication of the PowerPC Mac community. The
more people pushing these machines, the better.

Will post another update once the JIT is fully stable and we have performance numbers to share.
 
Hey all,

Just a quick update. Ive been focusing on a G5-optimized build and
am currently working on getting the PPC Baseline JIT compiler fully working on 10.4.

The browser already launches and loads pages, but without JIT, JavaScript execution is interpreter-only, which is painfully slow, the interpreter path causes excessive memory pressure and the browser OOMs on JS-heavy sites. The JIT compiles JavaScript to native PPC machine
code on the fly, which is dramatically faster and more memory-efficient.


Similar to TenFourFox (which implemented a PPC JIT for its Firefox fork), i'm implementing a PPC Baseline JIT backend
for the UXP/Basilisk engine. While I can't directly reuse TenFourFox's code due to the different engine architecture, their work proved it's possible.

Current status: the JIT compiles and executes JavaScript correctly for many cases. Im working through the remaining edge cases.

For now I'm concentrating on the G5 build only, I don't have any G4 hardware to test on at the moment, so I want to get the G5 fully solid
before branching out. Once I can get my hands on a G4 machine, I'll look at a G4-targeted build.

It's also great to see others in the community working on G4 source builds, really speaks to the dedication of the PowerPC Mac community. The
more people pushing these machines, the better.

Will post another update once the JIT is fully stable and we have performance numbers to share.
Absolutely fantastic work here from so many people. One more step away from planned obsolescence and letting big corporations tell us when our hardware is useless. This will be a gamechanger for usability, as the lack of JIT was the biggest thing holding back PowerFox from really being a default main browser for me and many others. As for G5 machines (especially DP & Quad PMG5), having a functional JIT will push them into daily driver territory which is absolutely insane to think about.

As for a G3 build in the future, it would also be mind boggling to see a fully modern browser running natively in Tiger on the beloved iMac G3. SeaLion already runs in Linux on G3 processors, but most prefer to stay within OS X for many understandable reasons.
 
There are a few PMG4s on ShopGoodwill right now, and they tend to come up rather frequently. Worth checking out if you’re looking for something with a lower cost than eBay.

iBooks and PowerBooks are a dime in a dozen if you just need any G4, but I assume you want the most powerful you can get lest compiling take a thousand ages 😂
 
Hey all,

Just a quick update. Ive been focusing on a G5-optimized build and
am currently working on getting the PPC Baseline JIT compiler fully working on 10.4.

The browser already launches and loads pages, but without JIT, JavaScript execution is interpreter-only, which is painfully slow, the interpreter path causes excessive memory pressure and the browser OOMs on JS-heavy sites. The JIT compiles JavaScript to native PPC machine
code on the fly, which is dramatically faster and more memory-efficient.


Similar to TenFourFox (which implemented a PPC JIT for its Firefox fork), i'm implementing a PPC Baseline JIT backend
for the UXP/Basilisk engine. While I can't directly reuse TenFourFox's code due to the different engine architecture, their work proved it's possible.

Current status: the JIT compiles and executes JavaScript correctly for many cases. Im working through the remaining edge cases.

For now I'm concentrating on the G5 build only, I don't have any G4 hardware to test on at the moment, so I want to get the G5 fully solid
before branching out. Once I can get my hands on a G4 machine, I'll look at a G4-targeted build.

It's also great to see others in the community working on G4 source builds, really speaks to the dedication of the PowerPC Mac community. The
more people pushing these machines, the better.

Will post another update once the JIT is fully stable and we have performance numbers to share.
You’ve managed to get a JIT almost working? That’s incredible. Side note: I noticed in the 3.0 build on my G5 that h264/AV1 appears to not work. Is there a way to enable it?
 
  • Like
Reactions: Smithwick’s
Here's a build for G4s (Based on modified sources I will upload if my internet cooperates, so working name is StoneColdFox):
Important: You must install gcc10 and libffi for it to launch. If you have Macports or PowerPC ports, install with that instead of the included installers. Installing gcc10 and libffi with these installers may mess up an existing Macports or PowerPC ports installation.
There is a known bug with pasting into the browser. I am unsure if that is the fault of the changes I made or if that affects other ported UXP based browsers.
It works well enough to upload the files and make this post! Let me know how it goes.
 
If you prefer to build from source, the code with my changes is here: https://github.com/ForestExpertise/StoneColdFox-UXP-Browser/tree/main
On Tiger, we do not do code-signing, which accounts for some of my changes vs. MachFox.
In addition, the MachFox cross-compiler setup supports posix-spawn. While implementations exist for Tiger, I did not want to bring in another dependency, so I brought back AquaFox's workarounds for the missing spawn.h
The build uses gcc10, as @Jazzzny reports that gcc14 can produce broken binaries on G4. Also, gcc10 tends to be more permissive than later gcc in my experience.
If someone with a G3 that has at least a GB of RAM wants to build natively, you should just be able to change the mozconfig from G4 to G3. You may also need to add a flag to force the CPU subtype to all.
The tricky part will be setting up the dev environment on G3. I am unsure when gcc10 and its dependencies were last tested on a G3 Tiger system.
 
Hey all,

Just a quick update. Ive been focusing on a G5-optimized build and
am currently working on getting the PPC Baseline JIT compiler fully working on 10.4.

The browser already launches and loads pages, but without JIT, JavaScript execution is interpreter-only, which is painfully slow, the interpreter path causes excessive memory pressure and the browser OOMs on JS-heavy sites. The JIT compiles JavaScript to native PPC machine
code on the fly, which is dramatically faster and more memory-efficient.


Similar to TenFourFox (which implemented a PPC JIT for its Firefox fork), i'm implementing a PPC Baseline JIT backend
for the UXP/Basilisk engine. While I can't directly reuse TenFourFox's code due to the different engine architecture, their work proved it's possible.

Current status: the JIT compiles and executes JavaScript correctly for many cases. Im working through the remaining edge cases.

For now I'm concentrating on the G5 build only, I don't have any G4 hardware to test on at the moment, so I want to get the G5 fully solid
before branching out. Once I can get my hands on a G4 machine, I'll look at a G4-targeted build.

It's also great to see others in the community working on G4 source builds, really speaks to the dedication of the PowerPC Mac community. The
more people pushing these machines, the better.

Will post another update once the JIT is fully stable and we have performance numbers to share.
Thank you for your hard work. I expect I will be able to bring your JIT changes over to my fork easily, as I made no changes to the js directory, which is where I suspect you are working?
 
If you prefer to build from source, the code with my changes is here: https://github.com/ForestExpertise/StoneColdFox-UXP-Browser/tree/main
On Tiger, we do not do code-signing, which accounts for some of my changes vs. MachFox.
In addition, the MachFox cross-compiler setup supports posix-spawn. While implementations exist for Tiger, I did not want to bring in another dependency, so I brought back AquaFox's workarounds for the missing spawn.h
The build uses gcc10, as @Jazzzny reports that gcc14 can produce broken binaries on G4. Also, gcc10 tends to be more permissive than later gcc in my experience.
If someone with a G3 that has at least a GB of RAM wants to build natively, you should just be able to change the mozconfig from G4 to G3. You may also need to add a flag to force the CPU subtype to all.
The tricky part will be setting up the dev environment on G3. I am unsure when gcc10 and its dependencies were last tested on a G3 Tiger system.
Hey there Forest Expertise, thanks for posting. Unfortunately no luck on my iBook G4. Returns a segmentation fault in terminal. Attaching the contents of running from terminal and the crash reporter when running from icon.
 

Attachments

Thank you for your hard work. I expect I will be able to bring your JIT changes over to my fork easily, as I made no changes to the js directory, which is where I suspect you are working?
The JIT changes aren't just in js/ though, they touch files across the tree. The bulk of the work is in jit/ppc/ (the actual PPC backend - assembler, trampolines, bailouts, code generator, IC helpers etc) but there's also changes to things like ProcessExecutableMemory.cpp for RWX pages (Tiger doesn't enforce W^X), nsBrowserApp.cpp for crash handlers and VMX init, ExecutableAllocator.h for PPC icache flushing (Harvard architecture needs explicit dcbst/icbi/sync/isync), and a few other bits. The out-of-tree changes are fairly small and mechanical though so cherry-picking shouldn't be too painful.

Still working through some baseline JIT codegen bugs on G5, self-hosted scripts compile and run fine but non-self-hosted web scripts still crash with null pointer dereferences. Getting closer though.
Having both of us working on this is great for the community, you on G4 and me on G5. The JIT backend is the same for both so any fixes either of us make should benefit the other. Once things stabilise powerfox could potentially pick up work from both forks.
 
If you prefer to build from source, the code with my changes is here: https://github.com/ForestExpertise/StoneColdFox-UXP-Browser/tree/main
On Tiger, we do not do code-signing, which accounts for some of my changes vs. MachFox.
In addition, the MachFox cross-compiler setup supports posix-spawn. While implementations exist for Tiger, I did not want to bring in another dependency, so I brought back AquaFox's workarounds for the missing spawn.h
The build uses gcc10, as @Jazzzny reports that gcc14 can produce broken binaries on G4. Also, gcc10 tends to be more permissive than later gcc in my experience.
If someone with a G3 that has at least a GB of RAM wants to build natively, you should just be able to change the mozconfig from G4 to G3. You may also need to add a flag to force the CPU subtype to all.
The tricky part will be setting up the dev environment on G3. I am unsure when gcc10 and its dependencies were last tested on a G3 Tiger system.
At runtime, our code either uses posix_spawn if the Tiger system supports it, or falls back to fork/exec.
The cross-compiler lets us use any GCC version and build in minutes instead of hours. It's a different approach but the output is the same Mach-O binaries for Tiger. Having both approaches in the community means more people can contribute regardless of their hardware, but I totally understand that what im doing is strange!
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.