Ir ao contido

Por que Windows di que Lúa non é de confianza (e como compilala ti mesmo)

Se descargaches o instalador de Lúa para Windows, é moi probable que o sistema che amosase unha xanela azul co aviso «Windows protexeu o PC» e, despois, unha mensaxe de control de contas con «Editor: descoñecido». Asusta un pouco, e é normal preguntarse se o programa é perigoso. Non o é, pero tampouco che pedimos que nos creas sen máis: neste artigo explicamos por que aparece ese aviso e, sobre todo, como podes compilar Lúa ti mesmo a partir do código fonte, para que o programa que executas saia do teu propio equipo.

Consola de PowerShell compilando Lúa con git clone e task build

Por que Windows di que o programa non é de confianza

O aviso vén de Microsoft Defender SmartScreen, un filtro que revisa os programas descargados de Internet antes de executalos. SmartScreen fíxase sobre todo en dúas cousas:

  1. Se o programa leva sinatura dixital. Un programador ou unha empresa pode «asinar» o seu executable cun certificado de sinatura de código (Authenticode). Ese certificado non o pode fabricar calquera: emíteo unha autoridade de certificación que Microsoft recoñece (ou o propio servizo de sinatura de Microsoft) despois de comprobar a identidade de quen o solicita. Cando o ficheiro está asinado, Windows pode amosar o nome do editor en vez de «descoñecido».
  2. A reputación. SmartScreen leva a conta de cantas persoas descargaron e executaron ese mesmo ficheiro sen problemas. Un programa novo, ou unha versión recén publicada, aínda non ten esa reputación.

O instalador de Lúa non está asinado, e cada versión nova é un ficheiro distinto que ninguén executou antes. Por iso Windows o trata como «descoñecido». O aviso non significa que se detectase ningún virus: significa só que Windows non sabe quen o fixo.

Por que Lúa non está asinada

Piztu é un proxecto educativo e libre, sen ánimo de lucro. Un certificado de sinatura de código custa centos de euros cada ano, esixe validar unha entidade xurídica e, desde 2023, a chave privada ten que gardarse nun dispositivo físico especial (un token ou un servizo na nube). E nin sequera iso elimina o aviso de inmediato: un programa asinado pero novo tamén pode recibir avisos ata que acumula reputación.

Ademais, convén lembrar que a sinatura di quen fixo un programa, non o que fai. Un programa asinado pode ser malicioso, e un sen asinar pode ser perfectamente seguro. No software libre hai unha garantía distinta e máis forte: o código está á vista. Calquera persoa pode lelo, revisalo e compilalo.

Se prefires usar o instalador descargado

Na xanela de SmartScreen preme «Máis información» e despois «Executar de todos os xeitos». Antes, se queres, comproba que o ficheiro é o publicado: na páxina de Releases cada ficheiro vai acompañado doutro rematado en .sha256. En PowerShell, Get-FileHash .\nome-do-ficheiro.exe calcula a súa pegada; ten que coincidir coa do .sha256.

A alternativa: compilar Lúa ti mesmo

Se compilas o programa no teu equipo, sabes exactamente de que código saíu. E hai un efecto secundario cómodo: SmartScreen só revisa os ficheiros que chegan desde Internet (o navegador márcaos como descargados), así que o lua.exe que xeras ti non mostra ese aviso.

Non fai falla saber programar. Só hai que copiar unhas ordes nunha consola. Necesitas:

  • Windows 10 ou 11 de 64 bits, con winget (xa vén instalado; se non, instala «Instalador de aplicacións» desde a Microsoft Store).
  • Conexión a Internet e uns 3 GB libres.
  • Entre 15 e 30 minutos a primeira vez, porque se descargan moitas pezas. As seguintes compilacións son moito máis rápidas.

Paso 1. Abrir PowerShell

Preme a tecla Windows, escribe PowerShell e ábreo. Non fai falla abrilo como administrador: winget pedirá permiso cando o necesite.

Paso 2. Instalar as ferramentas de compilación

Lúa está escrita en Go, a interface en JavaScript e usa a biblioteca Wails para crear a xanela. Instala Git (para descargar o código), Go, Node.js e Task (que encadea os pasos da compilación). Copia estas catro liñas, unha a unha:

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

Pecha PowerShell e volve abrilo, para que recoñeza os programas novos. Comproba que todo está no seu sitio:

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

Go ten que ser a versión 1.25 ou posterior, e Node a 20 ou posterior.

Paso 3. Instalar Wails

Wails instálase co propio Go. Usamos a mesma versión que indica o código de Lúa (no ficheiro go.mod):

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

Comproba que funciona con wails3 version. Se PowerShell responde que non recoñece wails3, pecha e abre de novo a consola: o instalador de Go engade o cartafol %USERPROFILE%\go\bin ao PATH, pero só as consolas novas o ven.

Paso 4. Descargar o código desde GitHub

Vai ao teu cartafol persoal e clona o repositorio de Lúa:

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

Isto descarga a última versión en desenvolvemento. Se prefires compilar exactamente unha versión publicada, cambia a ela pola súa etiqueta (por exemplo, a 26.10.9):

git tag
git checkout 26.10.9

Agora tes todo o código no cartafol lua, e podes abrilo e revisalo cando queiras. O máis importante:

  • lua\lua: a aplicación.
  • lua\lua_installer: o instalador, co script build-windows.ps1 que usaremos no paso 6. É curto e está comentado: paga a pena lelo antes de executalo.
  • edicion: o motor común (plantillas, LaTeX, Word e OpenDocument).

Paso 5. Compilar Lúa

cd lua\lua
task build

A primeira vez tarda uns minutos: Go descarga as súas bibliotecas, npm descarga as da interface, xérase a interface e por último compílase o programa. Se todo vai ben, o resultado está en:

lua\lua\build\bin\lua.exe

Podes abrilo xa con .\build\bin\lua.exe (ou con task run). Este executable funciona solto, pero para xerar PDF Lúa precisa unha distribución de LaTeX; no seguinte paso o instalador encárgase dela.

Paso 6 (recomendado). Compilar o instalador

O instalador colle o lua.exe, cópiao a C:\Program Files\Piztu\Lua, crea os atallos e instala con winget o que Lúa necesita para os documentos: MiKTeX (LaTeX) e Pandoc. Para compilalo:

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

Windows non deixa executar scripts de PowerShell por defecto; a opción -ExecutionPolicy Bypass permíteo só para esta orde, sen cambiar a configuración do equipo. O script comproba que tes as ferramentas, compila Lúa de novo, méteo dentro do instalador e compila o instalador. Ao rematar indica:

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

Executa ese ficheiro con dobre clic. Windows pedirá permiso de administrador (o instalador ten que escribir en Program Files). A xanela de control de contas seguirá dicindo «Editor: descoñecido», porque o executable segue sen sinatura, pero agora es ti quen o compilou.

Paso 7 (opcional). Pasar as probas

Lúa ten centos de probas automáticas. Se queres comprobar que a túa compilación se comporta como debe:

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

Tarda un par de minutos. As probas que precisan LaTeX, LibreOffice ou Maxima sáltanse soas se eses programas non están instalados.

Actualizar a unha versión nova

Cando publiquemos unha versión nova, non fai falla repetir todo. Abre PowerShell e:

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

Se algo falla

  • «task» (ou «go», «git», «wails3») non se recoñece como nome dun cmdlet: pecha e abre de novo PowerShell despois de instalar. Se persiste, reinicia a sesión de Windows.
  • Erro ao compilar a interface (npm): comproba con node -v que tes Node 20 ou posterior.
  • O instalador instala unha versión vella: usa sempre build-windows.ps1 e non task build dentro de lua_installer, porque o script é o que mete o Lúa recén compilado dentro do instalador.

Se tes dúbidas, o código, a documentación técnica (cartafol 02-DOCS) e o historial de cambios están en github.com/piztusistemas/lua. Esa transparencia é, en realidade, a mellor sinatura que pode ter un programa.

Scroll ao inicio