Pular para o conteúdo principal

Linguagens

O catálogo vem do languages.yaml, embutido no binário (internal/adapters/catalog/languages.yaml). São 15 linguagens (mais a stack llama, abaixo):

LinguagemNome na APIImagem OCI de origemvCPURAMWarmup
Pythonpythonpython:3.12-alpine1512 MiBcompileall da stdlib
Node.jsnodejsnode:22-alpine1512 MiB—
Gogogolang:1.25-alpine21024 MiBGOCACHE populado
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 (ou GET /api/v1/languages) mostra a mesma lista com ready, que diz se a imagem já foi construída neste host. Linguagem sem imagem construída é recusada com E006.

Recursos​

vCPU e RAM são teto contra abuso, não reserva. A memória da libkrun é elástica: o host só paga as páginas que o guest toca, e uma VM parada mediu 44 MB de footprint independentemente do teto. vCPU ociosa dorme no hypervisor.

Como o código roda​

FamíliaLinguagensExecução
interpretadaPython, Node.js, Ruby, PHP, Perl, Bash, sh, AWK, jq<interpretador> <arquivo principal>
compiladaC, C++, Rustcompila para um binário e executa o binário
JVMJavajavac e java Main
GoGogo run
SQLSQLiteo código vai pelo stdin do sqlite3 :memory:

Em todas: o primeiro item de files é o arquivo principal, o diretório de trabalho fica no tmpfs de /tmp, a VM é nova e destruída no fim, e não há rede.

Adicionar uma linguagem​

São duas condições, e as duas precisam valer:

  1. A linguagem existe no executor do guest (internal/guest/executor.go), com extensão, comando e, se for compilada, o comando de build. O executor tem entradas para mais linguagens do que o catálogo publica; se a que você quer não estiver lá, ela precisa ser acrescentada ao executor (e o guest recompilado).
  2. Uma entrada nova no languages.yaml:
  - name: lua
image: <imagem OCI oficial>
cpus: 1
memory_mib: 256
warmup: ""
CampoRegra
nameexatamente o nome da entrada no executor do guest
imageimagem OCI pública, da arquitetura do host; o build a baixa sem Docker
cpus, memory_mibteto contra abuso
warmupuma linha de sh, rodada em chroot na VM de build, com rede; o resultado fica gravado na imagem. Nada do warmup roda na VM do job

Depois:

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

O binário do executor precisa estar no PATH da imagem ou no caminho absoluto que o executor usa. Uma imagem baseada em Alpine (musl) é o caso testado; o guest é estático e roda em qualquer uma.

A stack llama (GPU)​

Além das 15 linguagens, o catálogo traz a stack llama (fedora:43, 4 vCPU, 4096 MiB, gpu: true): llama.cpp com backend Vulkan e um modelo Qwen2.5 0.5B gravado na imagem. Ela existe para --gpu; veja GPU.

  • Máquinas com imagem qualquer: rc machine create --image <ref> (ou image = "..." no runner.code) constrói e liga uma imagem OCI que não está no catálogo. Ela serve a máquinas, não aos jobs da API.
  • Parsers de banco: o executor do guest ainda tem entradas para validadores de sintaxe SQL e NoSQL, mas eles não têm imagem no catálogo. Veja Parsers de banco de dados.