I recently updated from a 2018 MacBook Pro Intel i9 to a 2023 MacBook Pro M2 Max. The primary reason; faster compilation times. So how much faster is the new MacBook Pro M2 Max than the older machine: 50-80% faster in compile times.
Most of the OSX applications worked without any issues at all, but there were some limitations of the M2 that are not widely documented. There were several Visual Studio limitations on Windows 11 ARM under parallels. This is a summary of the limitations and issues I found.
For a professional software developer, a developer machine lasts 5-7 years. Reliable laptops like the MacBook last longer for consumer use, but after 5-7 years the gains in speed for professional software development almost always justify the upgrade even if there are no issues with the hardware.
When using a large source repository with thousands of libraries that takes over an hour to build, a 50-80% improvement in build time is a significantly measurable increase in productivity.
The new MacBook Pro M2 Max specification:
- Apple M2 Max, 12 cores
- 64 GB memory LPDDR5
- Sonoma 14.0
- 2 TB SSD
⠀ The older MacBook specification:
- Intel i9 2.9 Ghz 6-Core
- 32 GB memory DDR4
- Ventura 12.5.2
- 1 TB SSD
MacBook OSX Limitations and Issues
Overall I would rate the M2 OSX migration 5 stars out of 5.
- Fortinet VPN Client on the Mac did not migrate using a backup/restore with a TimeMachine backup. The Fortinet VPN Client was re-installed, and configuration was setup again and it worked.
- Samsung T5 and T7 SSD's were not readable on the new MacBook. I removed the Samsung lock, reformatted to APFS with encryption and the SSD's were readable.
- Adobe Global Protect 5.1.13-38 would not install. The fix is to update a newer version. Adobe documents that 5.1.13-48 not supported on Sonoma on ARM see https://docs.paloaltonetworks.com/compatibility-matrix/globalprotect/where-can-i-install-the-globalprotect-app
⠀ The VPN issues are not entirely unexpected. VPN drivers need to do some low level stuff, but the both Fortinet and Adobe seem to have updates to work through the issues.
I did have to install Rosetta 2 when prompted. That allowed running the 30 Intel apps that I had installed previously. All without issue so far.
That was it. For the Mac applications, there were no other issues. That was a pleasant surprise. I was anticipating more compatibility problems.
Applications I ran without any issues.
- Office 365 / Outlook / Word/ Excel / PowerPoint
- Things 3
- Disk Inventory X
- Visual Studio code
- .Net 6
- PowerShell core
Parallels Windows 11 ARM64 Limitations and Issues
I use Windows 11 under Parallels for software development with Visual Studio and .Net. This was a little more challenging and I ran into a few more issues.
Overall I would rate this experience 3 stars out of 5 mainly due to the undocumented lack of some Visual Studio Workload support.
First, Parallels will not run an x64 Windows virtual machine on the M2 chip. It will only run a Windows ARM configuration on the M2 chip. That means a Windows ARM configuration, not a x64 configuration. That also means installing Visual Studio ARM on top of Windows ARM.
- Windows Server 2022 VM could not be created. I had a Windows 11 and Windows Server Parallels VM previously.
- Fortinet VPN Client would not install correctly on ARM. It installed, logged an eventlog error and would not start. The alternative is to use the Host Mac VPN client instead.
- SQL Server 2022 Developer Edition would not install on ARM. This is a widely documented issue. SQL Server does run under ARM, it just doesn't install. The workaround is to use powershell install scripts on https://github.com/jimm98y/MSSQLEXPRESS-M1-Install .
- Global Protect VPN 5.1.13-48 is not supported on Windows ARM. It would install without errors, but will not connect. The resolution is to update to Global Protect 6.0 or later.
- Notepad++ on ARM does not have XML Tools plugin support.
- Visual Studio Markdown plugin will not install on Visual Studio 2022 ARM. https://marketplace.visualstudio.com/items?itemName=MadsKristensen.MarkdownEditor2 On GitHub at: https://github.com/madskristensen/MarkdownEditor2022
- Visual Studio Windows Workflow Foundation will not install on ARM.
- Visual Studio Workload for Data Storage and processing is not available to install on ARM.
- Visual Studio Workload for Data Science and analytical applications is not available to install on ARM.
- Visual Studio Workload for Office / SharePoint development is not available to install on ARM.
- Visual Studio LINQ to SQL tools is not available to install on ARM.
- Visual Studio class designer is not available to install on ARM.
⠀ That's quite a few Workloads and components for Visual Studio not supported on the ARM. I have not seen that information listed anywhere that those are not supported. If your development needs require them and you use Windows 11 on an ARM, you have been warned.
This link describes the Visual Studio workloads supported by ARM: https://github.com/MicrosoftDocs/visualstudio-docs/blob/main/docs/install/visual-studio-on-arm-devices.md
The Arm64 GA supports the following workloads:
- .NET desktop development
- Desktop development with C++
- ASP.NET and web development
- Universal Windows Platform development
- Visual Studio extension development
- Game development with C++
- Node.js development
Unfortunately Microsoft does not list the workloads that are not supported. That was a bit of a disappointment that Windows Workflow Foundation isn't supported. I work with a company that is currently using Windows Workflow Foundation so those projects will not build. I know Windows Workflow foundation did not make it's way into .Net 5 or later, but it is a bit disappointing for it not to show up on ARM.
The Data storage and processing workload (which is not available for ARM) includes Azure Development for:
- Azure Data Lake and Stream Analytics Tools
- Azure Resource Manager tools
- Azure Cloud Services tools
- Service Fabric Tools
- Azure Powershell
The following Visual Studio Cloud, database, and server components are not available to install on ARM:
- Azure Authoring Tools
- Azure Cloud Services build tools
- Azure Cloud Services core tools
- Azure Compute Emulator
- Azure Data Lake and Stream Analytics Tools
- Azure development prerequisites
- Azure libraries for .NET
- Azure Powershell
- Azure Resource Manager core tools
- CLR Data types for SQL Server
Refer to this link for more information on ARM64 Visual Studio: https://devblogs.microsoft.com/visualstudio/arm64-visual-studio/
The SQL Server install issue is a bit confusing. Microsoft documents SQL will support running on ARM64 https://learn.microsoft.com/en-us/sql/sql-server/install/hardware-and-software-requirements-for-installing-sql-server-2019?view=sql-server-ver15#pmosr. But there seems to be something in the installation process that fails on ARM64. The PowerShell scripts workaround provided an ideal solution.
This are other workarounds to the SQL Server install issue by using a docker instance, but that only uses SQL Authentication and not Active Directory domain authentication. https://database.guide/how-to-install-sql-server-on-an-m1-mac-arm64/
On a positive note, the following software ran on Windows ARM under the Parallels virtual machine without issues:
- Notepad++ (one XML extension issue noted above)
- .Net 7 SDK 7.0.12
- Powershell Core 7.3.8
- Git 2.41
- OpenJS.NodeJS.LTS --version 16.20.0
- Python 3.8
- WinMerge 2.16.32
- Agent Ransack
- DB Browser for SQLite
- Quicken Classic
- Visual Studio 2022
- Visual Studio Code
- SQL Server 2022 Developer Edition (see install issue above)
- Microsoft SQL Server Management Studio 19.1
Windows Developer Performance Settings
A few key tips for getting maximum performance from a virtual machine for Windows.
Disable Windows Search (Services, Windows Search, properties, Startup type: Disabled). It runs in the background draining resources for compiles.
For a virtual machine, set the hard disk properties to enable write caching, and turn off windows write-cache buffer flushing.
And tell Windows Defender / Windows Security to ignore the build tools.
Set-MpPreference -ExclusionExtension @(".cs", ".csproj", ".json", ".xml") -ExclusionProcess @("dotnet.exe", "msbuild.exe", "node.exe", "devenv.exe", "git.exe")
Microsoft on Windows 11 has a new performance feature called Dev Drive which runs ReFS instead of NTFS. The theory is it's a faster file system, and can be tuned to tell Windows Defender to ignore some of the disk i/o for faster build times. I tried it under Windows 11 in Parallels, but I did not see any measurable increase in build times.