Durante l'esecuzione di Firefox viene utilizzata una una particolare cartella (directory), detta profilo, nella quale conservare tutte le impostazioni e i dati utente come segnalibri, cronologia ed estensioni. All'avvio di Firefox viene deciso quale directory utilizzare in base ad alcuni criteri come ad esempio parametri da linea di comando, variabili d'ambiente e un file contenente l'elenco dei profili conosciuti e l'indicazione del profilo predefinito.
Firefox 67 è stato rilasciato con il fine di permettere agli utenti di gestire diverse installazioni di Firefox contemporaneamente senza la necessità di configurare parametri da linea di comando e di impedire l'utilizzo di versioni precedenti di Firefox con i profili esistenti, dal momento che questo comportamento, oltre a non essere supportato, è anche una delle cause più note di problemi difficili da diagnosticare e risolvere (al punto da rendere in certi casi il programma completamente inutilizzabile). Tenendo presente questi scopi, sono state apportate modifiche al sistema di scelta dei profili da utilizzare.
In questo articolo viene descritto nel dettaglio come funzionava la scelta dei profili prima della versione 67 di Firefox, come funziona a partire dalla versione 67 e come vengono migrati i profili dalle versioni precedenti.
Indice dei contenuti
Comportamento precedente
All'avvio di Firefox, veniva caricato l'elenco dei profili dal file profiles.ini ubicato in uno specifico percorso nella home directory dell'utente. Nel file erano contenuti poche impostazioni, l'elenco dei profili conosciuti e la loro posizione sul disco fisso. Uno dei profili era indicato come profilo predefinito: questa impostazione era applicata a ogni versione o installazione di Firefox avviata dall'utente.
Veniva poi verificato se le variabili d'ambiente e gli argomenti della linea di comando potessero modificare la scelta del profilo predefinito. I dettagli di questa operazione non sono descritti qui ma vengono descritti più avanti perché questo comportamento è ancora presente: è sufficiente dire che una volta conclusi questi controlli o era chiaro con quale profilo Firefox dovesse essere avviato oppure non veniva individuato il profilo da utilizzare.
Se non veniva individuato il profilo da utilizzare e il file profiles.ini conteneva un elenco di profili (ciò indicava o un errore nei parametri della linea di comando o che non vi era alcun profilo contrassegnato come predefinito), veniva a quel punto mostrato il gestore dei profili per consentire all'utente di scegliere quello da utilizzare o di crearne uno nuovo da impostare come predefinito.
Se non veniva individuato il profilo da utilizzare e il file profiles.ini era vuoto, allora si considerava quell'avvio come il primo avvio di Firefox e quindi, senza interazione da parte dell'utente, veniva creato un profilo vuoto da utilizzare come predefinito.
L'utente era in grado di scegliere il profilo predefinito in qualsiasi momento tra quelli disponibili tramite il gestore dei profili e ciò modificava il profilo predefinito per tutte le versioni di Firefox presenti e installate sul computer.
Firefox Developer Edition
Una eccezione era costituita da Firefox Developer Edition in cui di norma si utilizzava un profilo predefinito diverso da quello delle altre versioni: ciò era ottenuto ignorando l'indicazione contenuta nel profile.ini e lanciando invece come predefinito il profilo chiamato "dev-edition-default". Questa differenza causava vari bug e ha spinto gli sviluppatori a standardizzare il comportamento di Developer Edition allineandolo a quello delle altre versioni.
Istanze aggiuntive
Un altro dettaglio notevole è ciò che accadeva quando un'altra istanza di Firefox era in esecuzione. Prima di avviare la scelta del profilo, veniva verificato che non vi fosse un'altra istanza di Firefox in esecuzione sul sistema: se era già in esecuzione, i parametri della linea di comando venivano inviati all'istanza già esistente ed eseguiti in quell'istanza.
In Windows solo un'istanza di Firefox poteva essere eseguita in un dato momento a meno che per le istanze ulteriori non venisse specificato il parametro -no-remote della linea di comando. In quest'ultimo caso, esse sarebbero state avviate ignorando le altre istanze in esecuzione ma sarebbero state anche impossibili da individuare da future eventuali altre istanze di Firefox, con il risultato che Firefox poteva avviarsi se nessuna istanza "normale" di Firefox veniva individuata come in esecuzione. Quando si avviavano più istanze, ciascuna di esse doveva utilizzare un profilo separato: per ottenere questo comportamento erano utilizzati i lock.
Sui sistemi Linux il comportamento era leggermente più complesso: se veniva lanciato un comando in cui era specificato un profilo, allora veniva solamente cercata un'istanza esistente di Firefox che utilizzasse quel determinato profilo a cui passare il comando; se non era individuata, la procedura di avvio di Firefox sarebbe continuata. Inoltre, poteva essere utilizzato il comando -new-instance per avviare Firefox indipendentemente dalle istanze già esistenti.
Nuovo comportamento
A partire dalla versione 67 di Firefox, invece di individuare un profilo predefinito per tutte le installazioni di Firefox si è fatto in modo che a ciascuna installazione di Firefox (in base alla sua posizione fisica sul disco fisso dopo aver risolto eventuali collegamenti simbolici) venga associato il suo profilo predefinito.
In questa sezione si utilizzerà la notazione "vecchio profilo" per indicare il profilo che sarebbe stato utilizzato come predefinito in una versione precedente alla 67, mentre "profilo dedicato" indica il profilo contrassegnato come predefinito per una data installazione di Firefox.
All'avvio viene sempre caricato il file profiles.ini, che contiene informazioni analoghe alle precedenti. Uno dei profili può essere contrassegnato come predefinito per le vecchie versioni. In aggiunta, il profiles.ini contiene però anche un elenco delle installazioni note di Firefox. Ciascuna nuova sezione è basata sull'hash della directory di installazione di Firefox; ciascuna sezione relativa ad un'installazione comprende il percorso sul disco del profilo dedicato per quella installazione e un'indicazione nel caso in cui il profilo sia "bloccato" per quella installazione.
Come succedeva in precedenza, particolari parametri della linea di comando e variabili d'ambiente possono sempre condizionare la selezione del profilo predefinito, ma se esiste già un profilo predefinito dedicato allora l'avvio di Firefox continuerà con quel profilo.
Il comportamento differisce nel caso in cui non vi sia alcun profilo dedicato contrassegnato come predefinito (ad esempio nel caso in cui Firefox sia stato riavviato e prima del riavvio stesse utilizzando il vecchio profilo predefinito, così come accade generalmente quando si aggiorna il programma da una versione obsoleta alla versione 67 o successiva).
Se esiste una sezione relativa a quell'installazione nel profiles.ini ma non il riferimento ad alcun profilo esistente (perché è stato cancellato), allora viene creato e utilizzato un nuovo profilo predefinito dedicato.
Se non esiste una sezione relativa a quell'installazione nel profiles.ini, allora quell'avvio viene considerata la prima esecuzione di quell'installazione come versione 67 o superiore. In questo caso, viene utilizzato un sistema probabilistico per stabilire se creare un nuovo profilo predefinito dedicato o se contrassegnare il vecchio profilo come predefinito per questa installazione:
- Viene effettuato un controllo per capire se il vecchio profilo contiene un file compatibility.ini leggibile. In caso contario viene creato un nuovo profilo predefinito dedicato e l'avvio continua. Solo nelle versioni veramente molto obsolete di Firefox questo file non era presente, quindi la mancanza di questo file indica che il profilo è vuoto e che è talmente vecchio da essere praticamente inutilizzabile nelle moderne versioni di Firefox.
- Viene effettuato un controllo per capire se il file compatibility.ini contiene le istruzioni per utilizzare il vecchio profilo predefinito sull'ultima installazione di Firefox. Se il vecchio profilo prefefinito è stato utilizzato per ultimo in una differente installazione di Firefox, viene creato un nuovo profilo predefinito dedicato e l'avvio continua.
- Viene effettuato un controllo per capire se in una qualsiasi altra installazione di Firefox conosciuta il vecchio profilo è indicato come predefinito dedicato ed è contrassegnato come "bloccato" per quell'installazione. In questo caso viene creato un nuovo profilo predefinito dedicato e l'avvio continua.
- Viene contrassegnato il vecchio profilo predefinito come profilo predefinito dedicato per la presente installazione e viene rimosso come profilo dedicato per altre installazioni di Firefox (in modo che, nel caso in cui si avvii una di queste altre installazioni, venga creato un nuovo profilo e non si tenti invece di utilizzare il vecchio predefinito). L'avvio continua. Il profilo è sempre contrassegnato come vecchio predefinito in modo che le versioni obsolete di Firefox lo continuino a considerare come predefinito finché non vengono aggiornate.
- In una fase successiva della procedura di avvio (per vari motivi ciò non può essere effettuato nella prima fase di avvio) viene effettuato un controllo per capire se la presente installazione di Firefox è contrassegnata come browser predefinito per il sistema operativo in uso. In quest'ultimo caso, il profilo predefinito dedicato è contrassegnato come "bloccato" per quell'installazione.
L'utente è sempre in grado di modificare il profilo predefinito dedicato per la presente installazione di Firefox utilizzando il gestore dei profili ma la modifica è effettiva solo per quell'installazione di Firefox. Operando una selezione in questo modo si renderà il profilo scelto come "bloccato" per quell'installazione.
Firefox Developer Edition
Con Firefox Developer Edition versione 67 la selezione del profilo predefinito è stata standardizzata. Nella versione Developer adesso si utilizza lo stesso sistema di scelta del profilo dedicato rispetto alle altre versioni piuttosto che affidarsi ad uno specifico nome del profilo. L'unica modifica alla descrizione precedente è che "vecchio profilo" si riferisce al profilo chiamato "dev-edition-default" invece che al profilo contrassegnato come predefinito nel file profiles.ini.
Istanze aggiuntive
Anche il sistema di avvio di istanze aggiuntive è cambiato con Firefox 67. Adesso Windows e Linux hanno identici comportamenti.
Durante la fase di avvio, viene scelto il profilo da utilizzare con Firefox in base agli argomenti della linea comandi, alle variabili d'ambiente e all'indicazione del profilo predefinito. Viene effettuato poi un controllo sull'esistenza di altre istanze di Firefox che eventualmente utilizzino quel profilo e, in caso affermativo, invece di avviare il programma il comando viene passato all'istanza individuata.
Ciò porta il vantaggio di poter avviare diverse installazioni di Firefox contemporaneamente senza specificare parametri aggiuntivi per il comando: ciascuna di esse avrà il suo profilo predefinito da poter avviare indipendentemente dalle altre. Se si esegue ad esempio Firefox Beta e il browser predefinito per il sistema operativo è Firefox versione Release, facendo clic su un link in un'altra applicazione verrà aperto Firefox Release: con le versioni precedenti alla 67 il link sarebbe stato aperto nella versione in esecuzione in quel momento.
Questa caratteristica di fatto rende superflui i parametri -no-remote e -new-instance per eseguire diverse istanze di Firefox contemporaneamente, ma non causeranno errori se vengono utilizzati.
Impedire il passaggio a versioni precedenti
Un'altra modifica notevole in Firefox 67 è la possibilità di individuare il passaggio del profilo ad una versione precedente (downgrade). All'avvio viene effettuato un controllo per capire se il profilo è stato utilizzato con una versione di Firefox più recente di quella che si sta cercando di avviare. Questa condizione è una delle più note cause di problemi (talvolta molto evidenti, talvolta meno). In questo caso, sarà impedito l'avvio e all'utente sarà presentata la possibilità di creare un nuovo profilo da utilizzare con la versione installata.
Disattivare le modifiche
Le modifiche al comportamento di Firefox nella scelta del profilo possono essere disattivate con la variabile d'ambiente MOZ_LEGACY_PROFILES. Ciò non avrà comunque effetto alle modifiche relative all'esecuzione di più istanze. Il blocco del passaggio ad una versione precedente può essere aggirato con la variabile d'ambiente MOZ_ALLOW_DOWNGRADE o avviando Firefox con il parametro della linea comandi --allow-downgrade.