Se você usa um PC ou smartphone, provavelmente já se deparou com esses pequenos mistérios mais de uma vez.
- Slack e VS Code só funcionam depois de instalados, mas Gmail e Google Docs rodam no momento em que você abre uma URL ─ qual é a diferença?
- O mundo está cheio de comandos “install” ─
pip(Python),npm(Node.js),brew(Mac),apt(Linux),winget(Windows). O que todos eles realmente fazem? - Por que toda vez que você instala algo aparece a solicitação de senha de administrador?
- No macOS, geralmente você arrasta um
.apppara uma pasta e pronto, enquanto os instaladores.exedo Windows passam por diálogo após diálogo. De onde vem essa diferença?
“Instalação” é uma palavra única que esconde muitas sensações diferentes, o que torna difícil resumir tudo em uma frase. Mas, se você rastrear cada caso até a raiz, todos compartilham a mesma resposta.
Para que um software funcione, ele precisa se apresentar formalmente ao sistema operacional (Windows, macOS, Linux, etc.) ─ “Olá, está chegando um aplicativo novo aqui” ─ e cumprimentar o SO.
“Instalação” é apenas o nome que damos a essa cerimônia de cumprimento. Neste artigo, vamos descobrir:
- O que realmente está dentro de um arquivo executável (
.exe/.app/.deb) - Por que programas não conseguem rodar sozinhos e sempre precisam da ajuda do SO
- O que a “instalação” como caixa-preta está concretamente fazendo nos bastidores
- Por que mundos “sem instalação” (apps web, apps portáteis, contêineres) podem existir
Vamos passo a passo, com diagramas, sem assumir nenhum conhecimento prévio.
Antes deste artigo, publicamos O que é um endereço IP?. Se “endereços” de rede são a base do lado da internet, o aperto de mão entre o SO e o app coberto aqui é a base do lado do dispositivo. Entender os dois te dá um quadro conectado de como os dados chegam até a sua máquina e como o app nela realmente roda.
1. O que programas realmente são ─ executáveis como instruções para o SO e a CPU
O que exatamente está dentro daquele “pacote” .exe, .app ou .deb que você acabou de baixar? Quando abrimos isso, fica claro por que programas não conseguem rodar sozinhos.
1-1. Um executável é só bytes ─ mas bytes em uma ordem muito específica
Se você espiar dentro de um executável, tudo o que vê é um longo fluxo de zeros e uns (binário). Parece ilegível em um editor de texto. Mas a ordem desses bytes segue regras estritas e, quando o SO os lê, surge significado: “o corpo do programa começa aqui”, “esta região é para dados”, “esta seção lista bibliotecas externas” e assim por diante.
Esse layout legível pelo SO é chamado de formato de arquivo executável. Cada SO principal usa um dos três formatos abaixo, e todo PC do mundo usa um deles.
| SO | Formato executável | Extensões comuns |
|---|---|---|
| Windows | PE (Portable Executable) | .exe / .dll |
| macOS | Mach-O (Mach Object) | sem extensão / executáveis dentro de bundles .app |
| Linux | ELF (Executable and Linkable Format) | sem extensão |
Então, quando um .exe do Windows se recusa a rodar em um Mac, o motivo não é maldade ─ simplesmente o SO não fala o mesmo “dialeto” de formato de instruções. É como mandar uma carta em japonês para um leitor francês: ele vê os caracteres, mas não consegue acompanhar o sentido.
1-2. As quatro partes principais dentro de um executável
Os três formatos diferem nos detalhes, mas a estrutura de alto nível é parecida. Dividir em quatro “salas” deixa a imagem muito mais nítida.
┌─────────────────────────────────────┐
│ Cabeçalho │ ← capa que o SO lê primeiro ("ELF v1.0", "64-bit", SO alvo)
├─────────────────────────────────────┤
│ Código (.text) │ ← as próprias instruções da CPU
├─────────────────────────────────────┤
│ Dados (.data / .rodata) │ ← strings, constantes, recursos embutidos
├─────────────────────────────────────┤
│ Símbolos / info de link │ ← lista de "qual biblioteca externa e qual função quero chamar"
└─────────────────────────────────────┘
- O cabeçalho é a capa do livro. O SO o lê primeiro e decide “isso é um tipo de arquivo que eu consigo executar?”
- O código guarda as instruções reais da CPU ─
add,mov,jmp, etc. - Os dados guardam a matéria-prima do programa: strings de texto, valores padrão numéricos, recursos de imagem.
- Símbolos / info de link é uma “lista de compras de peças que faltam” ─ “quero chamar
printfaqui, por favor conecte para mim”, diz para o SO e para o loader.
Está vendo o quadro? Um executável não é um produto acabado. É uma sacola contendo instruções de montagem + matérias-primas + lista de compras. O SO lê as instruções, entrega o código para a CPU e conecta as peças que faltam (bibliotecas compartilhadas) para que tudo rode de verdade.
Não se assuste com as palavras “símbolo” e “info de link”. Basta traduzi-las como símbolo (uma etiqueta presa a um nome de função ou variável dentro do programa) e link (o ato de conectar peças que faltam, seja em tempo de build, seja em tempo de execução). Não vamos mais fundo do que isso aqui.
2. Programas não rodam sozinhos ─ a conversa constante com o SO
Como mostramos em §1, um executável carrega uma “lista de compras”. E onde ele compra? No SO e nas suas bibliotecas padrão. Sempre que um app exibe um caractere na tela, abre um arquivo ou conversa com a rede, ele não está fazendo o trabalho sozinho ─ está educadamente pedindo ao SO que faça por ele.
2-1. A pilha de quatro camadas: app → biblioteca padrão → kernel → hardware
Falando grosso modo, o interior de um PC se empilha assim.
┌─────────────────────────────┐ ← Slack, VS Code, os apps que você abriu │ Aplicativo │ ├─────────────────────────────┤ │ Biblioteca padrão │ ← biblioteca padrão do C, .NET, libc, Foundation, etc. │ (runtime da linguagem) │ A camada de tradução entre app e SO ├─────────────────────────────┤ │ Kernel do SO │ ← kernel do Windows, kernel do Linux, Darwin │ │ Mestre da tela, dos arquivos, da rede e da memória ├─────────────────────────────┤ │ Hardware │ ← CPU, memória, SSD, GPU, placa de rede └─────────────────────────────┘
Quando um app quer “mostrar ‘Hello’ na tela”, ele não dispara sinais direto para o monitor. Acontece uma corrida de revezamento:
- O app chama uma função como
printf("Hello") - A biblioteca padrão (libc no C, BCL no .NET) prepara um pedido ao SO de “saída de tela”
- Ela entrega esse pedido ao kernel do SO ─ essa entrega é chamada de chamada de sistema (uma “ordem de serviço” oficial do app para o SO)
- O kernel passa pelo driver de vídeo e diz ao hardware o que renderizar, e as letras aparecem
Em outras palavras, os apps são escritos desde o início assumindo que o SO vai ajudá-los. Não existe executável que rode sem ajuda de um SO. É a razão profunda pela qual “você instala um app para um SO específico” sequer é um conceito.
2-2. Chamadas de sistema ─ os “formulários de pedido” oficiais ao SO
Uma chamada de sistema (o balcão dedicado onde os apps dizem “por favor, faça isso” ao SO) costuma pedir coisas como:
| O que o app quer | Chamada de sistema típica (nome no Linux) | O que acontece |
|---|---|---|
| Abrir um arquivo | open() | O SO conversa com o SSD e devolve um “ticket” (descritor de arquivo) se conseguir abrir |
| Conseguir mais memória | mmap() / brk() | O SO separa um pedaço da memória livre e atribui ao app |
| Conectar à rede | socket() / connect() | O SO comanda a placa de rede e tenta alcançar a outra ponta |
| Encerrar | exit() | O SO faz a limpeza (libera memória etc.) e finaliza o processo |
Cada uma é uma tarefa que o app não pode, ou não tem permissão de, fazer sozinho e por isso pede ao SO. Sem a ajuda do SO, um app nem consegue desenhar um único caractere na tela.
A “instalação” que vamos investigar em §3 se resume a “deixar tudo configurado para que o app consiga fazer esses pedidos corretamente ao SO”. Mantenha esse cenário de §2 em mente e §3 vai cair muito mais natural.
3. [Núcleo] O que “instalar” realmente faz nos bastidores
Já sabemos que “um app não roda sem ajuda do SO”. Isso facilita resumir a instalação: é o termo guarda-chuva para o trabalho preparatório que intermedia a relação entre o app e o SO. Praticamente todo instalador do mundo (.msi, .pkg, .dmg, .deb, .rpm, o arrastar do .app no macOS, o botão de instalar da Microsoft Store etc.) percorre as seis fases a seguir.
3-1. As seis fases que um instalador percorre
Cada fase leva de algumas centenas de milissegundos a dezenas de segundos, e a soma de todas é o que você vivencia como “tempo de espera da instalação”.
- 1Verificação de assinaturaConfere se o arquivo é “realmente do autor legítimo” (pense numa checagem de selo/carimbo). No Windows é o Authenticode, no Mac é o Gatekeeper, no Linux é a assinatura GPG nos pacotes.
- 2ExtraçãoDesempacota a sacola única (o instalador) no binário principal, bibliotecas de apoio, configurações, docs etc. Até aqui, é só “tirar os materiais para fora”.
- 3PosicionamentoMove os arquivos extraídos para os locais padrão do SO. No Windows é
C:\Program Files\, no Mac/Applications/, no Linux/usr/lib/e/usr/bin/. - 4RegistroAdiciona o nome do app no “caderno de endereços” do SO. O Windows escreve no Registro do Windows (o caderno gigante onde o SO guarda suas configurações), o Mac escreve arquivos plist, o Linux deixa um
.desktop. - 5IntegraçãoAdiciona ícones no menu Iniciar / Launchpad / menu de apps e associa o app às extensões de arquivo relevantes (
.txt,.psd, …). - 6Pós-instalaçãoRegistra serviços de fundo, monta caches do primeiro uso, ajusta o
PATH, cria atalhos e, no fim, limpa os arquivos temporários.
Mnemônico: verificar → extrair → posicionar → registrar → integrar → pós-instalar. Todo instalador percorre essas seis etapas para sair de “baixado” para “pronto para usar”.
3-2. Antes / Depois ─ o sistema de arquivos muda visivelmente
Se as “seis fases” ainda parecem abstratas, comparar o disco antes e depois da instalação torna tudo imediato.
Logo após o download
~/Downloads/ └── SuperApp-1.2.3.exe ← uma única sacola
Após instalar
C:\Program Files\SuperApp\ ├── SuperApp.exe ← binário principal ├── core.dll, render.dll, ... ← peças (bibliotecas compartilhadas) └── resources\ ← imagens, traduções C:\Users\me\AppData\Roaming\SuperApp\ └── settings.json ← configurações do usuário Registro HKLM\Software\SuperApp ├── InstallPath = "C:\Program Files\SuperApp" └── Version = "1.2.3" Menu Iniciar → SuperApp (atalho)
Como você vê, instalação é o ato combinado de “dividir um .exe nas pastas certas + avisar o SO sobre tudo isso”. Não é que “dois cliques não rodam nada” ─ na verdade, nos segundos a minutos depois desses dois cliques, uma quantidade enorme de configuração no nível do SO está acontecendo. Esse é o modelo mental mais correto.
Você talvez tenha ouvido “mover a instalação para outro disco deixa o sistema mais leve”, mas C:\Program Files\ no Windows e /Applications/ no macOS estão embutidos como locais assumidos por muitos apps. Forçar um caminho personalizado pode quebrar a integração com o SO (§5) a ponto de o app não abrir mais. Manter o caminho padrão é quase sempre a escolha certa.
4. Dependências ─ por que um único executável não se sustenta sozinho
“É só um app, por que tem centenas de arquivos?” A resposta vive nesta seção. A chave é o conceito de bibliotecas compartilhadas (caixas de peças que vários apps pegam emprestado).
4-1. O que é uma biblioteca compartilhada
“Salvar esta imagem como JPEG” é o tipo de funcionalidade que Photoshop, extensões do VS Code e Slack todos vão querer em algum momento. Se cada app embarcasse a sua própria cópia:
- O disco incha com peças duplicadas
- Uma única correção de segurança obriga a relançar todos os apps
Para fugir dessa dor, o SO oferece um jeito de concentrar peças comuns em um arquivo e “emprestá-las” a vários apps. Isso é uma biblioteca compartilhada (extensão .dll no Win, .dylib no Mac, .so no Linux).
┌──────────────────────────┐
│ seu aplicativo │
└──────────────────────────┘
│ │ │
┌──────────────┘ │ └──────────────┐
▼ ▼ ▼
libjpeg.dll libssl.dll libcurl.dll
(caixa JPEG) (caixa de cripto) (caixa HTTP)
│ │ │
└──────────────────┴──────────────────┘
▼
┌──────────────────────┐
│ API do SO (kernel) │
└──────────────────────┘
Mesmo que o app em si tenha apenas alguns MB, na prática ele depende de várias dessas “caixas de peças”, e o instalador as deposita no disco junto com o binário principal. É por isso que “um app” pode ocupar centenas de MB depois de instalado.
4-2. O inferno das DLLs ─ quando peças compartilhadas brigam por versões
Bibliotecas compartilhadas são práticas, mas têm um modo de falha famoso: se as versões não casam, tudo desanda de uma vez. É o lendário inferno das DLLs (a confusão quando dois apps exigem versões diferentes da mesma caixa de peças e acabam quebrando um ao outro).
App A ─→ exige libfoo v1.0
App B ─→ exige libfoo v2.0
│
▼
Só uma libfoo cabe no SO
→ uma das duas vai quebrar com certeza
Os SOs modernos mitigam isso de formas diferentes:
- Windows:
WinSxS(Side-by-Side) e pacotes do estiloMicrosoft.UI.Xamlpermitem que várias versões coexistam com nomes de arquivo diferentes - macOS: incentiva cada
.appa empacotar sua própria cópia dos.dylibs necessários - Linux: gerenciadores de pacotes (cobertos depois) resolvem o grafo de dependências para você
Mesmo assim, quando você desencava um software antigo e vê MSVCR100.dll não encontrado, esse erro é a sombra remanescente desse mesmíssimo problema.
“Então por que não enviamos um único binário autocontido com tudo dentro?” É exatamente a filosofia por trás dos binários Go modernos e dos apps Electron. O preço é o uso de disco maior. Lembre-se da escolha como “compartilhar para economizar espaço, ou autocontém para manter a estabilidade”.
5. Integração com o SO ─ associações de arquivo, entradas de menu, autostart
Nas fases 4 e 5 de §3 (registro e integração), o instalador faz o app se anunciar oficialmente ao SO. Olhar exatamente “o que é gravado e onde”, lado a lado entre os SOs, deixa as diferenças óbvias.
5-1. O que é registrado, SO por SO
| O que é registrado | Windows | macOS | Linux |
|---|---|---|---|
| Livro-razão da instalação | Registro do Windows (HKLM\Software\<App> ─ o caderno gigante onde o SO guarda configurações) | plist (/Library/LaunchAgents/*.plist ─ o caderno equivalente do macOS) | arquivo .desktop (/usr/share/applications/*.desktop ─ o caderno equivalente do Linux) |
| Entrada de menu | Menu Iniciar | Launchpad (coletado automaticamente) | Menu de apps (gerado a partir de arquivos .desktop) |
| Associações de arquivo | Registro HKCR\.psd → Photoshop.exe | CFBundleDocumentTypes em Info.plist | mimeapps.list |
| Autostart | Pasta Inicializar / HKCU\...\Run / Agendador de Tarefas | LaunchAgents / LaunchDaemons (plist) | Unidades systemd / autostart/*.desktop |
| Serviços de fundo | Gerenciador de Serviços (services.msc) | LaunchDaemons (plist) | Unidades systemd |
“Os apps podem parecer iguais por fora, mas o caderno em que de fato escrevem é diferente em cada SO.” Quando isso cai a ficha, deixa de ser surpresa que “o software rodava bem no Windows mas parece outro bicho no macOS”.
5-2. Por que “só largar o executável em algum lugar” não basta
Você pode deixar algo como notepad.exe em Downloads e dar dois cliques; tecnicamente ele vai rodar sozinho. Mas você não vai ter experiências como:
- Iniciar rapidamente pelo menu Iniciar
- Dois cliques em um
.txtabrirem nesse app automaticamente - Desinstalar com um clique pela tela do SO
- Atualizações automáticas rodando por conta própria
- O mesmo ícone continuar lá depois de reiniciar
Tudo isso é fruto da integração com o SO. A instalação virou uma combinação de “colocar arquivos + registrá-los no SO” justamente para entregar essa experiência.
6. Permissões e segurança ─ por que ele pede sua senha de administrador
“Por que ele pede minha senha toda vez que instalo alguma coisa?” Esse pequeno atrito é, na verdade, prova de que a trava de segurança do SO está funcionando. Quando você entende a lógica, a pergunta deixa de ser irritante.
6-1. Área do sistema vs. área do usuário
O sistema de arquivos de um SO está dividido entre locais que exigem direitos de administrador para escrever e locais que não exigem.
┌──────────────── Direitos de administrador necessários ──────┐ │ Windows : C:\Program Files\, C:\Windows\, HKLM\registro │ │ macOS : /Applications/, /Library/, /usr/local/ │ │ Linux : /usr/, /etc/, /opt/ │ └──────────────────────────────────────────────────────────────┘ ┌──────────────── Direitos de usuário são suficientes ────────┐ │ Windows : %USERPROFILE%\AppData, HKCU\registro │ │ macOS : ~/Library/, ~/Applications/ │ │ Linux : ~/.local/, ~/.config/ │ └──────────────────────────────────────────────────────────────┘
Durante a fase 3 (posicionamento) de §3, um instalador que quer largar o app na área do sistema vai ser parado pelo SO perguntando “você tem certeza?”. Isso é exatamente:
- O diálogo do UAC do Windows (“Deseja permitir que este aplicativo faça alterações no seu dispositivo?”)
- O prompt de senha do macOS
- O desafio de senha do
sudono Linux
E o caso simétrico ─ “arrastar um .app do Mac para o seu próprio ~/Applications/ e nenhuma senha ser pedida” ─ cai exatamente sob a mesma lógica.
6-2. Verificação de assinatura ─ a checagem do selo de autenticidade
Além das permissões, o SO ainda checa de antemão “esse instalador é mesmo do autor que ele afirma ser?”. Isso é a verificação de assinatura (a checagem do selo/carimbo que confirma que o instalador é o original, vindo de um autor legítimo), e cada SO tem a sua versão:
| SO | Mecanismo | O que é checado |
|---|---|---|
| Windows | Authenticode / SmartScreen | Assinaturas digitais em .exe / .msi |
| macOS | Gatekeeper / Notarization | Assinaturas Apple Developer ID em .app / .pkg |
| Linux | Chaves GPG do gerenciador de pacotes | Assinaturas do publicador em .deb / .rpm |
Avisos como “este app é de um desenvolvedor não identificado” ou “este app não pode ser aberto porque não foi possível verificá-lo” são exatamente o resultado dessas checagens de assinatura. Falhar na checagem não significa automaticamente que é malware ─ desenvolvedores indie pequenos costumam pular o code-signing porque os certificados são caros ─ mas “não execute nada que falhe na checagem” é o padrão seguro.
Quando você fala em “segurança”, talvez também esteja pensando em sandboxes (o mecanismo que prende um app dentro de um “quarto privado” longe do resto do sistema). Uma sandbox é proteção em tempo de execução; verificação de assinatura é proteção em tempo de instalação. As duas vivem em camadas diferentes e você precisa das duas. Sandboxes se conectam diretamente aos contêineres e apps web da próxima seção.
7. O mundo “sem instalação”
Até aqui vimos “instalação = aperto de mão com o SO”. Se outra coisa fizer esse aperto de mão por você, então em princípio você não precisa instalar nada com as próprias mãos. E, na prática, a computação moderna oferece várias formas de fazer exatamente isso. Vamos ver rapidamente como cada uma resolve a questão.
7-1. Quatro abordagens lado a lado
| Abordagem | Preparo para iniciar | Integração com o SO | Isolamento | Facilidade de desinstalar | Exemplos |
|---|---|---|---|---|---|
| App web | Basta abrir uma URL | Nenhuma (roda dentro do navegador) | Alto (sandbox do navegador) | Fechar a aba | Gmail, Google Docs, Figma |
| App portátil | Descompactar e abrir | Quase nenhuma (sem associações de arquivo nem entradas de menu) | Baixo (igual a um app comum) | Apagar a pasta | Sysinternals, família portableapps.com, algumas ferramentas OSS |
| Contêiner | Rodar com docker run etc. | Nenhuma (roda em uma caixa lacrada separada do SO host) | Alto (arquivos e rede ficam confinados na caixa) | Apagar o contêiner | Docker, Podman, apps no Kubernetes |
| Gerenciador de pacotes | Uma linha de comando | Sim (as seis fases de §3 rodam automaticamente nos bastidores) | Igual ao de uma instalação comum | Um comando | apt, brew, winget, pip, npm |
| Instalação nativa (referência) | Avançar pelo instalador | Total | Baixo | Painel de Controle etc. | .msi, .pkg, .dmg |
7-2. Por que cada abordagem consegue dispensar a “instalação”
Cada uma explicada em palavras simples, com uma analogia amigável para iniciantes.
- App web: o programa de fato vive em um servidor remoto, não no seu PC. O seu PC só está rodando um navegador. Como o próprio navegador já cumprimentou o SO, os apps que rodam em cima dele não precisam de aperto de mão próprio (pense em pedir uma mesa emprestada num restaurante).
- App portátil (pense num app inteiro espremido dentro de um pendrive): ele carrega todas as peças que precisa e evita mexer no registro / plist, então descompactar é o suficiente. O preço é tamanho maior e ausência de integração com o SO (sem entradas de menu, sem associações de arquivo).
- Contêiner (pense numa salinha lacrada e portátil que carrega o app junto com pedaços do SO de que ele precisa): não só o app, mas as bibliotecas e configurações de que ele depende são empacotadas na sala e rodam isoladas do seu SO host. O aperto de mão acontece dentro da sala, então quase nada é gravado no seu PC de verdade. É exatamente essa praticidade que tornou “distribuir o ambiente inteiro, não só o código” o padrão da era da nuvem.
- Gerenciador de pacotes (ele automatiza, em nome do SO, a rotina de “instalar” que você teria que fazer manualmente): parece “sem instalação”, mas, na verdade, está só rodando as seis fases de §3 com um único comando. É melhor enxergar como “instalação, mas bem automatizada”. Nos poucos segundos de
brew install nginx, a dança verificar / extrair / posicionar / registrar acontece atrás da cortina.
Quando você enxerga assim, “preciso instalar ou não?” se reduz a “quem está fazendo o aperto de mão com o SO no meu lugar?” Para apps web, o navegador; para contêineres, o engine de contêineres; para gerenciadores de pacotes, um script de automação. Sempre tem alguém fazendo o aperto de mão em algum canto.
Mesmo com Docker, a estrutura é em camadas: o próprio Docker precisa de uma instalação nativa única no seu SO, mas todo app individual rodado em cima dele chega “sem ser instalado no seu PC”. “Sem instalação” nunca vale para o mundo inteiro ─ em algum lugar, alguém já apertou as mãos uma vez.
8. Veja na prática ─ comandos que mostram o que a instalação realmente mudou
Agora que a teoria está clara, vamos abrir o seu próprio PC e confirmar “sim, arquivos realmente são adicionados durante a instalação”. Cada SO tem um comando de uma ou duas linhas para isso.
8-1. Listar apps / pacotes instalados
Primeiro, vamos imprimir “o que está instalado neste PC” por SO.
# Windows (PowerShell)
Get-Package | Select-Object Name, Version | Sort-Object Name
# macOS (apps instalados via Homebrew)
brew list --versions
# Linux (Debian / Ubuntu)
dpkg -l | head -20
8-2. Inspecionar quais arquivos um app específico colocou
Você também pode abrir um único pacote e ver exatamente quais arquivos o instalador dele espalhou pelo sistema.
# Linux (Debian / Ubuntu) ─ liste cada arquivo que o pacote git colocou
dpkg -L git | head -20
# macOS ─ inspecione um pacote instalado pelo caminho oficial .pkg
pkgutil --pkg-info com.apple.pkg.CLTools_Executables
# Windows ─ liste instalações via as chaves de registro Uninstall
Get-ItemProperty 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' | Select-Object DisplayName, DisplayVersion
Você verá entradas como /usr/bin/git, /usr/share/man/man1/git.1.gz, /etc/bash_completion.d/git ─ ou seja, um único app espalhando-se por vários cantos do SO. Notar “aquele um arquivo baixado se infiltra tão amplamente no SO” é o que faz a instalação parecer real, em vez de mágica.
Resumo ─ quatro linhas que capturam tudo
Foi um artigo longo, mas a essência cabe em quatro tópicos.
- Um app não roda sozinho. Ele só roda emprestando o SO e o hardware ─ por isso um protocolo de aperto de mão com o SO é inevitável.
- Instalação é a cerimônia que executa esse aperto de mão ─ verificar, extrair, posicionar, registrar, integrar, pós-instalar, seis fases em ordem.
- A senha de administrador é “tem certeza que quer escrever na área do sistema?” A checagem de assinatura é “isso é mesmo de um autor legítimo?”.
- Web / portátil / contêiner / gerenciador de pacotes são todos “procuradores” do aperto de mão ─ “sem instalação” só funciona porque alguém, em algum lugar, já apertou as mãos.
Com esses quatro pontos em mente, dá para ler .exe, .app, .deb ou docker run pelas mesmas lentes e entender o que está acontecendo na sua frente.
Para a base do lado da rede, veja nosso O que é um endereço IP? publicado anteriormente. Combine com o “aperto de mão entre SO e app” de hoje e você terá o quadro completo de como os dados chegam ao seu dispositivo e como o app nele realmente roda. Para ir ainda mais fundo, Escolhendo o tipo numérico certo no SQL neste site puxa o mesmo fio de “como dados são representados dentro de um programa”.
FAQ
Q1. Qual é a diferença entre um app portátil e um app instalado?
A. O binário em si é praticamente o mesmo; o que difere é se ocorre integração com o SO. Uma cópia instalada roda todas as seis fases de §3 e “aperta as mãos profundamente” com o SO, o que te dá entradas no menu Iniciar, associações de arquivo, atualizações automáticas e por aí vai. Uma cópia portátil para nas fases 1–2 (verificar, extrair) mais o posicionamento da pasta ─ ela escolhe deliberadamente não ter o nome adicionado ao caderno de endereços do SO.
Q2. Desinstalar realmente remove tudo?
A. A maior parte some, mas configurações e dados de usuário costumam ficar para trás. O Windows deixa configs em C:\Users\<you>\AppData\, o Mac em ~/Library/Application Support/<App>/, o Linux em ~/.config/<app>/ ─ propositalmente, para que uma reinstalação futura recupere suas preferências. Se quer apagar tudo de fato, delete essas pastas manualmente ou use um auxiliar como AppCleaner (Mac) ou Bulk Crap Uninstaller (Windows).
Q3. Por que basta arrastar e soltar para os bundles .app do macOS?
A. Um .app não é exatamente um “arquivo” ─ é uma pasta empacotada com tudo de que o app precisa (chamamos isso de bundle). O binário principal, as peças (.dylib), os recursos e o Info.plist estão todos lá dentro, então quase nenhuma edição “estilo registro” externa é necessária. Largar a pasta em /Applications/ já basta para o SO reconhecer. Os .exe do Windows também podem rodar standalone, mas a convenção do Windows espalha as configurações pelo registro, então um simples arrastar não deixa a instalação organizada.
Q4. Rodar Docker conta como “instalar”?
A. Pense em duas camadas. O Docker em si (o engine que roda contêineres) precisa de uma instalação nativa única no seu PC. Uma vez instalado, todo app individual que você roda em cima dele vive dentro de um contêiner (“quarto privado”) e nunca é gravado no seu SO de verdade. “Apps que parecem estar livres de instalação” são livres de instalação justamente porque o engine do Docker está fazendo o aperto de mão com o SO em nome deles.
Q5. Dá para instalar software sem direitos de administrador?
A. Sim, desde que você fique na área do usuário. No Windows existem “user installers” que largam o app em %LOCALAPPDATA% (o “User Installer” do VS Code, por exemplo); no Mac dá para arrastar um .app para ~/Applications/; no Linux dá para copiar binários para ~/.local/bin/ ou usar pipx install --user. Mas qualquer coisa que afete o sistema todo (instalação de drivers, serviços de fundo persistentes, deixar arquivos em /usr/local/ etc.) inerentemente precisa escrever na área do sistema, então direitos de administrador viram inevitáveis.

Leave a Reply