Una petición para no usar uv-build

Un backend de compilación de Python basado en Rust llamado uv-build está recibiendo críticas de los mantenedores de Gentoo, que dicen que sus lanzamientos frecuentes y su modelo de distribución centrado en binarios complican la vida a una distribución basada en código fuente y altamente personalizable que debe recompilarlo todo en las máquinas de los usuarios. Sus defensores responden que los estándares de empaquetado de Python, el versionado semántico y los *manylinux wheels* precompilados funcionan bien para la gran mayoría de los desarrolladores, y que Gentoo podría ajustar sus políticas o fijar versiones en lugar de esperar que los proyectos upstream eviten herramientas modernas. Detrás de los detalles técnicos hay una tensión más amplia entre optimizar para plataformas y flujos de trabajo convencionales y preservar la portabilidad y viabilidad de sistemas de nicho o heredados como arquitecturas de 32 bits, SPARC o HP-UX.

Gentoo vs. uv-build: queja principal

  • Gentoo compila casi todo desde el código fuente y busca compilaciones reproducibles y estables.
  • uv-build es un backend de compilación de Python basado en Rust, distribuido como binary wheels y actualizado con frecuencia.
  • Gentoo argumenta que:
    • Cada actualización del backend, en la práctica, obliga a recompilar uv-build y todos los paquetes de Python que lo usan.
    • Esto es costoso en tiempo de compilación, especialmente en máquinas de usuarios y en arquitecturas exóticas donde no existen binarios.
    • Las herramientas basadas en Rust elevan las barreras en plataformas heredadas o poco comunes y en sistemas de 32 bits donde Rust o uv-build pueden no estar disponibles.

Versionado, semántica y “quién decide”

  • Argumentos del lado de uv:
    • El empaquetado de Python está estandarizado a nivel de interfaz (PEP 517); los backends son intercambiables si cumplen con la especificación.
    • uv-build usa por defecto rangos semver; fijar versiones exactas es opcional, y la verdadera causa del churn de recompilaciones es otra.
    • Dejar una versión de backend sin restringir no significa técnicamente “usar la última”; los instaladores pueden reutilizar cualquier versión compatible ya presente.
  • Réplica:
    • Gentoo y otros sostienen que, en la práctica, las compilaciones nuevas de virtualenv obtendrán la versión más reciente dentro del rango.
    • Algunos argumentan que, para las distribuciones, el backend es una dependencia; cualquier cambio debería invalidar las compilaciones para preservar la reproducibilidad.
    • Hay desacuerdo sobre si el “recompilar cuando cambia el backend” de Gentoo es un requisito de los estándares de Python o una política autoimpuesta.

Código fuente vs binarios y rendimiento

  • Algunos comentaristas dicen que la implementación rápida en Rust de uv-build y sus actualizaciones frecuentes están bien para la gran mayoría que instala binarios.
  • Otros argumentan que las distribuciones source-first (Gentoo, NixOS, etc.) pagan costos desproporcionados por backends intensivos en Rust.
  • Debate sobre la razón de ser de Gentoo:
    • Los críticos llaman a compilarlo todo “zeloteo aficionado” y recomiendan usar binarios o cachés al estilo Nix.
    • Los defensores dicen que Gentoo trata de flexibilidad/control (USE flags, ajuste para CPU), no solo de maximizar el rendimiento.

Portabilidad, Rust y plataformas de cola larga

  • Se expresan preocupaciones de que herramientas basadas en Rust como uv-build y un posible uso de Rust en CPython reduzcan el soporte para SPARC, HP-UX, 32 bits y similares.
  • Algunos sostienen “si compila, los expertos locales muchas veces pueden hacerlo funcionar”; otros responden que “compila” está muy lejos de “funciona”.
  • Existe tensión entre centrarse en plataformas principales de primer nivel y preservar la cola larga de sistemas de nicho.

¿Quién debería adaptarse?

  • Un bando: los proyectos upstream y los usuarios deberían adoptar libremente uv-build; Gentoo puede parchear, cachear o relajar sus políticas.
  • El otro bando: los proyectos deberían optar por defecto por backends simples o puros en Python cuando sea posible, para no trasladar los costos del ecosistema a las distribuciones basadas en código fuente.