Anaconda Python is
working toward
Windows on ARM support.
For now, Anaconda / Miniconda Python work for Windows on ARM via the built-in Prism emulation.
To use native ARM64 Python, which could be useful for benchmarking or maximum (best) computing performance, use plain CPython install for ARM64 such as:
winget install Python.Python.3.14
Upon installing and starting, one sees the ARM64 designation in the Python dialogs.
GDL (GNU Data Language) is a free/libre open-source program that runs a good percentage of IDL code.
GDL is
actively developed
and easily installed by:
Linux: apt install gnudatalanguage
macOS: use weekly gdl-macOS-arm64-standard.dmg. We do this instead of Homebrew because the homebrew/science tap for gnudatalanguage is currently unmaintained.
Building GDL source uses the GDL build script “scripts/build_gdl.sh” to get the prerequisites.
If Anaconda Python is present, conda deactivate first to avoid library problems when building GDL.
(optional) Check the install. You will see several plots appearing and disappearing automatically during this test, which takes a few minutes.
cmake --test-dir build -V
Install (do not use sudo):
cmake --install build
Do not build on an ExFAT / FAT32 drive, as the build will fail since symbolic links are not allowed on ExFAT / FAT32.
If cmake reports libeigen being too old, install LibEigen3 or:
cmake -Bbuild -DEIGEN3=OFF
To use the Linux distro’s older version of GDL, just use /usr/local/bin/gdl or similar, or rename ~/.local/bin/gdl to ~/.local/bin/gdl0.98 or similar.
Troubleshooting build:
Runtime search path conflicts: temporarily comment out those paths in ~/.profile (typically from Anaconda Python, libreadline, libhistory, libz, libjpeg.so)
Problems with LZMA, try disabling HDF5: cmake -DHDF5=OFF
If upon attempting Pacman operations a failure occurs like:
failed to synchronize all databases (unable to lock database)
This may occur if the system was interrupted during a Pacman operation, leaving a lock file that prevents further package management operations.
The lock file is
located
by:
$(pacman-conf DBPath)/db.lck
which is typically “/var/lib/pacman/db.lck”.
Check no other Pacman process is running:
Anecdotally we have observed that during
GitHub outages,
Git over SSH operations may have a better chance of succeeding than Git over HTTPS operations.
This includes cloning repositories.
Rather than reconfiguring .gitconfig to use SSH, simply clone using the SSH URL instead of the HTTPS URL.
jobs:msvc:runs-on:windows-2025-vs2026steps:- uses:actions/checkout- name:Print CMake versionrun:cmake --version- name:Configure CMakerun:cmake -B build -G "Visual Studio 18 2026"# and so on
CMake build directories might contain 100s of megabytes of files for large projects.
Over time, a developer computer might contain forgotten build directories that waste disk space.
With Python, a
script
using
send2trash
allows safe removal of CMake build directories by first moving them to the OS trash/recycle bin.
In distinction from
shutil.rmtree,
this send2trash approach allows recovery of files if the deletion was accidental.
The heuristic used to detect a CMake build directory was inspired by
ctest_empty_binary_directory.
use mpi_f08 is recommended for
Fortran
across computing platforms, including Windows.
For native x86 (Intel / AMD CPU) binaries, currently only free
Intel oneAPI has mpi_f08 for Fortran.
As time progresses and ARM64 CPUs are increasingly widespread, including for Windows PCs, and the complexity / disk space requirements of setting up Visual Studio for Intel oneAPI on Windows, it may be better (easier, faster, performance) to use WSL for Windows MPI.
WSL
can use OpenMPI or MPICH to access mpi_f08.
For Windows ARM CPU users, WSL is the only straightforward option for mpi_f08 in Fortran.
The
setup-wsl GitHub Action
configures WSLv2 environment in Windows GitHub Actions runners.
This allows testing certain quirks and corner cases one might encounter when running software on Windows Subsystem for Linux.
For scientific computing Windows users, WSL is often the best way to run computational software on Windows, including software using performance code for GPU and MPI.
Git projects using
submodules
can be set to default shallow Git clone submodules to save space and time.
Edit the “.gitmodules” file to have the “shallow = true” option for each Git submodule.
This is particularly useful when the top-level project uses third party libraries or libraries with a large Git revision history.
Example .gitmodules file with shallow Git submodules:
As ARM64 CPUs become more popular or even the only choice for some computer models, the Mathworks has
certified
Matlab R2026a and newer to work on ARM64 via
Prism emulation.