Gustavo Widman

Gustavo Widman

Engenheiro de Software II (Rust) na Azion, edge/CDNSão Paulo

sistemas sob carga. rust no hot path. infraestrutura que não sofre drift.

Construo sistemas rápidos e mensuráveis em Rust. Durante o dia, trabalho na plataforma de edge/CDN da Azion. No meu tempo livre, escrevo pilhas de rede a partir de raw sockets, comparo meu reverse proxy com nginx e HAProxy em benchmarks e pesquiso até onde agentes autônomos de programação conseguem levar a otimização de programas. Me importo com o número, não com a promessa.

Fig. 0Latência por percentilms, menor é melhor
Latência por percentil, mais a requisição mais lenta, ms
Alvop50p99p99,9p99,99requisição mais lenta
upstreamer0,640,791,833,815,38
nginx, 1 worker0,760,862,054,784,97
HAProxy0,700,921,955,218,24
Caddy0,721,662,536,9711,94
Apache0,851,382,537,217,32
nginx, auto0,701,012,157,259,14
backend, sem proxy0,320,410,953,393,57
Δ vs melhor outro proxy−9%−8%−6%−20%

upstreamernginx, 1 worker (segundo melhor)outros proxiesbackend, sem proxyoha · 50 conexões · 500 mil req · um host macOS de 14 núcleos, loopback · eixo x logarítmico

01

Trabalhos selecionados

Três projetos em que o número é o que importa. Cada valor é medido e traz a sua condição.

W-01

upstreamer

L7 reverse proxy · hyper + tokio

Linguagem
Rust
Alvo
Kubernetes
Texto
2026-04-27

Roteia por host e caminho, balanceia pela latência EWMA, limita cada IP de cliente com um token bucket, descobre upstreams no Kubernetes e troca toda a configuração sem lock, via ArcSwap, sem derrubar conexões. Medido contra os proxies que as pessoas realmente usam. Uma cauda bimodal de 40 ms acabou sendo o Nagle encontrando o delayed ACK: seis tentativas para achar, uma linha para corrigir.

  • Health checks ativos e passivos
  • Métricas Prometheus em porta separada
  • jemalloc: ~6% da CPU estava no malloc
  • Token buckets por IP
Especificações de upstreamer
ParâmetroCondiçãoValor
Vazão50 conexões, 500 mil req50 conexões, 500 mil req76.663req/s
Latência, p99,99menor entre todos os proxies testadosmenor entre todos os proxies testados3,81ms
p99,99 antes da correçãoNagle + delayed ACKNagle + delayed ACK41ms
Limite de concorrência100% 2xx, igual ao backend100% 2xx, igual ao backend4.800conexões
Fig. 1.1Vazãoreq/s, maior é melhor
Vazão, req/s, maior é melhor. Requisições por segundo, com o mesmo harness da Fig. 0.
upstreamer76.663
HAProxy70.503
nginx, auto69.477
nginx, 1 worker68.637
Caddy66.195
Apache57.518

Mesmo harness da Fig. 0. Backend sozinho, sem proxy: 154.998 req/s.

Fig. 1.2p99,99 por tentativams, do texto
Latência p99,99 em milissegundos após cada tentativa de eliminar a cauda de 40 ms.
tentativa 0primeira execução41
tentativa 1decay do jemalloc41
tentativa 2thread de métricas41
tentativa 3cpu pinning41
tentativa 4remoção do arcswap41
tentativa 5alocação de string41
tentativa 6TCP_NODELAY4,15

As tentativas 1 a 5 (decay do jemalloc, thread de métricas, CPU pinning, remoção do ArcSwap, alocação de string) deixaram a cauda em 41 ms. A tentativa 6 foi uma linha: set_nodelay(true).

W-02

udp · tcp · http

Pilha de rede do zero

Linguagem
Rust
Alvo
raw sockets · TUN
Texto
udptcphttp

Escrita de baixo para cima. UDP sobre raw sockets, com headers e checksums montados à mão. Um TCP em userspace sobre um dispositivo TUN, no Linux e no utun do macOS, que interopera com o nc do próprio kernel. Depois, HTTP/1.1, cliente e servidor, em cima desse TCP caseiro.

Especificações de udp · tcp · http
ParâmetroCondiçãoValor
Máquina de estados TCPRFC 793RFC 793caminho feliz
Fechamentoclose simultâneoclose simultâneotratado
InteroperaçãoLinux TUN, macOS utunLinux TUN, macOS utunnc do kernel
DNScliente próprio
Crates de HTTP0
Fig. 2Diagrama de blocoscada camada sobre a de baixo
http-implHTTP/1.1 client + serverchunked transfer · cliente DNS próprio
tcp-implTCP, userspacemáquina de estados da RFC 793 · checksums da RFC 1071
udp-implUDPheaders e checksums à mão
devTUN · utunLinux · macOS
devraw socket
kernelpilha de rede do hostinteroperação verificada com o nc

Os blocos hachurados foram escritos do zero.

W-03

based-kernel

Kernel x86-64

Linguagem
Rust no_std · asm
Alvo
x86-64, bare metal
Texto
2026-03-04

Um kernel em Rust no_std. Um bootstrap em assembly escrito à mão monta as tabelas de páginas de quatro níveis, faz identity-map de 1 GiB com páginas de 2 MiB, habilita PAE e salta para o long mode. A partir daí o Rust assume: um alocador de heap, teclado orientado a interrupções e saída VGA.

Especificações de based-kernel
ParâmetroCondiçãoValor
Caminho de bootasm escrito à mãoasm escrito à mãoPAE → long mode
Tamanho de páginatabelas de 4 níveis, PS=1tabelas de 4 níveis, PS=12MiB
Identity map512 × 2 MiB512 × 2 MiB1GiB
Driversteclado por interrupçõesteclado por interrupçõesteclado, VGA
Fig. 3Percurso das tabelas de páginas no bootmontado em assembly
  1. L4PML4512 GiB por entrada
  2. L3PDPT1 GiB por entrada
  3. L2PD2 MiB por entrada, PS=1
  4. map512 × 2 MiB= 1 GiB, identity

Sequência de boot

  1. bootstrap em asm
  2. tabelas de páginas
  3. PAE ligado
  4. long mode
  5. Rust, no_std

Com páginas de 2 MiB o percurso termina no page directory; não são necessárias tabelas L1.

02

Pesquisa

Até onde agentes sem supervisão levam a otimização de programas, e os sistemas por baixo.

PreprintSSRN, out. 2026

Volund An empirical study of unattended multi-agent program optimization

Gustavo Widman, Laiza Ribeiro Silva

Três campanhas multiagente sem supervisão, sobre um motor sintético de estatísticas de intervalo em C++20, terminaram 2,24×, 4,55× e 5,45× mais rápidas que a semente. Uma delas também teve cerca de 9,7% mais latência numa carga de consultas esparsas deslocada, e o artigo mantém essa regressão à vista.

Fig. 4Volund, programa final vs sementeganho, ×
Volund, programa final vs semente, ganho, ×. Três campanhas: 2,24, 4,55 e 5,45 vezes mais rápidas que a semente. Uma campanha teve cerca de 9,7% mais latência numa carga de consultas esparsas deslocada.
campanha 12,24×
campanha 24,55×
campanha 35,45×
consultas esparsas+9,7% lat.

Linha tracejada: a semente sem ajuste (1×). A linha hachurada é a regressão relatada no artigo: uma campanha teve cerca de 9,7% mais latência numa carga de consultas esparsas deslocada, desenhada em 1 / 1,097.

Em revisãoainda sem código público

FerriSync rsync, redesenhado para links multigigabit

O algoritmo de 1996 do rsync é limitado pela CPU em links multigigabit. O FerriSync redesenha o cálculo de deltas em torno de content-defined chunking, busca cache-aware e múltiplos núcleos.

Em andamentoartigo em preparação

gungnir A linguagem importa para um agente de programação?

Um benchmark de agentes de programação em ~8 linguagens, famílias de modelos e níveis de esforço de raciocínio.

03

Mais projetos

Dois projetos embarcados, depois as coisas menores, uma linha cada.

W-04

glassjaw

Detector acústico de quebra de vidro

Alvo
ESP32 · FreeRTOS

Microfone I2S, espectrograma log-mel, CNN int8: um pipeline FreeRTOS sobre um ring buffer lock-free. O runtime ONNX foi escrito do zero, porque o oficial não cabe nos 520 KB de RAM.

Especificações de glassjaw
ParâmetroCondiçãoValor
PesosCNN int8CNN int814KB
AUCmodelo int8 de 14 KBmodelo int8 de 14 KB0,93
Inferênciano dispositivono dispositivo787ms
Runtime ONNXpróprio, cabe em 520 KB de RAMpróprio, cabe em 520 KB de RAM~700linhas
Fig. 5Orçamento no dispositivoESP32

Pesos vs RAM14 / 520 KB

pesos int8 2,7%resto da RAM

Tempo de computação833 ms

espectrograma log-mel 46 msinferência da CNN int8 787 ms

W-05

iris

Ponte Matter para Bluetooth

Alvo
ESP32-S3
Texto
2026-10-29

Coloca fitas de LED Bluetooth baratas no Apple Home via Matter. O frame BLE da fita passou por engenharia reversa, e a correção de cor foi validada no cubo RGB inteiro, não numa amostra.

Especificações de iris
ParâmetroCondiçãoValor
Entradas validadastodo valor RGB de 24 bitstodo valor RGB de 24 bits16.777.216
Frame BLEengenharia reversaengenharia reversa7bytes
Protocolo no HomeMatter
Fig. 6Frame BLE de corengenharia reversa
Bytes do frame BLE por deslocamento: 69 96 05 02, depois vermelho, verde e azul.
+0+1+2+3+4+5+6
69960502RGB
cabeçalho fixocor, 8 bits cada

Correção de cor verificada nas 16.777.216 entradas RGB.

Projetos menores

Projetos menores com o número principal de cada um
ProjetoO quêNúmeroContexto
pantheonHarness de agentes sempre ativo em Rust, distribuído como módulo NixOS: memória durável, sub-agentes em segundo plano, recuperação de falhas, MCP via stdio e HTTP.48releasesmais recente: v0.21.3
nixUm flake para 6 máquinas, de servidores a um Mac mini headless para agentes: segredos com agenix, VPN mesh, e-mail, DNS e um relay DERP do Tailscale auto-hospedado.779commits
1brcUm bilhão de linhas agregadas com mmap, memchr e parsing em ponto fixo. Sem intrinsics de plataforma.~1,4sM3 Max
rinha-de-backendPostgres trocado por um SQLite ajustado, dentro de um limite de 1,5 CPU / 550 MB.2.917req/s~8,6× a meta
rnn-rustRNN sem dependências, com shapes em const generics; o ganho veio de eliminar alocações.~60×vs PyTorch, dataset pequeno
crates.iorig-dyn e easy-config-store, crates publicadas.~4,9kdldownloads somados

04

Textos

Textos longos, em minúsculas, com os números à mostra.

  1. eu queria minha fita de led no apple home. isso virou uma ponte Matter, um experimento com webcam e uma correção de cor com opiniões fortes.

    5 min
    • esp32
    • matter
    • bluetooth
    • embarcados
    • engenharia-reversa
    • apple-home

    16.777.216 entradas RGB verificadas

  2. FerriSync me deixou preso a um problema de otimização. Volund me fez pensar no que acontece quando testar a próxima hipótese não depende mais de eu estar no teclado.

    9 min
    • ai
    • agents
    • optimization
    • software-engineering
    • volund
    • ferrisync

    2,24–5,45× programas finais vs. inicial

  3. o que começou como um projeto de fim de semana virou um reverse proxy que bate nginx, haproxy, caddy e apache em throughput e tail latency.

    12 min
    • rust
    • networking
    • hyper
    • kubernetes
    • systems-programming
    • reverse-proxy
    • load-balancing

    41 → 4,15ms p99,99, correção de uma linha

Todos os 14 textos

05

Sobre

Bacharelado em Engenharia de Computação, Inteli (Instituto de Tecnologia e Liderança), São Paulo. Formatura em dezembro de 2026.

Experiência

Experiência
PeríodoCargo
2026-04atual

AzionEngenheiro de Software II (Rust)

Sistemas em Rust para cargas de edge/CDN: throughput, latência e confiabilidade operacional; internals de CDN em caminhos sensíveis a performance.

2025-042025-12

CamelSecLíder Técnico, Infraestrutura de Segurança

Liderou infraestrutura, ferramentas e operações de segurança de uma consultoria de segurança: testes de intrusão e operações de red team para clientes corporativos, uma frota NixOS reprodutível (10+ máquinas), redes WireGuard para cargas isoladas de clientes.

2021-012025-04

MW APP IT ConsultingEngenheiro de Software

Liderou equipes que entregaram sistemas para CESP, Hunter Douglas e CETESB; consultas até 2,43× mais rápidas em MS SQL, MySQL e SQLite.

2023atual

EchoSecPresidente, liga acadêmica de cibersegurança

Organiza CTFs e workshops; dá mentoria em Linux, exploração de binários e segurança ofensiva.

Open source