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

18
3109

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 😀 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 😛 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.

Si te perdiste mi primer post, aquí el enlace:

Gentoo Linux: La historia de un viaje

Saludos,

COMPARTIR
Artículo anteriorGentoo Linux: La historia de un viaje
Artículo siguienteGentoo: El corazón de la bestia
ChrisADR
Soy un jóven desarrollador de software, apasionado por la seguridad informática. Colaboro en mi comunidad linux (Gentoo Linux) como Coordinador de Avidos de Seguridad de Gentoo (GLSA) y en diversos proyectos FOOS como git y el kernel.

18 COMENTARIOS

  1. Genial! Estaré esperando la guía de instalación de Gentoo con Gnome. Tal vez me anime a migrar a Gentoo aunque todavia tenga una PC un poco antigua (intel core i5 3a gen.). Saludos!

  2. Creo que empezaré a ver por acá muchos posts acerca de mi distrubución linux favorita o!!
    Llevo en Gentoo desde 2005 dónde lo use para montar un Mail Server en la universidad donde estudiaba (y donde ahora trabajo) y aunque he sufrido ataques esporádicos de distrohopping siempre termino regresando con mi querida Gertroodis (primero con Gnome2, después Xfce y ahora openbox), y como comentas en tu post anterior, cada vez con mayores habilidades y conocimientos para ponerla a punto 😉
    Estaré en espera de tus próximos aportes, saludos y gracias por alegrarme el dia =D!

    • Pues ya sale el siguiente 🙂 es como tener una entretenida conversación sobre mi tema favorito, dentro de muy poco vendrá el siguiente, y el siguiente, y el siguiente 😛 Saludos y muchas gracias por tu comentario 🙂

  3. Llevo años saltando entre distros y llevaba tiempo pensando en compilar el mio…. esa guía va a ser el paso que me faltaba…. mientras me voy a entretener con el handbook. Gracias por todo……

    • Bueno, el handbook es todo un paraíso de información, hay simplemente de todo 🙂 yo solo puedo aportar mi pequeño grano de arena 🙂 pero muy pronto, ya sale el siguiente post, y dentro de poco saldrá la (ya estoy viendo que bastante esperada) guía de instalación de ~20 pasos . Saludos,

      • Que caballero no me has dado tiempo de pasar del principio que habla de los distintos microprocesadores y ya está la guía!!!!! Este fin de me lio y a por la PRIMERA! !!! Millones de gracias!!!!

  4. Hola ChrisADR, primero quiero decirte que no he dormido bien desde tu primer artículo sobre Gentoo, y está relacionado con este nuevo artículo, mis sueños se basan en andar compilando un Gentoo en mi antigua Aspire One Netbook. En mi sueño me dice el sistema que está muy vieja mi netbook por lo que no reconoce el hardware.
    Por otro lado, una vez vi un Gentoo y me llamó mucho la atención, mencionaron la potencia que le ofrecía a la computadora (ordenador). Desde ese día me dije que un día lo instalaría, han pasado más de 10 años y no lo he hecho, quizás porque me dijeron que era muy complicado instalarlo, en ese entonces yo era casi anti-linux así que acrecentaron mi agravio hacia él. Sin embargo la curiosidad continuó. Una ocasión traté de instalar un BSD en mi netbook sin éxito alguno, y me dijeron que Gentoo era un linux muy parecido a BSD.
    ¿Qué me recomiendas para instalar Gentoo en mi antigua Aspire One con compilador Atom viejito?

    y muchas gracias por tus artículos sigo esperando más

    • Pues yo te recomiendo… ¡HAZLO! y por último, si al final falla (cosa que dudo mucho porque el kernel está hecho para soportar todo tipo de hardware) habrás vivido una experiencia sumamente enriquecedora en el mundo Linux 🙂 habrás compilado tu kernel, habrás montado desde cero tu sistema de ficheros, habrás hecho configuraciones que pocos hacen en su vida 🙂 te dará una nueva perspectiva del mundo jajaja Sino puedes ver mi perfil de Unix&StackExchange 🙂 mis respuestas abarcan la gran gama de linux que hay porque saber Gentoo me ha permitido aprender muchísismas cosas sobre todos los Linux 😉 te dejo el link de mi perfil por aquí

      https://unix.stackexchange.com/users/246185/christopher-d%C3%ADaz-riveros?tab=profile

      No tengas miedo, y al final, si todo sale bien (seguro que costará un poco) será un logro para tu libro 😉 Saludos

  5. Yo también estoy pensando en migrar a Gentoo, pero tengo algunas dudas. En primer lugar, ¿Cómo de actualizados están los paquetes con respecto a Arch? Por otra parte, mi portátil tiene la batería integrada, y todos sabemos lo que el calor excesivo de forma continuada hace a las baterías. Y como pasaría mucho tiempo compilando…

    • Pues la verdad no podría decirte a cienta cierta cuál es más Rolling Release 😛 lo que te puedo decir con certeza es que Gentoo tiene dos ramas: la “estable” y la “no estable”, aunque la “no estable” debe tener la mayora cantidad de paquetes al borde de la tecnología, tengo muchos conocidos developers que la usan en su día a día sin complicaciones. Muchos de estos están hechos para funcionar con los repositorios git de los proyectos, por lo que no existe nada más actual 🙂 Yo personalmente uso la rama “estable”, pero esto es en especial por mi trabajo dentro de la comunidad como coordinador de seguridad y como miembro del equipo de pruebas (Arch Tester). Si no tuviese que tener una versión “estable” para ese trabajo, seguramente estaría al borde de la tecnología con el “no estable”.
      No se si responde a tu pregunta, pero al menos espero que te llame la atención lo suficiente como para probarlo 😛 Saludos

  6. La verdad es que me estas metiendo ganas 😉
    Me interesa mucho lo que has indicado de tutoriales de C, así cómo de Python y te agradecería si tienes alguna joya escondida por ahí para abuelos torpes.
    Por ponerte alguna pega y con todo mis respetos ya que creo es más importante el contenido que el continente, pero cómo soy algo picajoso con el idioma te comento una cosilla.
    Dices al principio:
    “Compilación es el proceso que realiza un compilador para utilizar código escrito en lenguaje humano y convertirlo en código entendible para una máquina.”
    En mi opinión no es correcto incluir lo definido en la definición, ya que para definir la compilación incluyes el termino compilador, por lo que hubiese sido algo más correcto una cosa así:
    Compilación es el proceso por el cual un programa obtiene desde un fichero texto escrito en un lenguaje (C, C++) un fichero ejecutable por el ordenador.

    • Pues la verdad no lo sé 😛 depende de lo que vayas a hacer con tu equipo, o el hardware del que dispone, o si tienes tiempo (y ganas) de aprender a usar Gentoo. Yo te diría que si tienes tiempo, y ganas, pue ¡ADELANTE! y verás que aprenderás mucho en el camino 😉
      Saludos

Dejar una respuesta