最近、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に対応していました。file /mnt/c/Program\ Files/Google/Chrome/Application/chrome.exe
/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対応なのはありがたいです。file /mnt/c/Users/kazu/AppData/Local/Programs/GIMP\ 2/bin/gimp-2.10.exe
/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対応は難航しているようです。file /mnt/c/Program\ Files/Mozilla\ Thunderbird/thunderbird.exe
/mnt/c/Program Files/Mozilla Thunderbird/thunderbird.exe: PE32+ executable (GUI) x86-64, for MS Windows, 7 sections
残念ながらThunderbirdはx86-64アーキテクチャ向けしか用意されていませんでした。
先は長そうな感じ… -
Firefox
https://www.mozilla.org/ja/firefox/all/desktop-release/win64-aarch64/ja/
最近はFirefoxを使う機会はほとんど無いのですが、一応インストールしてみましたが、FirefoxはAarch64に対応していました。file /mnt/c/Program\ Files/Mozilla\ Firefox/firefox.exe
/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に対応したバージョンが用意されていました。file /mnt/c/Users/kazu/AppData/Local/Programs/Python/Python313-arm64/python.exe
/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アーキテクチャ向けのものとなっています。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で公開されているカーネルソースコードを使ってカスタムカーネルをビルドしても、それを利用する手段がありません。
-
Vim
Vimはwinget
コマンドを使ってインストールしましたが、残念ながらx86-64アーキテクチャ向けのパッケージがインストールされてしまいました。file /mnt/c/Program\ Files/Vim/vim91/vim.exe
/mnt/c/Program Files/Vim/vim91/vim.exe: PE32+ executable (console) x86-64, for MS Windows, 7 sections
wingetのインストール時にアーキテクチャを指定するオプション
-a arm64
を付加してインストールしようとしてもパッケージが見つかりません。winget install -a arm64 --id GNU.Emacs
該当するインストーラーが見つかりません。詳細については、ログを参照してください。
-
Git
Gitもwinget
コマンドを使ってインストールしましたが、こちらはちゃんとAarch64のバイナリパッケージがインストールされました。file /mnt/c/Program\ Files/Git/bin/git.exe
/mnt/c/Program Files/Git/bin/git.exe: PE32+ executable (console) Aarch64, for MS Windows, 8 sections
-
OpenJDK 11 (LTS)
いままではOpenJDKはZulu OpenJDKが好みで使ってきたのだけど、残念ながらZulu OpenJDKはAarch64に未対応だったため、今回はMicrosoftが提供するOpenJDK 11をインストールして使いました。winget install -a arm64 --id Microsoft.OpenJDK.11
java -version
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も日常的に使っているのでこれもインストールしてみます。
MarvenはまだwingetのパッケージにはなっていないようなのでMarvenプロジェクトのダウンロードページからバイナリパッケージのZIPファイルをダウンロードしてこれを展開して利用しました。
Mavenは基本的にはJavaのアプリケーションとそれを起動するためのプラットフォーム毎のシェルスクリプトの組み合わせなのでネイティブで動作できるかはインストールされているJavaの実行環境に左右される感じでしょうか -
Go Lang (Go言語)
自分はほとんどGoでプログラムを書くことはないのですが、Aarch64ネイティブなnvmを見つけられず、仕方がないので自分でビルドしてみようかな?と思ったらnvm-windowsのビルドスクリプトの中で使われていたのでインストールしてみました。winget install -a arm64 Golang.Go
で、結果的にはインストールしたGo Langを使ってビルドしたnvmを動かすことには正解したのですが、残念なことに自分が使いたかったバージョンのNodeがAarch64ネイティブでは用意されていなかったのでいまのところは役に立っていない状態です