Entrevista con desarrolladores de SabreMod y Hyper Toolchains

Para compilar cualquier proyecto de Android como un kernel o ROM, los desarrolladores deben usar una cadena de herramientas. Según elinux.org, una cadena de herramientas es un conjunto de herramientas de desarrollo de software distintas que están vinculadas (o encadenadas) juntas por etapas específicas como GCC, binutils y glibc (una parte de la cadena de herramientas GNU). Las cadenas de herramientas pueden contener un depurador o un compilador para un lenguaje de programación específico como C ++ u otro. Muy a menudo, la cadena de herramientas utilizada para el desarrollo integrado es una cadena de herramientas cruzadas, o más comúnmente conocida como un compilador cruzado. Todos los programas (como GCC) se ejecutan en un sistema host de una arquitectura específica (como x86) pero producen código binario (ejecutables) para ejecutarse en una arquitectura diferente (por ejemplo, ARM).

La cadena de herramientas más utilizada es GCC, lanzada inicialmente hace casi 20 años. Google utiliza un GCC ligeramente modificado durante el proceso de compilación de AOSP. Si bien el GCC de Google se considera la cadena de herramientas más estable, tiene algunos competidores bastante decentes como Linaro y SaberMod. Se sabe que estos proyectos aumentan significativamente el rendimiento general del sistema en muchos dispositivos. Echemos un vistazo rápido para ver los antecedentes de estos proyectos.

La organización Linaro se fundó a mediados de 2010 y casi instantáneamente sus desarrolladores comenzaron a trabajar en muchos proyectos, incluidas las cadenas de herramientas basadas en GCC para ARM. Las compilaciones de Android compiladas con Linaro comenzaron a aparecer unos meses después. Desde que se fundó el grupo Linaro, los usuarios lo elogiaron por las mejoras de rendimiento decentes y la rapidez general. Linaro utiliza sus propias soluciones y se actualiza constantemente. Puede descargar la versión más reciente de la cadena de herramientas directamente desde la página web.

Unos años más tarde, en 2013, un desarrollador llamado Paul Beeler creó el proyecto SaberMod. Inicialmente, el proyecto se utilizó en la ROM SaberMod para el modelo Nexus 7 WiFi (2013). Esto continuó en Nexus 4 y Nexus 5 a través de la ayuda de donaciones de usuarios. Las cadenas de herramientas se basan en GNU GCC 4.8, 4.9 y 5.0 con parches AOSP portados hacia adelante en GNU GCC. SaberMod también proporciona funciones de optimización adicionales a diferencia de la cadena de herramientas de Google, que ofrece opciones para algunas modificaciones en la ROM misma para agregar más ganancias de rendimiento, como las optimizaciones de transformación de bucle de grafito. SaberMod rastrea otras utilidades de GNU en los componentes fuente de la cadena de herramientas que generalmente están más actualizadas que las cadenas de herramientas AOSP o Linaro, y casi siempre rastrea las ramas de desarrollo de GNU GCC para los últimos parches y correcciones de errores. El ecosistema de la cadena de herramientas de SaberMod es muy diferente de AOSP, ya que utiliza scripts complejos para proporcionar cadenas de herramientas rápidas y actualizadas. Otras fuentes de cadenas de herramientas como el repositorio de compilación de cadenas de herramientas basado en AOSP se han modificado en gran medida para que funcionen a favor de la forma en que se producen las cadenas de herramientas SaberMod. Me he acercado a algunos desarrolladores de herramientas para hacer algunas preguntas.

Si pudieras describir SaberMod en una palabra, ¿cuál sería y por qué?

Joe (frap129) : optimización. Digo esto porque es nuestro objetivo principal (del equipo SaberMod), no necesariamente la velocidad. Si bien la optimización puede proporcionar una gran cantidad de rendimiento y aumentos de velocidad, también puede hacer cosas como reducir el código o agregar ajustes específicos que permitan un mejor uso del hardware de un dispositivo.

Una cadena de herramientas no es particularmente fácil de desarrollar. ¿Podría decirme qué idiomas y herramientas se requieren para compilar un proyecto como SaberMod?

Joe : Se requieren muchos programas antes de que uno construya una cadena de herramientas, al igual que Android. Cosas como bison, libpython-dev, los programas que solo ves en una guía sobre cómo configurar una máquina de compilación para compilar una ROM y luego olvidarte. También como Android, se necesitan muchos repositorios y proyectos, el código GCC principal, BinUtils, GDB, MPFR y MPC son los mínimos, pero para características y rendimiento adicionales agregamos otros proyectos y bibliotecas como GMP, CLooG, ISL, OSL, y Python Probablemente todo esto parezca una tontería, pero piense en esto como la carpeta externa en la fuente de compilación de Android, las cosas en segundo plano que lo hacen funcionar.

Adin (YoshiShaPow) : en cuanto a los idiomas, el desarrollo no requiere fluidez completa de ningún lenguaje de codificación (aunque seguramente sí ayuda mucho). ¡Solo el conocimiento de la estructura del código y la sintaxis básica pueden ayudar a alguien a producir un gran trabajo!

¿Podría decirnos por qué eligió las cadenas de herramientas? ¿Y cuál ha sido la situación más difícil que has encontrado hasta ahora?

Paul : Inicialmente estaba interesado en la cadena de herramientas Linaro, pero descubrí que había bastantes errores que no estaban presentes en las cadenas de herramientas de AOSP. Por lo tanto, se tomó la decisión de crear una nueva cadena de herramientas basada estrictamente en GNU GCC y las fuentes de la cadena de herramientas AOSP, con parches ROM Linaro para optimizaciones para Jellybean. Así nació SaberMod. Más modificaciones en las cadenas de herramientas y la fuente del sistema Android llegaron en los años siguientes. Lo más difícil fue hacer que las cadenas de herramientas se compilaran de forma similar a como lo hace AOSP, y descubrir qué versiones de las utilidades GNU (binutils, gdb, etc.) se necesitaban para que las cadenas de herramientas se compilaran correctamente.

SaberMod no es el único proyecto en el que está trabajando. ¿Puedes contarnos algo sobre Hyper Toolchains?

Joe : Hyper Toolchains fue originalmente solo una página que creé en GitHub para ayudar a organizar mis propias cadenas de herramientas, por lo que no solo están desordenadas y arrojadas con el resto de mis repositorios, sino que después de que comencé a meterme más y más con las cadenas de herramientas, terminó haciendo cosas que eran bastante diferentes de las cadenas de herramientas estándar SaberMod, Linaro o AOSP GCC. La combinación de aspectos de Linaro y SaberMod amplió la gama de cosas que los desarrolladores podrían hacer únicamente con cadenas de herramientas. Fue entonces cuando decidí hacer un hilo, para que los desarrolladores pudieran tener más control sobre la velocidad y la suavidad de sus proyectos, no solo la velocidad y la capacidad de respuesta de SaberMod o la suavidad de Linaro.

SaberMod e Hyper Toolchains son desarrolladas por un equipo de desarrolladores. ¿Pueden contarnos un poco sobre ustedes?

Paul : Mi interés en Android comenzó con el G1 hace casi 4 años. No tenía experiencia en codificación. Estaba interesado en el código abierto, pero no tenía idea de por dónde empezar a hacer una ROM o kernel o algo así. Comencé a experimentar con scripting de Android bash para aplicaciones nativas2sdext basado en un trabajo de desarrolladores de firerat. Esto permitió más almacenamiento para aplicaciones que era muy limitado en ese momento (500mb para el sistema y las aplicaciones). Luego continué esto para el Evo shift 4g hasta el Nexus 7 cuando el mod ya no era necesario debido a las restricciones de almacenamiento. También comencé un desarrollo de kernel con el Evo Shift 4G al incluir otros programadores de disco como BFS que nadie más había hecho para el dispositivo en ese momento. Continué el desarrollo del kernel para el Nexus 7. Pero mi desarrollo del kernel todavía se considera bajo, aparte de modificar cosas aquí y allá para hacer que los kernels se compilen con las cadenas de herramientas SaberMod y las optimizaciones. Actualmente tengo un Nexus 5.

Joe : Bueno, comencé a trabajar en cosas de desarrollo hace poco más de 2 años con cero experiencia en codificación, Linux o Android. Como un adolescente que acababa de actualizarse de un viejo iPod con jailbreak a un nuevo y elegante Nexus 7 de primera generación, decidí jugar con Android tanto como pudiera, eventualmente compilando mis propias versiones nocturnas con aplicaciones, scripts y modificaciones añadidas. Después de un tiempo me detuve cuando mi Nexus 7 se hizo añicos (RIP en pedazos). Una vez que ahorré lo suficiente para obtener un GS3 usado, descargué la última fuente, en realidad me puse a trabajar con la fuente ROM y comencé a construir una gran cantidad de software en mi PC también. Recientemente obtuve OnePlus One, lo que hizo que el desarrollo fuera mucho más fácil y me dio más motivación.

Adin : Mi primer proyecto de Android fue creado durante el tiempo que tuve una conmoción cerebral y estaba fuera de la escuela en abril de 2014. Cuando finalmente obtuve el visto bueno para la electrónica, decidí probar un proyecto de Android y terminé haciendo un encargo kernel para Moto G. Tampoco tenía conocimiento de codificación y Linux en ese momento. Algunas personas dicen que es una locura que un niño de 15 años pueda hacer estas cosas, pero lo veo como una motivación para esforzarse por mejorar. Con eso, Joe y yo hemos creado una serie de núcleos híbridos TGM. También puedo resolver un Cubo de Rubik 3 × 3 en 15 segundos en promedio. Mi conductor diario actual es el OnePlus One.

¡Gracias por su tiempo y buena suerte con sus proyectos!

SaberMod y Hyper Toolchains se pueden encontrar en y GitLab. Asegúrese de echarles un vistazo si planea lanzar su propia ROM personalizada. ¿Cuál es tu cadena de herramientas favorita y por qué? Comparte tus pensamientos en los comentarios a continuación.