Dai package managers Linux agli Store dei sistemi mobile, quella dei software repositories è una storia di successo che però fatica a prendere piede su Windows. Ma qualcosa sta cambiando.

Un po’ di storia

L’installazione di software certificato da uno o più repository è da anni un caposaldo del mondo Linux. I vantaggi sono evidenti: la stabilità del sistema e la correttezza dei pacchetti sono garantite da un team di gestione qualificato, e l’utente non deve fare altro che usare un’interfaccia testuale o grafica per cercare e installare le applicazioni.

Sistemi analoghi si sono affermati nell’ambito dei linguaggi di programmazione: ovviamente in tal caso i pacchetti non contengono programmi, ma librerie riusabili che risparmiano al programmatore la fatica di inventare la ruota. Ne cito giusto due: il Python Package Index (PyPI) per il linguaggio ideato da Guido van Rossum e NuGet per la piattaforma Microsoft .NET.

Quando si parla di sistemi operativi mobile, infine, è evidente che questo pattern di usabilità detiene un dominio quasi incontrastato: ogni utente si aspetta di avere un “negozio di applicazioni” dal quale reperire tutto il software che desidera, e il caricamento di eseguibili da altre fonti (sideloading) è molto meno pratico (se non illegale).

E su Windows?

La distribuzione di software su Windows, al contrario, è sempre stato un processo decentralizzato: la responsabilità di reperire ed eseguire l’installer spetta all’utente finale.

Evidentemente è un modello pensato per un’altra epoca, in cui l’installazione via internet era l’eccezione e gli aggiornamenti avvenivano sporadicamente. Ma al giorno d’oggi, oltre a qualche rischio per la sicurezza, è soprattutto una fonte di infinite seccature (se la frase “Un nuovo aggiornamento di Java è disponibile” non vi fa sudare freddo, complimenti: avete più fegato di me).

Chocolatey

Qualcosa sta cambiando, dicevo. Appoggiandosi a OneGet e a PowerShell, il team di Chocolatey ha realizzato un software manager decentralizzato: se gli chiediamo di installare un’applicazione (ad esempio l’ottima f.lux), esso scaricherà uno script PowerShell che a sua volta contiene le istruzioni per il download e l’esecuzione dell’installer.

La community di Chocolatey verifica che gli script siano “benevoli”; in futuro verrà inoltre resa obbligatoria la verifica del checksum dei file scaricati, come ulteriore misura di sicurezza.

Comandi utili

Le istruzioni per installare choco sono sul sito ;) Qui riporto solo i comandi più importanti, la cui sintassi è molto simile a quella di altri gestori di pacchetti.

ComandoDescrizione
choco install f.luxInstalla il pacchetto
choco uninstall f.luxDisinstalla il pacchetto
choco list --local-onlyElenca tutti i pacchetti installati
choco outdatedElenca i pacchetti per cui sono diponibili aggiornamenti
choco upgrade f.luxAggiorna il pacchetto
choco upgrade allAggiorna tutti i pacchetti obsoleti
choco pin f.luxDisabilita l’aggiornamento del pacchetto

Bonus: PackageManagement

Gli sviluppatori Microsoft sono andati oltre e hanno ideato un “package manager manager”, cioè un’infrastruttura unificata per l’installazione di pacchetti da molteplici gestori di pacchetti. Ciò significa che un giorno l’utente potrà accedere a PyPI, NuGet, RubyGems e così via attraverso un’interfaccia unificata.

PackageManager (un tempo noto come OneGet) è incluso in Windows 10: per i sistemi precedenti esiste un installer che però non ho avuto modo di testare (Edit 2020-11-09: l’installer non è più reperibile). L’obiettivo principale di OneGet è quello di consentire il download di script e moduli da PowerShellGallery, quindi non è ancora il caso di utilizzarlo in altri ambiti.

Comunque, se avete il gusto dell’avventura, vi riporto velocemente una sequenza di comandi che permetteranno di recuperare pacchetti dai server di Chocolatey: per eseguirli bisogna aprire una console PowerShell come amministratore.

Set-ExecutionPolicy RemoteSigned -Scope Process
Get-Command -Module PackageManagement
Find-Package chocolatey
Get-PackageProvider -Name Chocolatey
Find-Package -Name f.lux
Install-Package -Name f.lux
Set-PackageSource -Name chocolatey -Trusted
  1. Consente l’esecuzione di script esterni ma dotati di firma digitale. Il parametro -Scope Process limita questa politica alla shell attuale.
  2. Elenca i comandi forniti dal modulo PackageManagement.
  3. In realtà usiamo questo comando solo per provocare l’installazione del provider NuGet.
  4. Installa il package provider per il server di Chocolatey.
  5. Esempio di ricerca di un pacchetto.
  6. Installazione del pacchetto.
  7. Imposta chocolatey come fonte affidabile: le future installazioni non mostreranno avvisi di pericolo.

Purtroppo l’interfaccia è molto scarna e lo sviluppo tende a favorire PowerShellGallery: ad esempio manca un comando per aggiornare i pacchetti, mentre esistono comandi analoghi per gli script scaricati dal server Microsoft. Anche il repository GitHub sembra poco frequentato negli ultimi mesi: speriamo che non sia un brutto segno, perché l’idea è davvero interessante!