Google delineia planos para suporte do kernel Linux na linha principal no Android

Parece que o Google está trabalhando duro para atualizar e upstream o kernel Linux que fica no coração de cada telefone Android. A empresa foi um grande participante na Conferência Linux Plumbers deste ano, uma reunião anual dos principais desenvolvedores de Linux, e o Google passou muito tempo falando sobre como fazer o Android trabalhar com um kernel Linux genérico ao invés da versão altamente personalizada que ele usa agora. Ele até mostrou um telefone Android rodando uma linha principal do kernel Linux.

Mas primeiro, um pouco de fundo na atual bagunça do kernel do Android. Atualmente, três grandes garfos acontecem entre o kernel Linux “mainline” e um dispositivo Android (note que “mainline” aqui não tem relação com o próprio “Project Mainline” do Google). Primeiro, o Google pega no kernel Linux LTS (Long Term Support) e transforma-o no “kernel comum do Android” – o kernel Linux com todos os patches específicos do SO Android aplicados. O Android Common é enviado para o fornecedor de SoC (geralmente a Qualcomm), onde recebe sua primeira rodada de adições específicas para hardware, focando primeiro em um modelo particular de SoC. Esse “Kernel SoC” é enviado a um fabricante de dispositivos para um código ainda mais específico de hardware que suporta todos os outros componentes de hardware, como display, câmera, alto-falantes, portas usb e qualquer hardware extra. Este é o “Device Kernel”, e é o que realmente é enviado em um dispositivo.

Ver mais

Esta é uma jornada extremamente longa que resulta em cada dispositivo enviando milhões de linhas de código do kernel fora de árvore. Cada kernel de dispositivo de envio é diferente e específico do dispositivo – basicamente nenhum kernel de dispositivo de um telefone irá funcionar em outro telefone. A versão principal do kernel para um dispositivo está bloqueada no início do desenvolvimento inicial de um SoC, então é típico para um dispositivo novo enviar com um kernel Linux que tem dois anos de idade. Mesmo o último e, uh, maior dispositivo do Google, o Pixel 4, foi lançado em outubro de 2019 com o kernel Linux 4.14, um lançamento do LTS a partir de novembro de 2017. Ele também ficará preso no kernel 4.14 para sempre. Os dispositivos Android normalmente não recebem atualizações do kernel, provavelmente graças à incrível quantidade de trabalho necessária para produzir apenas um único kernel de dispositivo e a cadeia de empresas que precisariam cooperar para fazer isso. Graças às atualizações do kernel nunca acontecendo, isto significa que cada novo lançamento do Android normalmente tem que suportar os últimos três anos de lançamentos do kernel LTS (o mínimo para o Android 10 é 4.9, um lançamento de 2016). Os compromissos do Google para suportar versões mais antigas do Android com patches de segurança significa que a empresa ainda está suportando o kernel 3.18, que tem cinco anos de idade agora. A solução de band-aid do Google para isso até agora tem sido a de se unir à comunidade Linux e suportar versões LTS da linha principal do Linux por mais tempo, e agora eles têm até seis anos de suporte.

No último ano, na Linux Plumbers Conference 2018, o Google anunciou sua investigação inicial para aproximar o kernel do Android do Linux da linha principal. Este ano compartilhou um pouco mais de detalhes sobre o seu progresso até agora, mas definitivamente ainda é um trabalho em andamento. “Hoje, não sabemos o que é preciso adicionar ao kernel para rodar em um dispositivo Android”, disse Sandeep Patil, líder da equipe do Kernel do Android, ao grupo na LPC 2019. “Nós sabemos o que é preciso para rodar Android, mas não necessariamente em qualquer hardware. Portanto, nosso objetivo é basicamente encontrar tudo isso, depois upstream-lo e tentar estar o mais próximo possível da linha principal”

Google diz que “comparado ao LTS (4.14.0), o kernel comum do Android tem 355 mudanças, 32.266 inserções e 1.546 deleções (a partir de fevereiro de 2018)”. Progressos estão sendo feitos aqui todos os anos, mas tenha em mente que ainda há mais dois garfos depois disso.

Embora ainda haja trabalho a ser feito para colocar a bordo o amplo ecossistema Android e uma miríade de configurações de dispositivos, para modelos específicos de dispositivos, as coisas parecem estar progredindo bem. Tom Gall, o diretor do Linaro Consumer Group, mostrou um Xiaomi Poco F1 rodando o kernel Linux da linha principal sob o habitual sistema operacional Android. Gall disse ao público, “Há grandes, grandes adereços a serem dados à equipe do Kernel do Google em particular para obter seu código upstream para que possamos inicializar os dispositivos com um kernel de linha principal”

Para além do plano de fazer upstream o máximo possível de código do kernel, o Google também está visando replicar seu trabalho anterior de modularização do Android, Projeto Treble. Assim como a Treble criou uma interface estável entre o SO Android e o dispositivo HALs (Hardware Abstraction Layers), a proposta do Google para aproximar o Android da linha principal do Linux (Como não existe ainda um nome bobo de “projeto” para isso?) envolve estabilizar o ABI do Linux no kernel e ter uma interface estável para o kernel do Linux e vendedores de hardware para escrever. O Google quer desacoplar o kernel Linux do seu suporte de hardware.

Publicidade

A comunidade Linux tem sido contra a ideia de uma interface estável por algum tempo, com a sugestão de que se você quiser a capacidade de atualizar rapidamente um kernel, abra seus drivers e coloque-os na árvore principal do kernel, onde quaisquer alterações serão cuidadas para você. No entanto, os drivers de código aberto são um quebra-cabeças absoluto para muitas empresas de hardware, e nenhuma quantidade de defesa ou degradação do produto vai mudar isso. O fato do Google estar preso suportando versões de cinco anos de Linux mostra que este modelo não está funcionando.

Ampliar / Ao invés de um monte de garfos, o Google imagina o novo kernel como uma série de módulos.

Matthias Männich, um engenheiro de software sênior do Google, exibiu um diagrama rotulado “Android Next Generation” que mostrava como seria esta arquitetura proposta para o kernel. O Google enviaria uma “Imagem Genérica do Kernel (GKI)” juntamente com vários “Módulos GKI” que exporia essa API/ABI estável no kernel. Os drivers específicos de hardware (provavelmente drivers de código fechado) seriam carregados como módulos do kernel. Então ao invés de forks em cima de forks, tudo fica modularizado em pacotes aditivos.

Por enquanto, o Google está apenas propondo que a ABI no kernel seja estável para uma única versão do LTS. Assim, isto não permitiria que dispositivos actualizassem de uma versão do kernel Linux para outra – apenas permitiria que uma única imagem generalizada do kernel funcionasse através de múltiplos dispositivos, em vez dos forks do kernel específicos do dispositivo que temos hoje. Definitivamente permitiria atualizações de segurança mais fáceis, e esperançosamente conseguiria novos lançamentos LTS para o mercado mais rapidamente.

Publicidade

Seríamos prematuros se disséssemos que esta é uma mudança que definitivamente está vindo para o Android e o kernel Linux. Ainda há toneladas de problemas para resolver (tanto técnica como politicamente, imagino), e algumas dessas conversas foram mais como sessões de brainstorming público entre os apresentadores do Google e os engenheiros do Linux (muitos dos quais também eram Googlers!) na audiência. Este é o segundo ano consecutivo em que o Google aparece ao LPC e lança a ideia de usar o kernel Linux de linha principal no Android, e com o Android sendo um dos maiores sort-of-distros Linux da Terra, faz sentido para todos trabalharem juntos, certo?

“Temos milhas para percorrer, e sabemos disso, mas viemos de onde começamos”, disse Patil à multidão. “No ano passado, eu convenci-a a existir. Desta vez, temos realmente problemas para discutir”.”

Deixe uma resposta

O seu endereço de email não será publicado.