
Cuando era más joven, jugar videojuegos con amigos significaba, muchas veces, estar físicamente en el mismo lugar. Había que ir a la casa de alguien, llevar un control si tenías suerte, sentarse frente a una televisión y aceptar una regla que nunca estuvo escrita pero que todos conocíamos: cuando perdías, entregabas el mando.
En los salones de videojuegos el procedimiento era todavía más formal. Ponías una moneda, esperabas tu turno y mientras tanto mirabas jugar a otro. Si el que estaba frente a la máquina era realmente bueno, la espera podía ser larga.
Curiosamente, esa espera era también parte del juego, uno aprendía mirando.
Hace unos días Federico Pereira, un amigo con el que compartimos desde hace años el extraño mundo de la voz sobre IP, me mostró un proyecto en el que ha estado trabajando. Se llama go-link, y mientras me explicaba cómo funcionaba no pude evitar pensar que, de alguna manera, había vuelto a construir aquella fila frente a la máquina arcade, solo que ahora la máquina puede estar a miles de kilómetros de distancia. La idea es sencilla, al menos cuando uno la mira desde afuera.
Una persona tiene el juego ejecutándose en su computadora y crea una sala. Sus amigos reciben una invitación y pueden entrar desde un navegador, sin tener que instalar el juego ni tener la ROM1. El video y el sonido viajan hasta ellos y sus controles regresan hasta la computadora del anfitrión. En una sala pueden jugar hasta cuatro personas y quienes no tengan un puesto disponible pueden quedarse mirando, conversar y esperar que alguno deje libre su lugar.
Es decir, pusieron nuevamente la fila, solo que esta vez nadie necesita tener monedas en el bolsillo.
Cuando WebRTC dejó de ser solamente para hablar
Quienes hemos trabajado durante años alrededor de VoIP tenemos algunas palabras que aparecen con demasiada frecuencia en nuestras conversaciones: NAT, jitter, codecs, latencia, RTP, señalización. Hay reuniones en las que uno puede pronunciar cuatro de ellas seguidas y probablemente perder a la mitad de la audiencia.
WebRTC apareció hace muchos años con una promesa bastante interesante: permitir comunicación multimedia en tiempo real directamente desde un navegador. En 2013 publiqué en este mismo blog una entrevista con Iñaki Baz Castillo sobre el tema. En aquel momento hablábamos de audio, video, señalización, ICE y de la posibilidad de hacer que dos navegadores se comunicaran directamente.
En términos simples, WebRTC daba al navegador capacidades que antes necesitaban aplicaciones especializadas. Eso sonaba muy bien para hacer llamadas, lo interesante es que Federico miró exactamente la misma tecnología y se hizo otra pregunta:
Si puedo enviar audio y video en tiempo real entre dos personas, ¿por qué no puedo enviar también un videojuego? Y aquí es donde go-link empieza a ponerse interesante.
El ordenador del anfitrión ejecuta el juego y transmite video y sonido. Del otro lado, el jugador recibe la imagen y devuelve sus controles. WebRTC sirve como transporte para que esa interacción ocurra con una latencia suficientemente baja como para que un videojuego sea jugable.
No estamos hablando entonces de descargar el juego remotamente, el juego nunca se mueve, la ROM permanece en la computadora del anfitrión y el invitado recibe únicamente la experiencia de jugar.
Si lo pensamos un poco, conceptualmente no está demasiado lejos de una llamada de voz. Una persona habla, el sonido viaja por Internet y otra persona lo escucha. Aquí una máquina genera un cuadro de video, ese cuadro viaja por Internet y otra persona responde presionando un botón.
El problema, como siempre ocurre en comunicaciones, aparece cuando Internet decide no colaborar.

NAT, nuestro viejo amigo
Uno podría pensar que después de tantos años el NAT ya habría dejado de molestarnos, no, sigue ahí.
Para establecer la comunicación, go-link utiliza primero un servidor de señalización. Ese servidor ayuda a que el navegador del jugador y la computadora del anfitrión se encuentren y negocien cómo van a comunicarse. Después se aparta.
La intención es que video, sonido, voz, controles y chat viajen directamente entre los participantes mediante WebRTC. Si esto no es posible porque alguna red tiene un NAT particularmente complicado, un CGNAT o un firewall poco amistoso, entonces puede aparecer un servidor TURN para retransmitir el tráfico.
Para alguien que viene de telefonía IP esto resulta sospechosamente familiar.
De hecho, en aquella entrevista de 2013 Iñaki explicaba algo parecido: los navegadores intercambian información de sesión y luego realizan pruebas de conectividad ICE hasta encontrar una ruta que permita establecer la comunicación. En algunos escenarios puede ser necesario un servidor TURN para superar los problemas impuestos por NAT. Trece años después seguimos peleando con lo mismo.
Algo hemos avanzado, al menos ahora podemos jugar mientras lo hacemos.
La computadora vuelve a ser la máquina arcade
Hay otro detalle del proyecto que me llamó la atención, el anfitrión es quien tiene la máquina.
Instala go-link en su computadora, coloca sus propios juegos y desde ahí genera la sala. Los invitados no necesitan tener las ROMs ni instalar el emulador. Reciben una invitación, un código o un QR, ingresan un PIN y entran a jugar.
Desde ese punto de vista, la computadora del anfitrión se convierte literalmente en una máquina arcade conectada a Internet. Me gusta esa imagen.
Durante años hemos intentado que todo termine ejecutándose en la nube. Archivos, correo, aplicaciones, música, documentos y prácticamente cualquier cosa que pueda transformarse en bits termina en algún servidor que rara vez sabemos dónde está.
Aquí sucede algo distinto, el juego está en tu máquina, la ROM está en tu disco, el procesamiento ocurre en tu computadora. Internet sirve principalmente como medio para conectar a las personas.
Eso tiene además una consecuencia interesante desde el punto de vista de privacidad. El proyecto no necesita almacenar las partidas en un servidor central y las ROMs no salen de la máquina del anfitrión. La señalización sirve para poner a las partes en contacto; no para convertirse en intermediario permanente del juego.
Probablemente sea una decisión técnica, pero también termina siendo una filosofía de diseño.
Volver al navegador
En 2011 escribí un artículo sobre la batalla de los browsers. En esa época una de las ideas que me interesaba era cómo el navegador estaba dejando de ser únicamente una herramienta para mirar páginas y se estaba convirtiendo en una plataforma sobre la cual podíamos ejecutar servicios completos. Correo, mensajería, aplicaciones y juegos empezaban lentamente a vivir ahí.
Creo que subestimamos bastante lo que terminó sucediendo. Hoy abrimos un navegador y hacemos una videoconferencia, editamos documentos, diseñamos objetos, programamos aplicaciones y ejecutamos cosas que hace quince años hubieran necesitado un software dedicado. go-link lleva esa idea un poco más lejos.
El invitado puede jugar directamente desde el navegador, no descarga la ROM, no configura un emulador. No tiene que entender qué es MAME2 ni qué versión de un core necesita, recibe un enlace y entra.
Eso, desde el punto de vista de tecnología, siempre me ha parecido una buena señal, cuando una tecnología complicada logra esconder su complejidad al usuario, probablemente alguien hizo bien su trabajo.
Hay algo más que nostalgia
Es fácil mirar un proyecto de juegos arcade y pensar que todo se reduce a nostalgia. Pac-Man, Street Fighter, Metal Slug, Mortal Kombat o cualquier título que cada uno recuerde de su juventud tienen suficiente peso emocional como para sostener por sí solos una conversación bastante larga.
Pero creo que aquí hay algo más interesante. Internet nos permitió jugar con personas que están en cualquier parte del mundo, pero en el proceso muchas veces convirtió el juego en algo extremadamente individual.
Nos conectamos a un servidor, el sistema busca jugadores. Empieza la partida, termina la partida. Probablemente nunca volvamos a hablar con esas personas, el arcade era distinto.
Uno conocía al que estaba jugando, lo miraba, esperaba, comentaba una jugada. A veces alguien decía:
—Déjame probar.
Y ahí empezaba todo.
go-link intenta recuperar un poco de esa dinámica. Hay una sala, hay jugadores, hay espectadores y existe incluso una fila para esperar el siguiente turno. La tecnología es nueva, el comportamiento humano es bastante antiguo, y quizás ahí esté la parte que más me gusta del proyecto.
Open Source y esas cosas que empiezan pequeñas
Federico liberó go-link como un proyecto open source bajo licencia MIT. El servidor de señalización también está disponible como código abierto y el proyecto permite incluso montar una infraestructura propia.
Quienes hemos vivido alrededor del Open Source sabemos que muchos proyectos interesantes comienzan exactamente así. Alguien necesita algo, no existe, lo construye. Luego descubre que probablemente otra persona también lo necesita y publica el código (Así empezó Asterisk por poner un ejemplo).
Después llegan los errores, las ideas, los forks, los pull requests y alguna persona que intenta instalarlo en una máquina que el desarrollador jamás imaginó. Ahí empieza realmente la diversión.
Por ahora go-link tiene aplicaciones para Windows, macOS y Linux, además de opciones para Raspberry Pi, Docker y una aplicación para Android destinada a los jugadores invitados. Desde el móvil también puede utilizarse el navegador.
Hay incluso una sala llamada Test pattern, que no necesita ninguna ROM y permite probar la conexión usando una carta de ajuste y un tono de 1 kHz. Eso último me causó gracia.
Después de todo este viaje tecnológico terminamos utilizando una carta de ajuste para probar comunicaciones. Algunas cosas nunca cambian.
Ponga una moneda
No sé cuál será el futuro de go-link. Los proyectos de software suelen tomar caminos extraños. Algunos crecen, otros se transforman y otros simplemente sirven para aprender algo que después termina apareciendo en un proyecto completamente diferente.
Pero la idea me pareció lo suficientemente curiosa como para escribir sobre ella. Durante décadas hemos utilizado la tecnología para eliminar distancias.
Primero enviamos mensajes, después voz, luego video.
Ahora resulta que también podemos enviar aquella partida que antes compartíamos alrededor de una máquina. Quizás dentro de unos años alguien mire estos proyectos y le parezcan completamente normales.
A mí todavía me sorprende que una persona pueda estar ejecutando un videojuego en Buenos Aires mientras otra mueve al personaje desde Guayaquil usando únicamente un navegador. En algún lugar entre ambos viajan paquetes, video, audio, controles, ICE, SRTP, NAT y seguramente algún router haciendo cosas que nadie entiende completamente.
Pero para los jugadores todo eso da igual, uno juega, el otro mira, y cuando termina la partida, alguien ocupa su lugar.
Al final parece que no hemos cambiado tanto, solo reemplazamos la moneda por un enlace.
Ponga una moneda y espere su turno.
Una estrella en GitHub
Si les gusta go-link y quieren apoyar el proyecto, pueden dejar una ⭐ en GitHub. Ayuda a darle visibilidad y a que más personas lo conozcan.
👉 https://github.com/lordbasex/go-link
