WSL2

WSL2 のビデオを見る。

  • Hyper-V based な VM らしい。ただしかなり para よりで、Microsoft が改造したカーネルが必要。
  • ということは、WSL2 用の Ubuntu とかは Microsoft と Canonical が協力してこの専用カーネルを同梱した特製 Ubuntu を作ってくれているということである。Vanilla Ubuntu ではない。Cloud 向けの distro images と似たような感じか。
  • カーネルが upstream じゃないのがどのくらい不安か考える。主要な不安: WSL は新しい Ubuntu のバージョンとかにきちんと追従できるのか。
    • Ubuntu にしたって vanilla kernel じゃなくて多少はパッチが当たっているわけだが backport が基本で、vanilla kernel を入れても動く。だから Ubuntu は別に MS patch に更なる変更をする必要はない。
    • Android とかは、最近は upstream を重視しているとはいえかなり激しくパッチが当たっている。Vanilla kernel は動かない。一方で Android は Ubuntu とかの distro を動かす必要はないので、kernel のバージョンが遅れ気味なのはそれほど致命的ではない。
    • つまり Ubuntu あるバージョンが新しめの kernel を必要としているとき, Microsoft が彼らの fork をきちんと rebase する、かつ Canonical と協力してそれを WSL2 向けにパッケージしてくれると、はじめて WSL2 で新しい Ubuntu が使える。どのくらい delay があるだろうね。半年くらいかな。22.04 を見ればわかることでしょう。
  • そのほかの不安: GUI 対応
    • Video subsystem は仮想化していないので、画面がない。
    • かわりに X/Wayland server を実装する的な方向らしい。これはいばらの道っぽい感じもするが、一方で GUI で使いたいものなんてそんなにないような気もする。Android Studio とかの IDE くらいか。なので、GUI が無いなら無いで諦めはつくかな。
  • Crostini と比べてみる。
    • WSL2 の体験は Crostini よりはだいぶ良いが、それは terminal がよくできてるとかブラウザ外での UX が Windows の方がこなれている(当然)からだと思う。
    • Crostini は WSL より para 度が低い、より普通の VM である。 Crostini は LXC という業界標準技術で VM の中にコンテナを作っている。LXC が何なのかよくわからないが、これで動く OS のイメージは canonical が host しているものが使えるらしい。official image ではないとはいえ、Microsoft 改造 distro ほど乖離してはいなそうだし、そもそも VM ベンダに依存していないのがよい。
    • 一方で性能は WSL2 の方が出そうな雰囲気。これは para の力とみることもできるし、VM 基盤 (Hyper-V vs Crostini) のやる気の違いともいえる. Crostini とかね、趣味 プロジェクトにしか見えないじゃん…
  • つまり WSL2 は vanilla VM と比べると para の力で性能や体験をチューンしつつ para の弱点はカネの力でなんとかしようとしている。

ただ ps とか top とかしてみると普通の Ubuntu と全然違うよね。プロセスが 10 個くらいしかない。daemon 類が完全に不在。このおかげで “shell を抜けた瞬間に VM を終了する” という “lightweight vm” が実現できているわけだが、一方でこんなにプロセスなくていいの? という疑問はある。たとえば SSH とかできないよね。自動化との相性は悪い。あと普通の Ubuntu (Cllient/Server) からの乖離はカーネルだけでなく、割とでかそうだな。


WSL2 でできないことはなにか:

  • 新しい/マイナーな distro を入れて遊ぶ. まあ、過去の実績からして杞憂だね. Ubuntu の LTS しか使ってない.
  • カーネルいじってあそぶ. これも杞憂系だが、やるにしても WSL の外でやる方がよいだろうね…
  • daemon 的に headless でなにかを動かす (ex. code-server, jupyter notebook). これができないのは微妙ではあるが…ただ Jupyter 動かないとかは考えづらいので、試してみた方がよさそうだな。

将来 WSL2 / Windows を使いたくなくなるシナリオはどんなものか:

  • Microsoft が再び世界征服を果たし, WSL のやる気を失う. これはなさそうだな. 別に現状でも desktop/laptop のシェア的には世界征服済なわけで.
  • Chrome へのいやがらせが加速して使い物にならなくなる. これはかすかに不安を感じるが, Edge を使いましょうということで. 仕事の Chromebook とアカウントが乖離するのは便だが.
  • 上にあげたような何らかの limitation に遭遇する. これはなんだかんだで一番心配, ただこれを解決しようとおもったらおそらく Mac でもだめで, Linux laptop 一択になってしまうねえ.
  • そういえば Rebuild.fm に出るときは Mac が必要だが… まあもう呼ばれることもないでしょう.

といった点を踏まえ、自分は WSL2 にどこまで魂をゆだねていいのだろうか。つまり次に買う laptop は Linux が動くものにすべきなのか Macbook がいいのか Windows-only か。

  • Linux laptop は…もういやだな、という気持ちがある。
    • 選択肢が少なすぎる.
    • 周辺機器が基本的には動かない。Podcast 撮るとか不安。
    • バッテリーが持たない.
    • GPU もへぼい.
    • GUI は大体もっさりである.
    • アプリも全然ないし, あっても出来が悪い.
    • とはいえコードを書くには最強.
  • Macbook もなあ…
    • M1 以降, 気軽に使える VM (VirtualBox) がなくなってしまった. Parallels みたいに有償でゴツイのしかない.
    • コマンドライン環境は, あるにはあるが Linux ではない微妙さがある. Docker とかめんどくさそう. ARM 故のめんどくささが重なる.
      • しかもバージョンを重ねるごとに締め付けが厳しくなっているように見える.
      • 一方でファイルシステムは GUI の世界とネイティブにつながってるので便利ではある.
    • バッテリーの持ちと性能は圧倒的に良さそう.
    • デバイスの選択肢はそんなにないが、その選択肢は世界で一番売れてるラインナップなので問題なし.
  • Windows は…
    • WSL2 は Linux でよい. 手軽な VM のない Mac に比べるとだいぶマシな雰囲気.
    • デバイスの選択肢がいろいろある.
    • 動作は, ビルドとかは Mac より遅いかもしれないが体感できる UI の速さは問題を感じない. (vs. Linux のなんでももっさりな GUI)
    • WSL2 の外でのコマンドラインは自分のリテラシ的に論外. PowerShell とか覚える気にならないし, ネイティブに Unix 系ツールがない.
      • これは日常のプログラミングを不自由にしそうだが、どうかな? そういうのは WSL2 の中でやればよい気もする.

結局のところ、自分はそんなに家でコード書かないし、Linux べったりに暮らしていないのだよね。 課外活動でコードを書く friction を最小化するために Linux laptop を使っているが、それを生かせていない。 一方で Linux laptop の不自由さは毎日被害を被っている。

などを踏まえ Linux laptop はやめて、かつ自分の中二病を発揮するなら Mac もナシで、次は Windows だな、という気分。 まあ laptop を買うというような大きな決断をする前に手持ちの laptop に Windows をインストールの上いろいろやってみて大丈夫さを確認するのがよいのだろうな.


ついでに WSL2 / Hyper-V の論文とかどっかにないかなと思い軽く探したけど見当たらず。残念。