メインのWindows PCをSnapdragon搭載に変えたので色々とインストールした

最近、Windows 11向けのアプリケーション開発環境PCをSnapdragon搭載の、俗に言われる`Copilot+PC`に変更したので今までもIntel PCで使っていたのと同じようなアプリをインストールしつつ環境を整えている。
しかしながら`Aarch64`アーキテクチャのPC(Windows)プラットホームで今までと全く同じ環境を整えることができるか？といえば、Windowsユーザーのほとんどが未だに(これからも？)`x86-64`アーキテクチャのPCを利用していてなかなか`Aarch64`アーキテクチャのPCのパイが増えないからか？ネイティブで`Aarch64`アーキテクチャに対応してくれているアプリは少ないようである。
まあ、Snapdragon搭載のPCで動作するWindows 11ではSnapdragon上でもIntel(`x86-64`)の環境をエミュレートしてくれる`Prism`という仕組みがあって、それを使えばIntel PC向けのアプリもそのままで(ある程度は)利用が可能なのだけど、`Prism`がどの程度の性能で動くのかは未知数だし、macOSのRosetta 2でもそうだったけど、シームレスにバイナリコードの変換機能が働いちゃって、それによって知らないうちにネイティブじゃない実行コードが紛れ込むのはちょっと嫌だなと...
そんな訳で今までIntel PCで自分が使ってきたアプリをインストールして、それが`Aarch64`ネイティブで動いているのか？それとも`Prism`の`x86-64`エミュレーションで動いているのか？を調べてみた。
ちなみに、PowerShell(というか、Windows)には特定のファイルが**何者か**を調べるLinuxの`file`コマンドに相当するものが見当たらなかったので実行ファイル(.exeファイル)がどのアーキテクチャ向けなのかを調べるのにはWSL2から`file`コマンドを使うという手抜きを行った。

- Google Chrome
https://www.google.com/intl/ja_jp/chrome/dr/download/
ありがたいことにGoogle ChromeはちゃんとAarch64に対応していました。
    ```bash
    file /mnt/c/Program\ Files/Google/Chrome/Application/chrome.exe
    ```

    ```console
    /mnt/c/Program Files/Google/Chrome/Application/chrome.exe: PE32+ executable (GUI) Aarch64, for MS Windows, 11 sections
    ```

- Gimp
https://www.gimp.org/downloads/
仕事ではAdobe Photoshopでのデータ提出を求められることが多いし、ビデオ編集なども行うこともあるのでAdobe Creative Cloudのサブスクリプションをしているのですが、今のところAdobeの製品群はAarch64アーキテクチャへの対応は進んでいない様子です。
まあ、個人的にはPhotoshopよりはGimpの方が使いやすいと感じているのでGimpがAarch64対応なのはありがたいです。
    ```bash
    file /mnt/c/Users/kazu/AppData/Local/Programs/GIMP\ 2/bin/gimp-2.10.exe
    ```

    ```console
    /mnt/c/Users/kazu/AppData/Local/Programs/GIMP 2/bin/gimp-2.10.exe: PE32+ executable (GUI) Aarch64, for MS Windows, 9 sections
    ```

- Thunderbird
https://www.thunderbird.net/ja/thunderbird/all/
Microsoft Outlookが相変わらず使いづらいし、LinuxやmacOSなど、利用する環境ごとに使い勝手が違うのも面倒なので最近はThunderbirdを使うようにしているのですが、残念なことにThunderbirdのAarch64対応は難航しているようです。
    ```bash
    file /mnt/c/Program\ Files/Mozilla\ Thunderbird/thunderbird.exe
    ```

    ```console
    /mnt/c/Program Files/Mozilla Thunderbird/thunderbird.exe: PE32+ executable (GUI) x86-64, for MS Windows, 7 sections
    ```

    残念ながらThunderbirdはx86-64アーキテクチャ向けしか用意されていませんでした。
[先は長そうな感じ…](https://connect.mozilla.org/t5/ideas/thunderbird-build-for-windows-on-arm/idi-p/24929)

- Firefox
https://www.mozilla.org/ja/firefox/all/desktop-release/win64-aarch64/ja/
最近はFirefoxを使う機会はほとんど無いのですが、一応インストールしてみましたが、FirefoxはAarch64に対応していました。
    ```bash
    file /mnt/c/Program\ Files/Mozilla\ Firefox/firefox.exe
    ```

    ```console
    /mnt/c/Program Files/Mozilla Firefox/firefox.exe: PE32+ executable (GUI) Aarch64, for MS Windows, 8 sections
    ```

- Python
https://www.python.org/downloads/windows/
最近は機械学習系のプログラムを書くことも多いので、どの環境でもPythonが使えることは重要なのですが、PythonはありいがたいことにAarch64に対応したバージョンが用意されていました。
    ```bash
    file /mnt/c/Users/kazu/AppData/Local/Programs/Python/Python313-arm64/python.exe
    ```

    ```console
    /mnt/c/Users/kazu/AppData/Local/Programs/Python/Python313-arm64/python.exe: PE32+ executable (console) Aarch64, for MS Windows, 6 sections
    ```

    しかしながら、Pythonを使う際にセットで使われることが多いAnacondaやpyenvなどのPython仮想化環境がうまくAarch64環境に対応できないようで、これらのツールを使ってPythonの環境を切り替えようとするとx86-64向けの環境がインストールされてしまうので使い物にならない感じです。

- Docker Desktop
https://docs.docker.com/desktop/setup/install/windows-install/
Windowsネイティブで動くPython環境はちょっとまだ使えないかな？な感じだったので、仕方がないのでDockerコンテナ上でなんとかしようか？ということで、Docker Desktopをインストールしてみましたが、Docker Desktopはβ版ではありますが、ちゃんとAarch64に対応する環境が用意されていました。

- WSL2
まあ、Microsoft純正の仕組みな訳ですから当たり前と言えば当たり前なのですが、WSL2はきちんとAarch64対応のものが用意されているし、そこで稼働するUbuntuなどもちゃんとしたAarch64アーキテクチャ向けのものとなっています。
    ```bash
    uname -a
    ```

    ```
    Linux ThinkPad-T14s 5.15.167.4-microsoft-standard-WSL2 #1 SMP Tue Nov 5 00:19:58 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
    ```
ただし、残念なことにAarch64環境で動くWSL2ではカスタムカーネルを動作させるための仕組みが用意されていないようで、[Githubで公開されているカーネルソースコード](https://github.com/microsoft/WSL2-Linux-Kernel)を使ってカスタムカーネルをビルドしても、それを利用する手段がありません。

- Vim
Vimは`winget`コマンドを使ってインストールしましたが、残念ながらx86-64アーキテクチャ向けのパッケージがインストールされてしまいました。
    ```bash
    file /mnt/c/Program\ Files/Vim/vim91/vim.exe
    ```

    ```console
    /mnt/c/Program Files/Vim/vim91/vim.exe: PE32+ executable (console) x86-64, for MS Windows, 7 sections
    ```

    wingetのインストール時にアーキテクチャを指定するオプション`-a arm64`を付加してインストールしようとしてもパッケージが見つかりません。
    ```PowerShell
    winget install -a arm64 --id GNU.Emacs
    ```

    ```
    該当するインストーラーが見つかりません。詳細については、ログを参照してください。
    ```

- Git
Gitも`winget`コマンドを使ってインストールしましたが、こちらはちゃんとAarch64のバイナリパッケージがインストールされました。
    ```bash
    file /mnt/c/Program\ Files/Git/bin/git.exe
    ```

    ```console
    /mnt/c/Program Files/Git/bin/git.exe: PE32+ executable (console) Aarch64, for MS Windows, 8 sections
    ```

- OpenJDK 11 (LTS)
いままではOpenJDKは[Zulu OpenJDK](https://www.azul.com/downloads/?package=jdk#zulu)が好みで使ってきたのだけど、残念ながらZulu OpenJDKはAarch64に未対応だったため、今回は[Microsoftが提供するOpenJDK 11](https://learn.microsoft.com/ja-jp/java/openjdk/download#openjdk-11)をインストールして使いました。
    ```PowerShell
    winget install -a arm64 --id Microsoft.OpenJDK.11
    ```

    ```PowerShell
    java -version
    ```

    ```console
    openjdk version "11.0.26" 2025-01-21 LTS
    OpenJDK Runtime Environment Microsoft-10823447 (build 11.0.26+4-LTS)
    OpenJDK 64-Bit Server VM Microsoft-10823447 (build 11.0.26+4-LTS, mixed mode, sharing)
    ```

- Marven 3
Java向けのプロジェクトマネージャーの一つである[Marven](https://maven.apache.org/)も日常的に使っているのでこれもインストールしてみます。
Marvenはまだwingetのパッケージにはなっていないようなので[Marvenプロジェクトのダウンロードページ](https://maven.apache.org/download.cgi)からバイナリパッケージのZIPファイルをダウンロードしてこれを展開して利用しました。
Mavenは基本的にはJavaのアプリケーションとそれを起動するためのプラットフォーム毎のシェルスクリプトの組み合わせなのでネイティブで動作できるかはインストールされているJavaの実行環境に左右される感じでしょうか

- Go Lang (Go言語)
自分はほとんどGoでプログラムを書くことはないのですが、Aarch64ネイティブなnvmを見つけられず、仕方がないので自分でビルドしてみようかな？と思ったらnvm-windowsのビルドスクリプトの中で使われていたのでインストールしてみました。
    ```PowerShell
    winget install -a arm64 Golang.Go
    ```
で、結果的にはインストールしたGo Langを使ってビルドしたnvmを動かすことには正解したのですが、残念なことに自分が使いたかったバージョンのNodeがAarch64ネイティブでは用意されていなかったのでいまのところは役に立っていない状態です