2020 年末,Apple M1 横空出世,2021 年刚高考完的我看着「吊打 Intel」的性能对比图,以及 MacBook Air 优雅又近乎极端的无风扇设计,毫不犹豫地入手了。虽然只能用 macOS,虽然是 arm 架构的芯片,但是「反正我本来就讨厌 Windows」,不管这么多了!那时候的我并没有意识到,这个选择会给大学学习带来怎样的麻烦。

在大学里,不少课堂上要用到的软件都是 Windows 专有的,实验也大多是 x86 only 的……这给我带来了无数额外的折腾。特将各种课程里的折腾汇总成如下 Apple Silicon「生存指南」,一些成功案例,一些踩雷避坑,如果有不幸的学弟学妹也中了 Apple 的邪,可供参考。在观望 Apple 芯片版 Mac 电脑的同学也可参考后决定。

(当然最不折腾的方案就是:买一台新的 x86 电脑……)

运行 Windows 软件的方案

运行虚拟机

Parallels Desktop

在 macOS 平台上对 Windows 的支持最完美的当属 Parallels Desktop (简称 PD)了。这款软件对 Apple 芯片的 Mac 上运行 Windows 进行了很好的优化,安装使用难度也非常低。

除了运行 Windows,PD 也可以运行其他 Linux 发行版。除了 arm,它也可以模拟 x86,只是速度相较之下会比较慢。

PD 是收费软件,价格不菲。每人有 14 天的免费试用。如果想要白嫖,可以参考之前的文章:那些我白嫖的软件们

UTM

UTM 是一个基于 QEMU 的虚拟机软件,完全开源免费。最初是用于在 iPhone 或 iPad 上运行桌面操作系统虚拟机的,当 Apple 依靠魔改 iPhone 的 A 系列芯片重磅推出 M 系列芯片的时候,UTM 也顺理成章地推出了 macOS 版。

UTM 也可以在 arm 上运行 x86 虚拟机。详细的参数调整涉及 QEMU,有些硬核,不如 PD 那么完善和友好。有可能遇到奇奇怪怪的问题。可以作为除了 PD 之外的第二选择。

尝试 Wine

Wine 是一个开源项目,它实现了一些 Windows 的 API。通过 Wine 提供的兼容层,可以在 Unix 系统上运行一些 Windows 软件。当然,也有 macOS 一份。
Wine 并不是虚拟机。一个冷知识:Wine 是 Wine Is Not an Emulator 的递归简称……

macOS 上的 Wineskin Winery 是对 Wine 的封装,提供了简洁友好的 GUI 方便我们上手使用,可以在这里下载。

使用 Wineskin Winery 创建 wrapper,在其中可以运行 Windows 的 exe 程序。运行时,就像运行 macOS 上的 app 一样会有一个窗口,甚至可以 Cmd+F 全屏。
运行时可能会遇到一些小小的问题,比如某 dll 文件缺失(软件打不开,log 里有显示)、中文无法显示(缺失中文字体,中文会全是方块)等,这些可以使用 Wineskin 内置的 Winetricks 进行调整。

「云电脑」

所谓的「云电脑」就是计时出租的远程桌面,一般是按时间收费,价格不会特别贵。但是似乎由于种种原因,目前国内面向个人消费者的云电脑服务并不多,许多比较大的云服务厂商都不做这个。

个人试用过青椒云,说实话体验一般。小公司有限的带宽配上 HNU 时而便秘的校园网,延迟还是有一些的。

如果买一台主机放在寝室里,通过虚拟组网,可以在外远程桌面连接上这台主机。这也是一种「云电脑」……事实上,我确实这么做了。可以参考:使用 Tailscale & Headscale 进行虚拟组网

寻找替代品

不少软件都有 macOS 上可用的替代品。可以自行搜寻,此处不赘述。

使用 x86 环境的方案

VPS

拥有一台 VPS,即使是对于不学计算机专业的同学来说,也是很有必要并且很酷的。国内的腾讯云、阿里云、华为云都有很划算的新人优惠,每年 ¥100 左右。国外的 Vultr、Bandwagon 也都是不错的选择。当然关于 VPS 选购的水很深,没事可以逛逛 hostloc

总之,购买了 VPS、选一个喜欢的 Linux 发行版,SSH 上去就是一个 x86 实验环境了。这应该是最方便的方法。

Lima

虽然前文所述 PD、UTM 都支持 x86 虚拟化,但是他们都是针对带图形界面的桌面操作系统的。而我们做 CSAPP 之类的实验只需要一个终端,用不着大费周章搞个桌面环境。这时候,简洁优雅的 lima 就是不错的选择。

Lima 是适用于 macOS 的虚拟机(似乎也是基于 QEMU 的),支持文件共享和端口转发。支持 ARM on ARM、ARM on Intel、Intel on ARM、Intel on Intel 的虚拟机。通过简洁的几行命令,就可以快速开启一个虚拟机,用起来非常方便。GitHub 上的文档对各种用法有详细的介绍。

如果不习惯使用命令行,Lima-gui 也值得一看。
如果对 Docker 比较熟悉,可以直接试试 Colima,这是基于 Lima 的 Containerd 运行时。个人觉得从概念上来说「Docker 容器」比「虚拟机」要优雅不少,虽然二者在 macOS 上都是虚拟机……

HNU 不同课程的情况

程序设计 / 数据结构与算法

强烈不推荐老师推荐的 Dev-cpp 和 Code Blocks,这俩都是古董级软件了。推荐 VSCode。直接在集成终端里用 gcc 或 g++ 编译,这相比无脑的 F12 显然更透明一些。

程序设计到后期涉及到多文件编程,老师的演示是「创建一个 Code Blocks 项目」。如果写多个文件手工编译需要自行链接。如果不想提前自学链接相关的知识,可以用 VSCode 的「C/C++ Project Generator」这个插件。这个插件可以像 Code Blocks 一样给我们创建好一个项目和对应的 Makefile,编译时只需要在代码目录下 make 即可。

计算机系统(CSAPP)

CSAPP 课程本身脱离了 Windows 的苦海,可以用任意 Linux 发行版来完成该课程。但是教材是针对 x86 写的,大多数 lab 也都要求在 x86 架构的平台进行。所以还是要有一个 x86 的环境。

电路与电子学

这门课要用到的两个软件,Quartus II 和 Multisim,都只有 Windows 版。

最初尝试在 PD 上跑 Quartus II 的较新版本 13.0sp1,没有成功。经过测试,用 PD 17 跑 Windows 11 arm 虚拟机,在里面运行 Quartus II,创建项目就会 crash:

Internal Error: Sub-system: DYGR, File: /quartus/ddb/dygr/dygr_place_info.cpp, Line: 3776

在 Intel 的官方论坛这个帖子上找到不少人遇到一样的问题,似乎至今没有解决。

不能装新版本,我们可以试试旧版本。老师指定的版本是 Quartus 9.0。在 PD 虚拟机上运行这个版本没有问题。然而版本从 9 到 14 经历了太多,Altera 公司被 Intel 收购了,Intel 目前官网上不提供老版本的下载。我们可以在 Internet Archive 里找到 Quartus II 9.0 Web Edition。这是免费软件。

至于 Multisim 则没有问题,在 PD 虚拟机上可以运行。

小学期夏季实训

夏季实训用到的 Keil uVision 软件,只支持 Windows。老师提供的 STC-ISP 软件(将 hex 文件刷进单片机的软件)以及驱动程序也只有 Windows 的版本。

对于 Keil uVision 软件,用 Parallels 当然是可以的。我尝试的是 Wineskin Winery,也可以运行,只是速度比较慢。如果我们只是将其作为一个 IDE 而不连接设备(需要连接设备的操作使用下面的 stcgal),这样使用没有问题。(讽刺的是,Keil 是 ARM 公司的软件……它就不打算支持一下自家的 Apple 芯片嘛?!)

对于 STC-ISP,事实上 STC 的 flash tool 有开源的实现:stcgal,亲测在 macOS 上非常好用。只是没法支持「串口助手」之类的东西,但影响不大。
经过测试,STC-ISP 似乎不能用 Wine 运行。

至于 STC-ISP 的「串口助手」功能,即用于串口通讯的功能,其实可以直接用 screen 实现。macOS 上也有不少用于串口通讯的软件。

电子测试平台

电子测试平台课程除了要用到上面提到的 Quartus II、Multisim 和 STC-ISP,好像还有 Modelsim 等软件。但是据说这个软件在 Windows 上安装起来都很困难(装完就蓝屏之类的)。这门课程要求模糊不清、学习资源质量差、教师安排混乱且不负责,比较浪费时间,我没有认真做。验收的时候用别人的电脑就可以。

数学建模竞赛

可能要用到的 Matlab、Lingo、IBM SPSS 都有 macOS 版本。如果装不起庞大的 Matlab,可以试试 Octave。直接用 Python 或 R 也是不错的选择。

其他课程

最后

在 Google 查找「如何在 macOS 上运行某某软件」的解决方案的时候。经常看到某些国外名牌大学的课程说明里会提供详尽的 macOS 实验环境搭建指南。而 HNU 似乎天经地义地将个人电脑和 Windows 画上等号……虽然这也有国内外 macOS 市场占有率的差异,但也真希望国内大学的各种课程也能够注重学生的学习体验。