Encontrei o comando de build real que a Newton usa para compilar um oracle de dados, e ele responde uma pergunta que eu vinha assumindo em vez de verificar.
jco componentize -w newton-provider.wit -o policy.wasm policy.js -d stdio random clocks http fetch-event
Esse parâmetro -d está fazendo um trabalho real. Ele está enumerando explicitamente o que o componente WASM resultante tem permissão para acessar: entrada/saída padrão, aleatoriedade, relógios, HTTP e eventos de fetch. Nada mais. Isso não é um firewall de runtime acoplado depois — as capacidades são declaradas no momento do build, incorporadas ao próprio componente.
Eu vinha descrevendo o sandboxing do oracle da Newton como "bloqueado de acessar IPs privados", o que é verdade, mas isso subestima o que realmente está acontecendo. O filtro de rede em runtime impede que um componente chegue a algum lugar onde não deveria. A declaração de capacidades no momento do build é um passo antes — o componente nunca tem a capacidade geral de fazer qualquer coisa além dessa lista nomeada, independentemente do que exista de filtragem em cima disso.
Duas camadas, não uma. Vale saber a diferença quando alguém diz que o sandbox do oracle é "seguro" — seguro contra o quê, aplicado onde, importa mais do que a afirmação de uma única palavra.
@NewtonProtocol $NEWT #Newt
jco componentize -w newton-provider.wit -o policy.wasm policy.js -d stdio random clocks http fetch-event
Esse parâmetro -d está fazendo um trabalho real. Ele está enumerando explicitamente o que o componente WASM resultante tem permissão para acessar: entrada/saída padrão, aleatoriedade, relógios, HTTP e eventos de fetch. Nada mais. Isso não é um firewall de runtime acoplado depois — as capacidades são declaradas no momento do build, incorporadas ao próprio componente.
Eu vinha descrevendo o sandboxing do oracle da Newton como "bloqueado de acessar IPs privados", o que é verdade, mas isso subestima o que realmente está acontecendo. O filtro de rede em runtime impede que um componente chegue a algum lugar onde não deveria. A declaração de capacidades no momento do build é um passo antes — o componente nunca tem a capacidade geral de fazer qualquer coisa além dessa lista nomeada, independentemente do que exista de filtragem em cima disso.
Duas camadas, não uma. Vale saber a diferença quando alguém diz que o sandbox do oracle é "seguro" — seguro contra o quê, aplicado onde, importa mais do que a afirmação de uma única palavra.
@NewtonProtocol $NEWT #Newt