Pular para o conteúdo
Tecnologia

O Rust ainda não tem ABI estável: como ligar o jsonW ao seu programa pela interface C

O systemd manteve as bibliotecas centrais em C porque o Rust ainda não oferece ABI estável para bibliotecas compartilhadas. Veja como o SDK em Rust do jsonW chega ao núcleo em C, com os números e os limites que o projeto declara.

Por Equipe Wortic 12 min de leitura
O Rust ainda não tem ABI estável: como ligar o jsonW ao seu programa pela interface C

Um post do Blog do Edivaldo, publicado em 8 de novembro de 2026, conta que o systemd vai aceitar Rust em programas novos, mas manterá as bibliotecas compartilhadas em C. A matéria aponta o motivo técnico: o Rust ainda não oferece uma interface binária estável, a ABI, que permita usar bibliotecas compartilhadas com a previsibilidade que o projeto exige. Ela também lembra que o systemd tem mais de 180 executáveis, e que copiar código Rust em cada um deles geraria duplicação, com custo de armazenamento e de manutenção.

Essa discussão toca num problema que quem decide tecnologia enfrenta com frequência: como um formato de dados chega a várias linguagens sem que cada equipe reescreva a leitura e a gravação. O jsonW foi desenhado para isso. Este texto mostra como o SDK em Rust chega ao núcleo, o que o próprio projeto afirma e o que ainda não foi medido.

A ponte entre Rust e o núcleo em C

O jsonW tem um núcleo em C, sem dependências, e uma ABI C estável, declarada em sdk/jsonw.h e entregue na biblioteca libjsonw. Por cima dela há um SDK por linguagem. O README lista o SDK de Rust em sdk/rust/, com jsonw::Leitor e jsonw::Escritor. Segundo o AGENTS.md do repositório, Rust e C recebem a linha como texto JSON.

O guia oficial do Rust sobre interface com código estrangeiro explica por que essa camada exige cuidado. Funções vindas de outra linguagem são tratadas como inseguras e só podem ser chamadas dentro de um bloco unsafe. O compilador também não consegue verificar se a declaração dos tipos dos argumentos está correta, então a exatidão da ponte depende de quem a escreve. O README diz que todos os SDKs passam pela mesma prova, byte a byte, com o comando cd sdk && bash prova.sh.

Na prática, o time ganha quando a ponte já vem escrita e testada, e o programa chama Leitor e Escritor em vez de declarar, à mão, as funções da ABI. A leitura da Wortic é que essa separação reduz o espaço para erro de declaração em cada projeto. Não é um dado medido pelo projeto.

O que o projeto afirma, com os números dele

Os números da página inicial vêm do README e do site do projeto. Eles foram medidos com 100 mil registros, comparando com o mesmo conjunto em JSONL lido pelo leitor JSON do próprio projeto.

OperaçãoO que o projeto medeRessalva
Guardar em disco4,9 vezes menor que o JSONLNão há comparação com Parquet no README
Ler um campo de uma linha3.281 vezes mais rápidoVantagem do acesso direto ao formato em colunas
Ler e gravar tudoDiferença menorBibliotecas de JSON mais otimizadas reduzem a diferença, segundo o próprio README

A ressalva do README é a parte que mais interessa a quem decide. A vantagem grande aparece no acesso a um campo específico, porque o formato permite ler a linha e o campo sem decodificar o resto do arquivo. Para o caso de gravar e ler o arquivo inteiro, a diferença é menor. O comando wjsw medir serve para testar na sua máquina.

Comparação honesta com o que se usa hoje

O README descreve o cenário atual: o mesmo dado passa por JSON para trafegar, por CSV ou Parquet para guardar, por um banco de vetores para a busca por significado e por uma camada de permissão para decidir quem vê o quê. Cada conversão custa tempo e memória. O jsonW reúne essas necessidades em três formas que se convertem sem perda: linha, coluna (arquivo .jsw) e texto.

Há limites que o time precisa conhecer antes de decidir:

  • O README não traz medida de memória, de uso de CPU, de tráfego de rede nem de custo de servidor. Os números publicados são de disco e de leitura de campo.
  • Os binários cobrem macOS arm64, Linux x86_64 e Windows x86_64. Os conectores wcon e wremoto rodam só em macOS e Linux, e no Windows o README indica o WSL.
  • Os binários de Linux exigem glibc 2.34 ou mais recente.
  • O núcleo em C não é aberto. A licença permite uso dentro de produtos, mas proíbe revender o jsonW como serviço e fazer engenharia reversa do núcleo.

A leitura da Wortic é que o desenho do jsonW se parece com a escolha que o systemd fez: um núcleo em C estável e componentes em outras linguagens que chamam esse núcleo. Essa é uma análise da estrutura, não um resultado medido.

Exemplo com o SDK de Rust

Este é o exemplo do README. Ele grava uma linha com id, produto e preço e depois lê o preço da primeira linha, que é o campo de índice 2:

let mut w = jsonw::Escritor::criar("vendas.jsw", "id:i64,produto:texto,preco:dinheiro")?;
w.gravar(r#"{"id":1,"produto":"Café especial","preco":"12,50 BRL"}"#)?;
w.fechar()?;

let r = jsonw::Leitor::abrir("vendas.jsw")?;
println!("{}", r.campo(0, 2)?);
r.conferir()?;

Três pontos merecem atenção no código. O fechar() publica o arquivo; nos SDKs, segundo o AGENTS.md, a troca é atômica, então o arquivo só aparece completo. Se a gravação falhar no meio, o caminho indicado é o abandonar(), que não publica nada e deixa o destino como estava. O conferir() verifica a custódia do arquivo, com sha256 e crc32c.

Como os dados chegam ao programa

flowchart LR
    A["Programa em Rust"] --> B["jsonw::Escritor e jsonw::Leitor"]
    B --> C["ABI C estável (sdk/jsonw.h)"]
    C --> D["libjsonw"]
    D --> E[("arquivo .jsw")]

O programa chama o SDK. O SDK conversa com a ABI C, que é o contrato estável. A libjsonw grava e lê o arquivo .jsw, em blocos com verificação. O AGENTS.md recomenda não ler os bytes do .jsw à mão, porque o leiaute interno muda entre versões, enquanto a ABI e os SDKs são estáveis.

Economia de disco, memória e rede

  • Disco: 4,9 vezes menos que o JSONL, no teste do projeto.
  • Memória: o README diz que a leitura de um campo não decodifica o resto do arquivo, mas não traz medida de memória usada.
  • Rede: o README afirma que a leitura remota por HTTP Range baixa só os blocos das linhas lidas, e que as zonas permitem pular blocos inteiros. Não há medida de tráfego.
  • Servidor: não há medida de custo de servidor no README.

Qualidade do dado

O esquema é uma linha de texto que declara um tipo para cada campo. O tipo decimal[2] guarda 12,50 como 12,50, sem passar por ponto flutuante. O tipo dinheiro leva a moeda ISO 4217 em cada valor, e a soma só acontece na mesma moeda. O tipo codigo guarda CNPJ, chave, placa e SKU byte a byte, então o zero da frente nunca some. A medida converte a unidade ao gravar: 1 kg vira 1000 g numa coluna medida[g]. O tempo fica em microssegundos UTC.

Liberdade funcional

  • Campo novo entra com valor nulo, e um nome nunca muda de tipo. O leitor resolve pelo nome, então arquivo antigo é lido por código novo.
  • Permissão por coluna, linha e célula, declarada no próprio esquema com +pessoal, +escopo(x) e uma coluna tenant.
  • O arquivo só anexa. Gravar a mesma chave edita, _apagado: true exclui e a compactação regrava só o que vale.
  • Um SDK por linguagem, em C, C++17, Python 3, Node.js, PHP 8, Go, Rust, Java 22 ou mais recente, Kotlin e Swift, todos com a mesma prova.

Perguntas frequentes

O Rust tem ABI estável para bibliotecas compartilhadas?

Segundo a matéria do Blog do Edivaldo, de 8 de novembro de 2026, ainda não, com a previsibilidade que o systemd exige. Por isso o projeto manteve essas bibliotecas em C. O SDK do jsonW em Rust fica por cima da ABI C, que é a interface declarada como estável.

Preciso trocar meu JSON por jsonW para usar o SDK em Rust?

Não necessariamente. O README informa que todo JSON válido já é jsonW-texto válido. A ferramenta wjsw importa JSON e JSONL com o comando de-json, inferindo o esquema, e exporta de volta com para-texto.

O que acontece se a gravação falhar no meio?

Nos SDKs, segundo o AGENTS.md, o fechar() troca o arquivo de forma atômica, e ele só aparece completo. Se algo der errado antes, o abandonar() desiste da gravação, não publica nada e deixa o destino como estava.

Quanto o jsonW economiza de disco?

No teste do próprio projeto, com 100 mil registros, o arquivo ficou 4,9 vezes menor que o JSONL com os mesmos dados. O README não compara com Parquet e não traz medida de memória, então a economia real depende dos seus dados.

O jsonW funciona no Windows?

Há binários para Windows x86_64 de wjsw, wjsw-cgi e libjsonw. Os conectores wcon e wremoto rodam só em macOS e Linux, e o README indica o WSL para usá-los no Windows.

A biblioteca precisa de internet?

Não. Segundo o README e o AGENTS.md, a biblioteca e os SDKs nunca acessam a rede. A ferramenta wjsw envia versão e plataforma uma vez, na primeira execução, e isso pode ser desligado com JSONW_SEM_PING=1.

Posso usar o jsonW em produto comercial?

A licença de uso sustentável permite usar o jsonW dentro dos seus produtos, em quantos servidores forem necessários. Não vale revender o próprio jsonW como serviço nem fazer engenharia reversa do núcleo. Leia a licença completa antes de decidir.

Como o jsonW protege um dado pessoal, como o CPF?

A proteção fica no esquema. Uma coluna marcada com +pessoal sai nula para quem não tem esse escopo, e não pode ser usada nem em filtro.

Para testar e acompanhar o projeto

O site do projeto está em jsonw.org, e o código, os SDKs e a prova estão no repositório developer-wortic/jsonw. O núcleo é mantido pela Wortic.

Fontes

Perguntas frequentes

O Rust tem ABI estável para bibliotecas compartilhadas?

Segundo a matéria do Blog do Edivaldo, de 8 de novembro de 2026, o Rust ainda não oferece uma ABI estável com a previsibilidade que o systemd exige para as bibliotecas compartilhadas. Por isso o projeto manteve essas bibliotecas em C. O SDK do jsonW em Rust fica por cima da ABI C, que é a interface declarada como estável no projeto.

Preciso trocar o meu JSON por jsonW para usar o SDK em Rust?

Não necessariamente. O README informa que todo JSON válido já é jsonW-texto válido. A ferramenta wjsw importa JSON e JSONL com o comando de-json, inferindo o esquema, e exporta de volta com para-texto. O JSON pode continuar no transporte e o jsonW entra onde o arquivo precisa ser lido com precisão.

O que acontece se a gravação falhar no meio?

Segundo o AGENTS.md do repositório, nos SDKs o fechar() faz a troca de forma atômica, e o arquivo só aparece completo. Se algo der errado antes, o abandonar() desiste da gravação, não publica nada e deixa o destino como estava.

Quanto o jsonW economiza de disco?

No teste do próprio projeto, com 100 mil registros, o arquivo ficou 4,9 vezes menor que o JSONL com os mesmos dados. O README não compara com Parquet e não traz medida de memória, então a economia real depende dos seus dados. O projeto recomenda medir na sua máquina com o comando wjsw medir.

O jsonW funciona no Windows?

Há binários para Windows x86_64 de wjsw, wjsw-cgi e libjsonw. Os conectores wcon e wremoto rodam só em macOS e Linux, e o README indica o WSL para usá-los no Windows.

A biblioteca precisa de internet para funcionar?

Não. Segundo o README e o AGENTS.md, a biblioteca e os SDKs nunca acessam a rede. A ferramenta wjsw envia versão e plataforma uma vez, na primeira execução, e isso pode ser desligado com a variável JSONW_SEM_PING=1.

Posso usar o jsonW em produto comercial?

A licença de uso sustentável permite usar o jsonW dentro dos seus produtos, em quantos servidores forem necessários. Não vale revender o próprio jsonW como serviço nem fazer engenharia reversa do núcleo. Leia a licença completa antes de decidir.

Como o jsonW protege um dado pessoal, como o CPF?

A proteção fica no esquema. Uma coluna marcada com +pessoal sai nula para quem não tem o escopo pessoal, e não pode ser usada nem em filtro. O exemplo do README declara o CPF como codigo com essa marca.

Fontes

Conheça: jsonW em Rust.

Quer isso funcionando na sua empresa?

Um consultor da Wortic olha o seu caso e mostra o caminho, sem compromisso.

Falar com um consultor

Equipe editorial

Equipe editorial da Wortic especializada em automacao, IA, ERP, CRM e crescimento operacional.

  • Automacao com IA
  • Gestao empresarial
  • CRM
  • ERP
  • Marketing digital

Isso funcionando no seu negócio.

Um consultor mostra o sistema do seu ramo, com a IA dentro.