Durante a execução, o Firefox usa um diretório de configuração, ou perfil, para manter todas as configurações específicas do usuário, como favoritos, histórico e extensões. Ao iniciar, o Firefox escolhe esse diretório com base em alguns critérios que incluem parâmetros da linha de comando, variáveis de ambiente e um arquivo que lista os perfis conhecidos e predefinidos.
O Firefox 67 tinha como meta permitir aos usuários usar diferentes instalações do Firefox simultaneamente, sem precisar configurar argumentos de linha de comando, e acabar com a situação de se usar perfis em versões do Firefox mais antigas que a de onde foram criados, pois isso não é suportado e era conhecido por causar problemas difíceis de diagnosticar e corrigir. Em alguns casos, eram problemas sérios o suficiente para impedir completamente o uso do Firefox. Para fazer isso, foram feitas alterações na seleção de perfis.
Este artigo descreve em detalhes como a seleção de perfil costumava funcionar, como funciona agora no Firefox 67 e como migramos os usuários de versões anteriores.
Índice
Comportamento anterior
Ao iniciar, o Firefox carregava uma lista de perfis conhecidos a partir do arquivo profiles.ini, que ficava em um local específico no diretório inicial do usuário. Este arquivo inclui algumas configurações e uma lista de perfis conhecidos com a localização de cada um no disco. Um desses era marcado como o perfil padrão. Este padrão se aplicava a qualquer versão ou instalação do Firefox que o usuário usasse.
O Firefox então verifica algumas variáveis de ambiente e parâmetros da linha de comando que o possam fazer escolher um perfil diferente do padrão. Os detalhes não são cobertos aqui, já que este comportamento não mudou. É suficiente dizer que, uma vez feitas essas verificações, o Firefox terá escolhido um perfil a usar ou não terá escolhido nenhum.
Se nenhum perfil foi escolhido e existem perfis listados em profiles.ini (indicaria um parâmetro errado na linha de comando ou nenhum dos perfis estar marcado como padrão), então é exibido um gerenciador de perfis para permitir que o usuário selecione um perfil, ou crie um novo, para usar como padrão.
Se nenhum perfil foi encontrado e profiles.ini está vazio, é considerado ser a primeira execução do Firefox. Um novo perfil padrão vazio é criado e usado, sem interação adicional com o usuário.
O usuário pode mudar o perfil padrão quando quiser usando o gerenciador de perfis. Isso muda o padrão para todas as instalações e versões do Firefox.
Firefox Developer Edition
Uma complicação é o Firefox Developer Edition, que normalmente usa um perfil padrão diferente das outras versões do Firefox. Isso é feito ignorando o marcador de perfil padrão normal em profiles.ini e usando um perfil de nome “dev-edition-default” como o padrão. Esta diferença provocava vários erros, portanto havia um desejo de tornar o comportamento do Developer Edition igual ao das outras versões.
Várias instâncias
Um detalhe adicional é o que acontece quando já existe uma instância do Firefox sendo executada. Antes da seleção de perfil iniciar, o Firefox tenta encontrar uma instância já existente do Firefox no sistema. Se existir, em vez de iniciar, todos os parâmetros da linha de comando são enviados para a instância existente e executados ali.
No Windows, somente uma instância do Firefox pode ser executada por vez, a menos que o parâmetro de linha de comando -no-remote seja usado em instâncias adicionais. Isso o faz iniciar independente de haver outras instâncias funcionando, mas também qualquer futuro início do Firefox não consegue detectar essas instâncias, assim é iniciado caso nenhuma instância normal seja encontrada. Quando várias instâncias estão sendo executadas, cada uma deve usar um perfil diferente. São usados bloqueios de perfil para impor isso.
No Linux é similar, mas com algumas complexidades. Caso seja passado um parâmetro de linha de comando especificando um perfil, o Firefox só tenta encontrar e passar para uma instância existente que esteja usando tal perfil. Se não encontrar, ele continua a iniciar. O parâmetro -new-instance também pode ser informado, fazendo o Firefox iniciar independente de instâncias já existentes.
Novo comportamento
Nas versões 67 em diante do Firefox, em vez de existir um perfil padrão para todas as instalações do Firefox, cada instalação do Firefox (identificada com base no local físico no disco após seguir quaisquer links simbólicos) tem seu próprio perfil padrão.
Nesta seção, “perfil antigo” refere-se ao perfil que seria usado como padrão por versões do Firefox anteriores à 67, “perfil dedicado” refere-se ao perfil marcado como padrão para determinada instalação do Firefox.
Ao iniciar, o Firefox ainda carrega o arquivo profiles.ini. Ele contém as mesmas informações de antes. Um dos perfis conhecidos pode estar marcado como o antigo padrão. Adicionalmente, o profiles.ini agora inclui uma lista de instalações conhecidas do Firefox. Cada nova seção é nomeada com base em um hash do diretório de instalação do Firefox. A seção de cada instalação inclui o local no disco do perfil dedicado a esta instalação, assim como um marcador do perfil estar ou não “bloqueado” para tal instalação.
Como anteriormente, o Firefox ainda considera parâmetros de linha de comandos e variáveis de ambiente que possam substituir a seleção do perfil padrão. Passado isso, se já existir um padrão dedicado para esta instalação, ele é usado como o perfil padrão e o procedimento de iniciar continua.
O comportamento diverge quando não havia padrão dedicado marcado para uma instalação (inclui o caso em que o Firefox está iniciando como resultado de um reinício e a execução anterior estava usando o perfil padrão antigo, o que geralmente ocorre durante um reinício automático para aplicar uma atualização para a versão 67 em diante).
Caso a seção da instalação exista em profiles.ini mas não se refere a nenhum perfil existente (pois foi excluído), um novo perfil padrão dedicado é criado e usado.
Se não existir nenhuma seção de instalação em profiles.ini, é considerado ser a primeira vez que esta instalação está sendo executada como versão 67 ou posterior. Neste caso, uma heurística é usada para decidir se deve criar um novo perfil padrão dedicado ou se deve marcar o padrão anterior como o padrão dedicado para esta instalação:
- O perfil padrão anterior contém um arquivo compatibility.ini e consegue ser analisado. Se não, cria um novo perfil padrão dedicado e continua a iniciar (somente versões muito antigas do Firefox não criam este arquivo, então ele estar faltando significa que este é um perfil completamente vazio, ou é tão antigo que provavelmente não serve para ser usado por versões modernas do Firefox).
- O arquivo compatibility.ini inclui informações sobre a última instalação do Firefox que usa o perfil padrão antigo. Se o perfil padrão antigo foi usado pela última vez por outra instalação do Firefox, cria um novo perfil padrão dedicado e continua a iniciar.
- Verifica se alguma outra instalação conhecida do Firefox tem o padrão antigo marcado como seu padrão dedicado e o perfil está marcado como “bloqueado” para a instalação. Se for o caso, cria um novo perfil padrão dedicado e continua a iniciar.
- Marca o perfil padrão antigo como o perfil padrão dedicado desta instalação, o remove como perfil padrão dedicado de outras instalações do Firefox (feito de tal modo que quando iniciarem na próxima vez, simplesmente criarão um novo perfil em vez de tentar usar o padrão antigo). Continua a iniciar. Neste ponto, o perfil ainda fica marcado como o padrão antigo, assim versões mais antigas do Firefox continuam a usar como padrão até que sejam atualizadas.
- Mais adiante, durante o procedimento de início (não pode ser feito no começo por várias razões), verifica se esta instalação do Firefox está marcada como o navegador padrão do sistema operacional. Se for o caso, marca o perfil padrão dedicado como “bloqueado” para esta instalação.
O usuário ainda pode mudar o perfil padrão dedicado desta instalação do Firefox usando o gerenciador de perfis. A mudança só será aplicada a esta instalação do Firefox. Fazer uma seleção desta maneira marca o perfil escolhido como “bloqueado” para esta instalação.
Firefox Developer Edition
Com o Firefox Developer Edition 67, a seleção de perfil padrão foi alterada para ser mais padronizada. O Developer Edition agora usa o mesmo sistema para selecionar o padrão dedicado, como outras versões do Firefox 67, não dependendo mais de nomes específicos de perfil. A única diferença com relação à descrição acima é que “perfil antigo” se refere ao perfil de nome “dev-edition-default”, em vez do perfil marcado como padrão em profiles.ini.
Várias instâncias
A execução de várias instâncias do Firefox também mudou com o Firefox 67. Agora Windows e Linux têm comportamentos idênticos:
Ao iniciar, o Firefox passa por toda a seleção de perfil para decidir qual perfil é desejável, com base nos parâmetros da linha de comando, variáveis de ambiante e informação de perfil padrão. O Firefox então procura uma instância existente do Firefox que esteja usando o perfil desejado. Se existir alguma, em vez de iniciar, os parâmetros da linha de comando são passados para a instância encontrada.
O benefício disso é que você pode executar instalações diferentes do Firefox lado a lado sem precisar de parâmetros adicionais de linha de comando. Cada uma terá seu próprio perfil padrão. Ao iniciar uma, será usado seu perfil padrão, ao iniciar outra, será usado o outro perfil padrão. Se você tem o Firefox Beta rodando e o Firefox Release é o navegador padrão do sistema operacional, ao clicar em um link em outra aplicação, ele será aberto no Firefox Release como anteriormente seria aberto caso o Firefox já estivesse aberto no momento.
Com este recurso os flags -no-remote e -new-instance não são mais necessários para executar diferentes instâncias do Firefox ao mesmo tempo, mas não causam nenhum erro se forem usados.
Bloqueio de voltar a versões anteriores
Outra mudança no Firefox 67 é a detecção de tentativa de voltar a uma versão anterior de perfil. Ao iniciar, o Firefox analisa o perfil para ver se foi usado pela última vez por uma versão do Firefox mais nova do que a que o usuário está tentando iniciar. Permitir isto é conhecido por causar muitos problemas, às vezes óbvios, às vezes nem tanto. O Firefox agora impede que o usuário faça isso, oferecendo como alternativa a opção de criar um novo perfil a ser usado.
Como desativar as mudanças
As mudanças na seleção de perfil podem ser revertidas definindo a variável de ambiente MOZ_LEGACY_PROFILES. Porém isso não reverte as mudanças na execução de várias instâncias. O bloqueio de voltar a uma versão anterior pode ser ignorado definindo a variável de ambiente MOZ_ALLOW_DOWNGRADE ou passando o parâmetro de linha de comando --allow-downgrade ao executar o Firefox.