Platform support¶
Pulse is designed to run on every platform it can reach. Here's the actual support matrix and per-platform notes.
Matrix¶
| platform | package manager(s) | tested | notes |
|---|---|---|---|
| Linux apt (debian/ubuntu/mint/pop/…) | apt-get | ✅ Docker | full benchmark set after build-essential install |
| Linux dnf (fedora/RHEL/rocky/…) | dnf | ✅ Docker | needs gcc-c++ and p7zip-plugins (auto-handled) |
| Linux pacman (arch/manjaro/endeavor) | pacman | static review | base-devel covers everything |
| Linux apk (alpine, postmarketOS) | apk | ✅ Docker | uses build-base; works in tiny containers |
| Linux zypper (openSUSE) | zypper | static review | symmetric to dnf |
| Linux xbps (Void) | xbps-install | static review | mapped |
| Linux emerge (Gentoo) | emerge | static review | mapped (slow first install) |
| NixOS | nix-env | ✅ Docker | uses nixpkgs.<attr>; user-level, no sudo |
| macOS (Apple Silicon + Intel) | brew, port | static review | brew never sudo'd; uses Metal for gpu_compute |
| Windows 10/11 native | winget, choco, scoop | static review | compile_redis and compile_chromium skip (no make / Linux-only) |
| Termux (Android) | pkg | ✅ simulated | detection verified; pkg install works on real device |
| proot-distro inside Termux | inherits | ✅ inherits Linux | acts like the underlying distro |
| WSL2 | apt-get etc. | ✅ same as Linux | |
| containers (Docker/Podman/LXD) | inherits | ✅ Docker | thermal/governor info typically hidden |
✅ = exercised end-to-end. The maintainer cannot run macOS or Windows from CI; recipes below let you reproduce.
Per-platform recipes¶
Linux (apt example)¶
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
uvx --from git+https://gitlab.com/ai-sys0x/pulse pulse
# TUI launches; the InstallScreen will offer:
# sudo apt-get install -y build-essential default-jdk-headless openssl p7zip-full
Fedora / RHEL¶
Same as above. Pulse detects dnf and proposes:
sudo dnf install -y gcc gcc-c++ make default-jdk-headless openssl p7zip p7zip-plugins
NixOS¶
nix-env -iA nixpkgs.uv nixpkgs.python312
UV_PYTHON_PREFERENCE=only-system uvx --from git+https://gitlab.com/ai-sys0x/pulse pulse
# Install plan uses nix-env -iA nixpkgs.gcc nixpkgs.gnumake nixpkgs.openjdk21 nixpkgs.openssl nixpkgs.p7zip
The UV_PYTHON_PREFERENCE=only-system is the key — uv-managed Python doesn't run on Nix's non-FHS filesystem; the system python from nixpkgs.python312 does. (We may move this auto-detect into Pulse itself in a future release.)
Termux (Android)¶
pkg install python uv
uvx --from git+https://gitlab.com/ai-sys0x/pulse pulse
# Install plan: pkg install -y clang make openjdk-21 openssl p7zip
# Browser/Docker/GPU benchmarks skip cleanly (no Chrome, no Docker, no GL drivers).
If you want to run heavyweight benchmarks (compile_redis, compile_cpp), prefer running inside proot-distro — Termux's pkg has fewer headers than a real Linux userland.
macOS¶
# Install uv (if you don't have it):
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
# Install brew (if you don't have it):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Run pulse:
uvx --from git+https://gitlab.com/ai-sys0x/pulse pulse
# Install plan: brew install gcc make openjdk openssl p7zip (no sudo — homebrew refuses)
gpu_compute will use Apple Metal (MPS) when torch is installed; otherwise it skips with a hint to pip install torch or pip install mlx.
browser_js uses the system Google Chrome.app / Brave Browser.app if installed.
Windows 10/11¶
PowerShell:
# Install uv:
irm https://astral.sh/uv/install.ps1 | iex
$env:Path = "$HOME\.local\bin;$env:Path"
# Run pulse:
uvx --from git+https://gitlab.com/ai-sys0x/pulse pulse
# Install plan (winget):
# winget install --silent -e --id LLVM.LLVM
# winget install --silent -e --id GnuWin32.Make
# winget install --silent -e --id ShiningLight.OpenSSL.Light
# winget install --silent -e --id 7zip.7zip
# winget install --silent -e --id EclipseAdoptium.Temurin.21.JDK
Skipped on Windows native:
- compile_redis — needs POSIX make. Use WSL2 if you want this benchmark.
- compile_chromium — Linux-only build pipeline.
compile_sqlite and compile_cpp work via clang from LLVM. browser_js finds chrome.exe from Program Files automatically.
What to do if a benchmark fails on your platform¶
- The
run.login the run directory has full subprocess stderr. - The benchmark may silently
Status.SKIPPEDwith askip_reason— look atresults.yaml. - File an issue on the Pulse repo and attach
run.log+system.json. We'll add a code path for your distro / package manager / arch.
Adding a new package manager¶
If you have a niche PM (e.g. xpkg, conda, slackpkg), we can probably add it. The pattern:
- Add it to
_detect_pkg_managerinsrc/pulse/platform_detect.py. - Add the field to the
Capabilitydataclass insrc/pulse/deps.py(and the_SUPPORTED_PMSset). - Fill in package names for each capability that can be installed.
Each new PM is ~20 LOC.