Xonsh: shell multiplataforma, con tecnología Python y mirada Unix

Una shell impulsada por Python llamada Xonsh está provocando un debate sobre si las shells modernas y ricas en funciones pueden reemplazar de forma realista a opciones ubicuas como Bash y Zsh. Sus defensores elogian su capacidad para mezclar Python con comandos tradicionales de shell, escribir scripts más mantenibles y funcionar de forma multiplataforma (especialmente en Windows), mientras que sus críticos señalan la inestabilidad, las incompatibilidades con herramientas comunes (como `fzf` y apps ncurses) y la gestión de dependencias de Python como desventajas serias. La conversación se amplía hacia una cuestión más general: si los desarrolladores deberían priorizar aprender shells más nuevas como Xonsh, Fish y Nushell para el trabajo diario, o seguir con las herramientas POSIX disponibles por defecto en la mayoría de los sistemas.

Qué es Xonsh y a quién va dirigido

  • Shell impulsado por Python cuyo objetivo es combinar Python y la semántica tradicional de las shells.
  • Se presenta como “Unix‑gazing” / “Bash‑wards compatible”: en general se parece bastante a la experiencia de Bash, pero no es compatible con POSIX ni 100% compatible con Bash.
  • Se percibe como especialmente atractivo para usuarios de Unix en Windows que quieren una experiencia similar a Bash.

Ventajas y experiencias positivas

  • Usuarios informan años de uso diario en Linux y Windows y dicen que “les encanta”, a pesar de cierta lentitud frente a shells basadas en C.
  • Tiene un fuerte atractivo para quienes no soportan programar en Bash; los scripts de xonsh se describen como más claros y con más probabilidades de mantenerse a largo plazo.
  • Mezclar comandos de shell y Python en un mismo lugar es uno de sus grandes atractivos (por ejemplo, cálculos rápidos, lógica Python en pipelines, archivos rc más limpios).
  • Algunos lo encuentran lo bastante configurable como para parecerse a zsh y no implicar “más tecleo”.

Desventajas, estabilidad y compatibilidad

  • Varios usuarios se fueron tras bloqueos frecuentes; la estabilidad de una shell se considera crítica. Una fuente importante de problemas fueron las versiones de prompt-toolkit.
  • Las incompatibilidades con flujos de trabajo de Bash/zsh (por ejemplo, el uso de fzf, saltos de línea en la sustitución de comandos, rarezas no estándar) son puntos de dolor recurrentes.
  • Algunos lo ven demasiado poco estándar como para compartir comandos con compañeros o usarlo en shebangs.
  • El rastreador de issues de GitHub se menciona como una razón para “quedarse con el diablo que ya conoces”.

Python como base: preocupaciones y réplicas

  • Preocupan los problemas de dependencia y empaquetado de Python, que podrían afectar la fiabilidad de la shell.
  • Contraargumento: Bash no tiene ninguna gestión de dependencias; xonsh en sí tiene pocas dependencias, y en la práctica las actualizaciones de Python suelen requerir solo una reinstalación rápida.

Elección de shell: nuevas vs antiguas

  • Debate sobre si conviene invertir en shells modernas (xonsh, nushell, fish, elvish, etc.) frente al ubicuo Bash/Posix.
  • Algunos priorizan la portabilidad y el aprendizaje mínimo (bash/sh en todas partes).
  • Otros abogan por la comodidad y la productividad en sus propias máquinas, usando Bash solo cuando sea necesario.

Alternativas y shells con datos estructurados

  • Otras shells “incrustadas en un lenguaje” o con objetos/datos estructurados mencionadas: nushell, marcel, rash, scsh, enfoques basados en Tcl, elvish, murex, rc, eshell en Emacs.
  • Se desea que las shells/herramientas pasen objetos o JSON en lugar de texto, salidas estandarizadas legibles por máquinas y análisis de argumentos/ayuda integrados.

LLMs y cambios en el flujo de trabajo

  • Al menos un usuario informa haber reemplazado en gran medida xonsh por GPT‑4 para scripting rápido y tareas de pegamento, aunque otros señalan que los LLM actuales tienen problemas con dominios de nicho como Nix moderno.