43

I have a 2015 Macbook Air. The earliest version of macOS this model ever shipped with was OS X 10.10 Yosemite. However, I want to try installing OS X 10.9 Mavericks, because Yosemite makes my eyes bleed I like Mavericks.

This is probably not going to work. Mavericks was not designed to run on my computer and likely lacks the necessary hardware support. But, I'm stubborn and I want to try anyway. If it's going to kernel panic, I want to see the damn kernel panic with my own eyes!

So I created a bootable Mavericks USB installer and plugged it into my Macbook Air. I then booted my Mac while holding down the option key to reach the disk selection menu, and selected the installer USB drive.

As soon as I select the drive, my Mac immediately flashes a prohibited ("đźš«") sign. This is not what a kernel panic usually looks like, and it happens too quickly after selecting the drive. Clearly, Apple has implemented some sort of arbitrary check to prevent me from even trying to boot this old OS on my machine.

Furthermore, there does not appear to be any way to boot the USB drive in verbose mode. Holding down cmdV has no effect.

How can I bypass this check and force my Mac to attempt to boot the installer?

1 Answer 1

57

First things first—we need to get verbose boot working, so we can see what the computer is doing. I don't know why cmdV doesn't work, but there's another way.

Open the bootable USB installer in Finder and navigate to Library/Preferences/SystemConfiguration/, then open com.apple.Boot.plist in a text editor. The important section will look something like this:

<dict>
    <key>Kernel Flags</key>
    <string></string>
</dict>

So, currently there are no flags set up. Let's add in the verbose flag by changing it too:

<dict>
    <key>Kernel Flags</key>
    <string>-v</string>
</dict>

If I boot the USB installer with this change, instead of a prohibited sign I'll get a message that reads: "Mac OS X is not supported on this platform!". This is progress—we now know for sure that we're up against a hardware check—but we still need to bypass the check.

Open the USB installer in Finder again, but this time, navigate to System/Library/CoreServices and open PlatformSupport.plist in a text editor. Inside, you will see a list of "SupportedBoardIds" and "SupportedModelProperties".

<dict>
    <key>SupportedBoardIds</key>
    <array>
        <string>Mac-031B6874CF7F642A</string>
        <string>Mac-F2268DC8</string>
        [...]
        <string>Mac-F2218EC8</string>
    </array>
    <key>SupportedModelProperties</key>
    <array>
        <string>MacBookPro4,1</string>
        <string>Macmini5,3</string>
        [...]
        <string>MacBookAir5,1</string>
    </array>
</dict>

All we need to do is add our Mac's Board ID and model to their respective lists. You can find your model in System Profiler under Hardware Overview, where it's listed as "Model Identifier". In my case, I have a "MacBookAir7,1".

To find the Board ID, open Terminal and enter: ioreg -l | grep -i board-id. My board ID turned out to be "Mac-9F18E312C5C2BF0B".

I added this information to PlatformSupport.plist like so:

<dict>
    <key>SupportedBoardIds</key>
    <array>
        <string>Mac-031B6874CF7F642A</string>
        <string>Mac-F2268DC8</string>
        [...]
        <string>Mac-F2218EC8</string>
        <string>Mac-9F18E312C5C2BF0B</string>
    </array>
    <key>SupportedModelProperties</key>
    <array>
        <string>MacBookPro4,1</string>
        <string>Macmini5,3</string>
        [...]
        <string>MacBookAir5,1</string>
        <string>MacBookAir7,1</string>
    </array>
</dict>

And now when I boot the installer, I get... a kernel panic! Ta-da! 🎉


In some cases, this might be the end of the road, but I happen to have one more trick up my sleeve. The XNU kernel used by macOS is open source, so it's possible to compile a custom kernel with support for additional hardware. It's not possible for me to do this, but there exist other people who are smarter than me.

My 2015 Macbook Air uses a Broadwell processor, and I found this kernel for 10.9.5 which purports to add Broadwell support. I might as well give it a try!

I downloaded the attachment and copied mach_kernel to the root of my USB installer drive. Note that if I was trying to install OS X 10.10 or newer, I would have copied it to System/Library/Kernels instead.

In order for the installer to use my custom kernel, I need to tell it to ignore the kernel cache. To do so, I once again opened Library/Preferences/SystemConfiguration/com.apple.Boot.plist in a text editor, and added the -f flag:

<dict>
    <key>Kernel Flags</key>
    <string>-v</string>
    <string>-f</string>
</dict>

Then I tried booting the installer again, and...

WTF? It booted?!?

Wait a minute. That wasn't supposed to actually work!

For whatever reason, my internal keyboard and trackpad were nonfunctional, so I had to plug in an external keyboard and mouse via USB. But other than that, I was able to open Disk Utility, format the internal drive, and install the OS normally.

It is critical that you do not allow your Mac to automatically reboot at the end of the installation, or you'll just end up with another prohibited sign. Remember how we added our Mac's model and board id to PlatformSupport.plist? We need to also make this change to the copy that's been installed on your hard drive.

When your Mac tells you the installation is complete, immediately open the Terminal app and cp PlatformSupport.plist from System/Library/CoreServices on your USB installer to the equivalent location on your hard drive. If you're using a custom kernel, as I was, make sure to copy that as well. With those changes in place, you can safely allow the installer to reboot!

That's it, you're done—my 2015 Macbook Air successfully booted into a fully-installed copy of Mavericks. Unfortunately, I quickly discovered that there wasn't any graphics acceleration, and I still couldn't use the internal keyboard or trackpad, but I was able to browse the web, play some music, and hop on a Zoom call. And who knows, maybe you'll be luckier than me with your hardware!

Also, there's a global pandemic outside and I had nothing better to do with my Sunday afternoon.


P.S. Final note about custom kernels, they tend to get replaced with every OS update, including minor security updates. Before you install an update, back up your custom mach_kernel, and then copy it back after the installation is complete but before you reboot your machine!

P.P.S. Thank you to AnonMac50 over on the MacRumors forums for giving me the hints about PlatformSupport.plist and com.apple.Boot.plist. The last time I tried this, many years ago, I got totally stuck because I didn't know about those.

Epilogue: A Mac repair shop (DoubleDex) swapped the Logic Board in my 2015 Macbook Air with one from a 2014 Macbook Air. Now Mavericks runs perfectly.

7
  • "I still couldn't use the internal keyboard or trackpad" – I wonder why this is... the 2015 MBA still has the physical click trackpad so it should have worked. Although possibly they might have changed the communication protocol. I think we can leverage work from the linux and hackintosh community here and write out own keyboard/trackpad driver. I wouldn't say it's trivial, but it can be a weekend project for someone who's familiar with it, as all the hard lifting has been done by the guys who wrote VoodooMultitouch framework and reverse engineered the hardware protocols.
    – 1110101001
    Jan 6 at 9:49
  • This will also technically work for fore touch trackpad as well, so I definitely think running mavericks on 2015 MBP is not too difficult. 2016 onwards will be a bit trickier because of the T1 nonsense, but in principle I do not see why it wouldn't work. Linux (and/or hackintosh folks) have drivers to support all the relevant peripherals on the newer systems (for linux you may have to port them over yourself). The only tricky parts might be something like the smc/pram interfaces, since that presumably changed a lot with the T1 chips and mavericks won't know what to do.
    – 1110101001
    Jan 6 at 9:52
  • But it is still possible I think. Linux clearly runs on those machines, so they should have reverse engineered how to communicate with the SMC on the newer machines as well. And the hackintosh community has VirtualSMC so all you need to do is write a shim layer where virtualsmc will call out to real smc. Maybe it already supports it, I don't know. But I think it is absolutely possible overall.
    – 1110101001
    Jan 6 at 9:55
  • Last missing piece is then graphics acceleration. I don't know enough about this – have people in the hackintosh community written drivers, or do they just rely on the ones built in with the OS? If it's the latter then we seem stuck. I wonder what would happen if you took kexts from a newer version and tried them on mavericks, possibly patching the kernel as needed to provide any missing symbols. Unlike userspace stuff which links against a bunch of libraries, the kernel interface should remain relatively stable over time so I think it might work?
    – 1110101001
    Jan 6 at 10:02
  • @1110101001 (To be clear, this was a MBA, not a MBP.) There's a tad more info in this thread on MacRumors: forums.macrumors.com/threads/…. Someone else also thought that the keyboard and trackpad might be due to protocol changes, and I actually did try moving over the Broadwell graphics kexts from Yosemite. The Yosemite kexts actually may have partially worked, but I did run into a missing symbol, and I decided to cut my losses rather than get into kernel patching. I ultimately just swapped the motherboard with one from a 2014 MBA. Jan 6 at 15:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .