⏱️ Lectura: 11 min
Josh Bowman-Matthews, mantenedor de larga trayectoria en Servo, revisó 1.150 pull requests en los últimos doce meses gracias a un rol pagado exclusivamente con donaciones de la comunidad. El anuncio se hizo en septiembre de 2025: el proyecto usaría el dinero recaudado en OpenCollective y GitHub Sponsors para financiar trabajo part-time de @jdm dedicado a mejorar la experiencia de quienes contribuyen a Servo.
📑 En este artículo
Un año después, el propio jdm publicó un balance con cifras concretas: mantenedores nuevos nominados, issues creados para facilitar el onboarding, y una reescritura profunda de la integración del motor JavaScript que perseguía errores intermitentes. Repasamos qué se hizo y qué significa para el desarrollo de Servo, el motor de navegador escrito en Rust.
TL;DR
- Josh Bowman-Matthews (@jdm) cumplió un año de trabajo financiado por donaciones para Servo, vía OpenCollective y GitHub Sponsors.
- Revisó 1.150 pull requests y nominó a 8 nuevos mantenedores para el proyecto en doce meses.
- Filed 114 issues pensados para nuevos contribuidores; el 92% ya fue resuelto.
- Escribió documentación nueva sobre borrow hazards, funcionalidades experimentales, la política de IA y cómo encontrar tareas.
- Apoyó la reescritura de la integración del motor JS de Servo para resolver panics intermitentes por garbage collection.
- Destapó un comportamiento roto en window.open y ayudó a estabilizar pruebas inestables (flaky tests).
- Respaldó la propuesta de subvención de otro contribuidor para trabajar en Servo, que fue aprobada.
Qué pasó
El 15 de septiembre de 2026, el blog oficial de Servo publicó un balance del primer año de este rol financiado. El propio Bowman-Matthews escribió el texto en primera persona, algo poco común en anuncios de proyectos open source, y detalló en qué se tradujo el dinero de la comunidad.
El resumen incluye cuatro cifras centrales: 8 mantenedores nuevos nominados, 1.150 pull requests revisados, 114 issues creados específicamente para facilitar la entrada de nuevos contribuidores (con un 92% ya resueltos) y varios documentos técnicos nuevos que hoy forman parte de la documentación oficial: sobre borrow hazards (los riesgos de compartir referencias mutables en Rust dentro del motor), funcionalidades experimentales, la política de uso de inteligencia artificial en contribuciones, y cómo encontrar tareas para arrancar.
Además del trabajo visible en números, jdm dedicó tiempo a diagnosticar fallos difíciles de reproducir en pull requests de otras personas: builds que fallaban de forma intermitente, tests que pasaban en una corrida y fallaban en la siguiente. Ese trabajo de plomería rara vez aparece en un changelog, pero es el que determina si mergear un cambio toma minutos u horas.
Contexto e historia
Servo nació en 2012 dentro de Mozilla Research como un experimento: construir un motor de renderizado web desde cero en Rust, un lenguaje que por entonces todavía era joven y que se desarrolló en paralelo con Servo para resolver los problemas de memoria y concurrencia que atormentaban a motores como Gecko. Durante varios años, Servo fue el banco de pruebas donde Mozilla validaba ideas de paralelismo en el layout y el renderizado.
En 2020, Mozilla recortó personal y dejó de financiar Servo como proyecto interno. El código pasó a la Linux Foundation, y durante un tiempo el desarrollo quedó en manos de un grupo reducido de voluntarios. La reactivación seria llegó después, bajo el paraguas de Linux Foundation Europe, con el objetivo declarado de convertir a Servo en una alternativa liviana y embebible a motores como Chromium o WebKit para aplicaciones que necesitan renderizar HTML y CSS sin cargar con un navegador completo.
El rol financiado de jdm es parte de esa segunda etapa del desarrollo de Servo: en vez de depender solo de contribuciones esporádicas de voluntarios, el proyecto usa las donaciones recurrentes para sostener a alguien que se dedique, entre otras cosas, a que la experiencia de un contribuidor nuevo no dependa de la suerte.
Detalles técnicos y rendimiento
Uno de los focos técnicos más concretos del año fue la integración del motor JavaScript de Servo, basado en SpiderMonkey. El equipo encaró una reescritura a gran escala para resolver panics intermitentes relacionados con el recolector de basura (garbage collector): fallos que aparecían solo bajo ciertas condiciones de memoria y que eran casi imposibles de reproducir a demanda. jdm no escribió todo ese código, pero sí revisó buena parte de los pull requests asociados y filed los issues que permitieron repartir el trabajo entre varios contribuidores en paralelo.
Otro hallazgo relevante fue un comportamiento roto en window.open, la API que abre una nueva pestaña o ventana desde JavaScript. El bug salió a la luz mientras se investigaban fallos intermitentes en tests, y terminó llevando a estabilizar un número más amplio de pruebas flaky (las que a veces pasan y a veces no sin que cambie el código).
Para entender por qué importa la estabilidad de los tests, hay que mirar cómo se prueba Servo: el motor corre buena parte del Web Platform Tests (WPT), la batería de pruebas de interoperabilidad que comparten todos los motores de navegador.
# clonar y compilar Servo (funciona igual en Linux y macOS)
git clone https://github.com/servo/servo.git
cd servo
./mach bootstrap
./mach build --release
Ese bloque compila Servo en modo release usando mach, el sistema de build heredado del mismo esquema que usa Firefox. El siguiente corre un archivo puntual del WPT, el mismo tipo de test que revisa jdm cuando aparece un fallo intermitente:
./mach test-wpt tests/wpt/mozilla/tests/mozilla/webgl/context_creation.html
./mach test-wpt --log-raw wpt-run.log dom/interfaces.html
Correr el mismo test varias veces seguidas (por ejemplo, en un loop de shell) es la forma más directa de confirmar si un fallo es realmente intermitente o si hay una condición de carrera reproducible.
| Motor | Lenguaje | Modelo de embedding | Estado |
|---|---|---|---|
| Servo | Rust | librería embebible (libservo) |
Activo, financiado por donaciones bajo Linux Foundation Europe |
| Chromium (CEF) | C++ | Chromium Embedded Framework | Maduro, huella de memoria alta |
| WPE WebKit | C++ | API WPE para dispositivos embebidos | Usado en smart TVs y set-top boxes |
| GeckoView | C++/Rust | Embedding limitado, orientado a Android | Mantenido por Mozilla, foco mobile |
💭 Clave: Servo no compite por usuarios finales como navegador de escritorio: compite por desarrolladores que necesitan embeber un motor de renderizado liviano en su propia aplicación, sin cargar con un Chromium completo.
Cómo empezar a contribuir
Compilar Servo requiere Python (para mach) y una toolchain de Rust actualizada. En Windows, los comandos son casi idénticos, solo cambia cómo se invoca el script:
# Windows (PowerShell)
git clone https://github.com/servo/servo.git
cd servo
python mach bootstrap
python mach build --release
python mach run --release https://example.com
En Linux y macOS, el mismo flujo corre con ./mach en vez de python mach. El comando run abre una ventana con Servo renderizando la URL indicada, útil para confirmar que el build funciona antes de tocar código.
Para quien recién arranca, el punto de entrada más razonable no es el motor JS ni el layout: son los issues etiquetados E-easy en el repositorio de GitHub, muchos de ellos filed durante este último año específicamente para dar una primera tarea acotada. jdm documentó ese proceso en la guía de finding things to do que se sumó a la documentación oficial.
💡 Tip: Antes de abrir tu primer pull request, corré la suite de linting local (
./mach test-tidy) para evitar comentarios de estilo en la revisión y llegar directo a la discusión técnica.
Impacto y análisis del desarrollo de Servo
El caso de Servo es un ejemplo de un modelo de financiamiento que crece en el ecosistema open source: en vez de depender de que una empresa grande absorba el proyecto, como pasó con Mozilla hasta 2020, el sostén viene de donaciones recurrentes de individuos y organizaciones a través de OpenCollective y GitHub Sponsors.
La diferencia frente a otros modelos de financiamiento colectivo es que acá el dinero no fue a infraestructura, como servidores de CI, sino a horas de trabajo humano dedicadas específicamente a bajar la fricción de contribuir. Es una apuesta a que un proyecto con más mantenedores activos (8 nominados en un año) termina siendo más resiliente que uno con pocos mantenedores muy ocupados.
flowchart TD
A["Donantes (OpenCollective y GitHub Sponsors)"] --> B["Fondo de Servo"]
B --> C["Rol part-time financiado (@jdm)"]
C --> D["Revision de pull requests"]
C --> E["Mentoria a nuevos contribuidores"]
C --> F["Documentacion tecnica"]
D --> G["Mas mantenedores activos"]
E --> G
F --> G
El diagrama resume el circuito: la plata no financia una feature puntual, financia la capacidad del proyecto de absorber más contribuciones externas sin que cada pull request dependa de la disponibilidad de una sola persona.
Qué sigue
jdm cerró su balance con la intención de seguir en el rol otro año, aunque el texto no menciona metas numéricas nuevas para el próximo período. Lo que sí queda claro es la dirección: más documentación para bajar la barrera de entrada, más trabajo sobre la estabilidad de los tests (un problema estructural en cualquier motor que corre miles de casos de WPT) y continuar repartiendo responsabilidades de mantenimiento entre más personas.
Para el ecosistema Rust en general, cada mantenedor nuevo en Servo es también alguien con experiencia real en un codebase grande y concurrente, algo que eventualmente se traduce en contribuciones a otras herramientas del lenguaje.
📖 Resumen en Telegram: Ver resumen
Probalo vos: cloná el repo con git clone https://github.com/servo/servo.git y corré ./mach build --release para ver el motor compilando en tu propia máquina hoy mismo.
Preguntas frecuentes
¿Qué es Servo?
Servo es un motor de renderizado web escrito en Rust, pensado para embeberse en aplicaciones que necesitan mostrar HTML y CSS sin cargar un navegador completo. Nació en Mozilla Research en 2012 y hoy se desarrolla bajo Linux Foundation Europe.
¿Quién es Josh Bowman-Matthews y qué rol cumple?
Es un mantenedor de larga trayectoria en Servo, conocido en el proyecto como @jdm. Desde septiembre de 2025 trabaja part-time de forma remunerada, financiado exclusivamente con donaciones, enfocado en mejorar la experiencia de quienes contribuyen al proyecto.
¿Cómo se financia ese trabajo?
A través de donaciones recurrentes en OpenCollective y GitHub Sponsors. No hay una empresa única sosteniendo el sueldo: el dinero viene de la comunidad que usa o sigue el proyecto.
¿Puedo usar Servo hoy para embeber un navegador en mi app?
Servo expone una librería embebible (libservo) pensada para ese caso de uso, aunque todavía está en desarrollo activo y no cubre el cien por ciento del estándar web. Es una opción a evaluar frente a alternativas como CEF (Chromium) o WPE WebKit cuando el objetivo es una huella más liviana.
¿Cómo empiezo a contribuir a Servo?
El punto de partida recomendado son los issues etiquetados como E-easy en el repositorio de GitHub, muchos de ellos creados durante este último año específicamente para dar una primera tarea acotada a quien no conoce el codebase.
¿Qué relación tiene Servo con el lenguaje Rust?
Servo y Rust se desarrollaron en paralelo dentro de Mozilla: varias necesidades del motor, como la seguridad de memoria sin garbage collector tradicional y el paralelismo seguro, moldearon decisiones de diseño del lenguaje en sus primeros años.
Referencias
- Servo Blog: balance oficial del primer año del rol financiado de @jdm.
- servo/servo en GitHub: código fuente, issues etiquetados E-easy y guía de contribución.
- OpenCollective de Servo: donde se reciben las donaciones que financian el proyecto.
- servo.org: sitio oficial del proyecto y documentación general.
📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.
Imagen destacada: Foto de Pankaj Patel en Unsplash
0 Comentarios