jdx/mise · error

bootstrap system services are only supported on Linux

Error message

bootstrap system services are only supported on Linux

What it means

The privileged apply entry point for bootstrap system services is only implemented on Linux. On macOS, Windows, or other non-Linux platforms the function unconditionally fails, because systemd is not available there.

Solutions

  1. Run this command on a Linux host with systemd
  2. Gate the bootstrap-service step behind an OS check in your task script
  3. Use `scope = "user"` alternatives or launchd/other platform mechanisms on non-Linux systems

Example fix

# before
cmd = "mise bootstrap apply-privileged"
# after
cmd = "[[ $(uname -s) == Linux ]] && mise bootstrap apply-privileged || echo 'skipped: Linux only'"
Defensive patterns

Strategy: fallback

Validate before calling

[[ "$(uname -s)" == "Linux" ]] && systemctl is-system-running >/dev/null

Type guard

const isLinux = process.platform === "linux";

Try / catch

match apply_privileged_plan() { Err(e) if e.contains("only supported on Linux") => skip_on_non_linux(), other => other }

Prevention

When it happens

Trigger: Calling `apply_privileged_plan_from_stdin` (the `mise run bootstrap --apply-privileged` style path) on a non-Linux platform.

Common situations: Running the same mise task script on a macOS developer machine; CI matrix jobs that include non-Linux runners executing bootstrap-service commands; porting configs between Linux servers and Mac laptops.

Understand the failure class

Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/2b3c01c67bb21423. Report an issue: GitHub.

Appendix: source

Thrown at src/system/services_non_linux.rs:51

) -> Vec<ResourcePlan> {
    vec![]
}

pub(crate) fn apply(_requests: &[ServiceRequest], _dry_run: bool, _yes: bool) -> Result<()> {
    Ok(())
}

pub(crate) fn apply_with_notifications(
    _requests: &[ServiceRequest],
    _notifications: &ServiceNotifications,
    _dry_run: bool,
    _yes: bool,
) -> Result<()> {
    Ok(())
}

pub(crate) fn apply_privileged_plan_from_stdin() -> Result<()> {
    bail!("bootstrap system services are only supported on Linux")
}

fn reject_configured(config: &Config) -> Result<Vec<ServiceRequest>> {
    // validated like on Linux first, so a forgotten `scope = "user"` is
    // reported as such rather than as a platform limitation
    let configured = !compose_system_declarations(config)?.is_empty();
    if configured {
        bail!("bootstrap system services are only supported on Linux");
    }
    Ok(vec![])
}

View on GitHub (pinned to 533346cc37)