Skip to the content.

🧠 Experimentando con Sail y Nix: entornos reproducibles para Data y Rust

Nix + Sail Logo

En este trabajo hemos estado integrando Sail —el motor de ejecución inspirado en Spark, desarrollado en Rust sobre DataFusion— con Nix, para facilitar la creación de entornos de desarrollo completamente reproducibles.

La idea es sencilla: poder “jugar” con Sail en local sin tener que montar entornos virtuales, manejar dependencias a mano o lidiar con incompatibilidades de versiones.


🚀 ¿Por qué Nix?

Porque Nix nos permite definir el entorno completo como código.
Con un solo comando (nix develop), tienes Rust, Sail, DataFusion, Protobuf y todas las dependencias necesarias configuradas de forma idéntica en cualquier máquina.

Esto significa:

Y lo mejor: puedes usarlo tanto para desarrollar Sail como para ejecutar tus propios planes de prueba o prototipos locales sin depender de entornos externos.

💡 Nota: Actualmente, Sail y PySail no se encuentran aún en los repositorios oficiales de Nix.
Por eso, el entorno instala manualmente las dependencias necesarias.
En el futuro, si tengo tiempo, me gustaría contribuir al empaquetado de pysail para Nix.
Si alguien tiene experiencia o interés en ayudar con esto, ¡sería genial colaborar! 😄


🧩 ¿Qué incluyen estos dos flakes?

El proyecto está dividido en dos entornos reproducibles:

Además, el cliente incluye un pequeño ejemplo en PySpark que se conecta al servidor y ejecuta una consulta.

En otras palabras, un entorno completo para seguir jugando y explorando 😄


🧭 Cómo probarlo

Puedes encontrar los flakes en mi repositorio:
👉 https://github.com/davidlghellin/nix-os/tree/master/flakes/sail

🧱 Clonar el proyecto

git clone https://github.com/davidlghellin/nix-os.git
cd flakes/sail

Y tendremos un server y un cliente con un ejemplo básico.

cd sail-server
nix develop
# Levanta el servidor
launch-sail-server
# o modo debug:
debug-sail-server
cd sail-client
nix develop
# Test rápido
spark-connect-test

🌍 Reflexión final

Este experimento combina lo mejor de ambos mundos: la reproducibilidad declarativa de Nix con la potencia de Sail y Spark Connect.

Gracias a Nix, podemos tener entornos completamente aislados, reproducibles y listos para usar con un solo comando, sin depender de configuraciones locales ni versiones globales.