Por Canuto  

Ladybird decidió adoptar Rust para reemplazar gradualmente partes de su base en C++ y arrancó por LibJS, su motor de JavaScript. Con asistencia de herramientas de IA, el fundador Andreas Kling afirma haber portado unas 25.000 líneas en dos semanas, manteniendo salida idéntica byte por byte, sin regresiones en 52.898 pruebas de test262 y 12.461 pruebas internas.
***

  • Primer portado: LibJS (lexer, parser, AST y generador de bytecode) por ser un subsistema relativamente autónomo y con amplia cobertura de pruebas.
  • Uso de IA “dirigido por humanos”: Kling usó Claude Code y Codex para traducir, y luego pidió revisiones adversariales a distintos modelos para detectar patrones erróneos.
  • Compatibilidad total: salida idéntica byte por byte, 0 regresiones en test262 (52.898 pruebas) y en pruebas de Ladybird (12.461), además de sin pérdidas de rendimiento en sus benchmarks.

 


Ladybird adopta Rust para avanzar hacia seguridad de memoria

El proyecto del navegador Ladybird anunció que comenzará a reescribir partes de su base de código en Rust, con el objetivo de ir reemplazando gradualmente componentes en C++. El anuncio fue firmado por Andreas Kling, fundador y presidente del proyecto, y fechó la decisión el lunes 23 de febrero de 2026.

La motivación central es encontrar un lenguaje “memory-safe” que reduzca clases de fallas asociadas al manejo manual de memoria, un riesgo histórico en software de sistemas. En el contexto de un navegador web, donde se ejecuta código de terceros y se procesan contenidos complejos, la seguridad de memoria suele considerarse una de las áreas con mayor impacto para mitigar vulnerabilidades.

Ladybird no llega a esta conclusión de la noche a la mañana. Kling explicó que el equipo llevaba tiempo buscando alternativas para sustituir C++ y que incluso evaluaron Swift. Sin embargo, la interoperabilidad con C++ “nunca llegó a ser adecuada” y el soporte fuera del ecosistema de Apple era limitado.

Rust, en cambio, aparece como una opción más viable para programación de sistemas, tanto por la madurez del ecosistema como por el hecho de que “muchos de nuestros colaboradores ya conocen el lenguaje”. Con esa base, Ladybird inicia un camino de coexistencia, más que una sustitución total e inmediata.

Por qué Rust antes no encajaba y qué cambió en 2026

Según Kling, Ladybird ya había evaluado Rust en 2024 y lo descartó entonces por un motivo técnico y cultural: el estilo del código. La plataforma web, y en particular su modelo de objetos, arrastra una herencia fuerte de la orientación a objetos de los años noventa, con jerarquías profundas, recolección de basura y patrones OOP que se sienten “naturales” en C++.

En ese marco, el modelo de propiedad de Rust no se adapta “naturalmente” a ese estilo, lo que vuelve más costosa la transición si el objetivo es reescribir de manera idiomática. En otras palabras, no se trata solo de aprender una sintaxis distinta, sino de replantear cómo se representan y comparten estructuras complejas en memoria.

Aun así, el proyecto describe un punto de inflexión tras “otro año de estancamiento”. Con ese diagnóstico, la decisión pasa a ser “pragmática”: Rust ofrece el equilibrio entre ecosistema, garantías de seguridad y viabilidad para integrarse en el desarrollo real del navegador, incluso si no encaja perfecto con el diseño heredado.

Kling también colocó la elección en un contexto industrial: tanto Firefox como Chromium ya comenzaron a introducir Rust en sus bases de código. La comparación no busca decir que Ladybird siga las mismas rutas técnicas, pero sí que el movimiento tiene precedentes en navegadores de gran escala.

El primer objetivo: portar LibJS, el motor de JavaScript

El primer subsistema seleccionado para el esfuerzo fue LibJS, el motor de JavaScript de Ladybird. Kling explicó que el analizador léxico, el analizador sintáctico, el AST y el generador de bytecode son componentes relativamente autónomos, lo que reduce dependencias con otras partes del navegador y facilita validar equivalencias.

Además, LibJS cuenta con una cobertura de pruebas extensa a través de test262, un conjunto de pruebas ampliamente usado para comprobar la conformidad de implementaciones de JavaScript. Esa base permite medir el impacto del cambio con rigor, algo clave cuando el riesgo no es solo “que compile”, sino que se comporte exactamente igual frente a miles de casos.

La estrategia del portado también fue explícita: en esta primera fase, la prioridad no era escribir Rust idiomático, sino lograr compatibilidad con el pipeline existente en C++. Por eso, el código resultante en Rust conserva un “aire de traducido desde C++”, y de hecho Kling reconoce que así fue diseñado.

En términos prácticos, eso implica imitar intencionalmente detalles como patrones de asignación de registros usados por el compilador en C++, con el fin de que ambos compiladores produzcan bytecode idéntico. La corrección fue una prioridad inmediata, y la limpieza vendrá después, una vez que sea posible retirar el pipeline de C++.

IA como herramienta: traducción dirigida por humanos y revisión adversarial

Para el portado, Kling indicó que utilizó Claude Code y Codex como apoyo para la traducción del código. La puntualización más importante es metodológica: no se trató de “generación autónoma de código” ni de dejar que un agente tome decisiones de arquitectura por sí solo.

De acuerdo con el relato, el proceso fue “dirigido por humanos”. Kling decidió qué portar, en qué orden, y cómo debía verse el código final en Rust. Las herramientas de IA, en ese marco, funcionaron como aceleradores para ejecutar cientos de pequeñas transformaciones bajo guía, en lugar de reemplazar el criterio del desarrollador.

Tras una traducción inicial, el trabajo continuó con varios pases de “revisión adversarial”. Kling describió que pidió a diferentes modelos que analizaran el código en busca de errores y patrones incorrectos, una práctica que se asemeja a combinar auditoría automatizada con revisión por pares, pero usando modelos distintos para aumentar la probabilidad de detectar fallas.

Este enfoque conecta con debates actuales sobre IA en ingeniería de software: la utilidad real suele aparecer cuando la IA se integra como copiloto y revisor, no como autor único. También eleva el estándar de control, porque el sistema no solo produce código, sino que se le exige consistencia, repetibilidad y validación por pruebas y comparación de salidas.

Resultados: 25.000 líneas en dos semanas, salida idéntica y 0 regresiones

El requisito inicial fue estricto: la salida de ambos pipelines debía ser idéntica “byte por byte”. Con ese criterio, el portado terminó en aproximadamente 25.000 líneas de Rust y, según Kling, tomó alrededor de dos semanas. En contraste, estimó que el mismo trabajo le habría llevado varios meses si lo hacía completamente a mano.

En la verificación técnica, el equipo comprobó que cada AST producido por el analizador sintáctico de Rust es idéntico al de C++. Además, todo el bytecode generado por el compilador de Rust coincidió con la salida del compilador en C++. La afirmación apunta a equivalencia funcional y también a equivalencia exacta en representación, algo poco común en migraciones de lenguajes.

Los números de pruebas respaldan el anuncio. En test262 se ejecutaron 52.898 pruebas con 0 regresiones. En las pruebas de regresión de Ladybird, se reportaron 12.461 pruebas con 0 regresiones. Kling también afirmó que no hubo regresiones de rendimiento en ninguno de los benchmarks de JavaScript que el proyecto sigue.

Más allá de las suites automatizadas, Kling describió pruebas adicionales al navegar por la web bajo un modo de sincronización en paralelo. En ese modo, los pipelines de C++ y Rust se ejecutan simultáneamente y se verifica que la salida coincida para cada pieza de JavaScript procesada. Ladybird presenta este punto como una capa extra de confianza para escenarios reales.

Qué sigue: coexistencia con C++ y portado en paralelo, no una reescritura total

El anuncio también busca moderar expectativas. Kling dijo que esto no se convertirá en el enfoque principal del proyecto y que continuarán desarrollando el motor en C++. El portado de subsistemas a Rust será un camino paralelo que se ejecutará durante mucho tiempo.

En ese diseño, el nuevo código Rust coexistirá con el existente en C++ a través de límites de interoperabilidad “bien definidos”. Esta frase es clave: la interoperabilidad entre lenguajes en software de sistemas puede introducir complejidad, por lo que Ladybird plantea una integración deliberada, por fronteras claras y módulos controlados.

El equipo también quiere gestionar qué partes se portan y en qué orden. Por eso, el esfuerzo de portado está administrado por el equipo central. Kling pidió a los colaboradores que coordinen antes de iniciar trabajos de migración, para evitar esfuerzos que luego no puedan integrarse en el repositorio principal.

Finalmente, el fundador anticipó controversia alrededor del movimiento, pero sostuvo que es la decisión correcta para el futuro de Ladybird. Según la fuente Ladybird, el cambio combina una apuesta por seguridad de memoria con un uso pragmático de IA para acelerar traducciones, reforzar revisiones y mantener compatibilidad estricta con el comportamiento previo.


ADVERTENCIA: DiarioBitcoin ofrece contenido informativo y educativo sobre diversos temas, incluyendo criptomonedas, IA, tecnología y regulaciones. No brindamos asesoramiento financiero. Las inversiones en criptoactivos son de alto riesgo y pueden no ser adecuadas para todos. Investigue, consulte a un experto y verifique la legislación aplicable antes de invertir. Podría perder todo su capital.

Suscríbete a nuestro boletín