软件开发方面,我个人感觉已经没太多优势了,倒是 Windows 更有优势。现在苹果迁移到了 ARM 指令集,只要做的项目用到的东西多,总能碰到兼容性问题。有时候到网上一问,问题可能没解决,反而有不少人会说“公司没有开发用的服务器吗?什么年代了还需要在本地调试?”。如果是指本地只需要开个浏览器或者 IDE ,再开个终端,其他的一切都在云端,电脑坏了换一台开机连上去马上无缝衔接工作的那种,那还真没有。我只知道字节跳动有。
当年就有一种说法,现在仍然有。说的是本地和生产环境如果更接近,开发和测试都更方便。我感觉如今的 Mac 系统和生产环境差异其实挺大的,除非做的是前端之类的。
多年前因为这个说法,我有超过 3 年的时间完全用 Linux 桌面来干活。做开发是挺爽的,就是桌面环境小毛病挺多,图形界面软件生态少。有时候硬件驱动之类的毛病也多,比如 WiFi 突然掉了,不重启则再也连不上。
后来我就想要一个既有部分 Windows 优势,又有部分 Linux 优势的系统。曾经 Mac OS X 是个不错的选择,办公、文档、沟通协作之类的没问题,软件开发大多数时候也没问题,一些问题也可以用虚拟机或者 Docker 解决。
自从苹果迁移到 ARM 指令集之后,我反而感觉今天的 Windows 才更接近这个形态。虽然有人说 WSL 也有问题,比如 IO 性能差(访问 NTFS 分区的时候),WSL2 跑在虚拟机里,没有 systemd (现在有了,mac 从未有过)等等。
这类问题确实存在,不过若标准是“要无比接近真正的 Linux 环境,否则没办法开发”的话,那 macOS 反而差的更远了。很难想象会有个 Linux 相关的问题,WSL 下没办法搞定,换 macOS 反而解决了。这个要求当然得直接用 Linux ,不必考虑 Windows 和 macOS 。但大多数后端开发工作还真没有这么高的要求,很多都是曾经的 macOS 也可以干的。
我现在可以把沟通协作、编写代码之类的工作放在 Windows 环境中,运行调试放在 WSL 里。若直接用 Windows 运行调试也行的话,就更方便了,更显不出 Mac 曾经的优势了。用 WSL 开始可能会略微折腾一些,但确实能解决问题,测完上生产环境基本不用担心有什么差异。比起 Linux 桌面的那些问题,我更能接受这个。
最近有些项目用到了 PyTorch 和 CUDA ,如今的 WSL 环境做测试也可以搞定。当然训练不必本地跑,但本地做的工作有时候是一些针对 NVIDIA 显卡的调优工作,改善一下性能。这些用 CPU 运行的模式下其实走不同的代码分支,并不一样。至于“公司没有开发用的服务器吗?”这个问题,有,但不方便,比本地开发调试麻烦多了。
之前还看到过一种说法:“WSL2 也是跑在虚拟机里,那为什么不直接用虚拟机?”。其实上面的例子用虚拟机就很难搞。WSL 启动速度远比虚拟机快,和 Windows 的集成也很便利。例如,WSL 里面的端口会自动转发出来,直接用 Windows 程序连接上;管理 WSL 内部的文件,可以在命令行里输入 explorer.exe .来用 Windows 资源管理器直接打开,就好像在管理 Windows 的文件一样; WSL 能访问 NTFS 分区上的文件,如果需求对 IO 性能不敏感,也可以在 WSL 下直接编译运行 NTFS 分区里的代码。
要是做嵌入式,尤其是那种编译工具链只给 Linux 下的,烧录工具只给 Windows 下的,直接打开 WSL 编译就完事了。
Mac 的话,如今的体验有点像用能跑 JetBrain 全家桶的高性能树莓派来做开发,很多东西的生态其实还得看 Linux ARM 的生态。
如果需求是买来当终端机用,远程连接开发环境,或者做前端开发,或者只用完全跨平台的语言和库来做开发,甚至是 iOS 和 macOS 开发这种不得不用的,那么用 mac 的开发体验应该还不错。系统界面还好看。就是之前 JetBrain 的 IDE 时不时会卡顿,我不知道现在怎么样了。