缘起

这半年来,我开始陪小臭学习编程,在这个过程中,我自己也反复思考怎么能为自己创建一 个更好的学习环境。既然核心内容是编程,那么至少一套类unix系统用来跑程序是必须的。 我有一个2015中期款15寸macbook pro, 原本是个很好的选择。但是我意识到插拔鼠标键盘 和显示器是一件非常麻烦的事情,我也没有条件做两套桌面来分别服务win10台式机和 macbook pro,于是乎思考如何在win10上写代码就成了我的一大难题。

方案1:Chrome Remote Desktop

这是一个非常简单的方案,在macbook pro上开通chrome remote desktop, 然后在win10里 远程连接macbook pro。这个做法有几个问题:

  • 图像质量似乎有点问题,很难做到点对点;
  • 需要折腾才能扣上macbook的盖子,不然就要一直开着;
  • 很多快捷键会和win10的快捷键冲突,尤其是win键很难完全当作command键来使用;

方案2:Win10 Linux子系统

我没想到可以这么方便,这篇文章是用win10的vs code,写在linux子系统的文件系统里 的。装了简单的ubuntu20.04。gcc/g++/make/openjdk11/gradle/ruby都是没有什么问题 的,我的这个blog是搭建在jekyll上的,也没有任何问题。我不是教别人怎么做事儿,所以 也没必要写一个冗长的教程,微软官网有非常清晰的安装指南,每个人对linux子系统的要 求也不尽相同,就我个人而言,只需要满足以下这两件事:

  1. 当我在linux子系统里开启一个web server的时候,可以在win10里访问对应的网页,每 次写博客需要这个预览。我试着跑bundle exec jekyll serve, 发现生成的 http://127.0.0.1:4000竟然可以直接访问,非常方便。

  2. 可以非常轻松的访问子系统的文件,很多现代工具都会生成一些网页或是pdf,比如 javadoc/jcoco,再比如latex写作。 在这种情况下,我非常需要能轻松的从win10里打 开和访问这些文件,因为linux子系统是没有GUI的。令人欣喜的是,wsl$会提供一个 直接的文件接口,可以访问子系统的所有文件,直接在文件管理器的地址栏里输入 wsl$,或者用现代浏览器打开file://wsl%24/Ubuntu-20.04/home/allenliu(当然 每个人的文件夹结构不同)就能轻松访问所有文件,这对于某些生成的linux子系统本地 文件的访问是非常友好的。

总结

可以说win10的linux子系统让我相当满意,win10在这种情况下更像是linux的GUI,使用起 来完全没有任何迟滞。我猜想实际性能应该比虚拟机要强很多,但是因为我很懒,所以没有 和虚拟机比较性能,我猜想这套子系统本质上是做了一个非常好的文件系统,可以让win10 很方便的使用linux的文件系统,这样诸如vscode这样的软件就可以几乎无缝衔接了。当 然这套系统还有一些缺憾,其中最大的问题就在于没法很轻松的让任何ide都直接访问这个 文件系统,可能还是需要每个ide做一套proxy,这对推广子系统是个障碍。微软这几年做了 很多有益于用户的事儿,包括github codespace这样的online ide也是一个重要的发展方 向。

就当下这个子系统来说,它几乎满足了我对自己的开发环境的一切需求,可以说是非常完 美。Windows平台如今既是兼容性最强的游戏平台,也是应用兼容性最好的平台,虽然性能 上还有一些落后,但是如今对开发环境的更好支持,让我更看好它,相比之下, linux/macos就很难成为我的第一系统选择了,羸弱的游戏行能拖累了他们,而作为开发环 境的优势在linux子系统面前不复存在,可以说微软这步棋是精妙绝伦的。