Snow Leopard in UTM on an Apple Silicon Mac

In 2021, I posted about getting Snow Leopard installed in UTM. Unfortunately, at that time I didn’t have a Apple Silicon Mac to test on. In 2023, when I got my hands on one, I found that Snow Leopard doesn’t really like QEMU’s TCG emulation, resulting in a commpage no match for last kernel panic on boot.

I thought it was my white whale, but 2025 was the year in which I would it it done.

So, I kicked off the year by doing some digging in the UTM issues and Discord, as well as various other QEMU / KVM-related Github projects until I found royalgraphx/LegacyOSXKVM project, which provides instructions to get legacy versions of Mac OS X up and running on QEMU via KVM. They had a particularly interesting guide on how to get Snow Leopard running on QEMU under Apple Silicon. Their findings are:

For now though, all I really need to explain is that for some reason the various KP’s that users experience when attempting to first boot or install Mac OS X Snow Leopard on M-Series Macs such as the Commpage or Installer KP are results of some weird TCG/32-Bit emulation errors. As well as OS X itself having trouble with the emulated TCG from ARM64 hosts. I’ve observed that x86_64 hosts using TCG (or commonly known as simply using emulation and not virtualizing) do not experience such errors. Leads me to believe that the installer uses various older parts for 32-Bit cryptography while installing, and the commpage error mainly being the CPU being weird, as in, how it appears to the guest machine.

I was able to get it up and running with no problems at all in Qemu upstream installed via Homebrew. But I still couldn’t get it to boot in UTM – I was getting general protection kernel panics. I did some deep dives, looking at the parameters that was working in Qemu but failing with UTM.

I did a deep dive on the QEMU arguments being passed by LegacyOSXKVM and what was being passed by UTM. And, I was able to get Snow Leopard working on UTM.

To Izzy

Seventeen years, a life well spent,
In every home where Adam went.
From place to place, she made it clear,
Izzy’s heart was always near.

With shoes to sniff, and sun to chase,
Her favorite spots, her special place.
A sip of milk, a treat or two,
Her simple joys, forever true.

Through quiet nights and busy days,
She followed life’s most winding ways.
In Carindale, she settled in,
A loyal friend through thick and thin.

But time, it whispered, soft and slow,
It’s time to let the old cat go.
So, on the grass, beneath the sky,
Adam whispered his goodbye.

One last sunbeam, warm and bright,
A gentle purr, a peaceful light.
Now raise a glass, in memory—
To Izzy’s life and legacy.

Single-Team AFL Calendar Generator

One of the feature requests for the AFL Calendar Generator I received from @joshgelfand on Mastodon was to only show a single team’s games, rather than all games.

So I implemented it.

BIND Secondary for Active Directory DNS on Red Hat-compatible Linux

My DNS is hosted locally, on-prem, behind a consumer-grade internet connection. When my internet connection at home goes down, my off-prem cloud-hosted servers that rely on my Active Directory DNS can’t communicate with eachother.

Rather than having a cloud-hosted Windows Server installation primarily to host DNS, why not create a BIND secondary that replicates from AD DNS?

AFL Calendar Generator

Do you get frustrated having to go to the AFL app or the TV guide to work out when the footy is on? Every year are you manually entering footy games in to your phone calendar?

Why not do it automatically?

Remember when I was in the App Store?

The Apple App Store turned 15 this week, and I just happened to come across some screenshots of when an app I built was featured in the Australian store.

Moving (back) to Grav

So I used to use Grav on my website a handful of years ago, but I gave it up because I percieved it to be “too slow”. To be honest, that was me just not really understanding how it works. So, when I gave it up I went back to MovableType (yeah–2005 called!).

My MovableType installation is currently running in my home lab, on Windows Server behind IIS, authenticating against my Active Directory and writing to my clustered Microsoft SQL Server database.

Why? Because I could dammit.

But, MovableType is actually a bit shit, and hasn’t really kept up with modern expectations.

10 April 2022: Oops – it looks like commenting was a bit broken thanks to CORS and friends. Commenting is now working again, as expected.

How to create Mac OS X 10.6 Snow Leopard virtual machine in UTM

UTM is a frontend for QEMU that works on Mac and iOS.

I’ve been working to get Snow Leopard running in UTM (by extension, it would probably also work in QEMU, too). Here’s how to do it.

Updates

7 March 2023: This is confirmed broken on M1 or M2 Apple Silicon Macs, exhibiting a commpage no match for last kernel panic. I just got an M2 MacBook Pro, so stand by while I test. See updates on the comments.

18 January 2025: Snow Leopard is now booting in UTM on Apple Silicon Macs! I wrote up a guide.

Transition complete!

Over the past few months I’ve been working to start self-hosting more of my stuff at home. I’ve got myself going with kind of a mini-home lab–more about that in another post.

Anyway, I’ve finally changed CMS, changed web server platform and this site is officially hosted by a computer in my cupboa...

Could this be the stupidest option in Microsoft Excel?

For the past hour or so I have been troubleshooting a problem with a Visual Basic script in Excel. It iterates through PivotItems in a PivotTable:

Set p_table = ActiveSheet.PivotTables("Audit")
Set p_items = p_table.PivotFields("Primary Location").PivotItems

For Each p_item In p_items
    Debug.Print p_item.Name
Next p_item

The for-loop keeps returning items that are no longer in the source data, and I couldn’t work out why. Turns out, there’s an option in PivotTable Options: Retain items deleted from the data source.