O que significa "caixa de areia" no contexto de um programador?
Um sandbox é um ambiente restrito no qual você executa um programa, para evitar que esse programa acesse recursos (memória, arquivos, bibliotecas, etc) fora desse ambiente, geralmente com o propósito de proteger o resto do computador contra código possivelmente malicioso (ou talvez apenas possivelmente com falhas) nesse programa.
Como exatamente isso é implementado varia dependendo da tecnologia. Geralmente envolve algum grau de emulação ou simulação de hardware, de modo que o emulador/simulador essencialmente finge ser o hardware, e as instruções do programa que normalmente interagem com o hardware realmente interagem com esse hardware simulado, que então retransmite (ou não) o pedido para o hardware real.
Como uma explicação metafórica, vamos transplantar o contexto para computadores e redes:
Imagine que você tem um computador rodando um programa, e esse programa se comunica com outros programas, rodando em outros sistemas, através da rede. Um exemplo comum hoje em dia é usar solicitações HTTP como uma API.
Vamos dizer que alguém lhe entrega este computador e lhe pede para conectá-lo à sua rede e ligá-lo. Mas você não tem certeza absoluta de que confia no código do computador, por qualquer razão, mas ainda assim quer executá-lo.
Em vez de apenas ligar o computador suspeito na rede principal, você configura uma pequena rede de hardware separada, e a conexão entre esta rede separada e o resto da rede é um roteador/firewall que somente seletivamente permitirá que alguns pacotes passem para frente e para trás entre as duas redes.
Você vai mais longe, e executa um servidor proxy HTTP no roteador/firewall. O servidor proxy atua como um intermediário, interceptando pedidos HTTP de saída do computador suspeito, examinando-os, fazendo o pedido equivalente para a rede externa, e então respondendo ao pedido original com os resultados.
Então você adiciona algum código ao servidor proxy para que ele possa ser seletivo sobre que tipos de pedidos HTTP, para que endereços, com que tipos de conteúdo de pedidos, ele irá retransmitir.
Isso é essencialmente o que um sandbox faz, exceto que ao invés de ficar entre um computador suspeito e o resto da rede, ele fica entre um programa suspeito e o resto do computador.
Um termo para isso é uma "máquina virtual"; programas java são executados na JVM, a Máquina Virtual Java. A JVM não é a primeira máquina virtual, nem a única, mas é provavelmente a mais famosa.
Os programas java são compilados para "bytecode" que é um conjunto de instruções para uma arquitetura de máquina imaginária, definida pelos padrões java. O bytecode é executado na JVM, e a JVM executa uma variedade de verificações para garantir que o bytecode não está quebrando nenhuma das regras de segurança.
O compilador java deveria ter impedido tais violações de terminar no bytecode, mas é bem possível para alguém com o conhecimento correto editar o arquivo de bytecode diretamente e mudar as coisas para tentar algo sorrateiro, então o JVM verifica antes de executar o bytecode.
Note que estes termos, máquina virtual, bytecode, etc, não são padronizados. Eles não são os únicos termos usados para esse tipo de coisa, e nem sempre são usados no mesmo sentido. E, claro, hoje em dia VM também é usado para se referir não apenas a uma VM que executa alguma linguagem, mas uma que simula um computador completo.
Simplesmente, já corri por algumas linguagens e discussões que se referem a "pseudocódigo" em vez de bytecode, mas também se usa pseudocódigo, e muito mais comumente, para se referir ao uso de uma espécie de inglês simplificado (ou outra linguagem amiga do ser humano) para delinear um programa, seja na fase de design ou no ensino. O sentido da palavra VM/sandbox/interprete parece ter desaparecido no uso comum de programadores, o que provavelmente é uma coisa boa, já temos confusão suficiente.
Artigos semelhantes
- O que é uma caixa de areia, e porque é que usamos uma caixa de areia?
- Qual é a diferença entre contexto, contexto de atividade e contexto de aplicação na programação de andróides?
- Se um saco de areia é tão bom a parar balas, porque não construir uma armadura de tanque a partir da areia?
- Como é que um programador se torna um programador?