Ir para o conteúdo

Porque é que o Windows diz que a Lua não é de confiança (e como a compilar tu próprio)

Se descarregaste o instalador da Lua para Windows, é muito provável que o sistema te tenha mostrado uma janela azul com o aviso «O Windows protegeu o computador» e, depois, uma mensagem do Controlo de Conta de Utilizador com «Fornecedor: Desconhecido». Assusta um pouco, e é normal perguntar se o programa é perigoso. Não é, mas também não te pedimos que acredites em nós sem mais: neste artigo explicamos porque aparece esse aviso e, sobretudo, como podes compilar a Lua tu próprio a partir do código-fonte, para que o programa que executas saia do teu próprio computador.

Consola do PowerShell a compilar a Lua com git clone e task build

Porque é que o Windows diz que o programa não é de confiança

O aviso vem do Microsoft Defender SmartScreen, um filtro que verifica os programas descarregados da Internet antes de os executar. O SmartScreen olha sobretudo para duas coisas:

  1. Se o programa tem assinatura digital. Um programador ou uma empresa pode «assinar» o seu executável com um certificado de assinatura de código (Authenticode). Esse certificado não o pode fabricar qualquer um: é emitido por uma autoridade de certificação que a Microsoft reconhece (ou pelo próprio serviço de assinatura da Microsoft) depois de verificar a identidade de quem o pede. Quando o ficheiro está assinado, o Windows pode mostrar o nome do fornecedor em vez de «Desconhecido».
  2. A reputação. O SmartScreen contabiliza quantas pessoas descarregaram e executaram esse mesmo ficheiro sem problemas. Um programa novo, ou uma versão acabada de publicar, ainda não tem essa reputação.

O instalador da Lua não está assinado, e cada versão nova é um ficheiro diferente que ninguém executou antes. Por isso o Windows trata-o como «desconhecido». O aviso não significa que tenha sido detetado algum vírus: significa apenas que o Windows não sabe quem o fez.

Porque é que a Lua não está assinada

O Piztu é um projeto educativo e livre, sem fins lucrativos. Um certificado de assinatura de código custa centenas de euros por ano, exige validar uma entidade jurídica e, desde 2023, a chave privada tem de ser guardada num dispositivo físico especial (um token ou um serviço na nuvem). E nem isso elimina o aviso de imediato: um programa assinado mas novo também pode receber avisos até acumular reputação.

Além disso, convém lembrar que a assinatura diz quem fez um programa, não o que ele faz. Um programa assinado pode ser malicioso, e um sem assinatura pode ser perfeitamente seguro. No software livre há uma garantia diferente e mais forte: o código está à vista. Qualquer pessoa pode lê-lo, revê-lo e compilá-lo.

Se preferires usar o instalador descarregado

Na janela do SmartScreen carrega em «Mais informações» e depois em «Executar mesmo assim». Antes, se quiseres, verifica que o ficheiro é o publicado: na página de Releases cada ficheiro vem acompanhado de outro terminado em .sha256. No PowerShell, Get-FileHash .\nome-do-ficheiro.exe calcula a sua impressão digital; tem de coincidir com a do .sha256.

A alternativa: compilar a Lua tu próprio

Se compilares o programa no teu computador, sabes exatamente de que código saiu. E há um efeito secundário cómodo: o SmartScreen só verifica os ficheiros que chegam da Internet (o navegador marca-os como descarregados), por isso o lua.exe que geras tu não mostra esse aviso.

Não é preciso saber programar. Basta copiar alguns comandos para uma consola. Precisas de:

  • Windows 10 ou 11 de 64 bits, com winget (já vem instalado; se não, instala o «Instalador de Aplicações» a partir da Microsoft Store).
  • Ligação à Internet e cerca de 3 GB livres.
  • Entre 15 e 30 minutos na primeira vez, porque são descarregadas muitas peças. As compilações seguintes são muito mais rápidas.

Passo 1. Abrir o PowerShell

Carrega na tecla Windows, escreve PowerShell e abre-o. Não é preciso abri-lo como administrador: o winget pedirá permissão quando precisar.

Passo 2. Instalar as ferramentas de compilação

A Lua está escrita em Go, a interface em JavaScript, e usa a biblioteca Wails para criar a janela. Instala o Git (para descarregar o código), o Go, o Node.js e o Task (que encadeia os passos da compilação). Copia estas quatro linhas, uma a uma:

winget install --id Git.Git -e
winget install --id GoLang.Go -e
winget install --id OpenJS.NodeJS.LTS -e
winget install --id Task.Task -e

Fecha o PowerShell e volta a abri-lo, para que reconheça os programas novos. Verifica que está tudo no sítio:

git --version
go version
node -v
task --version

O Go tem de ser a versão 1.25 ou posterior, e o Node a 20 ou posterior.

Passo 3. Instalar o Wails

O Wails instala-se com o próprio Go. Usamos a mesma versão que o código da Lua indica (no ficheiro go.mod):

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-beta.14

Verifica que funciona com wails3 version. Se o PowerShell responder que não reconhece wails3, fecha e abre de novo a consola: o instalador do Go acrescenta a pasta %USERPROFILE%\go\bin ao PATH, mas só as consolas novas a veem.

Passo 4. Descarregar o código do GitHub

Vai à tua pasta pessoal e clona o repositório da Lua:

cd $HOME
git clone https://github.com/piztusistemas/lua.git
cd lua

Isto descarrega a última versão em desenvolvimento. Se preferires compilar exatamente uma versão publicada, muda para ela pela sua etiqueta (por exemplo, a 26.10.9):

git tag
git checkout 26.10.9

Agora tens todo o código na pasta lua, e podes abri-lo e revê-lo quando quiseres. O mais importante:

  • lua\lua: a aplicação.
  • lua\lua_installer: o instalador, com o script build-windows.ps1 que vamos usar no passo 6. É curto e está comentado: vale a pena lê-lo antes de o executar.
  • edicion: o motor comum (modelos, LaTeX, Word e OpenDocument).

Passo 5. Compilar a Lua

cd lua\lua
task build

Na primeira vez demora alguns minutos: o Go descarrega as suas bibliotecas, o npm descarrega as da interface, a interface é gerada e por fim o programa é compilado. Se tudo correr bem, o resultado fica em:

lua\lua\build\bin\lua.exe

Podes abri-lo já com .\build\bin\lua.exe (ou com task run). Este executável funciona sozinho, mas para gerar PDF a Lua precisa de uma distribuição de LaTeX; no passo seguinte o instalador trata disso.

Passo 6 (recomendado). Compilar o instalador

O instalador pega no lua.exe, copia-o para C:\Program Files\Piztu\Lua, cria os atalhos e instala com o winget o que a Lua precisa para os documentos: MiKTeX (LaTeX) e Pandoc. Para o compilar:

cd $HOME\lua\lua\lua_installer
powershell -ExecutionPolicy Bypass -File .\build-windows.ps1

Por omissão, o Windows não deixa executar scripts do PowerShell; a opção -ExecutionPolicy Bypass permite-o só para este comando, sem alterar a configuração do computador. O script verifica que tens as ferramentas, compila a Lua de novo, coloca-a dentro do instalador e compila o instalador. No fim indica:

✅ Compilado: lua_installer\build\bin\lua-installer.exe

Executa esse ficheiro com duplo clique. O Windows pedirá permissão de administrador (o instalador tem de escrever em Program Files). A janela do Controlo de Conta de Utilizador continuará a dizer «Fornecedor: Desconhecido», porque o executável continua sem assinatura, mas agora foste tu quem o compilou.

Passo 7 (opcional). Correr os testes

A Lua tem centenas de testes automáticos. Se quiseres verificar que a tua compilação se comporta como deve:

cd $HOME\lua\lua\lua
go test ./...

Demora um par de minutos. Os testes que precisam de LaTeX, LibreOffice ou Maxima são ignorados automaticamente se esses programas não estiverem instalados.

Atualizar para uma versão nova

Quando publicarmos uma versão nova, não é preciso repetir tudo. Abre o PowerShell e:

cd $HOME\lua
git checkout main
git pull
cd lua\lua_installer
powershell -ExecutionPolicy Bypass -File .\build-windows.ps1

Se algo falhar

  • «task» (ou «go», «git», «wails3») não é reconhecido como nome de um cmdlet: fecha e abre de novo o PowerShell depois de instalar. Se persistir, termina a sessão do Windows e volta a entrar.
  • Erro ao compilar a interface (npm): verifica com node -v que tens o Node 20 ou posterior.
  • O instalador instala uma versão antiga: usa sempre o build-windows.ps1 e não task build dentro de lua_installer, porque é o script que coloca a Lua acabada de compilar dentro do instalador.

Se tiveres dúvidas, o código, a documentação técnica (pasta 02-DOCS) e o histórico de alterações estão em github.com/piztusistemas/lua. Essa transparência é, na verdade, a melhor assinatura que um programa pode ter.

Scroll to Top