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

Wowfunhappy

macrumors 68020
Original poster
Screen Shot 2026-05-19 at 1.17.22 PM.png
Screen Shot 2026-05-19 at 1.21.01 PM.png
Screen Shot 2026-05-19 at 1.19.00 PM.png
Screen Shot 2026-05-19 at 1.25.04 PM.png


Just to be clear: There's nothing here you'd actually want to use just yet, I'm just showing off!

Basically, I set up Claude Code in a Mavericks Virtual Machine, handed it a modern compiler and the latest WebKit source code, and told it to backport WebKit to Safari 9 on Mavericks. Then I left it running for around 1½ months. A few times each day, I yell at it to either (1) stop being lazy and actually backport WebKit, not work on some easier task instead, and (2) avoid using hacks and remove any hacks it added previously. Occasionally, I also provide actual architectural guidance, such as telling Claude to use TCA instead of RLT for rendering, but this is rare.

It's definitely still a work in progress right now, but it does actually work. I can use Github, log into the New York Times, and play Connections, all from Apple's native Safari 9. It's not, like, a pleasant experience yet—pages take upwards of five seconds to load, and Safari will randomly decide to stop opening websites sometimes and need to be quit and re-opened. But if you were trapped on a desert island and this was your only way to browse the internet, you'd be fine. And, it has gotten much better in just the past few days!

 
Last edited:
Wow, that's crazy! I never imagined this day would come. It would be great to be able to install it on OS X 10.9.5 to use every day soon…
 
  • Like
Reactions: BigMcGuire
>use TCA instead of RLT for rendering,

What does this mean? There are 0 hits (besides this thread) for TCA and RLT in this context.
 
>use TCA instead of RLT for rendering,

What does this mean? There are 0 hits (besides this thread) for TCA and RLT in this context.

This information comes from Claude, maybe it's all made up.

The back story is that originally, if you scrolled or highlighted text or an on-page animation played, the picture would update at maybe one frame every five seconds. It was awful. I felt that fixing this, if it could be fixed, was going to require an architectural change, not little optimizations around the edges.

So I talked with a separate instance of Claude about what might be possible.

Claude said that it was currently using "RLT", or RemoteLayerTree, a rendering system originally built for iOS which is now also used by modern Safari on Mac. There was an older code path, "TCA" or TiledCoreAnimation, which was used by Safari 9 and was still present in modern WebKit. I, of course, told Claude to use this code path. Claude... very much did not want to do this, it kept hitting a crash, giving up, and going back to RLT. When Claude FINALLY did what I'd asked (well, the separate instance reviewing Claude's work said it had done as asked), performance improved enormously.

But maybe none of this is real and I'm just in AI psychosis? It did work though!
 
Last edited:
>But maybe none of this is real a

Ah the full explanation makes sense. I haven't looked at webkit source once, but I"m guessing TiledCoreAnimatino is similar to how firefox's compositor works (partition the screen into IOSurfaces and only update the ones that are changed) whereas RemoteLayerTree is probably actually creating a stacked layer graph and doing cross-process rendering. (I recall 10.9 switched how CALayer rendering works to involve WindowServer more heavily, maybe that all interacts poorly with remote calayers which were never stable in the first place)
 
So last week, Claude completely destroyed the Virtual Machine it was running in. I don't know how precisely, but most apps including Finder wouldn't open, and even using SSH I couldn't modify or write most files.

I'm not particularly surprised by this. Claude was running with full sudo access and explicit instructions to take initiative and experiment. But, a word of warning to anyone who wants to give Claude carte blanche outside of an isolated VM...

---

Anyway, now that I've switched to a new VM, I also switched Claude from targeting Safari 9 (the last Mavericks-compatible version of Safari) to Safari 7 (the version of Safari that shipped with Mavericks).

Safari 9 on Mavericks uses its own, separate, versioned copy of WebKit. By contrast, the Safari 7 WebKit framework is the one used by all apps on the system.

This means that even if Claude can't get the WebKit to the point where you'd want to use it as your primary browser, the backport will be useful for things like QuickLook previews, Dashboard WebClips, TextMate bundles, and so on.
 
Anyone know where I can get a valid (Apple signed) Safari 7 compatible extension to test with? (Eventually I'll figure out how to disable signing, but not now.)
 
Anyone know where I can get a valid (Apple signed) Safari 7 compatible extension to test with? (Eventually I'll figure out how to disable signing, but not now.)
If it shipped with Mavericks, you could rip it from the InstallESD.
 
Cool! Leopard-WebKit is what inspired the current project. That's 2016-era WebKit though, not 2026-era WebKit 😉 And It won't work on Mavericks which supports Safari 7–9 only.
 
Cool! Leopard-WebKit is what inspired the current project. That's 2016-era WebKit though, not 2026-era WebKit 😉 And It won't work on Mavericks which supports Safari 7–9 only.
It is a webkit1 engine. From 10.7 onwards webkit2 is used. There was no decent browser for SL. Now there is. You have i3roly's browser for the rest. I see no reason why similar can't be done for Mavericks. It just needs to be compiled for whatever Mavericks's SDK API and system calls support.
 
Last edited:
damn, so there would be a way to main S9 again for normal use?
I switched to targeting Safari 7, but yes, the goal is ideally to be able to main Safari. I legitimately don't know whether Claude will be able to get us all the way there or not, it's an ongoing experiment.

The current status is that pages now load in a reasonable amount of time. Mouse cursor changes work (for example, when you hover over a link), videos work, QuickLook previews work, WebGL sometimes works, and I think memory usage is under control.

Any content that loads in after the initial page load (e.g. lazy loaded images) still takes much longer than it should. Overall app responsiveness isn't great (altough it isn't terrible either). And there's a variety of small things to fix, like making Reader Mode work.

The biggest issue is stablity, Safari frequently just stops loading pages and the app needs to be restarted. I'm nervous Claude won't be able to fix this, because it's not a cleanly reproducable problem it can keep pounding on until it works.
 
this is still good, i would absolutely adore to use the classic safari.

I switched to targeting Safari 7, but yes, the goal is ideally to be able to main Safari. I legitimately don't know whether Claude will be able to get us all the way there or not, it's an ongoing experiment.

The current status is that pages now load in a reasonable amount of time. Mouse cursor changes work (for example, when you hover over a link), videos work, QuickLook previews work, WebGL sometimes works, and I think memory usage is under control.

Any content that loads in after the initial page load (e.g. lazy loaded images) still takes much longer than it should. Overall app responsiveness isn't great (altough it isn't terrible either). And there's a variety of small things to fix, like making Reader Mode work.

The biggest issue is stablity, Safari frequently just stops loading pages and the app needs to be restarted. I'm nervous Claude won't be able to fix this, because it's not a cleanly reproducable problem it can keep pounding on until it works.
 
That's some serious dedication (and token budget)!

...so, a couple things.

First, when I say 1½ months (closer to two months now), that's my rough estimate of how long the VM has been actually running, not calendar time.

I have a Claude Max subscription. When I'm using Claude for something else and I notice my per-five-hour session usage getting too high, I suspend the WebKit VM temporarily so I'll have more tokens left for whatever the immediate task is.

Similarly, if I'm getting close to my weekly limit, I suspend the VM for the rest of the week.

So, in effect, the WebKit backport is using up tokens that would have otherwise gone unused.

Furthermore, a lot of time gets spent just compiling WebKit, which doesn't use any tokens, although this has become less true as I've gotten further into the project and incremental builds have become more frequent.
 
  • Like
Reactions: splifingate
That is why I hate Claude, you pay for getting limited... Zhipu has no such issues and now GLM-5.2 is out with 1m context...

You get what you pay for. 🤷‍♂️ There is no way GLM-5.2 would have been able to backport WebKit.

I do think Claude's pricing is fair. You're paying for a set amount of usage. You can pay API prices instead and get as much usage as you want... but you'll really pay for it, I certainly can't afford to do that!
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.