A little while ago I decided to try tri-booting macOS Big Sur, Windows 10, and Linux Mint 20.3 on an older Late 2013 MacBook Pro in order to do some performance and battery life comparisons (coming soon!). At first I was going to make a howto, but the process ended up being so bizarre and confusing that instead I’m just going to write about the experience. Hopefully it will still be useful.
This isn’t a specifically Linux-oriented post, but it does fit with the sort-of miscellaneous hopefully-interesting things I post about here.
Can’t you just use Boot Camp for tri-booting?
You’d think the answer would be yes, and you’d be right for more modern Intel Macs (probably). However, this Mac uses EFI 1.1 firmware, instead of the much more ubiquitous and better-supported EFI 2.0/UEFI spec. Doing a standard Boot Camp setup with macOS and Windows works just fine, but the caveat is that this installs Windows in BIOS/CSM mode.
This is all absolutely fine, but poses a problem when you then install Linux – the Mac will boot Linux in EFI mode, and then, when installing, Linux clobbers Windows’ bootloader, thinking that Windows is installed in EFI mode! GRUB (Linux Mint’s bootloader) is also unable to load Windows like this, so that’s a second problem to solve.
Please Note: Newer Intel Macs do actually have EFI 2/UEFI firmware, and install Windows in EFI mode, so this (hopefully!) isn’t a problem on them. I haven’t tried it, though, so don’t quote me on that.
Workarounds I tried
I tried a lot of these before I found something that worked. I’m going to include all of them, in an attempt to save you the hassle of it breaking things, if you’re trying this for yourself.
Please note that if you’re using APFS you’ll need to use macOS or macOS Recovery to resize your macOS partition first. Boot Camp guides you through this but it’s easy to do manually with Disk Utility.
Just use a normal Windows 10 install USB without Boot Camp
This is the simplest thing I could try – perhaps the Mac can just EFI boot a standard Windows 10 USB? It might be that I didn’t wait for long enough, but I got to the Windows logo and it just seemed to hang. A bit of research seemed to suggest Windows 10 just wasn’t compatible with EFI 1.1 so this just wouldn’t work.
Use a different EFI partition when installing Linux Mint
This seemed like the next best option for tri-booting: do a normal Boot Camp setup, make some extra space, and then install Mint’s bootloader to a different EFI partition on a USB stick in the hope it won’t clobber Windows. Sadly, this didn’t work, and Mint still installed the bootloader to the internal drive, even though I told it not to!
This is rather worrying to me, that the installer completely ignored what I told it to do. If it was even slightly reproducible I’d definitely report it, but I think it’s going to be hard to make this happen again. Maybe when I have a spare few hours I’ll try in a VM.
Note: I suspect I made the mistake of creating disk partitions on Linux, which probably messed up the Protective MBR that Boot Camp made, so Windows didn’t know how to boot anymore. If you want to know what a Protective MBR is, read this particle by Rod Smith: https://www.rodsbooks.com/gdisk/hybrid.html.
Install Linux in BIOS/CSM mode as well
I really thought I’d cracked it at this point. However, there is one problem: there doesn’t seem to be a way to ask an Intel Mac to boot in BIOS/CSM mode!
On most PCs, you can press F12/Del/whatever your boot menu key is on startup, and manually boot a drive in CSM/BIOS mode. Failing that, you might be able to put the whole firmware in CSM mode for all boots.
On a Mac, there’s apparently a special bless command you can use from within macOS to boot in BIOS/CSM mode, but I couldn’t make it work after installing Windows with Boot Camp. In fact, pretty much every bless command failed with an obscure error. I will admit I’ve not used bless before, but I do wonder if maybe Boot Camp locks the boot settings down somehow.
To read more about bless, and how Mac booting works, read this excellent article from The Eclectic Light Company: https://eclecticlight.co/2018/08/30/booting-the-mac-bless-and-what-makes-a-volume-bootable/.
So essentially I had to give up with this, because I simply couldn’t get Linux to boot in CSM mode. At this point I was starting to get desperate.
The ridiculously over-complicated solution for tri-booting
During the process of all of the above, I imaged a copy of the special Boot Camp-ised Windows 10 installation media because I got fed-up of redownloading things over and over again. Eventually, I wondered if I could boot this Windows 10 boot media without using Boot Camp.
I used Disk Utility to create some disk space, and then rebooted off of the Windows 10 media, I hoped in EFI mode. It took a very long time to load, but Windows 10 did eventually boot and install!
The caveat here is there’s not really a good way to tell if the installer has booted in EFI mode. My assumption was that if I didn’t use Boot Camp, the Mac would just automatically boot everything in EFI mode. This was the case for me on my Late 2013 MacBook Pro, but your mileage may vary.
After install, I rebooted a few times into macOS and Windows to check everything was okay. I had to install the Boot Camp drivers for Windows but otherwise all was normal and fine.
TL;DR: Create Boot Camp media, and then don’t boot off of it when Boot Camp reboots the Mac. Instead, unplug the drive (or shut down from the Windows installer), and then do a cold boot. Failing that, create the media and then reinstall macOS to reset the firmware settings (!) or try a normal Windows 10 installation USB drive.
Installing Linux Mint 20.3
Please note that this may vary between Linux distributions and Macs.
I then booted the Linux Mint installer, created a partition for Mint, and then installed with the default settings. After this, the “Windows” boot option in the boot menu booted GRUB, and from there I could boot either Linux or Windows with no problem. There is one caveat, which I will describe below.
Linux bootloader configuration
There seems to be a bug which affects this Mac, where SHIM, a tool to support secure boot, draws over the top of GRUB’s boot menu, so you can’t see the menu. To fix this, I mounted my EFI partition from Linux and overwrote EFI/Boot/bootx64.efi with EFI/ubuntu/grubx64.efi to just not run SHIM anymore.
Note: On more modern Intel Macs with EFI 2.0/UEFI, secure boot is supported and hence you probably don’t want to do this, at least not without checking if GRUB works as is first. I’m going to report this bug too, if I can, but I don’t know if it only affects this particular machine, or if it’s already been fixed in SHIM.
Tri-booting macOS, Windows, and Linux is not for the faint-hearted. Dual-booting, on the other hand, is very easy for both Windows and Linux. For Windows, just use Boot Camp, and for Linux, use Disk Utility to make some disk space for Linux, and just boot a USB installer as usual.
Hopefully this post might be useful to someone who’s thinking of having a similar tri-booting setup. I aim to be back soon with some performance and battery life metrics, just for curiosity’s sake if nothing else. The Linux enthusiast in me says Linux will as least be best for performance, if not battery life, but we shall see.