[DÚVIDA] Como programar um software para ser atualizável?
Quando iniciei a faculdade de Ciência da Computação, tive aulas de história da computação e apresentei um trabalho sobre Margaret Hamilton, diretora do departamento de engenharia de software que desenvolveu o programa embarcado de voo da Apolo 11. Uma das características importantes do software criado por sua equipe foi a capacidade de ser atualizado remotamente. Refletindo sobre isso hoje, surgiu a seguinte questão:
Como programar um software para ser atualizável remotamente?
Como escrever uma atualização? Como enviá-la para um programa? Que protocolo utilizar? Quais requisitos meu software precisa atender para aceitar atualizações? Nunca ouvi falar sobre isso e não tenho ideia de como funciona.
Se alguém puder fornecer um exemplo de projeto que implemente o conceito de atualização remota, ficaria muito interessado, especialmente se fosse um exemplo que eu pudesse incluir em projetos acadêmicos de software para aprender o conceito de forma didática. Acredito que seria uma adição interessante para futuros projetos na faculdade.
Tem algumas formas de se fazer isso, vamos pensar no cenário mais simples em uma aplicação desktop.
Se prestar atenção, você vai ver que ao instalar no seu PC, alguns programas também instalam outros programas menores e é comum que sejam chamados de "alguma coisa updater". Isso tem no Acrobat PDF, no Google Chrome, no AnyDesk e etc.
Ou seja, a responsabilidade de buscar e realizar as atualizações não é do programa principal que o usuário utiliza, mas de um outro agente.
E para fazer isso, esse agente/updater verifica a versão instalada no seu PC, depois consulta algum serviço web para obter as informações de atualização se houver. E se ele encontra, ele baixa as atualizações em um diretório de trabalho, notifica o usuário e substitui os arquivos necessários ou simplesmente chama o instalador mais atualizado mantendo as configurações de usuário.
Esse é um cenário simples, e apenas uma das infinitas possibilidades.
Eu já fiz algo semelhante, mas não era um updater a parte, era um launcher da aplicação que além de verificar se o ambiente como banco de dados, rede e etc estavam ok, ele também buscava por atualizações. O Discord faz isso se não me engano.
procure sobre como funcionam as atualizações OTA do Expo por exemplo
em .net eu usava o clickonce que é uma solução do próprio dotnet. mas em outras aplicações eu utilizo as proprias releases do GitHub para informar que existe uma atualização e alguns casos da pra programas uma atualização automática.