Categoría > Desarrollo

Los backports y sus riesgos

 
Hunting Bears

Un backport es un paquete (o un conjunto de paquetes) que pertenecen a un estado superior de desarrollo. La idea general con los backports es incluir software más nuevo en una distribución estable, que por sus características tiende a quedarse con software viejo.

Es de esperarse entonces, que un software diseñado para un ambiente de interacciones con otros programas, no funcione de igual forma en un ambiente diferente (a menos que su interacción con los demás no dependa en gran medida del ambiente).

Esta premisa varía mucho dependiendo de la naturaleza del paquete y sus dependencias. Determinar cuan riesgoso es backportear un paquete se convierte entonces en una tarea de análisis minucioso.

Por otra parte, backportear un paquete que necesite funciones que no están presentes en el sistema, puede traer consecuencias tan sutiles como un “flickering” en un borde de ventana, o tan catastróficas como un “kernel panic”, sino se toman las previsiones necesarias, ni se hacen las pruebas correspondientes.

Existen algunas consideraciones que deben hacerse.

  • Si el paquete del estado superior tiene dependencias con librerías trascendentales que se encuentren en versiones superiores, – como por ejemplo python, perl, c++, entre otros -, entonces ese paquete debe ser modificado (y empaquetado) para que funcione con las librerías que se encuentran en versiones inferiores en el estado donde se quiere incluir el software.

ó

  • Incluir también las dependencias junto con el paquete del estado superior.

Un caso de backporting en debian es, por ejemplo, incluir el navegador web Iceweasel 7.0 (actualmente en Inestable) e incluirlo en un sistema estable. Para este ejemplo en particular, estamos manejando un software modular (al igual que muchas otras aplicaciones), es decir, no depende de librerías que cambien mucho entre estados, y las dependencias que necesita vienen con él, es decir, se puede “enchufar y desenchufar” sin muchos detalles de los cuales estar pendiente.

Por otro lado, actualmente gnome necesita GTK2 para la distribución Estable, y GTK3 en la distribución Inestable. En este caso, backportearlo a estable implica incluir GTK3 (con todas las posibles consecuencias) o modificar gnome para que funcione con GTK2 (implica deshabilitar alguna de sus funcionalidades nuevas, además de ser un trabajo titánico). Lo mismo ocurre con muchos otros paquetes que están ligados a librerías trascendentales, como por ejemplo: el kernel, apt, aplicaciones basadas en python o perl, entre otros.

A manera de referencia, en Canaima 3.0 se incluyeron programas de estados superiores que tenían un comportamiento modular y por tanto, mínimo riesgo de conflictos, específicamente:

  • Libreoffice
  • Cunaguaro
  • Guácharo
  • BURG

Backportear un kernel

Backportear un kernel implica muchos otros aspectos a los ya mencionados:

  • El kernel depende de muchas librerías fundamentales como perl, c++, y las reglas udev que deben estar presentes para que funcione. Perl, por ejemplo es una librería que usualmente varía entre los estados de desarrollo.
  • El kernel, aunque no es una librería de por si, muchos programas están diseñados para trabajar con versiones específicas de el. Por ejemplo, los módulos de kernel, los drivers de video, algunos drivers de sonido, están empaquetados para versiones específicas de kernel. Cambiar el kernel significa que esos drivers dejarán de funcionar, a menos que también se incluyan los paquetes de esos drivers específicos para el nuevo kernel.
  • El kernel es una de las partes más sensibles de una distribución. Utilizar un kernel que no haya pasado por todos los estados de desarrollo puede significar que no esté lo suficientemente probado. Un pequeño error desapercibido en el kernel puede generar errores catastróficos en la experiencia de usuario (p. ej. kernel panic).
  • No siempre es cierto que para soportar nuevos dispositivos es necesario incluir un nuevo kernel. Existen módulos de kernel genéricos que están ajustados a un patrón de diseño de dispositivos y no a un modelo en particular, permitiendo que el mismo sirva para una serie de dispositivos existentes (y por existir).

La recomendación final es, si piensas utilizar backports en tu distribución estable, ten mucho cuidado con lo que haces, podrías generar una inestabilidad incluso mayor a la existente en la distribución inestable.

¿Cómo ser mejor Programador?

¿Alguna vez te haz preguntado que tan buen programador eres?

¿Quieres ser mejor programador?

Este excelente artículo de Aníbal Rojas te enseña como.

Creando un metapaquete ‘a la canaima’ con Canaima Desarrollador

 
Hunting Bears

Como usuario de alguna distribución GNU/Linux, seguramente has oído/leído acerca de los metapaquetes, esos paquetes que no pesan mucho pero que instalan un montón de cosas. Si bien el concepto detrás de un metapaquete es bastante sencillo, son piezas clave en la construcción organizada y engranaje de subsistemas dentro de una distribución GNU/Linux.

Por ejemplo, imagínate por un instante que queremos incorporar una nueva línea de ensamblaje de computadores a nuestra fábrica “Bien Barato Electrónica“. Si pudieras de alguna forma comprar la línea completa a través de un nombre o marca, en vez de comprar los tornillos, las tuercas, las cintas rodantes, los rodillos, los tubos, los brazos robóticos, los cables, etc. y armarla tu mismo, entonces eso sería instalar un metapaquete dentro de tu distribución “Bien Barato Electrónica“.

En definitiva, un metapaquete es un paquete que sirve para instalar otro conjunto de paquetes a través de sus dependencias. Generalmente está casi vacío (es decir, no se copian archivos al sistema cuando se instala); sin embargo, si está bien construido, siempre se incluye una pequeña documentación (changelog, copyright, entre otros).

Continuar Leyendo »

Los cuatro tipos de programador

 

Si alguien te pide que le recomiendes un buen programador, ¿quién te viene a la mente? ¿Te consideras un buen programador? ¿Qué criterios utilizas para juzgar lo “bueno”?

Al pensar en esto, me di cuenta de que hay diferentes maneras en que un programador puede ser bueno. Así que te presento a Los cuatro tipos de programador.

El Filósofo

El filósofo le encanta escribir código bonito, bien definido y bien estructurado. No gasta tiempo decidiendo cuanto tiempo invertirá: la elegancia, robustez y flexibilidad de la solución es en lo que se gasta la energía del filósofo. El filósofo no puede vivir una semana sin mencionar las “mejores prácticas”.

Motivación
El filósofo es en última instancia, impulsado por una necesidad de seguridad que se expresa a través de un estricto control. Un sistema predecible, bien ordenado, que siempre sigue unos principios claros lo como un filósofo se imagina el cielo. El caos es un infierno. La belleza se encuentra en orden.

Superpoderes

  • Puede crear código en el que podrías apostar tu vida.
  • Puede crear un ambiente donde el código base se mantiene en forma inalterable, independientemente de las habilidades de los otros miembros del equipo.
  • Todo lo que construye es escalable.

El lado oscuro

  • Siempre tiene la razón.
  • Se mete en discusiones mezquinas sobre los límites de la línea de 80 columnas.
  • Se preocupa más por la cobertura de la prueba que los problemas de los clientes.
  • La aplicación nunca está terminada.

El Inventor

Algo nuevo e interesante siempre está saliendo del laboratorio del inventor. Nadie lo pidió, pero eso no impidió que el inventor lo hiciera.

Motivación
El inventor es impulsado por la necesidad de explorar y dar a luz algo totalmente nuevo y único en el mundo. La curiosidad lo obliga a solventar los “¿y que pasaría si…?”.

Superpoderes

  • Crea nueva tecnología que (a veces) se corresponde con las necesidades.
  • Tiene un entusiasmo contagioso.
  • Te hace decir: “¡Vaya, nunca pensé en usarlo de esa manera!”

El lado oscuro

  • Una incesante necesidad por rehacer lo que que no lleve su nombre.

El Conquistador

Ningún problema es demasiado difícil para el conquistador. Para ellos, la programación es una odisea de retos cada vez más difíciles de superar. El conquistador es dinámico y competitivo, pero no necesariamente competitivo con otras personas.

Motivación
Mientras más difícil el rompecabezas, más grande la prisa.

Superpoderes

  • Puede resolver problemas sin solución demostrable.
  • Enfoque más preciso que un láser, más resistencia que un corredor de maratón
  • Es una enciclopedia andante de los algoritmos.

El lado oscuro

  • Complica los problemas fáciles para que sean más agradables de resolver.
  • Siempre está aburrido.

El Solucionador de Problemas

El solucionador de problemas es violentamente pragmático y orientado a objetivos. Un problema bien definido lo resolverá, y debe hacerse rápidamente por todos los medios necesarios.

Motivación
El solucionador de problemas está motivado por la creación de valor, por lo que se centra menos en el proceso creativo y más en ofrecer el resultado deseado.

Superpoderes

  • Escucha.
  • Hace lanzamientos.
  • Utiliza la tecnología para resolver problemas de negocios en lugar de crear problemas de negocio.

El lado oscuro

  • Enoja a los programadores puristas.
  • Puede ser oportunista.

Convertirse en un buen programador

Por supuesto, no todos los programadores encajan detro de estas cuatro categorías arbitrarias. El punto es que hay diferentes maneras de ser un buen programador, y como programador, tomate el tiempo para cultivar estos cuatro tipos de programadores dentro de tí mismo. Serás un buen programador cuando, sin importar la situación, seas capaz de invocar al tipo de programador adecuado.

Parafraseado desde “Are You a Good Programmer?

¿Canaima basado en Debian Wheezy? ¡Por aquí!

 
Hunting Bears

Advertencia: Lo siguiente es un procedimiento experimental netamente personal que no está directamente vinculado a comunidad o institución alguna en la que participe. Si bien al culminar el procedimiento tendrás un Canaima GNU/Linux basado en la rama testing de Debian, no garantizo que las sucesivas actualizaciones dejen todo tal cual como está, es posible que algunas cosas “se rompan” con el tiempo.

Bien, advertidos todos, a continuación les mostraré un procedimiento que te permitirá utilizar un Canaima GNU/Linux basado en la rama testing de Debian (actualmente Wheezy), la cual es la base a través de la cual se desarrollará Canaima 4.0.

Las versiones mayores de Canaima (2.0, 3.0, 4.0, …) vienen sincronizadas con las versiones mayores de la distribución padre de Canaima (Debian). Por ejemplo, Canaima 3.0 está basada en Debian 6.0 (codename squeeze), entonces, Canaima 4.0 estará basada en Debian 7.0 (codename wheezy).

Aunque en el ciclo de desarrollo actual, la próxima versión de Canaima es la 3.1, – con muchas mejoras que iremos viendo conforme se avanza el desarrollo -, nada nos impide experimentar un poco con el próximo ciclo de desarrollo.
Continuar Leyendo »