El compilador de Mojo es de código abierto: qué pueden cambiar realmente los desarrolladores
El compilador de Mojo ya puede construirse y modificarse desde el código fuente. AI News reprodujo la compilación, mientras que las licencias y la gobernanza de contribuciones siguen siendo límites distintos.
Modular publicó el compilador de Mojo de código abierto el 18 de agosto, una semana después de Mojo 1.0. El cambio importante no es solo que el código pueda leerse en GitHub: ahora un desarrollador puede modificar el compilador, construirlo desde el código fuente y utilizar esa compilación para compilar y ejecutar un programa de Mojo sin un binario propietario del compilador de Mojo.
Esa respuesta necesita dos matices. El compilador construido desde el código fuente actualmente no puede construir objetivos MAX, y Modular todavía no acepta contribuciones al compilador ni a las herramientas. El repositorio también somete su código y sus contribuciones a Apache 2.0 con excepciones de LLVM, mientras aplica por separado la Modular MAX Community License al uso y la distribución de MAX. «Mojo es de código abierto» es correcto; «todos los productos del repositorio tienen ahora las mismas condiciones de uso sin restricciones» no lo es.
¿Puedo construir y modificar Mojo sin un compilador propietario?
Sí, para el compilador de Mojo y la biblioteca estándar. Usa la configuración de Bazel build-mojo del repositorio. Desactiva explícitamente la cadena de herramientas precompilada de Mojo, construye el objetivo del compilador a partir del código fuente comprobado y puede ejecutar un archivo .mojo con el compilador resultante.
No, para todos los flujos de trabajo de Modular Platform. La propia guía del repositorio abierto del proyecto dice que un compilador construido localmente no puede construir ningún objetivo MAX. El trabajo en kernels o modelos MAX sigue utilizando la configuración prebuilt-mojo, que descarga el paquete nightly actual de Mojo de Modular.
Esta distinción separa cuatro significados útiles de «abierto»:
- Visible: puedes inspeccionar la implementación y el historial del compilador.
- Construible: puedes producir un compilador funcional a partir del código fuente publicado.
- Bifurcable: la licencia Apache 2.0 con excepciones de LLVM permite modificar y redistribuir el código conforme a sus condiciones.
- Abierto a contribuciones upstream: todavía no para el compilador y las herramientas, aunque se aceptan contribuciones a la biblioteca estándar y a algunas partes de MAX.
El lanzamiento alcanza los tres primeros hitos para el lenguaje. Todavía no alcanza el cuarto.
¿Qué se convirtió exactamente en código abierto?
El repositorio modular es un monorepo, no un proyecto exclusivo del compilador. Su README principal identifica el compilador, la biblioteca estándar, el código del acelerador, las canalizaciones de modelos y el servidor de inferencia como componentes separados. Esos límites importan al decidir qué puedes cambiar y qué condiciones rigen el resultado.
| Componente | Ruta del repositorio | Qué puede hacer ahora un desarrollador | Límite importante |
|---|---|---|---|
| Compilador de Mojo | KGEN/ |
Leer, construir, modificar, probar y mantener una bifurcación. | Apache 2.0 con excepciones de LLVM; todavía no se aceptan contribuciones al compilador upstream. |
| Biblioteca estándar de Mojo | mojo/stdlib/ |
Construir con el compilador local y enviar correcciones, pruebas, documentación o propuestas aprobadas con un alcance concreto. | Apache 2.0 con excepciones de LLVM; los cambios también deben probarse con el compilador empaquetado antes de un pull request. |
| Herramientas del compilador | KGEN/tools/ |
Inspeccionar y ejecutar herramientas IR de bajo nivel como kgen-translate. |
El código fuente está abierto, pero el proceso de contribución al compilador y las herramientas aún se está preparando. |
| Biblioteca de aceleradores MAX | max/kernels/ |
Inspeccionar el código y contribuir dentro de las áreas que acepta el proyecto. | El trabajo de MAX usa el compilador de Mojo precompilado; el uso y la distribución de MAX tienen condiciones separadas de la Community License. |
| Canalizaciones y servidor de inferencia MAX | max/python/max/pipelines/ y max/python/max/serve/ |
Inspeccionar implementaciones y trabajar en arquitecturas de modelos aceptadas. | No deduzcas derechos de producto sujetos solo a Apache a partir de la licencia del repositorio; revisa las condiciones de MAX y las licencias de modelos de terceros. |
La redacción de las licencias requiere cuidado. El README del repositorio dice que el repositorio y sus contribuciones están bajo Apache 2.0 con excepciones de LLVM. Después dice que el uso y la distribución de MAX se rigen por la Modular MAX Community License. Esa segunda licencia incluye requisitos para obras derivadas y distribución de aplicaciones, identifica componentes con licencias independientes y pide a los usuarios que comprueben las licencias de terceros.
En la práctica, auditar o bifurcar el lenguaje Mojo es una decisión legal distinta de distribuir un producto que incorpora MAX. El README es una orientación, no asesoramiento jurídico; los equipos que distribuyan software deben asignar los archivos y binarios reales de su producto a los avisos y condiciones aplicables.
Reproducimos la compilación desde el código fuente
Para este artículo clonamos la revisión 33cd4694, confirmada el 20 de agosto, y ejecutamos el objetivo documentado del compilador en Linux de 64 bits. La máquina utilizaba un AMD Ryzen 7 8700G con 8 núcleos, 16 hilos de hardware y 46 GiB de memoria. En esta prueba no intervino ninguna GPU dedicada.
El comando fue:
./bazelw run --config=build-mojo //KGEN:mojo -- --version
La compilación desde el código fuente terminó correctamente después de 11.173 acciones de Bazel. De extremo a extremo, el comando tardó 41 minutos y 57 segundos y terminó con el estado 0. El binario resultante informó Mojo 1.1.0.dev0 (deadbeef); el texto deadbeef es metadato de versión de la compilación, mientras que la revisión Git anterior es la identidad del código fuente que fijamos.
Después creamos un archivo mínimo:
def main():
print("source-built Mojo works")
y lo ejecutamos con el flujo documentado:
./bazelw run --config=build-mojo //KGEN:mojo -- run repro.mojo
Con el compilador ya en caché, el comando posterior terminó en 1,8 segundos, imprimió source-built Mojo works y terminó con el estado 0. También detectó un cambio práctico de versión: un borrador anterior usaba fn main(), que el compilador actual rechazó con la instrucción de usar def en su lugar.
El primer comando es una compilación sustancial del compilador, no una instalación ligera del lenguaje. El wrapper de Bazel descargó el binario de Bazel compatible; la resolución de dependencias obtuvo archivos de código fuente que incluían LLVM, además de cadenas de herramientas precompiladas para el host y la compilación cruzada; y Bazel analizó más de 42.000 objetivos configurados antes de planificar unas 11.000 acciones de compilación para el objetivo solicitado. Esto no convierte a Mojo en un proyecto autoalojado o de bootstrap desde el código fuente: «no hay un compilador de Mojo precompilado» es distinto de «no hay herramientas binarias de compilación ni cadenas de herramientas del sistema».
Demuestra la afirmación más concreta que necesitan los desarrolladores: el código fuente publicado del compilador puede producir el ejecutable mojo que analiza, compila y ejecuta un programa Mojo. El .bazelrc del repositorio conecta --config=build-mojo con use_prebuilt_mojo_toolchain=false, mientras que el modo separado prebuilt-mojo descarga un paquete nightly de Mojo.
Considera nuestro tiempo una observación de reproducibilidad, no un benchmark. Bazel utilizó sus cachés configuradas, la velocidad de red no estuvo controlada y una CPU, un estado de caché o una revisión del repositorio distintos cambiarán el resultado. Los hechos duraderos son la revisión probada, el objetivo, la configuración, la clase de hardware, la salida y el estado de terminación.
¿Qué pueden cambiar los desarrolladores del compilador?
El árbol KGEN/ expone mucho más que un wrapper de frontend. Contiene el parser y las capas semánticas de Mojo, representaciones intermedias y pasadas basadas en MLIR, lowering de LLVM, integración del runtime, herramientas de línea de comandos y las pruebas y la documentación utilizadas para recorrer esa canalización. El recorrido del compilador del proyecto es el mapa inicial más útil.
Ahora un ingeniero de compiladores puede seguir una función del lenguaje a través del análisis sintáctico, la comprobación de tipos, los dialectos específicos de Mojo, el lowering y el código generado; cambiar esa implementación en una bifurcación; reconstruir //KGEN:mojo; y ejecutar pruebas dirigidas. El lanzamiento del código fuente también hace técnicamente posibles la revisión de seguridad, la búsqueda binaria de regresiones, los diagnósticos experimentales, nuevas pasadas de investigación y el mantenimiento de bifurcaciones a largo plazo, de formas que un ejecutable cerrado no permitía.
El repositorio abierto tiene lagunas de flujo de trabajo. Su guía dice que el objetivo //:install del monorepo no está soportado, por lo que los desarrolladores deben invocar el objetivo de Bazel o copiar los artefactos manualmente. Parte de la documentación interna usa alias que debe definir un contribuyente externo. Las pruebas específicas del hardware se omiten cuando la plataforma detectada no coincide. Y, lo más importante, el compilador local no puede construir objetivos MAX.
Son problemas normales en un árbol de compilador complejo recién abierto, pero afectan al coste de utilizarlo. Un lanzamiento del código fuente reduce la opacidad del proveedor; no proporciona automáticamente un empaquetado pulido, una amplia cobertura de plataformas, API downstream estables ni un grafo de compilación pequeño.
La visibilidad del código va por delante de la gobernanza
El anuncio de Modular dice que aspira a aceptar contribuciones al compilador y las herramientas para finales de 2026. La guía actual de contribución de Mojo es más inmediata: el compilador es de código abierto, pero todavía no se ha definido un proceso de contribución.
Por tanto, hoy puedes publicar una bifurcación del compilador, informar de un error, debatir la arquitectura o preparar un parche para tu propio uso. No debes suponer que Modular revisará y fusionará hoy un pull request del compilador. En cambio, la biblioteca estándar tiene categorías documentadas de cambios aceptados, expectativas de pruebas y un proceso de propuestas para diseños mayores.
No es una contradicción de licencias. Una licencia de código abierto concede derechos para usar, estudiar, modificar y distribuir el código; no obliga al mantenedor original a aceptar parches externos. Pero la gobernanza influye en si un proyecto se comporta como un upstream compartido o como un árbol de código fuente publicado por un proveedor. Para los equipos que intentan evitar una bifurcación permanente, el flujo de contribuciones prometido es un hito que merece seguimiento.
¿Un compilador abierto hace que Mojo esté listo para producción?
Ningún acontecimiento aislado del repositorio puede responder a eso. El lanzamiento mejora de forma material la auditabilidad, la continuidad y la capacidad de diagnosticar el comportamiento del compilador. La preparación para producción sigue dependiendo de la carga de trabajo, el hardware compatible, el ecosistema, la política de actualizaciones, la experiencia de depuración y la disposición del equipo a mantener correcciones que aún no pueden llegar al upstream.
La evidencia independiente es alentadora, pero acotada. Un estudio revisado por pares de los SC 2025 Workshops probó cuatro kernels científicos en GPU NVIDIA H100 y AMD MI300A. Los autores encontraron que Mojo era competitivo con CUDA o HIP para sus kernels limitados por memoria, aunque informaron de carencias en las operaciones atómicas de AMD y en las cargas de trabajo de fast-math limitadas por cómputo de ambos proveedores. También describieron el modelo de programación como bastante bajo nivel. Esos experimentos son anteriores a Mojo 1.0 y al lanzamiento del código fuente, así que demuestran que es posible evaluar kernels reales entre proveedores, no que el compilador actual gane en todas las cargas de trabajo.
Los debates del lanzamiento en Hacker News, r/ProgrammingLanguages y r/Compilers plantearon preguntas razonables sobre dependencias de MAX, controladores de GPU propietarios, dialectos MLIR específicos de Mojo, migración desde Python y el público práctico de otro lenguaje para aceleradores. Son pistas de investigación, no validación. Un comentario puede identificar la prueba que debería ejecutar tu equipo; no puede sustituirla.
| Objetivo | Estado actual | Siguiente paso recomendado |
|---|---|---|
| Auditar o experimentar con el compilador del lenguaje | Accionable | Fija una revisión, compila con build-mojo y ejecuta pruebas del compilador y la biblioteca estándar alrededor del código que cambies. |
| Mantener una bifurcación interna del compilador | Legal y técnicamente posible | Presupuesta una compilación grande de Bazel/LLVM, rebases upstream, empaquetado de lanzamientos y actualizaciones de seguridad. |
| Contribuir una corrección a la biblioteca estándar | Compatible | Sigue las reglas documentadas de incidencias, pruebas, benchmarks y propuestas; prueba con compiladores locales y precompilados. |
| Contribuir una función del compilador al upstream | Aún no abierto | Coméntalo con el proyecto y espera al flujo formal de contribución del compilador antes de esperar una revisión. |
| Personalizar kernels o modelos MAX | Requiere el compilador empaquetado | Usa prebuilt-mojo, revisa las licencias de MAX y de los modelos y prueba el objetivo exacto del acelerador. |
| Migrar un sistema de Python o CUDA en producción | Requiere evidencia de la carga de trabajo | Prototipa una ruta crítica acotada y compara corrección, latencia de extremo a extremo, portabilidad, depuración y coste de actualización. |
El veredicto práctico
Abrir el compilador de Mojo cambia realmente su perfil de riesgo. Los desarrolladores ya no tienen que confiar en un binario opaco del lenguaje para entender cómo el código fuente de Mojo se convierte en código máquina, y pueden conservar o modificar el compilador si la hoja de ruta de Modular diverge de sus necesidades. Eso convierte a Mojo en un experimento de lenguaje más creíble y en una dependencia más inspeccionable.
No agrupa Mojo, MAX, los controladores de GPU, el código de modelos y los derechos de despliegue bajo una única promesa de código abierto. Tampoco crea de la noche a la mañana una comunidad upstream del compilador. El veredicto honesto de 2026 es: el lenguaje ahora es auditable, construible desde el código fuente y bifurcable; la integración con MAX y la gobernanza del compilador siguen siendo los dos límites que hay que evaluar a continuación.
El Daily Digest del 19 de agosto contiene la instantánea breve del lanzamiento. Nuestro análisis del despliegue local de Qwen3.8-27B aplica la misma distinción entre un artefacto visible y el sistema completo necesario para utilizarlo.
Fuentes
- Modular’s Mojo open-source announcement
- Modular repository at the revision tested for this article
- Working with Mojo in the open-source repository
- Mojo contributor guide
- Modular repository license
- Modular MAX Community License in the repository
- Independent SC 2025 study of Mojo GPU science kernels
- Hacker News discussion of open-source Mojo
- Programming Languages discussion of open-source Mojo