Por qué es mejor compilar a que instales desde los repositorios

En esta pequeña guía voy a explicarles (y enseñarles) porque es mejor que compiles un programa (dígase Firefox, Vlc, etc) desde su código fuente, a que lo bajes (desde El Centro de Software, Yumex, Pacman, etc) y lo instales.

Primero vamos con la teoría:

¿Qué es «compilar»?

Compilar es transformar el código fuente (código escrito en un determinado lenguaje de programación, dígase C,C++,etc) en un programa ejecutable para su funcionamiento mediante el uso del procesador para la conversión del lenguaje usado para generar el código a el binario y ensamblador. También se le suele llamar empaquetamiento.

¿Porqué es mejor «compilar»?

Primero tienes que saber lo siguiente para entender el por que. Dicho de una manera «burda» (simple, no muy profesional, etc), cada raza (Pentium, Core, Atom,etc) y su especie (Intel, AMD, ARM,etc) de procesador tienen instrucciones (software escrito en ensamblador que procesa el código) propias de su modelo (Core i7, Core i5, Atom x2, Phantom x8,Arm,etc) y además tienen instrucciones generales que todos los de su especie tienen.

Cuando vos bajas desde los repositorios a través del Centro de Software/apt-get/Yumex/Yum/Pacman/etc, un programa que se instala de forma automática se dice que esta precompilado para su funcionamiento en todos los procesadores posibles (Intel y Amd). Al tratarse de un programa precompilado se pierden esas instrucciones propias de ése modelo de procesador específico (piensa que si un programa como Firefox o Chrome, que tienen más de 7 u 8 millones de líneas de código, tuvieran que poner todas las instrucciones específicas para cada procesador que hay en el mercado, la cantidad de código sería tan grande que ya no sería eficiente ése programa) dejándose nada más que las generales de su marca creadora (Intel, Amd,Arm).

Al bajar, descomprimir y compilar por tu cuenta el código fuente de un programa, éste se compila con las instrucciones específicas de TU procesador, (lo que no quiere decir que no sirva en una máquina con otro distinto, sólo que va a estar optimizado específicamente y puramente para tu procesador), desatando y liberando así todo el poder que tu procesador es capaz de dar gracias a sus instrucciones específicas.

En detalles más técnicos, estas instrucciones específicas están íntimamente ligadas a lo que se conoce como el chipset de tu placa madre, que es el gran quebradero de cabeza para los que tenemos Intel para cuando queremos hacer un upgrade del procesador y la placa madre.

Te sorprenderías del poder que puede llegar a dar tu Amd Atom x2 o tu Intel Core Inside, Core 2 Duo, i3, etc de tu vieja PC. ¿Ahora entiendes por que se habla mucho en el mundo Linux de compilar el famoso Kernel (corazón de todo sistema operativo)? Imagínate si compilar especialmente para tu pc todo un sistema (entorno gráfico (Gnome,Kde, etc), Kernel, programas de uso común (Firefox, Vlc, Chrome, Wine, etc) todo el nivel de velocidad y optimización que tendrías.

Éste principio de compilación para obtener un código optimizado especialmente para tu máquina es el que utilizan distros como Gentoo y derivados (del que no voy a hablar ahora, yo utilizo Fedora minimal con compilación de Gnome 3, el kernel y demás programas) donde el sistema, sus actualizaciones y sus programas siempre siempre son compilados.

Desventajas de la compilación:

Ya te expliqué todas las ventajas, pero como todo en el universo tiene una contra.

En el caso de la compilación son;

  • Tiempo necesario para esto (Firefox con un i7 4790K (sin overclock ya que soy muy malo con los voltajes) toma 3 minutos, Gnome Shell (la barra nada más) con Gnome-Control-Center me tomo unos 2 minutos, los dos siendo compilados a la vez en Fedora. Pero en una máquina con un procesador menos fuerte este tiempo puede aumentar desmesuradamente).
  • El procesador usa el 100% de su potencia con todos sus núcleos al máximo, por lo que el consumo y el calor se disparan (tenerlo en cuenta si tiene overclocking o si es especialmente una notebook), así que es conveniente que te prepares un mate o un café para la ocasión.
  • Quizás te falte alguna librería (herramienta) que utilice algún programa para que no de error en la compilación. Por lo general todas las distros tienen paquetes o conjuntos de los mismos para evitar esto (vienen repletos de diversas librerías y demás cosas que permiten al kernel comunicarse como se debe con el procesador durante el proceso).

¿Cómo puedo compilar?

Para Debian (Ubuntu, Mint,Elementary, etc son todos derivados de este por lo que sigan esto

Acá hablo de compilar un programa de uso normal, no un kernel.

aptitude install build-essential dh-make devscripts fakeroot debhelper debian-policy ccache dh-autoreconf autotools-dev build-dep ardour

Puse debian-policy, pero si su distro no es Debian y les da error de que no existe ese paquete, simplemente ignórenlo. Tengo que aclarar que hace mucho que no uso estos sistemas por lo que si algún paquete ya no se encuentra en los repositorios no se hagan problema.

Para Fedora:

sudo yum -y install kernel-headers
kernel-devel
sudo yum groupinstall "Development Tools"
sudo yum groupinstall "Development Libraries"

Acá tengo que pedir disculpas para los que usan Arch (no conozco bien la distro) y OpenSuse, ya que no conozco estas distros ni tampoco los paquetes respectivos para realizar una correcta compilación (y no he corroborrado lo que hay en la red, por lo que para esas dos no sé si funcionan).

Ahora que ya tienes todos los requerimientos necesarios solo necesitas bajarte el código fuente del programa que quieres compilar, según la extensión lo descomprimes usando la terminal (tranqui, te dejaré los comandos) y cuando vallas a la carpeta (siempre con la terminal) haces lo siguiente:

Si tiene posibilidad de configurarse para elegir los componentes y demás:

./configure

Luego tecleas:

make

Y por último para instalar el programa en tu linux:

make install

Todo esto siempre con root (su en Fedora, sudo su en Ubuntu y sus derivados (Mint, Elementary Os,etc)

Comandos para descomprimir mediante la terminal (el archivo se descomprime en una carpeta donde se encuentre el archivo):

Archivos .tar (tar)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Empaquetar        |      tar cvf archivo.tar /archivo/*
Desempaquetar     |      tar xvf archivo.tar
Ver el contenido  |      tar tvf archivo.tar
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.tar.gz - .tar.z - .tgz (tar con gzip)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Empaquetar y comprimir        |    tar czvf archivo.tar.gz /archivo/
Desempaquetar y descomprimir  |    tar xzvf archivo.tar.gz
Ver el contenido (sin extraer)|    tar tzvf archivo.tar.gz
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.gz (gzip)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir        | gzip -q archivo (El archivo lo comprime y lo renombra como "archivo.gz")
Descomprimir     | gzip -d archivo.gz (El archivo lo descomprime y lo deja como "archivo"
Nota: gzip solo comprime archivos, no directorios
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.bz2 (bzip2)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir         |   bzip2 archivo
|   bunzip2 archivo (El archivo lo comprime y lo renombra como "archivo.bz2")
Descomprimir      |   bzip2 -d archivo.bz2
|   bunzip2 archivo.bz2 (El archivo lo descomprime y lo deja como "archivo")
Nota: bzip2 solo comprime archivos, no directorios
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.tar.bz2 (tar con bzip2)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir       | tar -c archivos | bzip2 > archivo.tar.bz2
Descomprimir    | bzip2 -dc archivo.tar.bz2 | tar -xv
| tar jvxf archivo.tar.bz2 (versiones recientes de tar)
Ver contenido   | bzip2 -dc archivo.tar.bz2 | tar -tv
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.zip (zip)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir        | zip archivo.zip /mayo/archivos
Descomprimir     | unzip archivo.zip
Ver contenido    | unzip -v archivo.zip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.rar (rar)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comprimir     | rar -a archivo.rar /mayo/archivos
Descomprimir  | rar -x archivo.rar
Ver contenido | rar -v archivo.rar
| rar -l archivo.rar

Y esto es todo. Saludos desde Buenos Aires, Argentina. Felices fiestas y año nuevo ! :).


67 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Gonzalo dijo

    El problema con compilar es que no siempre funciona a la primera y es mas tedioso

    1.    Cristian dijo

      El problema de compilar es que a menos que tengas un pc viejito y limitado, las mejoras no se notaran demasiado… bueno tal vez en un equipo con uso intensivo sea una opción, pero para la mayoria de usuarios sólo es un proceso tedioso.

      1.    Daniel dijo

        Creo que ese es el meollo del asunto ¿Es tan importante la mejora de rendimiento que se notará al compilar los paquetes, que harían que la pérdida de tiempo y complicaciones de esta tarea pasen a un segundo plano?

      2.    joaco dijo

        Igual si tenés un i7 compilar sí que conviene, porque es más rápido y calculo que funciona algo mejor. Ahora con un pc con intel atom, no conviene, salvo que necesites realmente esa potencia extra que da compilar, pero puede tomar horas compilar un programa con un procesador poco potente.

    2.    Avrah dijo

      Coincido totalmente, me ha pasado de compilar y enterarte luego de un tiempo que te falta una libreria, rastrearla y tener que encarar nuevamente el proceso… Es raro que todo funcione al primer intento… xD

  2.   FerGe dijo

    ¡Muy interesante!

    Si compilas un programa, ¿cómo funcionan luego las actualizaciones? ¿Son automáticas o tenemos que estar pendientes nosotros de si ha salido una nueva versión?

    1.    Antonio Campos dijo

      Lo tienes que actulizar tu de forma manual es decir compilar la version mas reciente esa es otra digamos «desventaja» por la cual tambien se hace algo tedioso

    2.    jlbaena dijo

      Pues las actualizaciones no existen, de hecho, las distribuciones linux y sus distintas formas de empaquetar el software y los correspondientes gestores de paquetes eliminan el inconveniente de recompilar por cada nueva actualización ( y de resolver las dependencias).

      Saludos.

    3.    joaco dijo

      Si lo compilas descargando el código fuente desde alguna página, entonces sí tenés que hacerlo manualmente y aprender como instalaralo porque no todos se instalan igual.
      Ahora, si tenés Gentoo o alguna distro con ports, entonces lo hacés desde los repositorios casi automáticamente.

    4.    Fermín dijo

      En Gentoo su gestor de paquetes, Portage, se encarga de las actualizaciones y las dependencias; no sé en otras distros. Eso sí, cada actualización supone volver a compilar, obviamente.

  3.   Tanrax dijo

    Hubo una época que compilaba todo lo que podía. Después me cansé, sobre todo por el tiempo que tenía que dedicar a que la máquina trabajara (45 min para el kernel, 10min para chromium…) y por el tiempo que gastaba en arreglar problemas que surgían sobre la marcha. Además, yo personalmente no encontré un aumento de rendimiento, me daba la sensación que todo iba igual. Por estas razones ahora uso todo precompilado, me es todo instantáneo y sin conflictos. Aunque aprendí mucho en esa época, me quedé con las ganas de usar gentoo 🙂

  4.   Emmanuel dijo

    Inclusive, y es algo que he visto poco, se puede compilar desde sistemas como apt. Se agrega una bandera de compilación a apt-source y listo. Claro, previo a eso, instalar los paquetes necesarios para realizar las compilaciones, sino no funciona… aunque es una forma más directa de compilación y que conlleva menos pasos, ya que, sólo la primer vez ocupa la instalación de paquetes y las siguientes, las dependencias cumplidas y el paquete como tal.

    Saludos.

    1.    joaco dijo

      Tiene la funcionalidad apt-build, aunque creo que no compila las dependencias, sino que instala binarios precompilados.

  5.   xikufrancesc dijo

    Desde el primer instante que vi el titular no pude evitar pensar lo mismo, y terminado de leer todo el excelente artículo tengo la idea en cabeza dando mil vueltas, Gentoo… Gentoo, ¿donde estas?,
    compilar es una maravilla, poder disfrutar ciertas particularidades y usarlas es impagable, pero el tiempo y las «necesidades actuales» es imperdonable, pues no aplica.
    Quizás necesitemos algo en término medio, en donde ni librerías ni detalles en cambio de versiones nos haga perder tanto tiempo. Veremos que sucederá pues, o si realmente nos aplicamos a compilar sobre el propio aptitude, uprmi y zypper que ya tenemos instalado.

  6.   anonimo dijo

    3 minutos firefox !….habrias querido decir 30?

    Esto demoro en mi pc con un fx8350 a 4.5G, uso gentoo.
    $ genlop -t firefox |tail -n3
    Sat Dec 6 20:00:00 2014 >>> www-client/firefox-34.0.5-r1
    merge time: 16 minutes and 35 seconds

    Esas instrucciones propias de cada procesador se llaman mnemónicos y están implementadas fisicamente dentro del microprocesador, son las que conforman el lenguaje máquina, por ende compilar para que un programa ande en muchos tipos de microprocesadores, si o si tienen que acotarse al que menor cantidad de mnemónicos comunes soportados en todos esos icroprocesadores…desperdiciando capacidad real de los microprocesadores mas actuales y potentes.
    Así lo hacen las empresas y las distros binarias gnu/linux.

    1.    ShyanCore dijo

      A mi con un Intel i7 4790K con 18gb de RAM me ha tomado lo que dije antes

      1.    anonimo dijo

        Entiendo que el micro que tienes es superior, pero la diferencia es abismal, la verdad debe verse una sabana a esa velocidad. A lo mejor sea algo relacionado con las depencias o USEs que son las mismas que las opciones del configure al compilar a mano.

      2.    Jhonny dijo

        pequeño detalle q obviaste decir 18GB de Ram aparte del i7, no todos tienen esa máquina, pero podrías hacer un benchmarking así se nota un poco la diferencia, porque la teoría es linda pero a ver si compensa.

      3.    Cristian dijo

        otro gran detalle, el procesador es intel, por lo tanto tiene independiente del modelo mejor punto flotante, característica muy relevante para realizar este tipo de procesos

    2.    ezequiel dijo

      Es cierto, compilar es tedioso. Pero se aprende mucho renegando con Makefiles, librerías, etc. Es algo que está bueno hacer aunque sea un par de veces. Yo uso todo precompilado por el mismo motivo que citó Tanrax.

      Saludos from Argentina!

  7.   Erick Carvajal dijo

    El problema que generalmente tengo al tratar de compilar programas de versiones totalmente nuevas siempre es por las dependencias, aveces toca desde compilar todas (para llegar a las ultimas versiones) y luego pensar en poder compilar lo que se desea.

    Los problemas de PATH y los FLAGS son las cosas que aun me mantienen al margen de querer compilar todo (aunque suelo hacerlo como puedo). Una de las herramientas que suelo consultar para poder compilar las dependencias es la siguiente web – http://www.linuxfromscratch.org/

    #LinuxFromScratch es un proyecto que provee instrucciones «paso a paso» para compilar el código fuente que necesites usar en el sistema.. (el 98 % de lo que he necesitado compilar lo he logrado guiandome de acá y poco a poco aprendiendo).

    Como punto a favor creo que compilar un sistema desde 0 seria interesante sobre todo para entornos de desarrollo o servidores entre otras cosas que digamos «no suelen ser tan cambiantes» como una computadora personal en la que a cada rato estamos instalando y cambiando todo (es mi punto de vista) además de que el mínimo de rendimiento que se gane en este tipo de aplicaciones de uso es muy importante.

    Son puntos de los que muy poco se habla en la actualidad y solo los «eruditos» manejan, pero es interesante darle a este tipo de cosas los tutoriales que necesitan para que cada día encontremos más gente que aporte ayuda a las diferentes comunidades donde participe y no solo Gnu/Linux quede en el tiempo debido al poco desempeño de los colaboradores, que si bien hasta la actualidad «así ha funcionado» no es muy saludable contar con solo Usuarios Finales.

  8.   Aguila Rabuda dijo

    Permiteme un pequeño añadido. Para poder obtener las ventajas que aqui expones, debes configurar adecuadamente el conocido make.conf. Alli se indica la familia de procesador y las flags de compilación. Del mismo modo, alli se puede especificar el número de núcleos a usar durante la compilación. Cuando usas todos los núcleos de tu micro, el tiempo de compilación se reduce de manera drástica.

    Un saludo

  9.   Sebastian dijo

    Muy bueno el articulo. Me hubiera gustado un ejemplo tambien o me gustaria directamente, un post sobre como compilar en archlinux o como usar AUR. Feliz Año Nuevo desde Mendoza.

  10.   TheGuillox dijo

    Hace mucho tiempo… siempre compilaba el kernel, pero es muy tedioso tener que esperar 40min :/ en fin… hace mucho que no compilo nada a excepción de los drivers de vídeo (solo para unas configuraciones especiales).

  11.   Alejandro dijo

    Muy interesante el articulo, pero no señor, empaquetar y compilar no es lo mismo ;)..

  12.   c4explosive dijo

    Muy buen post. Estoy de acuerdo en lo de compilar ciertos programas, pero a veces es algo tedioso por lo que demora la máquina en hacer el proceso. Pero aparte de eso uno aprende bastante, sobre todo cuando hace falta librerías o paquetes.
    Creo que para Archlinux, para compilar se necesita el siguiente paquete: base-devel
    pacman -S base-devel

  13.   ratakill dijo

    Esta muy buena la info, pero la verdad no es necesario compilar, si eres un user standar y solo quieres que algo funcione como esta ni te toques eso. Es tedioso lo de estar compilando, siempre, digo siempre te falta alguna libreria, te encuentras con uno que otro problema, dimelo a mi que compile el server de minecraft para que todo estubiera lo mejor posible y me tomo su tiempo…. aparte que cada vez que sale un update o parche o lo que sea ponte de nuevo a compilar xd

    1.    kik1n dijo

      Exacto, compilar es para programas muy específicos que necesites a un uso optimo, por que compilar todo, y como dices, siempre hay actualizaciones, mayor caso las distros rolling release, es molesto. Recomendaría solamente los kernels lts.

  14.   FedoraUser dijo

    Hoy dia casi todos los procesadores que la gente usa soportan las mismas instrucciones, por tanto compilar solo es favorable cuando se refiere al kernel y en un sistema como lo puede ser un servidor, eso, y obvio cuando no hay paquetes precompilados, todo lo demas es perdida de tiempo.

  15.   Juan Mera dijo

    Buen aporte, voy a probar para ver que tal me va, hasta ahora la mayoría de las veces (casi siempre) instalo de los repositorios…
    Pequeña observación: Las opciones del comando rar van sin guión y bunzip2 solo descomprime.

  16.   santiago dijo

    lo maximo que compile fue un kernel para debian wheezy y me tardo unas 2 horas (tengo un cpu amd e450 1.6 ghz dual-core) y justamente por eso no instalo gentoo, el tiempo en compilar y bajar todo el sistema me llevaria como 18 horas, y eso si no tengo problema alguno, es cierto que es mejor compilar pero la mayoria de veces el tiempo tardado es demasiado y creo que no vale la pena. tenes un plus de velocidad pero no es mucho y creo que no justifica todo el tiempo invertido. Aunque si algun dia llego a tener una pc con un procesador tan bueno como el tuyo intetare instalar gentoo 😛

  17.   Vampii dijo

    Gente:

    Sin intenciones de flame ni nada, los slackers ven como algo natural compilar, generar el binario, instalarlo con el manejador de paquetes pertinente (que resuelva dependencias obviamente, slapt-get, swaret, slackyd y/o varios mas), con todo optimizado para nuestro equipo y como si nada, que no es nada del otro mundo ni física cuántica.

    Ver un DVD sin que ande a los trompicones en un P3 750MHz con 192MB RAM no es algo ni imposible ni difícil de lograr sobre un Slackware. Doy fe, y es más rápido que compilar un Gentoo. Pero no es lo mismo, yo también uso Gentoo.

    La diferencia entre hacker y consumidor es que el consumidor dice “Desearía que funcionara de tal forma” y el hacker “Tengo un destornillador y unos pocos minutos” – Rael Dornfest

  18.   Pepenrike dijo

    ¿Realmente hay una mejora notable del rendimiento?
    Con un i7 de ultima generación y 18 Gb de ram, ¿como notas la diferencia de los paquetes compilados a los binarios?

    Siempre he odio acerca de la idoneidad de la compilación propia de los paquetes, pero creo que en los entorno de escritorios actuales es muy complejo de sostenerlo, sobretodo por la complejidad de las dependencias, las continuas actualizaciones, y la enorme dependencia de fuentes no libres, como el caso de los drivers privativos, que influyen sin duda mucha mas en el rendimiento que cualquier aspecto que se pueda compilar…

    Saludos

    1.    ShyanCore dijo

      Considerando que Gnome 3 solo le compile (diré los nombres burdamente ya que los nombres de los paquetes no me los acuerdo): el shell (la barra), gnome-control-center(completo, con sus dependencias,etc), el applet para el tiempo y unas 2 o 3 dependencias para que el shell pueda funcionar. Obviamente que el shell exigía más dependencias para que todas sus funciones trabajen pero me llevaba a compilar GDM entre otras, esto lo arregle modificando lo con GConf una vez compilado el shell.
      Ahora cuando inicio sesión (mediante terminal) el entorno tarda mucho menos en cargar que cuando tenia instalado de forma precompilada. Tirando un tiempo al aire, de forma precompilada creo que tardaba unos 3 o 4 segundos en cargar el shell (con unos 5 en que se muestre el fondo de pantalla, nunca entendi por que tardaba tanto eso, me parece que es por el driver con la GT 630) y compilado en cuanto metía la contraseña ya se inicia X org y el entorno esta cargado (con preload y prelink los hice mucho más rápidos, me parece que es por que se pasaron al caché; https://www.google.com.ar/search?q=preload+y+prelink+fedora&ie=utf-8&oe=utf-8&gws_rd=cr&ei=iXaqVPykO4qYNpbTgdAP )

    2.    mario dijo

      El hecho de que el i7 tenga intrucciones ss4 y ss3, las cuales son ignoradas por compilaciones genéricas de varias distros (debian compila para 486, ubuntu para 686) puede darte una idea de cuando hardware es desperdiciado tratando de abarcar un procesador de 20 años -igual gracias debian por soportar mi viejo pentium mmx-. Si necesitas «drivers privativos» como mencionas, el nucleo brinda la posibilidad de cargar el firmware específico al momento de compilación. Nunca más problemas raros con xorg.

  19.   Fabián Alexis dijo

    Gracias por la info, siempre es bueno aprender (o re-aprender) (:

  20.   Javier dijo

    Debian con gustito a Gentoo 🙂
    http://crysol.org/es/node/699

  21.   Yuan six dijo

    Otra desventaja es que la compilación por terminal es para usuario que conocen o tengan ya algo de conocimiento sobre Linux. ¿Hay alguna herramienta gráfica que no te administre la compilación, instalación y actualización de programas pero de forma gráfica?

    1.    mario dijo

      Calculate linux hace eso, es un gentoo con herramientas gráficas listo para compilar. En Phoronix suelen recomendarlo.

  22.   José dijo

    Soy usuario de linux, algunas veces cuando quiero instalar un programa desde el repositorio se instalan las versiones antiguas del programa, simplemente por que las nuevas no están compiladas para la distro en cuestión, pienso que saber compilar es fundamental, más si cabe cuando se usan distros poco comunes.

  23.   joan dijo

    Todo lo que dice en el post está muy bien y no dudo que sea cierto, pero la diferencia de rendimiento entre instalar un paquete binario y compilar tu mismo es imperceptible para un usuario.

    Y las desventajas de compilar son muchas y si son claramente perceptibles para el usuario. Por lo tanto personalmente paso de compilar.

  24.   NauTiluS dijo

    Donde mas he notado el rendimiento al compilar el kernel, fue en una laptop con procesador AMD 64. El cambio entre el kernel de fabrica y el compilado era brutal.

    Ahora mismo, tengo kernel de fabrica en mi sistema, pues como dicen mucho por aquí, hubo una época en la que compilaba casi todo y me llegue a cansar.

    Ahora mismo, solo compilo algunos programas de vital importancia, como para hacer uso de un pequeño servidor, o para jugar con emuladores. No hace mucho hice un post de como compilar la versión de mame. Estos programas generalmente si se nota cuando lo tienes optimizado para tu sistema.

    Solo me falta probar esa distro de gentoo, y ver como anda el rendimiento.

  25.   NauTiluS dijo

    Se me olvido agregar, a las personas que le dura mucho compilando el kernel, más de 30 minutos, existen varios trucos para hacerlo en menos tiempos.

    Uno de esos trucos, es que, solo compile los módulos de tu equipos, máximo, quizás 70 módulos como mucho es lo que le aparezcan a ustedes y si agregamos el soporte de iptables con todos sus requisitos, creo que aumentaría a 300 módulos. Vamos, que es mucho mejor que compilar 3000 y pico de módulos, cifra que anda actualmente si se compilan los módulos del kernel como viene de fabrica o como le dicen, vanilla.

    El programa que les ayudara a saber cuales módulos reconoce el kernel en tu sistema actualmente, es «localmodconfig» o haciendo uso de este script «streamline_config.pl» que se encuentra dentro del directorio del kernel source, en la ruta «/scripts/kconfig /»

    Eso si, asegúrense de tener todos sus aparatos usb conectados, ya que una vez que el kernel reconozca todos sus módulos, solo es cuestión de compilar.

    El kernel estará bien ligero y se sentirá cierto aire de frescura en el sistema, así como también apresura más el inicio y apagado del sistema.

    Saludos.

  26.   Tabris dijo

    La vida no es tan facil! hay programas que usan cmake u otras cosas, además mantener todo actualizado y compilado lleva tiempo. Y teniendo semejante CPU que diferencia te va a hacer?

  27.   Yoyo dijo

    El problema con compilar es que algunos de los programas que instalamos con ese método luego no se desinstalan o dan errores al hacerlo con lo cual no podemos desinstalarlos.

    1.    anonimo dijo

      Debes guardar la carpeta con los fuentes compilados, cuando te deen ganas de desinstar, lo único que tienes que hacer es ir a la carpeta de los fuentes y desde una terminal como root ejecutar:

      # make uninstall

      Desde luego, los paquetes compilados a mano por defecto en toda distro seria se instalan aparte, o sea en /usr/local/bin no en /usr/bin donde los pone por defecto el manejador de paquetes de la distro, asi de esa manera no se entrevera nada.

  28.   freebsddick dijo

    El articulo plantea varias cosas interesantes pero carece de una calidad pésima en sus terminos y estructura logica ..

    «en un programa ejecutable para su funcionamiento mediante el uso del PROCESADOR para la conversión del lenguaje usado para generar el código a el binario y ensamblador. También se le suele llamar empaquetamiento.»

    Falso . se usa realmente un Compilador es el encargado de pasar las instrucciones de un determinado lenguaje de programacion a su correspondiente en lenguaje ensamblador y luego traducir este a lenguaje maquina.

    El lenguaje ensamblador es un nemotecnico que refleja un grupo de instrucciones residentes en los registros del chip.

    «Al bajar, descomprimir y compilar por tu cuenta el código fuente de un programa, éste se compila con las instrucciones específicas de TU procesador»

    Al compilar un programa simplemente se hara con las intrucciones comunes a la arquitectura depende de cada usuario activar las flags correspondientes del compilador para lograr optimizar un programa para un procesador de forma especifica.

    Referente a lo que comentas sobre compilar el kernel:
    Cuando compilas el kernel buscas activar o desactivar caracteristicas que pueden ser utiles o no en un determinado momento lo cual no necesariamente se vera reflejado en la relacion tamaño y velocidad en la carga de ejecusion.

    Cuando te refieres al siguiente apartado:

    dh-make devscripts fakeroot debhelper debian-policy ccache dh-autoreconf autotools-dev build-dep

    Estos programas no son escenciales para compilar un programa. Tal y como intentabas decir al inicio, la cantidad de lenguajes de programacion impide saber a ciencia cierta que herramientas debes tener instaladas para poder compilar programas en gnu/linux … eso lo puedes saber solo consultando la documentacion del programa que quiras realizar . Los programas que mencionas se usan para proceder a DEBIANIZAR y empaquetar en ese formato un programa que podria estar o no compilado.

    Hay otros asuntos en articulo que resultan ser un tanto ambiguas en la forma en la que se plantean. Seria arduo abordarlas todas.

    Sugiero la revisión del articulo en la medida de lo posible por parte de su creador y se insta a un mejor control en la calidad de las publicaciones.

    1.    Pepenrike dijo

      Hombre, tampoco es eso.

      El articulo no es para la revista Science, simplemente es un articulo introductorio, y creo que en los términos en los que los hace, son suficientemente profundos para que un usuario novel comprenda los conceptos clave.

      Si nos ponemos académicos, tres cuartas partes de lo que se publica en internet no valdría absolutamente de nada.

      No seamos tan puristas… es imposible estar al 100% de acuerdo con un articulo, pero tampoco podemos ir valorando la calidad «técnica» continuamente, como si fuéramos a evaluar un doctorado.

      Mi apoyo total al autor de este articulo

  29.   nonamed dijo

    interesante articulo

    siempre es bueno para los amantes de la libertad, el uso de unar, en vez de rar, para descomprimir rars de forma libre. ( https://packages.debian.org/jessie/unar )

  30.   Jumi dijo

    Me pico el bicho con este tema… me puse a buscar en google pero no encuentro un tutorial para compilar firefox bajo ubunto 14.04 amd64 bits… po lo demas, esta noche me pongo con el kernel con el sig tutuo: http://www.redeszone.net/2014/11/28/como-instalar-el-ultimo-kernel-de-linux-en-ubuntu-14-04-lts/

  31.   Carlos Ferra dijo

    buen articulo, estoy aprendiendo mucho. pero usaría esto solo para algún programa especifico que consuma muchos recursos, como editores de video por ejemplo. saludos.

  32.   babel dijo

    Entre este artículo y el de Gentoo que publicaron hace unos días me tientan a instalar Gentoo en mi PC. Hace muchos años usé Sabayon, que facilitaba todo el proceso de instalación pero mantenía la base que es compilar desde fuente. Sinceramente no recuerdo haber notado alguna diferencia en el desempeño de mi Laptop (en ese tiempo tenía una lap) con Sabayon o con Ubuntu, por lo que no sé si aventarme todo el trabajo de borrar mi Arch que funciona muy bien para instalarlo. No estoy seguro que unos milisegundos por programa valgan la pena.

    1.    anonimo dijo

      De las 4 pcs con gentoo que tengo instaladas y actualizadas, se suma la notebook que tenía archlinux….me cansó systemd, ya tenía que usarla con startx porque en la ultima actualizacion se me disparó al 85% de uso los dos núcleos, sin hacer nada, estuve investigando y parece que algo ha cambiado en systemd para que slim se enloquezca y me coma el microprocesador.
      Ya basta, fue suficiente con arch….demaciado aguantó, mas de dos años, ahora estoy instalando gentoo, voy por la actualizacion a testing del stage3, para esta noche marchará un openbox con fritas.

  33.   Leo dijo

    Buen articulo, me dan ganas de compilar Qupzilla, pero con un sempron tardará días, bueno, se que no tanto, pero aún así da fiaca.

  34.   Manuel Aponte dijo

    Otra desventaja que tiene la compilación es que cuando hay una actualizacion es necesario volver a compilar e instalar la actualización, lo cual es un problema si se tiene en cuenta que algunos programas tienen ciclos de desarrollo cortos y para ellos se emiten actualizaciones con frecuencia, 2 a 3 meses, con todo ello el usuario casual se aburre y el usuario constante consume mucho tiempo en mantener su sistema al día.

  35.   Manuel Aponte dijo

    me gustaría saber cuales aplicaciones es más recomendado compilar. según su utilidad, frecuencia de actualizacion y mejora en rendimiento.

  36.   Aleix Pol dijo

    Esto es absurdo, si requieres compilar tú mismo, es que estás usando la distribución incorrecta. La única razón para compilar es para añadir opciones de debug y que te vaya más lento a ti, a cambio de poder arreglar mejor los errores de otros.
    Vuestro sistema no va lento porque necesite -O3, va lento porque hay algun programa leyendo demasiado a disco o pintando demasiado en pantalla.

    Mi recomendación: en vez de microoptimizar nuestro sistema, trabajemos en comunidad para mejorar el software del que disponemos entre todos.

  37.   Javier Fernández dijo

    No has explicado como opitimizar la compilación, por ejemplo en Gentoo se usa las opciones de USE para poder optimizar el código generado, además tienes que indicar el procesador, etc. Cómo se hace eso en UBUNTU / Debian o en Arch?, Interesante Artículo.

  38.   Jose Manuel dijo

    Buenas!

    A falta de leer los comentarios de abajo tengo una dudad e novato en linux:

    Uso Fedora 20, ya tengo bastantes cosillas instaladas, por ejemplo, el navegador Firefox, para compilarlo para mi máquina, ¿lo puedo hacer sin más?, es decir, bajo el código y lo compilo, o tengo primero que eliminar el programa que ya tengo bajado para compilar el nuevo…

    Lo mismo con el núcleo de Linux y tal….

    Quizás esté preguntando algo absurdo pero ya digo que soy bastante novato en las cosas serias de Linux jajaja

    Un saludo!

    1.    Koprotk dijo

      El núcleo creo que no es necesario, pero debes crear una entrada para cada kernel en el GRUB, con firefox no se sí es recomendable tener 2 firefox, personalmente prefiero tener 1 sólo kernel y 1 sólo firefox

  39.   st-avapxia dijo

    Lo unico que he compilado en mi vida ha sido una version en desarrollo de Musique, me gusta mucho esa app, valio la pena todo el tiempo que tardo el proceso. Para un usuario final como yo, al terminar, me senti realizado.

    Saludos, excelente blog.

  40.   ecoslacker dijo

    Hola yo uso Slackware y compilar las aplicaciones es lo más normal del mundo.
    El sistema te lo instalas desde una ISO ya precompilado, y las aplicaciones precompiladas que puedes usar desde el repositorio oficial son pocas, aunque si tu quieres puedes descargar el código fuente del sistema (y los scripts originales con los que se compila toda la distro) y compilartelo tú mismo que es como yo imagino que funciona Gentoo.
    Sin embargo el proyecto SlackBuilds proporciona scripts (parecidos a los oficiales de la distro) para muchas aplicaciones de terceros, en los que te descargas el código fuente de lo que quieres instalar y lo conviertes a un paquete tgz o txz que posteriormente se instala con el administrador de paquetes oficial de la distro. Por lo tanto, la ventaja es que te evitas usar los comandos configure, make, make install y puedes actualizar, reinstalar o remover el paquete como cualquier otro y de manera muy fácil.
    La desventaja es que en Slackware las dependencias no se resuelven automágicamente como en otras distros, así que tienes que compilar las dependencias necesarias primero y al final la aplicación que deseas instalar. Los programas que yo uso compilados son desde LibreOffice, Texmaker, Spyder, Qt5, QtCreator, VLC, Wine, GRASS, QGis, entre otras. Dependiendo de la aplicación y sus requerimientos, la compilación e instalación puede tardar entre 5 min o varias horas. Pero si lo deseas puedes buscar y usar un paquete precompilado para ahorrarte tiempo.
    No he tenido tiempo de comprobar si hay mucha diferencia entre los paquetes compilados y los precompilados, pero mi sistema es muy estable. Pero yo creo que al menos en mi laptop no hay mucha diferencia pues no es tan potente, tiene un procesador i3 y 4 GB de RAM.
    Saludos y suerte compilando.

  41.   Koprotk dijo

    Actualmente estoy usando Funtoo, para ser honesto no veo ninguna diferencia de rendimiento entre compilar un programa o instalar el precompilado, yo lo hago meramente por un tema pedagógico, pero si hay diferencias entre compilar el kernel y no hacerlo, eso si. Cuando usaba debian y deseaba compilar algo, utilizaba la siguiente secuencia:

    ./configure
    Make -j3 (número de cores+1)
    Alien

    Usaba alíen porque crea un binario del programa compilado y así puedes instalarlo en tu sistema como un binario cualquiera, y así, si deseas desinstalar, simplemente puedes usar synaptic u otra gestor de paquetes, esa es la ventaja de crear el paquete e instalar el paquete como tal, en lugar de hacer «make install»

    1.    Yukiteru dijo

      Yo si que le veo una mejora, al menos con paquetes grandes y pesados, por ejemplo Libreoffic een Funtoo tarda mucho menos en cargar que en Debian, lo mismo me ha pasado con VLC o con mpv y archivos MKV FullHD y multiaudio, la carga es mucho más rápida.

      Otro que tambien ha sufrido el cambio es Firefox, en Debian tener 10 o 15 pestañas con mi PC se vuelve una tortura, pero con Funtoo he logrado tener hasta 30 abiertas y sigue como si nada y el consumo de ram es mucho más bajo y menos tendiente a freeze por los archivos JS, yo creo que depende más bien el contexto en como se ejecuten ciertas tareas y programas.

  42.   Marco Sarmiento dijo

    El problema es que cuando lo descargamos precompilados estamos convirtiendo cualquier distro de linux en una burda copia de windows

  43.   Fermín dijo

    Yo más que en un aumento espectacular en el rendimiento le veo la ventaja en la posibilidad de compilar los paquetes con los componentes que uno quiere: por ejemplo, si no tienes impresora puedes indicar que no se compilen los paquetes con soporte para CUPS -los paquetes que usen CUPS, obviamente, si compilas Hunspell con o sin CUPS va a dar igual- tan sólo -al menos en Gentoo- indicando en el fichero make.conf, donde se centralizan todas las opciones de la construcción de paquetes «-cups»; si usas KDE5, o Plasma 5, como le llaman ahora, puedes indicar las etiquetas «-kde», «-qt4», que eran etiquetas válidas para KDE 4 pero innecesarias en KDE 5 y aplicaciones portadas al nuevo escritorio, «-gnome», «-gtk», y así con cualquier componente que sepas que no necesitas. Si por algún motivo un programa concreto necesita, digamos GTK, pues luego puedes, en un fichero que se llama package.use, indicar que sí use GTK, por ejemplo para Pidgin con la misma etiqueta pero sin el signo menos, es decir «gtk»: «net-im/pidgin gtk».
    De esta forma se consigue un sistema varios cientos de megas más ligero y binarios más pequeños y eficientes, al no tener código innecesario. Yo he ido desde Ubuntu a Gentoo pasando por Opensuse, Kubuntu, Debian, Arch, Chakra o KaOS, y Gentoo es el sistema más rápido que he tenido, y sigo teniendo el mismo Core 2 Duo que tenía hace 7 años. Eso sí, las compilaciones las dejo para la noche, porque compilar QT5 por ejemplo supone varias horas. Si se ajusta el parámetro «niceness» para Portage en make.conf se pueden instalar paquetes o actualizar mientras se sigue trabajando con la máquina y apenas se nota mucha ralentización, aunque obviamente el tiempo de compilación aumenta; pero vamos, con ponerlo a instalar o actualizar cuando me voy a cenar, y si es necesario dejándolo trabajando durante la noche, mi viejo ordenador funciona mejor que el I3 de mi novia con Kubuntu.

    Otro aspecto cada vez más importante es que al compilar desde archivos fuente la seguridad de que el paquete que estamos instalando es el original, que no ha sido manipulado por terceros, es casi total. Creo que Debian está implementando un sistema de verificación de las compilaciones que garantizará un poco más que el precompilado que instalamos realmente proviene de la fuente original, pero nunca habrá tanta certeza cuando ese paquete ha sido compilado en nuestra máquina con nuestra configuración.
    En mi opinión, con un procesador moderno, no una carraca como el mío, jeje, y, si queremos acelerar el proceso, con 8 GB de RAM para poder montar /var/tmp -la carpeta temporal que usa Portage para la compilación- en RAM, que siempre será más rápida que un disco duro o un SSD, hoy por hoy no le veo mucho sentido a usar paquetes precompilados. Si en mi equipo Firefox tarda en compilarse unos 40 minutos, ¿cuánto puede tardar en un I5 o un I7 de los que están actualmente en el mercado, 5 minutos, menos incluso?. Hablo del firefox fuente, no del firefox-bin, que es un paquete binario ya precompilado que se puede instalar en Gentoo si se tiene una máquina muy lenta -hay varios paquetes grandes que ya se ofrecen precompilados por este motivo, no es obligatorio compilar todo-. No puedo hablar porque mi novia no me deja trastear en su ordenador, jeje, y el mío va tan bien que no siento la necesidad de renovarlo, pero si estoy en lo cierto, creo que vale la pena perder unos minutos compilando para poder tener un sistema hecho a nuestra medida. Más ajustado y adecuado a nuestra máquina no creo que se pueda conseguir nada sin entrar ya en los métodos esos de Linux desde cero, Linux from scratch, que creo que ya queda reservado para informáticos o conocedores muy avanzados de Linux.

    Saludos.

  44.   Pato dijo

    Muy bueno!
    una sola cosa no existe el «Amd Atom x2»
    ni existira es una marca comercial de intel
    saludos