Em tempo de execução, o Firefox utiliza uma diretoria de definições, ou perfil, para manter todas as definições específicas do utilizador, tais como favoritos, histórico e extensões. Durante o arranque, o Firefox escolhe essa diretoria com base em alguns critérios, incluindo argumentos da linha de comandos, variáveis de ambiente e um ficheiro que lista os perfis predefinidos e conhecidos.
O Firefox 67 tinha o objetivo de permitir que os utilizadores utilizassem instalações diferentes do Firefox simultaneamente, sem a necessidade de configurar argumentos da linha de comandos e interromper o comportamento de utilizar perfis com versões mais antigas do Firefox do que o visto, já que este comportamento não é suportado e é conhecido por causar problemas que são difíceis de diagnosticar e corrigir, e em alguns casos, são graves o suficiente para tornar o Firefox completamente inutilizável. Para esse fim, foram efetuadas alterações na seleção do perfil.
Este artigo descreve em detalhe como a seleção de perfil utilizada para trabalhar, como esta funciona no Firefox 67 e como nós migramos os utilizadores de versões anteriores.
Tabela de conteúdos
Comportamento anterior
No arranque, o Firefox carregava uma lista de perfis conhecidos do ficheiro 'profiles.ini localizado num local específico na diretoria inicial do utilizador. Este Inclui algumas definições e uma lista dos perfis conhecidos e a sua localização no disco. Um deles seria marcado como o perfil predefinido. Esta predefinição aplica-se a qualquer versão ou instalação do Firefox executada pelo utilizador.
O Firefox depois verifica um número de variáveis do ambiente e os argumentos da linha de comandos que poderiam substituir o perfil predefinido. Os detalhes não são abrangidos aqui porque o comportamento não foi alterado. Basta dizer que, uma vez concluídas estas verificações, o Firefox escolherá um perfil para executar ou não o encontrará.
Se não foi encontrado nenhum perfil e existem perfis listados em profiles.ini (isto indicaria um argumento incorreto da linha de comandos ou nenhum dos perfis está marcado como predefinição), um gestor de perfis é mostrado para permitir que o utilizador selecione ou crie um novo perfil para utilizar como predefinição.
Se não foi encontrado nenhum perfil e profiles.ini está vazio, então isto é considerada a primeira execução do Firefox e é criado um novo perfil predefinido vazio e utilizado sem interação do utilizador.
O utilizador pode alterar o perfil predefinido a qualquer momento através do gestor de perfis; isto irá alterar a predefinição para todas as instalações e versões do Firefox.
Edição de Desenvolvimento do Firefox
Uma complicação é a «Edição de Desenvolvimento do Firefox» que normalmente utiliza um perfil predefinido diferente das outras versões do Firefox. Isto é conseguido ignorando o marcador de perfil predefinido normal em profiles.ini e, em vez disso, é utilizado um perfil chamado dev-edition-default como predefinição. Esta diferença causou vários erros e, portanto, havia um desejo de fazer com que esta edição se comportasse da mesma forma que as outras versões.
Múltiplas instâncias
Um detalhe adicional é o que acontece quando já existe uma instância do Firefox em execução. Antes do início da seleção do perfil, o Firefox tenta encontrar uma instância existente do Firefox no sistema. Se existir, em vez de iniciar, qualquer argumento da linha de comandos será enviado para a instância existente e executada lá.
No Windows, apenas uma instância do Firefox pode ser executada de cada vez, a menos que o argumento da linha de comandos -no-remote seja utilizado para as instâncias adicionais. Estas serão iniciados independentemente de outra instância em execução, mas também qualquer inicialização futura do Firefox não será capaz de detetar essas instâncias e será iniciada se não for encontrada nenhuma instância normal. Quando várias instâncias estão em execução, cada uma deve utilizar um perfil separado. Os bloqueios de perfil são utilizados para impor isto.
No Linux é semelhante, mas com algumas complexidades. Se um argumento da linha de comandos especificando um perfil for passado, o Firefox tentará encontrar apenas e passar para uma instância existente utilizando esse perfil, se não for encontrado, ele continuará a ser iniciado. Também um argumento de nova instância pode ser passado, fazendo com que o Firefox inicie independentemente das instâncias existentes.
Novo comportamento
Com as versões do Firefox a partir da 67 em diante, em vez de haver um perfil predefinido para todas as instalações do Firefox, cada instalação do Firefox (com base no local físico no disco depois de seguir as ligações simbólicas) tem o seu próprio perfil predefinido.
Durante esta secção, "perfil antigo" refere-se ao perfil que teria sido utilizado como predefinido pelas versões do Firefox anteriores à 67, "perfil dedicado" refere-se ao perfil marcado como a predefinição para uma instalação do Firefox.
No arranque, o Firefox ainda carrega profiles.ini, este contém a mesma informação que anteriormente. Um dos perfis conhecidos pode ser marcado como a predefinição antiga. Além disso, profiles.ini agora inclui uma lista de instalações conhecidas do Firefox. Cada nova secção é nomeada com base em um hash da diretoria de instalação do Firefox. Cada secção de instalação inclui a localização no disco do perfil dedicado para essa instalação, bem como um marcador para saber se o perfil está "bloqueado" para essa instalação.
Como anteriormente, o Firefox ainda verifica os argumentos da linha de comandos e as variáveis de ambiente que podem substituir a seleção de perfil predefinido. Depois disso, se já houver uma predefinição dedicada para esta instalação, então o que é utilizado como o perfil predefinido e o arranque continuará.
Onde o comportamento diverge é onde não havia nenhuma predefinição dedicada marcada para esta instalação (isso inclui o caso em que o Firefox está a iniciar como resultado de uma reinicialização e a execução anterior estava a utilizar o perfil predefinido antigo, isto geralmente ocorre durante uma reinicialização automática para aplicar uma atualização para uma versão 67 ou superior).
Se a secção da instalação existir em profiles.ini, mas não se referir a nenhum perfil existente (este foi eliminado desde então), será criado e utilizado um novo perfil predefinido dedicado.
Se não existir nenhuma secção de instalação em profiles.ini, então isto será considerado a primeira vez que a instalação será executada como versão 67 ou superior. Neste caso, é utilizado um heurístico para decidir se deve ser criado um novo perfil predefinido dedicado ou se a predefinição antiga deve ser marcada como a predefinição dedicada para esta instalação:
- O perfil predefinido antigo contém um arquivo compatible.ini e pode ser analisado. Caso contrário, crie um novo perfil predefinido dedicado e continue a inicialização. (Apenas as versões muito, muito antigas do Firefox não criam este ficheiro, por isso, estar ausente significa que este é um perfil completamente vazio ou é tão antigo que provavelmente não pode ser utilizado nas versões modernas do Firefox).
- O ficheiro compatible.ini inclui a informação sobre a última instalação do Firefox para utilizar o perfil predefinido antigo. Se este perfil foi utilizado na última vez por uma instalação diferente do Firefox, crie um novo perfil predefinido dedicado e continue a inicialização.
- Verifique se alguma outra instalação conhecida do Firefox tem a predefinição antiga marcada como predefinição dedicada e o perfil está marcado como "bloqueado" para a instalação. Neste caso, crie um novo perfil predefinido dedicado e continue a inicialização.
- Marque o perfil predefinido antigo como o perfil predefinido dedicado para esta instalação, remova-o como o perfil predefinido dedicado para as outras instalações do Firefox (efetuado de forma que, na próxima inicialização, eles criem apenas um novo perfil em vez de tentar utilizar a predefinição antiga). Continue a inicialização. O perfil ainda está marcado como a predefinição antiga neste momento, portanto as versões mais antigas do Firefox continuarão a ser utilizadas como predefinição até que sejam atualizadas.
- Mais tarde durante a inicialização (isto não pode ser efetuado durante a inicialização antecipada por vários motivos), verifique se esta instalação do Firefox está marcada como o navegador predefinido do SO. Neste caso, marque o perfil predefinido dedicado como "bloqueado" para esta instalação.
O utilizador ainda pode alterar o perfil predefinido em qualquer altura utilizando o gestor de perfis, isto irá alterar a predefinição para todas as instalações e versões do Firefox.
Edição de Desenvolvimento do Firefox
Uma complicação é o «Firefox Developer Edition», que normalmente utiliza um perfil predefinido diferente das outras versões do Firefox. Isto é conseguido ignorando o marcador do perfil predefinido normal em profiles.ini e, em vez disso, utiliza um perfil chamado dev-edition-default como predefinido. Esta diferença causou vários erros e, portanto, havia um desejo de fazer com que a "edição de Desenvolvimento" se comportasse da mesma forma que as outras versões.
Múltiplas instâncias
A execução de várias instâncias do Firefox também alterou com o Firefox 67. Agora, o Windows e o Linux têm comportamentos idênticos:
Durante a inicialização, o Firefox executa a sua seleção de perfil completo para decidir qual o perfil desejado com base nos argumentos da linha de comandos, variáveis de ambiente e informação do perfil predefinido. O Firefox procura por qualquer instância existente do Firefox que esteja a utilizar o perfil desejado, se existir, em vez de iniciar quaisquer argumentos da linha de comandos serão passados para a instância encontrada.
Isto tem o benefício de poder executar instalações diferentes do Firefox lado a lado, sem argumentos adicionais na linha de comandos. Cada um terá o seu próprio perfil predefinido, iniciando um irá utilizar o seu perfil predefinido, iniciando outro irá utilizar o outro perfil predefinido. Se possui a versão beta do Firefox em execução e o Firefox Release é o navegador predefinido do SO, então ao abrir uma ligação noutra aplicação irá abri-la no Firefox Release, onde anteriormente a abriria em qualquer que fosse o Firefox que estava aberto naquele momento.
Com esta funcionaldiade, os sinalizadores -no-remote e -new-instance já não são necessários para executar instâncias diferentes do Firefox, mas estes não irão causar qualquer error se utilizados.
Bloquear reversões
Outra alteração no Firefox 67 é a deteção de reversão de perfil. No arranque o Firefox lê o perfil para ver se este foi o utilizado pela versão mais recente do Firefox do que o utilizador está a tentar iniciar. Sabe-se que isto causa muitos problemas, às vezes óbvios, às vezes menos. O Firefox agora impedirá que o utilizador faça isso, oferecendo a opção de criar um novo perfil para utilizar.
Desativar as alterações
As alterações na seleção de perfil podem ser revertidas configurando a variável de ambiente MOZ_LEGACY_PROFILES. No entanto, isto não reverterá as alterações para a execução de múltiplas instâncias. O bloqueio de reversão pode ser ignorado definindo a variável de ambiente MOZ_ALLOW_DOWNGRADE ou passando o argumento da linha de comandos --allow-downgrade quando executar o Firefox.