
Documentation to set up a simple macOS VM in QEMU, accelerated by KVM - paulcarroty
https://github.com/foxlet/macOS-Simple-KVM/
======
Wowfunhappy
I know it's bad security, but I'd be more interested in this if it supported
old releases, like Snow Leopard or at least Mavericks (the latter being the
final release with the Acqua UI).

I have a fantasy that I'll go back to Snow Leopard some day and live the rest
of my life there, but then I remember hardware support is basically
nonexistent. A _very_ lightweight VM with GPU passthrough could work around
that problem.

~~~
120photo
I have a Epson Perfection 4490 with no 64bit drivers. I will need to either
run Windows or a older version of Mac OS / OS X. I'm sure there are other use
cases where one will need a older system. I was actually going to go down the
route or building a new Hackintosh but have opted o build a Linux desktop with
Mac OS VM using GPU pass through. Using this I could have the latest Mac OS
and a older version when needed.

~~~
pwg
Some info on getting the 4490 to work with Linux is here:

[https://www.patrickmin.com/linux/tip.php?name=epson4490](https://www.patrickmin.com/linux/tip.php?name=epson4490)

The iscan-plugin-gt-x750 package referenced there was all I needed to get
vuescan ([https://www.hamrick.com/](https://www.hamrick.com/)) to use the
scanner on 64-bit Linux.

------
stevencorona
I recently went the KVM MacOS/Hackintosh route (but not using this exact
script) and while it functionally worked great— GPU Passthrough (Used RX580
and Vega 56), PCI Passthrough (USB Controller/Bluetooth/Wifi/Ethernet
Card/SATA Controller/NVME Drive), iMessage, Handoff, AirDrop, etc. etc. I
found it to be hassle on my consumer AMD motherboard with an AMD GPU.

With the AMD GPU, I had trouble resetting the GPU between VM starts/stops
without restarting the whole computer. This appears to be a problem with a
consumer AMD cards.

It could be specific to AMD Ryzen IOMMU Groups, but it was also pretty
annoying to passthrough the PCI devices and still leave the appropriate
hardware for the host machine. There aren't any native virtio drivers in OSX
so you really need to pass through your sata controller/ethernet card for full
performance. Might have been easier with a server motherboard with cleaner
IOMMU groups, though.

I ended up just building a bare-metal Intel Hackintosh which was less of a
hassle.

~~~
derefr
> There aren't any native virtio drivers in OSX

I could have sworn that macOS is supported as a guest under VMWare Fusion
and/or ESXi hosts (when on Mac hardware), using some virtio drivers.

~~~
lvh
VMWare Fusion and ESXi support paravirtualized IO, but virtio is a specific
KVM technology. Xen paravirtualized IO is similarly the same idea but not
compatible.

------
holy_city
This falls on deaf years but I say it every chance I get.

I would pay a significant premium to install MacOS on a machine without
violating their ToS.

~~~
TimTheTinker
Since Apple isn't opposed to releasing new OS flavors, I think they should
release "serverOS", a variant of macOS but licensed to run anywhere, even (or
especially) on non-Apple hardware and in VMs.

It's very frustrating to a _lot_ of people that macOS VMs aren't easy
(licensing/ToS-wise) to spin up on non-Apple hardware, especially since Apple
doesn't sell high-end servers any longer. Yes, that calculus will be different
when the new Mac Pro begins to sell, but a lot of IT departments would rather
_add_ Apple VMs for testing/build/dev to their on existing on-premise compute
clouds (vSphere/etc.) than spin up brand new ones on Apple hardware.

Additionally, there's a lot of demand for local Apple VMs on Windows machines.
Microsoft makes a lot of money from software that's running on my Mac -
especially Office and Windows (via Parallels Desktop or Boot Camp). Why
shouldn't Apple make money from VMs running on Windows and Linux machines?

~~~
airstrike
Perhaps better yet they can build Apple-branded server hardware and compete
with Azure and AWS on a Mac OS version of the cloud

~~~
AceJohnny2
Server hardware is low-margin. Apple doesn't do low-margin.

~~~
airstrike
Cloud hosting is high-margin, though

------
ajconway
I wonder if anyone had success in running macOS VM on macOS via hvf
acceleration. Would be a great free alternative to VMWare Fusion and
Parallels.

~~~
pmjordan
Very recent versions of Qemu have "experimental" support for HVF, so in theory
it should work. I haven't had a chance to try it yet, however, and it's
possible that there are some MSRs or similar that aren't sufficiently
supported yet. If this is something you(r employer/company) care about, feel
free to get in touch as I suspect it's not too difficult to fix if it doesn't
currently work.

~~~
ajconway
I believe it did work 2 years ago, Veertu Desktop seemed to be based on the
Qemu with HVF.

~~~
lvh
Yep, but back then I think it was just commercial -- I believe everything got
upstreamed.

(The nice thing about Veertu using HVF was that it could ship a virtualization
product in the App Store.)

------
Wowfunhappy
Does anyone understand why this works on AMD processors without a custom
Darwin kernel, as would be needed in a native AMD Hackintosh setup? The core
x86 code is still getting executed natively, right? So, what magic does the VM
perform?

------
vishesh92
Doesn't this violate Apple's licenses? AFAIR, MacOS is illegal to run on non-
Apple hardware.

~~~
eivarv
You may violate Apple's EULA by running macOS on non-Apple hardware, but it's
not _illegal_ (it's not a criminal offence).

~~~
chii
most people don't understand the difference between a civil offence and a
criminal offence (which is what i would use the term "illegal" to describe).

Violating a contract is not "illegal", but is a civil offense, and requires
the other party to sue you to recover damages. Copyright infringement is also
not "illegal", but is a civil offense (however, i do believe that a lot of
copyright lobbies want to change copyright violations to be a criminal
offence, so they won't need to sue, but instead use public prosecution to
recover their damages).

~~~
Hello71
This is terrible legal advice. Criminal penalties for copyright infringement
offenses have existed since at least 1897 in the United States, and at least
1921 in Canada.

------
megous
One more thing (not mentioned in the docs) post-install is to use
QemuUSBTablet-1.2.pkg, for nicer mouse interation.

~~~
pmjordan
This should no longer be necessary with newer Qemu versions (since 2.10 or
2.11 I think) as the USB tablet's device descriptor has been fixed to be
standards-compliant in Qemu.

(Source: I'm the author of both that driver and the Qemu patch but I've not
been able to spend much time on macOS virtualisation lately so it's possible
things have started breaking again.)

~~~
megous
Intereesting, thank you. I've been using this habitually since 3-4 macOS
releases back, and didn't realize this might be no longer necessary.

Also thank you for the driver. :)

------
exabrial
I've been interested in doing something like this so I can run an iMessage
proxy. A lot of neat gateway apps for OSx have popped up (like
[https://www.wemessageapp.com](https://www.wemessageapp.com)) to get iMessage
support on Android.

~~~
camhenlin
I've been doing this for years with some of my own personal projects like
[https://github.com/CamHenlin/imessageclient](https://github.com/CamHenlin/imessageclient),
[https://github.com/CamHenlin/iMessageWebClient](https://github.com/CamHenlin/iMessageWebClient),
and
[https://github.com/CamHenlin/imessagebot](https://github.com/CamHenlin/imessagebot)
and some others - one thing that I'll note is that in my experience, Apple is
pretty aggressive and somewhat arbitrary at banning accounts from accessing
iMessages if they get on to the service from a VM - even if your usage is
normal, personal iMessaging. I was trying out using VMWare and virtualbox
specifically. In fact, I've been accidentally successful at getting my
computer and home network banned from Apple services by accessing iMessages
via VM. I strongly recommend running these types of services on bare metal
Macs although ymmv.

------
rubyn00bie
I just bought a used dual socket (E5 V2) server to play with KVM and to try do
just this... I suspect, performance is probably pretty righteous even in the
VM, and old xeon's like the 2667 V2 are dirt cheap these days. MacOS doesn't
need much VRAM and old AMD cards are pretty cheap (GPU passthrough is easier
with AMD cards [1]).

I'm really looking forward to running this later.

[1] I could be wrong on this, but from my previous research into gpu
passthrough made it seem as though NVidias consumer cards aren't generally
allowed to do it because they're driver locked.

------
draugadrotten
How is the performance compared to running macOS on the same hardware (ie
Hackintosh style)?

~~~
ryeights
Poor unless you have a macOS-supported GPU to put through PCI passthrough.
Otherwise, macOS will not use graphical acceleration and the system UI will be
very glitchy (e.g. severe ghosting) and slow to respond.

~~~
eikenberry
Is the non-GPU passthrough performance bad enough to impact non-graphical
applications? Is the whole UI just slow without it?

------
pulkitsh1234
can this handle 'xcodebuild' ?

~~~
asdkhadsj
That's my question. This seems hugely useful to automate MacOS builds in a
sane manner. Yet, due to licensing I do wonder if it's even worth caring
about.

If I use this at work I'd be risking my job on if Apple decides to sue my work
for not following MacOS licensing for our build pipelines. If I use this in
OSS / private software, I risk them suing me directly.

Shame, all I want to do is streamline providing software for Apples customers.
You'd think Apple would want that more than some small money from a
hypothetical non-Apple user merely trying to deliver products, functionality
and improved UX to Apples customers. I feel like our (my and Apples)
incentives are aligned. /shrug

~~~
mchristen
I think part of the reasoning, perhaps misguided, is for quality assurance.
It's easier for them to say our stuff runs only on our 'certified' hardware
then to try and support everything under the moon.

These days I don't think that argument holds up though, back in the early days
of x86 hardware and peripherals it made more sense.

In a past life we used mac minis sitting on a shelf in a datacenter to run
builds off of, it worked well enough.

------
terhechte
Do the special network / bluetooth services (iCloud, iMessage, Handoff,
AirDrop, AirPods) work with this setup?

~~~
Operyl
Handoff requires a very specific set of Bluetooth hardware iirc, and it would
need to be entirely passed through. So most likely no. And I believe that some
of the iCloud services (specifically those entangled with iMessage/FaceTime)
will require a valid SN (you can “generate” one by brute force though). It’ll
also require that you give it two interfaces, one Ethernet and one wireless
(and it’ll sometimes need to start a small wireless network for things like
Airdrop).

~~~
terhechte
Thanks! So if I were to build a new system just for this and could decide on
the components, _and_ had an old Mac Mini flying around whose SN I could take,
then it should entirely be possible, right?

~~~
Operyl
That’s generally preferable, yes, but I believe the SN needs to match the
model identifier, and it’s generally best to match the model closest to the
hardware you’re using. At that point, if it’s a specialized rig for this, I’d
just skip out on KVM and just install it. Sites like tonymacx86 have build
guides they keep up to date with the “most compatible” parts.

------
LeicaLatte
Very nice. If this works on ec2/droplets, I might have found a good solution
for my iOS/macOS CI needs.

------
dharma1
How good is the passthrough perf?

I'd like to build a hackintosh box with amd 3900x and amd rx5700 xt GPU - for
video editing etc.

KVM seems like the only choice for AMD cpus. Will the GPU work with KVM? What
mobo should I get?

------
StreamBright
We should have a tool to create VMs on macOS as well. There is the new API but
non of the FOSS tools using it. I am wondering why.

~~~
sigmaris
I assume by "new API" for VMs on macOS you mean Hypervisor.framework, which is
supported by qemu 4.0.0 and xhyve, both open-source. I wrote a blog article
about using qemu with Hypervisor.framework to install Debian in a VM here:
[https://sigmaris.info/blog/2019/04/automating-debian-
install...](https://sigmaris.info/blog/2019/04/automating-debian-install-
qemu/)

~~~
StreamBright
Excellent! Thank you very much for sharing, this is exactly what I was looking
for.

