Depender de lo que haya en la máquina
Una herramienta que el usuario tiene que tener instalada: cómo se busca, qué se hace si no está, y por qué la versión que encuentres nunca es la que probaste.
Las cinco formas de fallar
La segunda fila es la más desconcertante y merece recordarla: en macOS, una aplicación abierta con doble clic no tiene el mismo entorno que una terminal. Si tu código busca la herramienta solo en las rutas heredadas, va a decir que no está en máquinas donde sí está.
Localizar bien
fn localizar(nombre: &str) -> Option<PathBuf> { // 1 · lo que el usuario haya configurado explícitamente, si lo ofreces if let Some(p) = prefs::ruta_de_herramienta(nombre) { if p.exists() { return Some(p); } } // 2 · las rutas habituales de cada sistema, no solo el entorno heredado for base in RUTAS_HABITUALES { let p = Path::new(base).join(nombre); if p.exists() { return Some(p); } } // 3 · y el entorno, por si acaso which(nombre).ok()}El paso 1 es el que resuelve los casos raros sin que tengas que preverlos todos: una opción en preferencias donde el usuario puede indicar dónde está la herramienta convierte un fallo insalvable en una configuración de treinta segundos. Cuesta muy poco y es lo que aprecian los usuarios avanzados.
Comprobar la versión
Antes de confiar en una herramienta encontrada:
let v = Command::new(&ruta).arg("--version").output().await?;let version = interpretar_version(&v.stdout).ok_or(Error::VersionIlegible)?;if version < VERSION_MINIMA { return Err(Error::VersionAntigua { encontrada: version, minima: VERSION_MINIMA });}Y hacerlo una vez y guardarlo, no en cada lanzamiento: la comprobación cuesta arrancar un proceso, y con guardar el resultado en memoria mientras la aplicación viva es suficiente.
Qué decir cuando no está
El mensaje decide si el usuario resuelve el problema o abandona:
Y la decisión de fondo
Todo esto es el precio de depender del entorno. La alternativa —empaquetar la herramienta con tu aplicación— elimina las cinco filas de la tabla de golpe, a cambio de tamaño y de responsabilidades nuevas. Es el nivel 46.
La regla práctica: si la herramienta es imprescindible para el funcionamiento normal, empaquétala. Si es para una función avanzada que solo usan algunos, depender del entorno con un buen mensaje es razonable.