TamaGo: así se ejecuta Go sobre el hardware sin sistema operativo

Placa de circuito con un procesador que ejecuta código Go sin sistema operativo

TamaGo, el proyecto de código abierto que permite ejecutar programas escritos en Go directamente sobre el hardware, sin sistema operativo ni runtime de C, ha publicado su versión 1.27.3 el 20 de octubre. Mantenido por Andrea Barisani y Andrej Rosano, el proyecto ya compila para cinco arquitecturas, de AMD64 y ARM a RISC-V y LoongArch, y sirve de base a herramientas de arranque, firmware de seguridad y aplicaciones UEFI escritas íntegramente en Go.

Las claves de TamaGo en 20 segundos

  • TamaGo ejecuta código Go sobre el hardware, sin sistema operativo, mediante un objetivo propio: GOOS=tamago.
  • Soporta AMD64, ARM, ARM64, RISC-V y LoongArch, incluidas máquinas virtuales como Firecracker o QEMU.
  • La versión 1.27.3, del 20 de octubre, exige tamago-go 1.27.2 o posterior, y el proyecto sostiene herramientas de arranque, UEFI y seguridad.

La idea es sencilla de enunciar y difícil de ejecutar: quitar de en medio el sistema operativo y dejar que el propio runtime de Go, con su recolector de basura y sus goroutines, se encargue de todo lo que necesita un programa para funcionar sobre una placa o una máquina virtual. Para ello TamaGo usa una distribución de Go ligeramente modificada, tamago-go, que añade el objetivo GOOS=tamago, y un conjunto de paquetes con los controladores de cada procesador y placa. El código se escribe en Go normal, y el resultado es un binario que arranca solo. El proyecto se publica con licencia BSD y su repositorio en GitHub ronda las 2.100 estrellas y los 1.500 commits.

Qué hardware soporta

La lista de plataformas ha crecido de forma constante. En AMD64, TamaGo arranca en los hipervisores Cloud Hypervisor y Firecracker, en el modo microvm de QEMU, como aplicación UEFI y en Google Compute Engine. En ARM de 32 bits soporta los procesadores NXP i.MX6UL e i.MX6ULL, el USB armory Mk II, las Raspberry Pi Zero, 1 y 2 y el Nuvoton NUC980. En ARM64 llega a los i.MX8M Plus de NXP y a los LAN969x de Microchip, y en RISC-V a chips como el SiFive FU540 o el ET-SoC-1 de AI Foundry, entre otros. La última incorporación es LoongArch, la arquitectura china de Loongson, con soporte para el procesador 3A5000 desde la versión 1.26.6, publicada el 14 de agosto.

El ritmo de publicación es alto. En octubre han salido dos versiones, la 1.27.2 el 9 de octubre y la 1.27.3 el 20, que obliga a usar tamago-go 1.27.2 o posterior. Conviene tenerlo en cuenta al actualizar: el compilador modificado y la biblioteca tienen que ir de la mano, y mezclar versiones es la forma más rápida de que una compilación falle.

Para qué se usa: firmware, arranque y seguridad

El interés de TamaGo está en lo que se elimina. Sin sistema operativo ni código en C, la superficie de ataque se reduce a lo que el desarrollador escribe y al runtime de Go, un lenguaje con gestión de memoria segura. Por eso buena parte de los proyectos construidos sobre TamaGo tienen que ver con la seguridad. GoTEE implementa un entorno de ejecución confiable (TEE) para ejecutar código aislado en la zona segura de los procesadores ARM; GoKey es una tarjeta inteligente y token de autenticación para el USB armory; ArmoredWitness es un dispositivo testigo para registros de transparencia; y tamago-sev-example muestra cómo ejecutar Go en máquinas virtuales cifradas con AMD SEV-SNP (Secure Encrypted Virtualization-Secure Nested Paging).

El otro gran campo es el arranque. armory-boot es un cargador de arranque para el USB armory, y go-boot ofrece un shell y un cargador de sistemas operativos UEFI escritos en Go. Es un terreno donde el firmware tradicional, casi siempre en C, ha acumulado fallos graves, como recordaban las 20 vulnerabilidades en bootloaders reveladas por Microsoft o el bootkit UEFI Bootkitty para Linux. Andrea Barisani presentó el estado del proyecto y el desarrollo de aplicaciones UEFI en Go en dos charlas del Open Source Firmware Conference (OSFC) de 2025.

Eso no convierte a TamaGo en una alternativa general a Linux. Es una herramienta para casos concretos, en los que se quiere un único programa con control total del hardware y sin el peso de un sistema operativo. Si el hardware no está soportado hay que escribir los controladores, y el ecosistema de bibliotecas que dependen de llamadas al sistema no funciona tal cual. Para quien ya programa en Go, como explicábamos al repasar por qué nació el lenguaje, la ventaja es poder llevar las mismas herramientas a un terreno que hasta ahora era casi exclusivo de C y ensamblador.

Preguntas frecuentes

¿Qué es TamaGo?

Un proyecto de código abierto que permite compilar y ejecutar programas en Go directamente sobre el hardware o una máquina virtual, sin sistema operativo ni runtime de C.

¿Qué arquitecturas soporta TamaGo?

AMD64, ARM, ARM64, RISC-V y LoongArch, con placas como el USB armory Mk II o las Raspberry Pi Zero, 1 y 2, e hipervisores como Firecracker, Cloud Hypervisor y QEMU microvm.

¿Necesito un compilador especial?

Sí. TamaGo usa tamago-go, una distribución de Go modificada que añade el objetivo GOOS=tamago. La versión 1.27.3 exige tamago-go 1.27.2 o posterior.

¿Qué licencia tiene?

Se distribuye con licencia BSD.

Fuentes:

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana. Recuerda revisar tu email para confirmar la suscripción.

Scroll al inicio
×