Macbook Air M1 Virtualbox



Can Windows 10 run on an Apple silicon M1 MacBook Air? Today, Krazy Ken tries to run Windows 10 on ARM with ACVM and QEMU. Let's see how well. 発売日に予約したMacBook Airが昨日やっと届いたので、ぼちぼち触ってるんだけど、周りに話を聞くと迷ってる人がいるようなので、買うまでに悩んだことや、この1日ちょっと触って分かったことを書き留めておく。 AppleのM1搭載Macレビュー インテル用ソフトも快適 アップルは同社のパソコンで. M1’s 16-core Neural Engine is as same as NVIDIA’s Tenser Cores and the after all the macOS Big Sur, Optimize for M1. So in 8GB ram the system runs like 16GB Windows System Apple’s X-code is also helps you. As macOS is based on Unix so it’s a great machine for coding. Try FreshBooks free, for 30 days, no credit card required at Honey for FREE and start saving today at https://joinhoney.c.

It's not mentioned which MacBook Pro is being used, but it's a safe bet that the CPU is capable of VT-x but it may be disabled. I've checked a 2012 iMac, a 2017 MacBook Pro and a 2014 Mac mini and all had VT-x supported and enabled. Check if supported: To check if your Mac.

Ever since I read Kay Singh’s Apple Silicon M1: Black. Magic. Fuckery article, I couldn’t stop wanting one. My 2012 MacBook Air was in need of a replacement, and although still very serviceable for a 8+year old laptop, not upgrading OSX and a shortened battery lifespan were getting irritating. So, Santa (well, you know) bought me a M1 2020 MacBook Air. At first, I wanted to hold off for a while, after many of the developer tools I use were officially supporting ARM64. But hey, what the heck.

As there’s not a lot of information out there on the M1 from a developers perspective, except a fewother blogs here and there, I wanted to chime in and share my initial findings. Bear in mind that this will very likely change in the near future, as many developers are starting to support the new architecture. An interesting site to check whether your software works is isapplesiliconready.com and doesitarm.com - although these are not always up to date and sometimes provides false information! Be sure to go after the source yourself.

Whatever you do, be sure to upgrade Big Sur to 11.1 first - that will take a while (and eat up more HDD space). I went with the 512GB Air version with eight cores. I don’t care about CPU throttling - even with the 25% performance hit, it still outperforms heavyweight Intel MacBook Pros!

Productivity tools

Before getting to the programming part, let’s take a look at the basic tools I couldn’t live without. First, install iTerm 2. It’s already M1-ready, and Big Sur moved from Bash to Zsh, another good shell I still know from my Gentoo days. Check out technofob.com’s oh-my-zsh config for colors and such, and maybe add extras in your ~.zsh.

Now that you have a shell, we need cmdline stuff. The master branch of Homebrew is ARM64-complaint and you can install two homebrews for the bottles that are still lagging behind - or compile them from source using brew install --build-from-source. I’ve successfully built these from source: sqlite, openssh, python3.9, imagemagick. I set up the M1 homebrew version in /opt/homebrew - and so far, every installation didn’t need a Rosetta alternative - yet. (Heads up: unrar is gone! See link for alternate formula.)

A few other critical pieces of software:

Already running native:

  • The Brave nightly build. Most Chromium-based browsers work.
  • Rectangle, the upgraded Spectacle one.
  • Alfred - of course! I became a convert after fiddling with it, replacing Spotlight and Clipy (see below).

Still on Rosetta - but development on the way:

  • Clipy clipboard utility, the upgraded ClipMenu one.
  • Hopefully Opera someday soon.
  • Sublime Text 3. Preview builds of Visual Studio code are already released.
  • Evernote. It runs on Electron, a known-to-be CPU hungry JS shell. The Rosetta one works, but is a bit sluggish and uses a significant amount of battery.
  • Update jan. 2021: The latest GIMP 2.10 is finally released for OSX, but there are known Big Sur issues. I didn’t run into a single one.

Update 12 jan. 2021: Sublime Build Systems still use /bin/bash to execute the exec_cmd or cmd commands. This means that your $PATH will be screwed up. There are a couple of options to mitigate this. Fiddling with the internal exec.py file did not work for me. In the end, I simply re-created a .bash_profile file in my home dir to set the path for Sublime Text 3 builds. Using Terminus does not help.

Virtualbox Macbook M1

Spotify is a mess, according to some, while others claim that Rosetta is “good enough”. I’d like to run as much stuff as possible native, I guess we’ll have to wait. For now, “it just works”, but as Evernote, is far from optimized.

Java development

Virtualbox for m1

The Azul community released ARM64 Java builds that are blazingly fast. There are other solutions, but the Zulu builds I tested so far are great. They even ported the JDK13/JDK11/JDK8 older ones. I settled for v15, since Gradle does not like Java 16 yet, according to the compatibility matrix. Gradle 6.7 builds fine with the ARM64 development kit.

The biggest hurdle for me was JavaFX, the UI libraries we use to teach students the Model-View-Controller principle. It reportedly works under Rosetta, but I wanted to try it native anyway, and got a nice no toolkit found exception, not unlike this one. Funnily enough, it builds fine, but it does not execute: JavaFX looks for a native UI renderer and cannot find one.

Installing JDKs with different architectures turned out not to be problematic, and I can quickly switch between both using an alias:

Paths shouldn’t be hardcoded, but /usr/libexec/java_home -a didn’t work for me. Building this sample FXML project using ./gradlew clean build took about a second natively:

  • ARM64: 1378ms
  • x86_64 Rosetta2: 9646ms! (second time: 2459ms, still almost double)
  • x86_64 MacBook Air 2012: 14590ms (second time: 3200ms)

As you can see, combining Rosetta with another “Virtual” Machine is not a particularly great idea. Remember that the 2012 MacBook Air only has 4GB of memory, with eight year old tech.

NetBeans IDE

NetBeans: 12.2 includes Big Sur/Rosetta2 support, but is not running natively. It auto-detects the JDK ARM64 build, which is even more annoying, as setting the default Java Platform is a pain. The “best” way is to manually override netbeans_jdkhome in netbeans.conf. Compared to IntelliJ, NetBeans truly is a piece of shit. Of course, the x86_64 setting also slows down NetBeans itself, not only the project you wish to compile/run.

IntelliJ IDE

IntelliJ: 2020.3 ARM64 test builds are available. It seems that the Rust debugger is not hitting the breakpoints. There’s also a preview PHPStorm build, although I haven’t tried it yet. After opening a Gradle 6.3 project, IntelliJ complains about an invalid Gradle configuration, claiming that JDK15 isn’t compatible with this version of Gradle, although it builds fine on cmdline. Fixing the distribution URL in gradle-wrapper.properties to 6.7.1 does the trick:

After that, the Azul JDK combined with the IntelliJ preview build is a snappy experience and pleasant to work with. Debugging works fine, just as a few third-party libraries I tried - as long as you stay away from JavaFX.

.NET Development

I still need to try this with Rider and Mono. Khalid Abuhakmeh wrote about his experience in a jetbrains blogpost, concluding that it was pleasant to work with .NET on the M1. Bear in mind that he’s talking about Rosetta.

C/C++/Cross-compiling

First, get Xcode from the App Store. Yoink, 12GB!

Next, the CLion IDE: the debugger cannot be launched, official ARM support is currently not there yet, but they’re working on it (last update: 25th of December). One of the perks of being an early adopter, I guess… I don’t want to try this in Rosetta as I only need CLion every odd semester for my teaching activities, and hopefully, by then it’ll be okay.

Until then, I’ll compile and debug cmdline. CMake works flawlessly, using the master version of brew: > Pouring cmake-3.19.2.arm64_big_sur.bottle.tar.gz. Using it to compile the 1.10 release of Google Test gives C++11 errors so you’ll have to add a -DCMAKE_CXX_STANDARD=17 flag to CMake as per this ticket. Compiling itself was extremely quick, compared to what I’m used to on my 2012 MacBook Air.

Game Boy Advance

Cross-compiling GBA stuff using pacman worked flawlessly, obviously in Rosetta mode. I doubt it will ever be released natively. Cross-compiling the whole gba-sprite-library, including four demo projects, took 15343ms. I was surprised that this worked without any problems, and a Rosetta-enabled mGBA happily plays my binaries! On the 2012 laptop, it takes more than twice that long: 32950ms.

Arduino

After finding not so promising Reddit posts, I had to try it out myself. A Github issue tells us Rosetta is supported and “somewhere in the future” native support should be coming - Linux ARM64 builds are already available.

After installing the Arduino IDE (which runs on a JRE, by the way), right-clicking and pressing “Get Info” reveals Kind: Application (Intel). It boots up fairly slowly, but compiling and uploading work without problems. Performance is a non-issue here, you won’t be compiling megabytes of C code anyway.

JavaScript

Node 15.5.0 and its package manager have native bottles uploaded in the master Homebrew repository. Everything works flawlessly after a brew install npm. Do yourself a favor and install a Chromium-based browser to check out Lighthouse.

Go

It’s been a while since I programmed in Go, but Dids created a gist entitled “Compile Go for Apple Silicon (M1)', where he explains how to compile Go natively. I have yet to try it out.

Python

Although python 3.8 comes included with Big Sur, python 3.9 compiled without any issues from source using Homebrew. However, since OSX always seems to come with an annoyingly old 2.7 version, you have to create a symlink in /usr/local/bin to set the default version to 3.9. You may also need to re-link Python:

Writing

Hugo extended works like a charm on ARM64. Pfew!

As for my needed LaTeX tools: the MacTeX about ARM page tells me that full native support will arrive in spring 2021. Until then, Rosetta to the rescue (it also requires 6.7GB…). I do hope that switching will not be problematic, as I can’t wait until then.

As for pandoc that converts my Markdown to LaTeX, compiling from source downloads the x86_64 version of the GHC Haskell compiler. As expected, compilation crashed:

Macbook

So, I reverted to the x86 installer pkg, which seems to work fine. After the necessary installations, I re-compiled a recently accepted ICSE paper (involving make, pandoc, panflute, pdflatex, bibtex, yaddayadda), and it took 7700ms on the 2012 Air, while the Rosetta x86_64 version took 4447ms. Consider me happy! It will be very interesting to see this number further reduced in spring 2021.

Virtualization

The universal memory structure of the M1 architecture has its advantages, but these obviously fade when dual booting. Furthermore, using something like VirtualBox gets you into further trouble by evenly splitting RAM. It looks like VirtualBox support will never be coming as it requires a x86 CPU.

Alternative options are Parallels, which has a technical preview already published, and VMWare Fusion, which announced on Twitter that they’re working on it.

As of now, there is no possibility for me to run my virtual image of Linux for the Operating Systems course I’m teaching. I guess I’ll be using a Dell laptop for this purpose… I don’t mind, my 2012 MacBook Air didn’t have the required memory to comfortably work with it anyway, so I already resorted to another machine.

Edit 25 jan. 20121: Eleanor pointed me towards a gist to get qemu running on M1. This means it is possible to run Windows 10 and Ubuntu Server on your ARM Mac! On performance: A simple factorial program in ghci is noticeably faster on Ubuntu (ARM64) via qemu than on MacOS via Rosetta. Follow Sevarg’s recent guide to get Ubuntu running under QEmu!

So… Is it worth it?

It depends. If you’re like me, and you have been waiting for a long time to upgrade, now is the best possible time to take the plunge. However, if you already own a more recent MacBook (I hope it’s with a decent keyboard: this one types lovely, compared to my wife’s 2017 butterfly keyboard on the MacBook Pro - what a train-wreck), it might be a better idea to wait half a year.

Currently, with the software I daily use, about 50% of them are running under Rosetta. It is impressive nonetheless: it is seamless and still very fast - except if you’re a Java developer and somehow have to support JavaFX. Don’t forget that the M1 chip comes with other awesome perks:

  • 18h battery life (more like 10+ with regular compile jobs, but still great)
  • Greatly improved screen compared to my 2012 laptop
  • I finally bought a QUERTY one.
  • 8GB is more than 4GB.
  • We used the 2020 Air to video-call (using browser-based Jitsi) over Christmas, while we used the 2012 Air during Christmas Eve - the fan went on and it crashed once.
  • The instant-on effect is amazing, compared to waiting up to ten seconds.
  • I can finally play Baldur’s Gate III!

Like Kay said: Black. Magic. Fuckery!

With M1 Macs mere days away for early adopters, those who need to run virtual machines on their Macs may have a bumpy time ahead.

It is important to note that currently available versions of Parallels® Desktop for Mac cannot run virtual machines on Mac with Apple M1 chip. Good news: A new version of Parallels Desktop for Mac that can run on Mac with Apple M1 chip is already in active development.

When Apple Silicon Mac was first announced during the keynote at WWDC on June 22 of this year, Apple demoed a Parallels Desktop for Mac prototype running a Linux virtual machine flawlessly on Apple Silicon. Since WWDC, our new version of Parallels Desktop which runs on Mac with Apple M1 chip has made tremendous progress. We switched Parallels Desktop to universal binary and optimized its virtualization code; and the version that we are eager to try on these new MacBook Air, Mac mini and MacBook Pro 13″ looks very promising.

VMWare Fusion isn’t ready yet either, according to this tweet:

So excited for todays announcements from @Apple!

While we're not quite ready to announce our timeline, we're happy to say that we are committed to delivering VMware virtual machines on #AppleSilicon! pic.twitter.com/en1FNorxrM

— VMware Fusion (@VMwareFusion) November 10, 2020

Macbook Air M1 Virtualbox

Even when these and other virtualization tools are ready,1 running Windows as a VM atop a M1 Mac probably isn’t going to be. So far, all the public has seen running virtually on M1 Macs is ARM-based Linux, back at WWDC.

Microsoft has a version of Windows running on ARM chips, but as of this summer, things didn’t look great for getting it to run virtually on the new Macs:

“Microsoft only licenses Windows 10 on ARM to OEMs,” says a Microsoft spokesperson in a statement to The Verge. We asked Microsoft if it plans to change this policy to allow Windows 10 on ARM-based Macs, and the company says “we have nothing further to share at this time.”

That said, ARM Windows is getting better. Back in September, Microsoft announced that the ARM version of Windows 10 is gaining x64 emulation:

We are excited about the momentum we are seeing from app partners embracing Windows 10 on ARM, taking advantage of the power and performance benefits of Qualcomm Snapdragon processors. We heard your feedback and are making Microsoft Edge faster while using less battery, and announced that we will soon release a native Microsoft Teams client optimized for Windows 10 on ARM. We will also expand support for running x64 apps, with x64 emulation starting to roll out to the Windows Insider Program in November. Because developers asked, Visual Studio Code has also been updated and optimized for Windows 10 on ARM. For organizations, we’re committed to helping them ensure their apps work with Windows 10 and Microsoft 365 Apps on ARM64 devices with App Assure.

Before this, the ARM version of Windows could only emulate 32-bit applications. It’s a nice improvement, and maybe one day it will matter to Mac users.

Virtualbox M1 Chip

  1. Oh, and Boot Camp is totes dead. Docker is currently busted, but should work in the future. ↩