macOS / Windows VM strategies for Xojo 2024

After 5 years with my 2019 MacBook pro, I finally decided to make the upgrade to Apple Silicon for my main development machine.

I’m going to freeze my old software (which supports macOS through Sonoma, and Windows 7 through 11) and target the new version my the software for the future only, supporting only Apple Silicon and Windows 11 or later, possibly Windows 10 (TBD)

I’d like to do all my development on my new M4 MacBook Pro if possible, including Windows development.

What technologies should I use?

  • Use Xojo to build a Windows ARM version, and Remote debug to a Windows ARM VM?

  • Use Xojo to build a Windows Intel version, and Remote debug to a Windows ARM VM? Does the Windows built-in Intel to ARM translation work well? Does Remote debugging work this way?

  • What VM tools? I have been using both VMWare Fusion and Parallels, but I’m open to other VM hosts.

I have a bunch of old macOS and Intel Windows machines around for testing if necessary, but I’d like to spend most of my time on my mac.

My 2 cents -

  • I would not worry about supporting Windows 10. It hits end of life in the Fall of 2025.
  • I don’t see Windows ARM being a large market for the foreseeable future, probably better to focus on Windows Intel.
  • VirtualBox is free and it works pretty well running on a Windows Host OS running Windows Guest VMs. But does seem to work best when only running a single guest machine at a time and that is on an Intel 11th Gen i7 with 64GB of memory.
1 Like

But the question was for Mac with Apple Silicon, so VirtualBox + Intel Windows ?

1 Like

Related question: In the past, we used to pay a rather hefty sum to Microsoft to get Windows licenses to test with. Do people still do that, or does MS give free OS licenses that are good enough for development?

You can download test-environment VMs here:

Edit: Or… you could.

Due to ongoing technical issues, as of October 23, 2024, downloads are temporarily unavailable.

With that, I’ll mention that Linus Tech Tips doesn’t bother to activate windows.

2 Likes

I see this note:

Note

Due to ongoing technical issues, as of October 23, 2024, downloads are temporarily unavailable.

scrolled down and see some links to other pages, like:

I’m also using a Silicon machine as my preferred dev machine (iMac M3, Sonoma).

And although I used VM’s for many years on Intel (VMWare then later Parallels), I’m not convinced that Intel emulation on Silicon/ARM will be as reliable as Intel on Intel hardware (whether macOS or Windows).

As a result I still have a 2018 Mac mini (Intel) that I run head-less with Ventura that I then use with Screen Sharing app to remote into. The mini also has a Windows 10 bootcamp partition that I then use with Remote Desktop for Mac.

The only drawbacks are:

  • Remote screens into macOS are not as crisp as with an attached monitor.

  • My 2018 Mac mini cannot run Windows 11. If I need it, I may consider buying a Mini PC and run it head-less too.

The bonus:

  • Minimal impact to performance and resources on my iMac.

I’m keeping my eye open for a good deal on a used M1/M2 Mac mini so I can test other macOS Silicon versions.

1 Like

I still get the odd customer asking about Windows 7
Windows 10 aint going anywhere in a hurry, supported or no.

I installed Parallels on my M2, and then installed Windows Arm , using a genuine serial number bought from a company in France for a few Euros.
Works perfectly.

I build Intel 64bit Windows , and Windows Arm runs that perfectly well, faster than an actual intel laptop I keep for testing, (which is getting dusty these days.)
What I cant speak to is remote debugging in the Windows VM
I know it works fine in an ARM Linux VM which I also keep on the Mac

Why don’t you want to do a universal version? I haven’t had an Intel specific bug in the last years. Also lots of users are still on Intel computers. This is the statistics from my app:

6 Likes

Why don’t you want to do a universal version?

The problem with supporting too many OS and hardware combinations is the combinatorics of testing, e.g.:

  • CPU : Intel (mac), Intel (windows), Silicon (mac), ARM (Windows)
  • OS : X versions of mac and Y versions of Windows
  • GPUs (my app is graphics-heavy) - Intel, Nvidia, AMD, dGPU vs. iGPU, and now Apple Silicon

To fully test these out going forward would require something like 100+ unique setups.

By drastically cutting support for old tech, I hope to get this back under control.

My old app isn’t going away - anyone purchasing the new version will get license codes for the old version, in case they need to support the old tech.

My company has used this technique for 20+ years and it tends to make (almost) everyone happy.

2 Likes

There are still many Intel Mac users out there, not even Apple has dropped support for them (Sequoia is available for Intel hardware). Considering Intel and Universal Binaries are a simple click in Xojo, personally I wouldn’t recommend ending support for Intel binaries until Apple does at the minimum.

Beatrix’s statistics are a wonderful view into this! I’m so glad she shared them.

3 Likes

@Beatrix_Willius interesting data, thanks. I’m surprised (A) that the ARM % is so high (75%) but going up very slowly (perhaps 1% per month?)

@Tim_Parnell - I agree that for most apps, dropping Intel support now might be premature. Mine is a somewhat unique situation, more due to GPU issues than CPU (described above.)

Apple clearly will dump Intel at some point - “when” is the big question.

I agree. Thank you @Beatrix_Willius :smiley:

I agree. I used to think in terms of being as backward compatible as possible, but given that I’m not ready to release any of my projects yet (still working on them), I’ve moved the goal-posts forward quite a bit.

I play on macOS mostly, and because I want an app as modern as possible, to utilize features like Greg’s macOS Toolbar and the pre-loaded SF Symbols library for all my icons, I’m only supporting Ventura or higher (for Intel & Silicon, of course).

One caveat is that M4 Macs can’t virtualize versions of MacOS prior to 13.4 (Ventura), so if you maintain compatibility with older OSes you’ll need a second machine to test on.

Likewise, I’ve encountered issues with Windows ARM that don’t occur on Windows Intel, but a lot of that is dependent on what you’re trying to do. AI/ML workloads specifically have had a lot of problems, as has video editing/encoding.

When Apple Silicon launched, I posted a similar question to this very forum. Back in the Intel Mac days it was feasible to have one Mac to build and test for both Windows and MacOS. But that time has passed, and depending on what you’re developing, you now either need multiple machines, or a very understanding customer base. Of course if you’re just developing simple desktop apps none of this may apply.

Edit: One other note, https://mac.getutm.app/ is a great free vm platform to try because it can emulate as well as virtualize. VMware Fusion has also just recently been made free, a conciliatory move from Broadcom after they acquired VMWare, eliminated lifetime licenses and jacked up the price over 1000% for some of their enterprise customers.

2 Likes

IMO - When looking at the Windows side of things you need to evaluate how your target audience typically does its work. I have software that the customer base is never going to be using Windows ARM in the foreseeable future. An Intel laptop/desktop is going to be the hardware and not any of the Surface devices UNLESS many, many things change in the Windows world in the next 5-10 years.

re: https://mac.getutm.app/ I’m curious if anyone has a rough benchmark comparing an Intel x64 exe being emulated on a M4 mac (via Windows running an Intel VM). [Edit: I wrote Arm, but I meant Intel here]

Is it half as fast? One-tenth as fast?

For some tasks, such as checking that a UI looks OK or works normally, speed is not really an issue, and Intel emulation may be good enough.

I don’t have benchmarks, but when I had to install Windows 10 for a hot second to test something, it took 24 hours (also a huge part of trial and error) to get through the install process.

I honestly can’t recommend it. My setup is to use a physical PC. A micro PC is a great way to do this, and they can be cheaper than the full retail price of a Windows license. I would honestly recommend a physical machine over a VM.

4 Likes

The migration commences. Picked up my new M4 MacBook pro yesterday. Today I used Migration Assistant to bring everything over.

My first goal was to get a Windows 11 VM (ARM) working. I need some sort of shared folder support, so I can build my Xojo apps on mac, and test them on Windows, and do windows code-signing and Innosetup builds.

VMWare Fusion claims that it doesn’t support Shared Folders for ARM VMs (link)

So I went with Parallels (version 20.1) instead.

Creating a Windows 11 (ARM) VM in Parallels couldn’t be easier:

  • Click the + button to create a new VM
  • Choose “Get Windows 11” and it automatically downloads, configures and installs a VM for you.

Note: by default, it enables all the sharing features between Mac and Windows, which I find annoying and unsafe from a privacy/security perspective.

To remedy this, shut down the VM, and then you can configure as you wish. I turned off almost everything except for Clipboard Sharing and a single folder shared from Mac to Windows.

Performance is pretty amazing - I’m able to run both 32 and 64 bit Intel EXEs in the VM and they run at full speed, in spite of being emulated in the Arm Windows OS, and the Windows OS being run as a VM on macOS.

Based on this, I think I should be able to do most of my development on macOS on my M4, use the Windows (ARM) VM for testing, installer builds and code-signing. I’ll keep my old Intel Mac around to run Bootcamp and Intel VMs for testing if needed.

3 Likes