Entrevista com desenvolvedores do SabreMod e Hyper Toolchains

Para compilar qualquer projeto Android como um kernel ou ROM, os desenvolvedores precisam usar uma cadeia de ferramentas. Conforme elinux.org, uma cadeia de ferramentas é um conjunto de ferramentas distintas de desenvolvimento de software que são vinculadas (ou encadeadas) por estágios específicos, como GCC, binutils e glibc (uma parte da GNU Toolchain). As cadeias de ferramentas podem conter um depurador ou um compilador para uma linguagem de programação específica como C ++ ou outra. Muitas vezes, a cadeia de ferramentas usada para o desenvolvimento incorporado é uma cadeia de ferramentas cruzada, ou mais comumente conhecida como compilador cruzado. Todos os programas (como o GCC) são executados em um sistema host de uma arquitetura específica (como x86), mas produzem código binário (executáveis) para executar em uma arquitetura diferente (por exemplo, ARM).

A cadeia de ferramentas mais usada é o GCC, lançado inicialmente há quase 20 anos. Um GCC levemente modificado é usado pelo Google durante o processo de criação do AOSP. Embora o GCC do Google seja considerado o conjunto de ferramentas mais estável, ele tem alguns concorrentes bastante decentes, como Linaro e SabreMod. Esses projetos são conhecidos por aumentar significativamente o desempenho geral do sistema em muitos dispositivos. Vamos dar uma olhada rápida para ver o plano de fundo desses projetos.

A organização Linaro foi fundada em meados de 2010 e quase instantaneamente seus desenvolvedores começaram a trabalhar em muitos projetos, incluindo cadeias de ferramentas baseadas em GCC para ARM. As compilações do Android compiladas com Linaro começaram a aparecer alguns meses depois. Desde que o grupo Linaro foi fundado, os usuários o elogiaram por melhorias de desempenho decentes e agilidade geral. O Linaro usa suas próprias soluções e é constantemente atualizado. Você pode fazer o download da versão mais recente da cadeia de ferramentas diretamente da página da web.

Alguns anos depois, em 2013, um desenvolvedor chamado Paul Beeler criou o projeto SabreMod. Inicialmente, o projeto foi usado no SabreMod ROM para o modelo WiFi Nexus 7 (2013). Isso continuou no Nexus 4 e no Nexus 5 através da ajuda de doações de usuários. As cadeias de ferramentas são baseadas no GNU GCC 4.8, 4.9 e 5.0 com os patches AOSP encaminhados para a porta do GNU GCC. O SabreMod também oferece recursos extras de otimização, ao contrário do conjunto de ferramentas do Google, que oferece opções para algumas alterações na própria ROM para adicionar mais ganhos de desempenho, como otimizações de transformação de loop de grafite. O SabreMod rastreia outros utilitários do GNU nos componentes de origem da cadeia de ferramentas que geralmente são mais atualizados do que as cadeias de ferramentas AOSP ou Linaro, e quase sempre rastreia os ramos de desenvolvimento do GNU GCC para os patches e correções mais recentes. O ecossistema de cadeias de ferramentas do SabreMod é muito diferente do AOSP, usando scripts complexos para fornecer cadeias de ferramentas rápidas e atualizadas. Outras fontes de cadeias de ferramentas, como o repositório de criação de cadeias de ferramentas baseadas em AOSP, foram fortemente modificadas para trabalhar a favor da maneira como as cadeias de ferramentas SabreMod são produzidas. Entrei em contato com alguns desenvolvedores de ferramentas para fazer algumas perguntas.

Se você pudesse descrever o SabreMod em uma palavra, qual seria e por quê?

Joe (frap129) : Otimização. Digo isso porque é nosso principal objetivo (a equipe do SabreMod), não necessariamente a velocidade. Embora a otimização possa fornecer uma grande quantidade de desempenho e aumentos de velocidade, também pode fazer coisas como reduzir o código ou adicionar ajustes específicos que permitem melhor uso do hardware de um dispositivo.

Um conjunto de ferramentas não é particularmente fácil de desenvolver. Você poderia me dizer quais linguagens e ferramentas são necessárias para compilar um projeto como o SabreMod?

Joe : Muitos programas são necessários antes mesmo de se construir uma cadeia de ferramentas, assim como o Android. Coisas como bison, libpython-dev, os programas que você vê apenas em um guia sobre como configurar uma máquina de compilação para compilar uma ROM e depois esquecer. Também como o Android, são necessários muitos repositórios e projetos, o código GCC principal, BinUtils, GDB, MPFR e MPC é o mínimo, mas para recursos e desempenho extras, adicionamos outros projetos e bibliotecas como GMP, CLooG, ISL, OSL, e Python. Provavelmente tudo isso parece bobagem, mas pense nelas como a pasta externa no Android build source, as coisas em segundo plano que o fazem funcionar.

Adin (YoshiShaPow) : Quanto aos idiomas, o desenvolvimento não requer fluência completa de qualquer linguagem de codificação (embora certamente ajude muito). Apenas o conhecimento da estrutura do código e da sintaxe básica pode ajudar alguém a produzir um ótimo trabalho!

Você poderia nos dizer por que escolheu as cadeias de ferramentas? E qual foi a situação mais difícil que você encontrou até agora?

Paul : Inicialmente eu estava interessado na cadeia de ferramentas Linaro, mas descobri que havia alguns bugs que não estavam presentes nas cadeias de ferramentas da AOSP. Portanto, foi tomada a decisão de criar uma nova cadeia de ferramentas estritamente baseada nas fontes de cadeia de ferramentas GNU GCC e AOSP, com patches Linaro ROM para otimizações para jellybean. Assim, o SabreMod nasceu. Mais modificações nas cadeias de ferramentas e na fonte do sistema Android ocorreram nos anos seguintes. O mais difícil foi compilar as cadeias de ferramentas da mesma forma que o AOSP e descobrir quais versões dos utilitários GNU (binutils, gdb etc.) eram necessárias para fazer com que as cadeias de ferramentas fossem compiladas corretamente.

O SabreMod não é o único projeto em que você está trabalhando. Você pode nos contar algo sobre o Hyper Toolchains?

Joe : O Hyper Toolchains era originalmente apenas uma página que eu criei no GitHub para ajudar a organizar minhas próprias cadeias de ferramentas, para que elas não sejam apenas desordenadas e jogadas no restante dos meus repositórios, mas depois que comecei a mexer com cada vez mais, acabou criando coisas um pouco diferentes das cadeias de ferramentas padrão Sabre, Linaro ou AOSP GCC. A mistura de aspectos do Linaro e SabreMod ampliou o leque de coisas que os desenvolvedores poderiam fazer apenas com cadeias de ferramentas. Foi quando eu decidi criar um tópico, para que os desenvolvedores pudessem ter mais controle sobre a velocidade e a suavidade de seus projetos, não apenas a velocidade e a capacidade de resposta do SabreMod ou a suavidade do Linaro.

O SabreMod e o Hyper Toolchains são desenvolvidos por uma equipe de desenvolvedores. Vocês podem nos contar um pouco sobre vocês?

Paul : Meu interesse no Android começou com o G1 há quase 4 anos. Eu não tinha experiência em codificação. Eu estava interessado em código aberto, mas não sabia por onde começar a criar uma ROM ou kernel ou qualquer outra coisa. Comecei experimentando o script bash do Android para apps2sdext nativo com base em um trabalho de desenvolvedores do firerat. Isso permitiu mais armazenamento para aplicativos que eram muito limitados no momento (500mb para o sistema e aplicativos). Depois disso, continuei com o Evo shift 4g até o Nexus 7, quando o mod não era mais necessário devido a restrições de armazenamento. Também iniciei o desenvolvimento do kernel com o Evo Shift 4G, incluindo outros agendadores de disco, como o BFS, que ninguém mais havia feito para o dispositivo na época. Continuei com o desenvolvimento do kernel no Nexus 7. Mas o desenvolvimento do kernel ainda é considerado baixo, exceto a modificação de coisas aqui e ali para fazer os kernels compilarem com as ferramentas e otimizações do SabreMod. Atualmente, possuo um Nexus 5.

Joe : Bem, comecei a trabalhar em coisas de desenvolvimento há pouco mais de 2 anos, sem experiência em codificação, Linux ou Android. Quando adolescente, que acabara de atualizar de um iPod antigo com jailbreak para um Nexus 7 de primeira geração sofisticado, decidi mexer com o Android o máximo que pude, eventualmente compilando minhas próprias construções noturnas com aplicativos, scripts e mods adicionados. Depois de um tempo, parei quando meu Nexus 7 se quebrou tragicamente (RIP em pedaços). Depois que economizei o suficiente para obter um GS3 usado, baixei a fonte mais recente, comecei a trabalhar com a fonte ROM e comecei a construir muitos softwares no meu PC também. Recentemente, adquiri o OnePlus One, que facilitou muito o desenvolvimento e me deu mais motivação.

Adin : Meu primeiro projeto para Android foi criado durante um período em que eu tive uma concussão e estava fora da escola em abril de 2014. Quando finalmente cheguei ao OK em eletrônica, decidi experimentar um projeto para Android e acabei fazendo um costume. kernel para o Moto G. Eu também não tinha conhecimento de codificação e Linux na época. Algumas pessoas dizem que é loucura que um jovem de 15 anos consiga fazer essas coisas, mas eu vejo isso como motivação para lutar por um melhor. Com isso, Joe e eu criamos uma série de núcleos TGM-Hybrid. Também posso resolver um cubo de Rubik 3 × 3 em 15 segundos, em média. Meu driver diário atual é o OnePlus One.

Obrigado pelo seu tempo e boa sorte com seus projetos!

O SabreMod e o Hyper Toolchains podem ser encontrados no GitLab. Não deixe de dar uma olhada neles se estiver planejando lançar sua própria ROM personalizada. Qual é a sua cadeia de ferramentas favorita e por quê? Compartilhe seus pensamentos nos comentários abaixo.