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.

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ção | O que o projeto mede | Ressalva |
|---|---|---|
| Guardar em disco | 4,9 vezes menor que o JSONL | Não há comparação com Parquet no README |
| Ler um campo de uma linha | 3.281 vezes mais rápido | Vantagem do acesso direto ao formato em colunas |
| Ler e gravar tudo | Diferença menor | Bibliotecas 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
wconewremotorodam 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 colunatenant. - O arquivo só anexa. Gravar a mesma chave edita,
_apagado: trueexclui 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
- Repositório developer-wortic/jsonw: README em português e inglês, e AGENTS.md
- jsonW (json Wondrous): site do projeto
- The Rustonomicon: Foreign Function Interface
- Blog do Edivaldo, 8 de novembro de 2026: systemd adota Rust em componentes, mas mantém bibliotecas centrais em C
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
- Repositório jsonW (README em português e inglês, AGENTS.md)
- jsonW (json Wondrous)
- The Rustonomicon: Foreign Function Interface
- Blog do Edivaldo: systemd adota Rust em componentes, mas mantém bibliotecas centrais em C (08/11/2026)
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 consultorEquipe editorial
Equipe editorial da Wortic especializada em automacao, IA, ERP, CRM e crescimento operacional.
- Automacao com IA
- Gestao empresarial
- CRM
- ERP
- Marketing digital


