Esta página descreve o projeto da imagem genérica do kernel (GKI, na sigla em inglês) e como ele aumenta a estabilidade do Android e melhora a segurança.
Histórico
Todo dispositivo Android precisa de um kernel de produção. Antes da GKI, os kernels eram personalizados e baseados no kernel comum do Android (ACK, na sigla em inglês), com mudanças específicas do dispositivo feitas por fornecedores de system on chip (SoC) e OEMs.
Essa personalização poderia resultar em até 50% do código do kernel sendo um código fora da árvore e não de kernels Linux upstream ou ACKs. Assim, a natureza personalizada dos kernels pré-GKI resultou em uma fragmentação significativa do kernel.
Custos da fragmentação
A fragmentação do kernel tem vários efeitos negativos na comunidade Android.
As atualizações de segurança exigem muito trabalho
Os patches de segurança citados no Boletim de Segurança do Android (ASB) precisam ser portados para cada um dos kernels do dispositivo. No entanto, devido à fragmentação do kernel, é proibitivamente caro propagar correções de segurança para dispositivos Android em campo.
É difícil mesclar atualizações com suporte de longo prazo
As versões com suporte de longo prazo (LTS, na sigla em inglês) incluem correções de segurança e outras correções de bugs críticos. Manter-se atualizado com as versões LTS é a maneira mais eficaz de fornecer correções de segurança. Em dispositivos Pixel, descobrimos que 90% dos problemas de segurança do kernel informados no ASB já haviam sido corrigidos para dispositivos que se mantêm atualizados.
No entanto, com todas as modificações personalizadas nos kernels do dispositivo, é difícil apenas mesclar as correções de LTS nos kernels do dispositivo.
Inibir upgrades de versões da plataforma Android
A fragmentação dificulta a adição de novos recursos do Android que exigem mudanças no kernel aos dispositivos em campo. O código do framework do Android precisava considerar as diferentes variações do kernel e não podia contar com a implementação de novos recursos do Android no kernel. Isso desacelerou a inovação e causou aumento no tamanho e na complexidade do código.
É difícil contribuir com mudanças no kernel para o Linux upstream
A maneira fragmentada de extrair patches para os kernels de produção causou um atraso de até 18 meses desde o momento em que uma versão LTS estava disponível upstream até quando ela estava em um dispositivo. Esse longo atraso entre a versão do kernel upstream e os produtos dificulta que a comunidade Android forneça os recursos e drivers necessários para os kernels upstream. Quando um usuário enviava sugestões de melhorias, a base de código já havia mudado, dificultando a demonstração da relevância do patch.
Corrigir a fragmentação: imagem genérica do kernel
O projeto da imagem genérica do kernel (GKI, na sigla em inglês) aborda a fragmentação do kernel ao unificar o kernel principal e mover o SoC e o suporte de placa do kernel principal para módulos de fornecedor carregáveis. A GKI também apresenta uma interface de módulo do kernel (KMI, na sigla em inglês) estável para módulos de fornecedor, para que os módulos e o kernel possam ser atualizados de forma independente. Algumas características do kernel GKI são:
- O kernel GKI é criado com base nas fontes ACK.
- O kernel GKI é um binário de kernel único mais módulos carregáveis associados por arquitetura, por versão LTS.
- O kernel GKI é testado com todas as versões da plataforma Android com suporte para o ACK associado. Não há suspensão de recursos durante a vida útil de uma versão do kernel GKI.
- O kernel GKI expõe uma KMI estável aos drivers em um determinado LTS.
- O kernel GKI não contém código específico do SoC ou da placa.
Para conferir uma imagem da arquitetura GKI, consulte a Visão geral do kernel.
Imagem comum
A partir do Android 12, os dispositivos enviados com a versão 5.10 ou mais recente do kernel precisam ser enviados com o kernel GKI. As versões da imagem genérica do kernel (GKI, na sigla em inglês) são atualizadas regularmente com LTS e correções de bugs críticos. Como a estabilidade binária é mantida para a KMI, é possível instalar essas imagens de inicialização sem fazer mudanças nas imagens do fornecedor. O projeto GKI tem estes objetivos:
- Não introduzir regressões significativas de performance ou energia ao substituir o kernel do produto pelo kernel GKI.
- Permitir que os parceiros ofereçam correções de segurança e de bugs do kernel sem o envolvimento do fornecedor.
- Reduzir o custo de atualização da versão principal do kernel para dispositivos.
- Manter um único binário do kernel GKI por arquitetura atualizando as versões do kernel com um processo claro de upgrade.