Desarrollando un Sistema operativo GNU/Linux

Dentro de mi experiencia como especialista y arquitecto en soluciones de seguridad, centro de datos con base tecnológica en Software libre y GNU/Linux, he conocido diversas distribuciones con muy variadas ideologías y esquemas de negocio. He recorrido desde RedHat desde los años 90s, pasando por Fedora, Mandrake, Mandriva, Debian, Suse, Slackware, Puppy. He observado maravillosas funcionalidades, ventajas, así como el aprendizaje que un sistema basado en GNU, cobijado por las cuatro libertades del software libre tiene. La simple idea de tener disponible miles de proyectos basados en Software Libre de los cuales he aprendido lo inimaginable me motivo a pensar en la idea de crear una distribución con sabor propio.
Desde que instalé mi primer sistema GNU en una computadora he observado que de forma predeterminada mucho software es instalado sin consentimiento del usuario, lo cual pienso que es muy útil, ejecutando un simple comando “top” se puede observar gran número de procesos que se están ejecutando, pero ¿Por qué, qué hacen, se necesitan realmente? Y de aquí se derivan algunas preguntas más. ¿Cómo está construido el sistema?, ¿con qué soportes se incorpora?, ¿Por qué no puedo tener un sistema que yo mismo construya desde sus herramientas más indispensables?
Aunado a lo anterior ha existido siempre la posibilidad de crear una distribucion “tropicalizada”, es decir basándose en una distribución ya hecha, modificar los componentes adecuándolos y dándoles un toque personal. Lo anterior es un debate fuerte, ya que desde un principio supe que el desarrollar una distribución desde cero, involucra un fuerte trabajo posterior debido al mantenimiento que se debe dar a todos los paquetes que integran el sistema.
Buscando dentro de internet existe un proyecto llamado Linux From Scratch el cual consiste en una serie de documentos en formato html o pdf. Contiene una metodología para desarrollar un sistema gnu/linux desde cero. El resultado de esto es un sistema muy personalizado a la computadora donde se desarrolló, sin embargo, cuando se intenta instalar este sistema en otros equipos (laptops, pcs, servidores), se pueden descubrir multitud de problemas que nunca se pensaron encontrar derivado de las siguientes razones:

• LFS no proporciona desde un principio un mecanismo de administración de paquetes (rpm, deb, tgz, etc), esto provoca que el mantenimiento del software resulte sumamente complicado de gestionar.
• La compilación de los paquetes base del sistema sólo incluyen la incorporación de los soportes mas esenciales del sistema, por lo que posteriormente es probable que se requiera recompilar algún software.
• Se sugiere en LFS el mecanismo de “kernel huge”, esto hace que la imagen del núcleo contenga todos los soportes que son requeridos para bootear un sistema, lo anterior resulta práctico para que el sistema “bootee” rápidamente, pero para distribuir el sistema en otras com- putadoras no es lo más recomendable.
• Se sugiere un ambiente para construir el sistema, pero dicho modelo puede ser mejorado para asegurar el éxito de la construcción.

Estas son algunas razones de las más poderosas que me orillaron a diseñar una metodología que permita construir un sistema basado en GNU/Linux distribuible , término que obedece a la idea de que forme parte de los Sistemas GNU, que pueda ser instalado en una gran variedad de Sistemas y también con amplia variedad de Hardware. El resultado de este proceso además de tener un sistema distribuible hecho desde cero, es tener un sistema igual de confiable que otras distribuciones e incluso con mayor rendimiento en tiempos de respuesta.
Retomando parte del método de LFS, el sistema GNU se desarrollará en las siguientes fases, donde se está agregando y modificando la metodología original de LFS con la experiencia propia para lograr que el sistema sea distribuible:

1. Implementar el ambiente de desarrollo, donde se prepara un sistema ideal para parchar, adecuar y compilar diversos paquetes de software libre. Este incluye un Sistema anfitrión, o un ambiente virtualizado con un kit de software para desarrollo, una partición, la obtención de Software y la adecuación de las variables del sistema.
2. Preparación de las herramientas indispensables para construcción, lo cual involucra: la biblioteca de Desarrollo GlibC, el compilador GCC, las herramientas GNU bintutils y la incorporación de los headers del kernel.
3. La construcción de un árbol de dependencias, el cual resultará muy útil para la siguiente etapa y para el usuario final.
4. La incorporación de un sistema de administración de paquetes, la cual es sumamente importante. Este paso resulta complejo e involucra trabajo extra que al final del desarrollo genera documentación y un repositorio de software.
5. Se procederá posteriormente a la preparación (parches/adecuaciones), configuración, compilación, creación de paquetes y su instalación correspondiente, esto genera al final un sistema base con las herramientas de espacio de usuario más indispensables.
6. Instalación de los Scripts de Arranque. En este punto se decidirá el tipo de sistema: System V o BSD. Dichos scripts son necesarios para el arranque del sistema.
7. Hacer el sistema booteable, en esta etapa se incorpora el esquema para agregar el mecanismo “Disco en RAM” así como la configuración correcta del kernel, esto es importante porque asegura que el sistema pueda ser instalado en una mayor cantidad de computadoras sin necesidad de hacer adecuaciones sumamente complejas a los componentes del sistema.
8. Se implementa un programa hecho en Script Bash y un conjunto de Scripts del mismo lenguaje, para que el sistema pueda recuperarse creando un LiveCD y un sistema “Setup” para instalar la distribución GNU/Linux en otras computadoras.

Las metodologías de desarrollo que han utilizado los desarrolladores de sistemas operativos no ha sido publicado en su mayoría. Infotec como participe activo en la Sociedad del Conocimiento ha proporcionado los medios necesarios para que se desarrolle por mi parte esta metodología con el apoyo de otros ingenieros Mexicanos muy talentosos. El resultado es crear sistemas basados en GNU/Linux con funcionalidades equivalentes a otros sistemas y de excelente calidad.
Considero que esta metodología debe ser tomada en cuenta como parte de la formación de los profesionales en TI, ya que es una carencia que existe dentro de algunas instituciones de educación superior y esto reforzara fuertemente la preparación académica. Esta metodología genera un conocimiento impresionante dentro del lector al conocer la forma en la cual un sistema se integra, las funciones de cada uno de sus componentes, las etapas por las cuales una simple llamada del sistema es procesada, y un amplio campo de áreas de oportunidad para otros proyectos de Software Libre.
El sistema que se genera con esta metodología es básico, se describe como “Un sistema base, con las herramientas de espacio de usuario básicas, y con las herramientas más importantes para el desarrollador”, en este momento se puede considerar al sistema obtenido como una metadistribución porque es una plataforma base, que posteriormente puede ser utilizada como un sistema para usuario final (con ambiente gráfico), un sistema de servidor u otro tipo de sistema.
Lo que sugiero a partir de este momento es continuar con el desarrollo o construcción de aplicativos de Software Libre, pequeños, de los cuales existe documentación muy desarrollada, sin olvidar la gestión de paquetes con el método seleccionado.

Ing. Jesús Arriola Villarreal Coordinador de la Unidad de Desarrollo de Software Libre de INFOTEC. Licenciado en Sistemas de Computación Administrativa por la UVM titulado con el trabajo “Desarrollo Integral Bajo Estándares de Calidad”. Cuenta con Certificación en Foundations ITIL. Desde 2003 colabora en el equipo de Desarrollo y Generación de Modelos Tecnológicos elaborando Servicios alrededor de los mismos.
jesus.arriola@infotec.com.mx
jesus.arriola@beakos.org.mx