Firezone lanza sanstun, su propia implementación de WireGuard en Rust tras dos años parcheando boringtun

Sanstun: A sans-IO, parallel-friendly WireGuard implementation in Rust

Firezone presenta sanstun, una implementación sans-IO de la máquina de estados de WireGuard en Rust, pensada para ser fácil de usar, segura y rápida mediante una API idiomática y paralelizable. Tras más de dos años parcheando boringtun con más de 70 PRs, el equipo rediseñó la API desde cero: sin buffering interno, con manejo de tiempo sans-IO y separación entre la contabilidad del estado y el cifrado, lo que permite delegar ChaCha20-Poly1305 a hilos de trabajo.

Si movemos el cifrado real a otro hilo, esto apunta a una posible aceleración de más de 45x.
  1. Twey

    Todo iba genial hasta que leí

    > El diseño también evita problemas como el function coloring y se lleva bien con las reglas de ownership de Rust.

    Async no es I/O. Se puede usar para I/O, pero no es más que una forma de escribir máquinas de estado puras y deterministas que mantienen un flujo lógico unido en lugar de dispersarlo en un montón de transiciones.

    Incluso si eliges compilar manualmente tus flujos async en máquinas de estado explícitas, sigues teniendo que lidiar con el ‘function colouring’ (también conocido como tipado): un flujo que cruza varias transiciones de estado (y puede tener otras partes disjuntas del estado actualizadas mientras tanto, mediante otras transiciones) ahora tiene que reescribirse como una (serie de) transiciones de estado, y no se puede llamar desde una función bloqueante. Si acaso, reescribir todas tus máquinas de estado sin `async` empeora el ‘problema’ del function colouring, porque los flujos con múltiples transiciones son aún más diferentes de las funciones normales.

  2. monocasa

    Genial, básicamente así es como yo diseño mis implementaciones de protocolos en Rust también.

    Mucho más testeable, la mayor parte se puede compartir entre I/O async y bloqueante, es mucho más fácil prohibir por completo `unsafe` en tus dependencias (excepto std y core), etc.

  3. temp0826

    Mullvad también derivó su propia implementación de boringtun (llamada gotatun[0])

    [0] https://github.com/mullvad/gotatun

Más de este día

2026-10-30