Saltar al contenido principal

Lenguajes

El catálogo viene de languages.yaml, embebido en el binario (internal/adapters/catalog/languages.yaml). Son 15 lenguajes (más la stack llama, más abajo):

LenguajeNombre en la APIImagen OCI de origenvCPURAMWarmup
Pythonpythonpython:3.12-alpine1512 MiBcompileall de la stdlib
Node.jsnodejsnode:22-alpine1512 MiB—
Gogogolang:1.25-alpine21024 MiBGOCACHE poblado
Rustrustrust:1-alpine21024 MiB—
Javajavaeclipse-temurin:21-jdk-alpine21024 MiB—
Ccalpine:3.221512 MiBapk add build-base
C++cppalpine:3.221512 MiBapk add build-base
Rubyrubyruby:3.3-alpine1512 MiB—
PHPphpphp:8.3-cli-alpine1512 MiB—
Perlperlalpine:3.221512 MiBapk add perl
Bashbashbash:5.21256 MiB—
shshalpine:3.221256 MiB—
AWKawkalpine:3.221256 MiB—
jqjqalpine:3.221256 MiBapk add jq
SQLitesqlitealpine:3.221256 MiBapk add sqlite

rc languages (o GET /api/v1/languages) muestra la misma lista con ready, que indica si la imagen ya se construyó en este host. Un lenguaje sin imagen construida se rechaza con E006.

Recursos​

vCPU y RAM son un límite contra el abuso, no una reserva. La memoria de libkrun es elástica: el host solo paga las páginas que el guest toca, y una VM detenida midió 44 MB de footprint independientemente del límite. Una vCPU ociosa duerme en el hipervisor.

Cómo se ejecuta el código​

FamiliaLenguajesEjecución
interpretadoPython, Node.js, Ruby, PHP, Perl, Bash, sh, AWK, jq<interpretador> <arquivo principal>
compiladoC, C++, Rustcompila a un binario y ejecuta el binario
JVMJavajavac y java Main
GoGogo run
SQLSQLiteel código va por el stdin de sqlite3 :memory:

En todos: el primer elemento de files es el archivo principal, el directorio de trabajo está en el tmpfs de /tmp, la VM es nueva y se destruye al final, y no hay red.

Agregar un lenguaje​

Son dos condiciones, y ambas deben cumplirse:

  1. El lenguaje existe en el ejecutor del guest (internal/guest/executor.go), con extensión, comando y, si es compilado, el comando de build. El ejecutor tiene entradas para más lenguajes de los que publica el catálogo; si el que quiere no está ahí, debe agregarse al ejecutor (y recompilar el guest).
  2. Una entrada nueva en languages.yaml:
  - name: lua
image: <imagem OCI oficial>
cpus: 1
memory_mib: 256
warmup: ""
CampoRegla
nameexactamente el nombre de la entrada en el ejecutor del guest
imageimagen OCI pública, de la arquitectura del host; el build la descarga sin Docker
cpus, memory_miblímite contra el abuso
warmupuna línea de sh, ejecutada en chroot en la VM de build, con red; el resultado queda grabado en la imagen. Nada del warmup se ejecuta en la VM del job

Después:

task build
task image:build -- --stack <nome>
rc run --stack <nome> --code '<programa mínimo>'

El binario del ejecutor debe estar en el PATH de la imagen o en la ruta absoluta que usa el ejecutor. Una imagen basada en Alpine (musl) es el caso probado; el guest es estático y se ejecuta en cualquiera.

La stack llama (GPU)​

Además de los 15 lenguajes, el catálogo trae la stack llama (fedora:43, 4 vCPU, 4096 MiB, gpu: true): llama.cpp con backend Vulkan y un modelo Qwen2.5 0.5B grabado en la imagen. Existe para --gpu; consulte GPU.

  • Máquinas con cualquier imagen: rc machine create --image <ref> (o image = "..." en el runner.code) construye y enciende una imagen OCI que no está en el catálogo. Sirve para máquinas, no para los jobs de la API.
  • Parsers de bases de datos: el ejecutor del guest todavía tiene entradas para validadores de sintaxis SQL y NoSQL, pero no tienen imagen en el catálogo. Consulte Parsers de bases de datos.