MycelK — Construyendo una mensajería p2p descentralizada from scratch
(Traducción al español desde mi post original en francés)
Post 0 : el porqué
Hace unos días tuve el placer de escuchar el podcast de Lex Fridman y su conversación con Pavel Durov (Telegram). Como siempre con los podcasts de Lex, las preguntas son pertinentes, las respuestas profundas, y los temas técnicos complejos suenan como poesia. Dos personas tan inteligentes conversando sobre temas complejos inevitablemente dan ganas de abrir el editor de código favorito y lanzarse en un proyecto utópico de mensajería descentralizada... (al menos ese fue el efecto que tuvo en mí).
Pero al final, de lo que se habla es de encriptación end-to-end, protección de datos, responsabilidad de la empresa en moderar los contenidos compartidos, etc. Nada muy entretenido, y ¿por qué llegamos a eso? Porque los servidores le pertenecen a alguien, y ese alguien es responsable de lo que pasa ahí.
Y ahí pensé: ¿qué pasaría si no hubiera servidores? ¿Sin responsables? Y de hecho, si Matthieu quiere hablar con Alice, ¿por qué necesitaría un intermediario?
Entonces empecé a preguntarme: ¿se podría hacer de otra forma?
La idea
Una mensajería que no dependa de ningún servidor central. Donde cada participante es a la vez cliente y nodo de la red. Donde cortar un servidor no corta las comunicaciones.
No es una idea nueva — BitTorrent, IPFS, y decenas de otros proyectos llevan veinte años explorando este tema. Pero yo quería entender cómo funciona de verdad, no solo usar una librería que abstrae toda la complejidad.
Ahí es donde entra Kademlia.
Por qué Kademlia
Kademlia es un algoritmo publicado en 2002 por Maymounkov y Mazières (otra dupla de cabezas brillantes). Es la base de BitTorrent, de una parte de IPFS, y de muchas redes distribuidas/p2p. Su rol: permitir que cualquier nodo de la red encuentre cualquier otra información sin servidor central.
El concepto clave es la definición de la distancia entre los nodos de la red (vía XOR, pero eso lo veremos después). Una métrica con propiedades matemáticas interesantes que garantizan la convergencia del routing y limitan la complejidad algorítmica de las búsquedas.
No voy a explicar Kademlia en este post. Eso será el objeto de un artículo dedicado. Lo que quiero decir acá es que podría haber usado una lib que ya lo implementa. No lo hice. Lo implemento from scratch, porque así es como se aprende de verdad.
Por qué Rust y Tauri
Desarrollo soluciones ERP para la agroindustria. Mi día a día es SQL Server, Python, integración con equipos industriales. Poco espacio para mis utopías de geek.
Rust me llama la atención desde hace un rato por sus garantías de seguridad de memoria y su rendimiento. Un proyecto de red p2p — con concurrencia, timeouts, conexiones UDP — es exactamente el terreno donde esas garantías tienen sentido.
Tauri me permite construir una interfaz desktop con React (el único stack que manejo en frontend) manteniendo el backend en Rust. Un solo binario, multiplataforma, sin Electron y sus 200MB de runtime.
El stack
Kademlia DIY — el algoritmo, from scratch, sin libs
Tokio — runtime async Rust
WebRTC-rs — p2p entre máquinas detrás de NAT
Ed25519 — identidad criptográfica
ChaCha20-Poly1305 — cifrado E2E (veremos cómo resulta)
Tauri 2 + React + MUI — interfaz desktop
Qué va a cubrir esta serie
Dividí el proyecto en 7 fases:
Core Kademlia — NodeId, distancia XOR, routing table, k-buckets
Transporte UDP + RPC — mensajes, serialización, matching de peticiones/respuestas
Protocolo completo — bootstrap, lookup iterativo, store/republish
Integración WebRTC — conexión p2p real entre dos máquinas
Mensajería — identidad, cifrado E2E, mensajes offline
Tauri + React — interfaz de usuario
Web of Trust — resistencia a ataques Sybil vía firmas Ed25519
Cada fase tendrá uno o más artículos. Voy a documentar las decisiones de arquitectura, los errores, los callejones sin salida. No es un tutorial, es más bien un diario de desarrollo.
MycelK
El proyecto se llama MycelK. Mycel como micelio — esa red subterránea de filamentos fúngicos que conecta los árboles entre sí sin centro, sin jerarquía, de manera resiliente. K como Kademlia.
El código será open source en GitHub. El nombre está libre en crates.io.
Este post existe porque escribir me obliga a clarificar mi pensamiento. Y quién sabe, quizás le dé visibilidad a otros proyectos futuros.
Si trabajas en temas similares o tienes preguntas sobre las decisiones de arquitectura, los comentarios están abiertos.
Lo que sigue: una explicación de Kademlia para humanos, y después el código de la Fase 1.
Top comments (0)