Por Canuto  

Microsoft completó el portado del runtime que sostiene Copilot desde TypeScript a Rust con apoyo intensivo de agentes de inteligencia artificial. El proyecto costó unos USD $120.000 en tokens, redujo drásticamente el uso de memoria y multiplicó el rendimiento en una prueba, pero también produjo decenas de regresiones que las comprobaciones automáticas no pudieron detectar.
***

  • Los agentes convirtieron 430.000 líneas de TypeScript en 800.000 líneas de Rust de producción durante 14,5 semanas.
  • Rust procesó 120 ciclos de sesión por segundo frente a 7,55 de TypeScript y utilizó 126 MB en lugar de 1.383 MB.
  • Microsoft encontró decenas de regresiones, una advertencia sobre los límites de confiar en que el código simplemente compile.


Microsoft terminó la migración del runtime que sostiene GitHub Copilot y varios productos de su ecosistema desde TypeScript hacia Rust, en un proyecto realizado principalmente con agentes de inteligencia artificial. El portado costó aproximadamente USD $120.000 en consumo de tokens y requirió cerca de tres semanas del tiempo de un desarrollador, aunque el esfuerzo completo se extendió durante 14,5 semanas y generó decenas de regresiones que después tuvieron que revisarse.

El resultado combina una mejora considerable en rendimiento y consumo de memoria con una advertencia sobre los límites de la automatización basada en modelos de lenguaje. Los agentes transformaron 430.000 líneas de TypeScript en 800.000 líneas de Rust de producción, pero las comprobaciones automáticas no pudieron determinar por sí solas si el comportamiento final conservaba todos los requisitos funcionales del sistema.

Un runtime presente en varios productos

El runtime de Copilot funciona como una pieza de infraestructura compartida para una gama de productos que muchos usuarios utilizan sin verla directamente. Entre sus implementaciones se encuentran la interfaz de línea de comandos de GitHub Copilot, la aplicación Copilot, el SDK y el agente en la nube de GitHub Copilot, además de integraciones con VS Code, Visual Studio, Excel, Outlook, PowerPoint y otros servicios en la nube de Microsoft.

La versión original estaba escrita en TypeScript y utilizaba Node.js como framework, con V8 como motor de ejecución. Esa combinación facilitó el desarrollo rápido y la evolución inicial del producto, pero Microsoft identificó problemas relacionados con el arranque y la densidad de servidores cuando el runtime operaba a gran escala.

Stephen Toub, Distinguished Engineer de Microsoft, explicó que la decisión no representa una recomendación general para convertir en Rust todos los programas grandes escritos en TypeScript. Según su descripción, los requisitos específicos del proyecto incluían integración mediante una ABI de C, bajo tiempo de arranque, poca sobrecarga durante la operación y un uso predecible de los recursos.

La arquitectura también exigía que el procesamiento pudiera permanecer dentro del mismo proceso, en lugar de depender de procesos externos en segundo plano para completar determinadas tareas. Rust permitió orientar el runtime hacia esas necesidades, aunque la migración se limitó a sustituir los módulos de TypeScript caso por caso y no intentó rediseñar la estructura completa del sistema.

El salto de rendimiento de Rust

La diferencia más visible apareció en una prueba que midió la capacidad del runtime para completar 1.000 ciclos de vida de sesión de un turno. El benchmark utilizó un cliente compartido y 100 pipelines concurrentes, una configuración diseñada para observar el comportamiento del sistema bajo una carga de trabajo específica y no para representar todos los escenarios de uso.

La implementación en TypeScript completó 7,55 ciclos por segundo, mientras que la versión de Rust ejecutada dentro del proceso alcanzó 120 ciclos por segundo. Esa comparación equivale a una aceleración de 15,9 veces, una mejora que puede resultar relevante para servicios que necesitan atender numerosos agentes sin aumentar en la misma proporción la infraestructura.

El consumo de memoria también cayó de forma marcada en otra medición. Un grupo de 10 clientes de agentes utilizó 1.383 MB con TypeScript, mientras que la reescritura en Rust consumió 126 MB al atender al mismo conjunto de clientes, según los resultados descritos por Microsoft.

Estas cifras no significan que Rust vaya a producir la misma ventaja en cualquier aplicación ni que TypeScript haya dejado de ser útil para el desarrollo de software. Sí muestran por qué una organización que opera runtimes compartidos en numerosos productos puede considerar una migración costosa cuando el arranque, la densidad de servidores y la previsibilidad del consumo se convierten en restricciones operativas.

La IA como equipo de portado

Microsoft utilizó Copilot para reescribir Copilot y combinó varios modelos de lenguaje para distribuir las tareas según sus fortalezas. En el proceso se mencionaron GPT-5.6 Sol y Claude Opus 4.8, que participaron en diferentes partes de la conversión, mientras los desarrolladores supervisaban los cambios, coordinaban las sesiones y corregían los problemas encontrados.

El runtime se actualizó módulo por módulo a lo largo de más de 135 versiones, con un promedio aproximado de 1,3 solicitudes de incorporación de cambios por día. La estrategia buscó mantener cada modificación acotada y verificable, pero no eliminó la necesidad de intervención humana para evaluar regresiones, resolver conflictos y confirmar que el nuevo código conservara comportamientos que no siempre estaban documentados.

Toub describió el uso de agentes como mayormente exitoso y señaló que un portado manual probablemente habría requerido años y millones de dólares. Sin embargo, también observó que los agentes dedicaban mucho más tiempo a recopilar información que a escribir código, porque inspeccionaban el estado del proyecto, formulaban hipótesis, ejecutaban cambios dirigidos y repetían el ciclo antes de avanzar.

Una de las conversiones más complejas involucró el archivo session.ts, que superaba las 30.000 líneas de TypeScript y conectaba prácticamente todas las partes del runtime. La sesión que trabajó en ese módulo tardó 25 horas, comenzó con 56 minutos de lectura documental y realizó 122 llamadas a herramientas para solicitar aclaraciones antes de crear 15 sesiones hijas.

Coordinación entre sesiones y fallas ocultas

Cada una de esas sesiones hijas creó su propio worktree y agente, y posteriormente varias comenzaron a comunicarse entre sí. Una herramienta de orquestación permitió que una sesión identificara las demás sesiones activas y enviara mensajes a aquellas cuyas misiones se superponían, con el objetivo de coordinar el trabajo y evitar esfuerzos duplicados.

Ese comportamiento muestra una faceta menos visible de los agentes de programación: el problema no consiste únicamente en pedirles que generen funciones, sino en mantener una investigación continua sobre una base de código extensa. A medida que crece el número de módulos y tareas paralelas, la coordinación, la memoria del proyecto y la validación de supuestos adquieren tanta importancia como la generación del código.

La compilación correcta tampoco garantizó que la migración conservara el comportamiento esperado. El proyecto encontró docenas de regresiones, es decir, funciones que operaban antes de una actualización y dejaron de hacerlo después, a pesar de que el nuevo código podía pasar las comprobaciones sintácticas y de seguridad del compilador.

El compilador de Rust puede comprobar numerosas propiedades importantes, pero no sabe si las funciones aparecen en el orden adecuado para el producto, si una operación termina con un costo aceptable o si respeta requisitos internos que nunca se escribieron. Tampoco puede determinar por sí solo si el sistema mantiene una coherencia funcional completa, por lo que las pruebas, la revisión humana y el conocimiento del dominio siguen siendo indispensables.

El precedente de otros portados

El caso de Copilot se suma a otros experimentos recientes que utilizan agentes para trasladar grandes bases de código hacia Rust. Jarred Sumner, creador de Bun, portó a Rust el runtime y toolkit de JavaScript de Anthropic, un proyecto que contenía aproximadamente 535.000 líneas de código Zig y que se desarrolló casi por completo con agentes Claude.

Al 30 de julio, esa versión experimental en Rust superaba el 99,8% de las pruebas existentes de Bun en Linux x64 glibc. Aun así, las versiones estables continuaban distribuyéndose desde la base de código en Zig, una diferencia que ilustra la distancia entre un portado experimental con resultados prometedores y una sustitución definitiva en producción.

Ese trabajo anterior registró un costo de USD $165.000 en tokens, por encima de los USD $120.000 asociados con el runtime de Copilot. Las cifras no representan el costo total de ingeniería, porque ambos proyectos también requieren supervisión, pruebas, integración, corrección de regresiones y decisiones arquitectónicas que no se reducen a la factura de los modelos.

La experiencia de Microsoft sugiere que los agentes pueden cambiar la economía y los plazos de las migraciones de software, especialmente cuando trabajan sobre sistemas con pruebas y límites operativos bien definidos. También confirma que una reescritura automatizada no elimina el riesgo técnico: desplaza una parte del esfuerzo desde la escritura manual hacia la investigación, la coordinación y la validación del resultado.

Qué significa para el desarrollo con IA

El portado de Copilot ofrece una referencia concreta sobre lo que puede hacer hoy un conjunto de agentes cuando dispone de acceso a herramientas, documentación y un repositorio grande. La IA no se limitó a producir fragmentos aislados, sino que examinó el sistema, dividió tareas, generó sesiones secundarias y participó en un flujo prolongado de cambios que terminó en código de producción.

El rendimiento obtenido explica el interés empresarial por estos proyectos. Multiplicar por 15,9 la velocidad en una carga de trabajo concreta y reducir el consumo de memoria de 1.383 MB a 126 MB puede mejorar la capacidad de los servidores, aunque cada organización tendría que medir si esas ventajas se mantienen con sus propios clientes, pipelines y patrones de concurrencia.

La factura de tokens tampoco debe interpretarse como el precio definitivo de una migración. El uso de agentes puede reducir el trabajo de escritura, pero todavía exige desarrolladores capaces de definir objetivos, revisar decisiones, detectar regresiones y decidir cuándo una conversión conserva la lógica original o necesita un rediseño más profundo.

En ese equilibrio se encuentra la principal lección del proyecto: que el código compile es una condición necesaria, pero no una prueba suficiente de que el software funciona correctamente. Rust aportó velocidad, menor uso de memoria y un modelo adecuado para los requisitos de Microsoft, mientras que los agentes aceleraron el portado; la calidad final dependió de combinar ambas ventajas con supervisión técnica rigurosa.


Imagen original de DiarioBitcoin, creada con inteligencia artificial, de uso libre, licenciada bajo Dominio Público.

Este artículo fue escrito por un redactor de contenido de IA y revisado por un editor humano para garantizar calidad y precisión.


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