Gentoo: ¿Por qué opté por compilar mis propios programas?

Bueno, dada la gran acogida de mi anterior post, vengo a contarles un poco más sobre mi distribución favorita, Gentoo Linux. Prometo que este post tendrá información entretenida que les ayudará a entender un poco sobre los mitos que surgen frente a la temible compilación de software. También prometo que esta información será útil para la próxima guía de instalación de Gentoo Linux en ~20 pasos (todavía no los he contado bien, pero creo que son incluso menos). Sin más que aumentar, comencemos:

¿Qué es compilar?

Es el proceso que realiza un programa (comúnmente llamado compilador) para convertir código escrito en lenguaje humano (archivos C, C++,etc) en código entendible para una máquina (código binario). Miremos el siguiente ejemplo:

Diseño propio, Christopher Díaz Riveros

Este es nuestro pequeño programa en C ( si después desean otros tutoriales sobre C también estaré encantado de mostrar lo poco que he aprendido en este tiempo). Ahora veamos cómo se ve el resultado después de compilar.

Diesño propio, Chrirstopher Díaz Riveros

Hermoso, ¿no es cierto? :) Esto es lo que nuestra máquina entiende para poder escribir ese pequeño “Hola” en nuestra terminal cada vez que se ejecuta el programa.

El proceso de compilación:

Como no sirve de nada tener un programa que imprima un simple “Hola” en la pantalla, pues los archivos .c y .h abundan en proyectos (como en todos los lenguajes de programación). Para poder hacer el proceso de compilación un poco más sencillo aparecieron nuevas herramientas, la más representativa de todas es el comando make.

Make toma un archivo Makefile como punto de partida y compila lo necesario para poder crear el ejecutable final, en algunos casos este paso requiere ejecutar un archivo llamado configure para poder asignar unas cuantas variables necesarias para el compilador para compilar (valga la redundancia) un archivo útil.

Es por esto que en muchos tutoriales encontraremos los siguientes pasos:

Diseño propio. Christopher Díaz Riveros

La magia de ./configure:

Para mostrales uno de los secretos más ocultos y entretenidos del código fuente, iremos al código fuente de un programa que todos conocemos a la perfección, sudo. Primero los pasos de siempre, pero me detendré en ./configure  para mostrarles algo especial.

Diseño propio. Christopher Díaz Riveros

Esto nos devolverá una larga lista de opciones, entre las cuales les mostraré la que más me llama la atención.

Diseño propio. Christopher Díaz Riveros

--with-insults… como su nombre lo indica, compila sudo con insultos :D es una divertida funcionalidad que permite lanzar un insulto al usuario cada vez que se equivoca en su clave. ¿Para qué sirve? pues no hace mucho :P pero deja claro un punto. Existen miles de opciones que no vienen por defento en la mayoría de distribuciones.

Así como estás, hay muchas otras que tal vez estarán activas en distribuciones de código binario y que nunca utilizarás, o habrá algunas que necesites, pero no vendrán con tu binario distribuido oficial, lo que implica que cada actualización será manual.

Empieza la diversión en Gentoo:

Ya hemos visto cuántas opciones podemos estar perdiendo o arrastrando con programas precompilados. Pero ahora vamos a centrarnos un poco en el problema de lo pre-compilado.

Performance:

¿Alguno se ha preguntado por qué las máquinas nuevas solo se ven un poco más rápidas comparadas con otras no tan modernas? Si el procesador es mejor, hay más RAM, todo es mejor, ¿por qué no va más rapido? La respuesta es sencilla… compilación.

Pongamos un ejemplo muy práctico.

Mis programas son compilados con la opción --march=broadwell… esto es debido a que mi procesador es broadwell (i7 de intel). ¿La desventaja de esto? ningún procesador anterior a broadwell es capaz de reconocer este binario. En este punto ya deberías verlo muy claro, si yo compilo con un –march  específico, todo lo anterior no funcionará… ¿entonces cómo hacen los paquetes binarios para soportar tantos tipos de hardware? Fácil, compilan con la menor opción posible :) esto garantiza que todo tipo de hardware va a poder leerlo (al menos por compatibilidad).

El verdadero problema… si tu usas programas que están compilados para i3… ¡¡Todo el poder de tu i7 ( o sus respectivas analogías AMD) es desperdiciado!! ¿ No es eso triste? :(

Flexibilidad:

Dado que los desarrolladores de Gentoo son muy inteligentes, todo este proceso de tar, ./configure, make, etc… ha sido reemplazado con el poder de Portage. Todas estas configuraciones curiosas han pasado a denominarse USE flags, por lo que si tu deseas una configuración específica, no necesitas entrar al código fuente, solo configurar la variable. Aquí un ejemplo de cómo hacerlo con sudo en portage. Primero veremos qué opciones tenemos en nuestra configuración actual con equery.

Diseño propio. Christopher Díaz Riveros

Como podemos ver, las opciones rojas están activadas, las azules no, bueno… todos pueden leer la leyenda :)

digamos que yo quiero agregar una opción…

Diseño propio. Christopher Díaz Riveros

Tan sencillo como agregar una línea en un archivo llamado sudo (el nombre es referencial) dentro de /etc/portage/package.use/. Con esto la siguiente vez que instalemos sudo nos dirá que se va a recompilar con la opción activada.

Diseño propio. Christopher Díaz Riveros

Si damos, YES, todo lo que hay que hacer es esperar un poco y listo :) tan sencillo como esto.

Consideraciones finales:

Bueno, ya hemos visto lo sencillo que es manejar funcionalidades extra en Gentoo, lo que nos permite agregar, quitar o modificar opciones dentro de nuestros programas favoritos. También hemos visto cómo es que el performance de nuestros programas depende mucho de las variables con las que lo compilemos. Si tienes una máquina muy nueva, Gentoo es tu mejor opción. Si tienes una máquina muy vieja, Gentoo también es tu opción (aunque demore un poco en compilar, los programas finales serán mucho más ligeros).

Dentro de poco estaré escribiendo mi guía de instalación de Gentoo, tanto para los amantes de SystemD como para los aventureros por OpenRC (yo uso systemd con GNOME). Por cierto, otra de las grandes ventajas de Gentoo es la posibilidad de elegir todo dentro de tu sistema, y cuando digo todo es TODO.

Saludos,

Published by

ChrisADR

I'm a young developer who loves open source and free software technologies, I'm the founder of CodeLabora, an open source community which aims to help young developers from Latin America to get involved with open source and free software projects and communities around the world. I like to learn and my favorite subjects are security and Linux. I've recently finished an internship as security analyst and contribute to the security project from my Linux community, Gentoo Linux, as Gentoo Linux Security Advise (GLSA) Coordinator