Skip to content

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

  1. The run.log in the run directory has full subprocess stderr.
  2. The benchmark may silently Status.SKIPPED with a skip_reason — look at results.yaml.
  3. 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:

  1. Add it to _detect_pkg_manager in src/pulse/platform_detect.py.
  2. Add the field to the Capability dataclass in src/pulse/deps.py (and the _SUPPORTED_PMS set).
  3. Fill in package names for each capability that can be installed.

Each new PM is ~20 LOC.