# GoboLinux

GoboLinux es una distribución GNU/Linux que posee una característica destacable en su reorganización de la jerarquía del sistema de ficheros. En GoboLinux, cada programa tiene su propio árbol de subdirectorios, donde se encuentran todos sus ficheros.
La jerarquía de GoboLinux es radicalmente diferente comparada con la jerarquía de sistema de archivos tradicionalmente empleada por la mayor parte de las distribuciones Linux y clones-(UNIX), donde los tipos específicos de archivos son almacenados juntos en comunes subdirectorios estándar (como p.ej. bin y man), y los gestores de paquetes son usados para mantener una pista hacia el archivo que pertenece a algún programa.

## Revisión

En GoboLinux, los archivos de programas diferentes son separados en diferentes subdirectorios. Mientras en los archivos tipo GoboLinux también son separados en subdirectorios, aunque éstos son alineados dentro de los subdirectorios de sus programas.
Los fabricantes de GoboLinux dicen que "el sistema de archivos es el gestor de paquetes", y el Sistema de gestión de paquetes de GoboLinux se usa a sí mismo como una base de datos de paquetes. Esto produce un más sencillo y menos desordenado árbol de directorios. GoboLinux usa symlinks y un (opcional y cosmético) núcleo llamado "GoboHide" para alcanzar todo esto manteniendo una alta compatibilidad con la jerarquía de sistema de archivos tradicional Linux.
La jerarquía de Gobolinux tiene beneficios adicionales, por ejemplo, este remueve algunas distinciones entre los tradicionales directorios (como las ubicaciones de los ejecutables /bin, /usr/bin, y /usr/local/bin). Los diseñadores de GoboLinux afirman que esto causa que los scripts o guiones de shell se decifren en códigos, a menudo, con menos frecuencia que en otras distribuciones Linux.
GoboLinux también permite al usuario tener instaladas diferentes versiones de un mismo programa de forma simultánea (y aún controlarlos simultáneamente). Además, el índice de gestión de paquetes nunca puede salir de la sincronización, como referencias para archivos no existentes, los que simplemente son enlaces rotos, y así inactivos. Los cambios del sistema de archivos de GoboLinux también han permitido otras innovaciones, como un nuevo sistema de autoarranque que no usa los utilizados en System V o BSD como estilos de sistemas init.

## La jerarquía del sistema de archivos de GoboLinux

El diseño de GoboLinux está influenciado por los primeros sistemas como NEXTSTEP, AtheOS y BeOS, los cuales adoptaron estructuras originales de sistemas de archivos, mientras aún mantenían un considerable grado de compatbilidad con Unix. En la raíz / (root en inglés) del árbol, hay seis directorios principales:
* Programas (Programs)
* Usuarios (Users)
* Sistema (System)
* Archivos (Files)
* Montaje (Mount)
* Depósito (Depot)

### Descripción de cada directorio

| Directorio | Descripción |
| / | Jerarquía principal, directorio raíz (root en inglés) de la jerarquía del sistema de archivos. |
| /Programs/ (Programas) | Este directorio contiene un directorio por cada programa instalado en el computador. Cada directorio del programa, a su vez, contiene uno o varios directorios de versiones, y opcionalmente, subdirectorios de "Configuraciones" y "Variables". Ejemplos de este directorio, subdirectorios y programas son: /Programs/Bash/3.0/bin/bash y /Programs/Xorg-Server/Settings/X11/xorg.conf. |
| /Users/ (Usuarios) | Este directorio contiene los directorios "home" de los usuarios. De esta manera una identidad de usuario (userid) llamada "usuario" podría tener un directorio home: /Users/usuario. |
| /System/ (Sistema) | Contiene archivos de sistema ensenciales. La mayoría son administrados por aplicaciones de sistema (por ejemplo: /System/Settings/passwd) y scripts de GoboLinux (por ejemplo, /System/Links). |
| /Links/ (Enlaces) | Contiene directorios de "enlaces" que índican los archivos que relacionados con /Programs |
| /Environment/ (Entorno) | Enlaces a archivos de entorno. Estos son compilados en un archivo Cache y cargandos por el shell, permitiendo que los programas registren sus propias variables de entornos. |
| /Executables/ (Ejecutables) | Contiene enlaces a archivos proveniende de los directorios de programas /bin y /sbin |
| /Headers/ (Encabezados) | Este directorio contiene enlaces a archivos desde los programas, incluye directorios. |
| /Libraries/ (Librerías) | Enlaces a archivos desde los programas de directorios /lib. |
| /Manuals/ (Manuales) | Contenidos de manuales e información de directorios. |
| /Shared/ (Compadtidos) | Enlaces a archivos desde los programas de directorios compartidos. |
| /Tasks/ (Tareas) | Enlaces a los programas, tareas de arranque de sus directorios de Resources/Tasks (Recursos/Tareas). |
| /Settings/ (Configuraciones) | Configuración de archivos y enlaces a los archivos de los programas, directorios "Settings" (de Configuraciones). |
| /BootScripts/ (Scripts de Arranque) | Scripts usados durante el sistema de arranque (Booteo). Este es un enlace simbólico a /Settings/BootScrips/ bajo /Programs/BootScripts. |
| /Variable/ (Variable) | Registro multi-propósito, temporario-transitorio de archivos. |
| /tmp/ | Archivos temporales. |
| /Kernel/ (Núcleo linux) | Directorios relacionados con el núcleo (Núcleo linux). |
| /Boot/ (Arranque) | Programas y configuración de archivos usados durante el proceso de Bootstrapping del sistema operativo. Este es donde la imagen del núcleo (núcleo Linux) y los archivos de configuración del cargador de arranque (bootloader) están localizados. |
| /Devices/ (Dispositivos) | Archivos de dispositivos (administrados por Udev). |
| /Modules/ (Módulos) | Contiene varios móduloes del núcleo, organizados por lanzamiento del núcleo. |
| /Objects/ (Objetos) | Provee una visión del árbol de dispositivos del núcleo (introducido con el sistemas de archivos sysfs en la serie del kernel 2.6) |
| /Status/ (Estado) | Archivos de estado del núcleo (administrados por el sistema de archivos proc). |
| /Files/ (Archivos) | Archivos mantiene datos estructurados que son utilizados por programas, pero que no son parte de los programas mismos. Aquellos archivos son usualmente entidades, por lo general, independientes, tales como: fuentes de texto (fonts), codecs y plugins (y como tal, no requieren administrador de paquetes). Además, las aplicaciones pueden definir subdirectorios propios para almacenar sitios de datos específicos — Compile, la herramienta frontend de compilación de paquetes de GoboLinux, lo usa. |
| /Mount/ (Montaje) | Un punto de montaje para sistema de archivos adicionales locales o remotos. Directorios comunes son CD-ROM, disquete y Zip |
| /Depot/ (Depósito) | Repositorio para los archivos de los usuarios. Este repositorio es Este depósito se propone para ser organizado como el usuario lo estime conveniente. Ningún subdirectorio de /Depot (Depósito) es considerados parte del estándar Gde jearquía GoboLinux |

## Compile (sistema de compilación de GoboLinux)

Compile, el sistema de compilación en GoboLinux, introducido en la versión 0.11, descarga, desempaqueta, compila e instala desde tarballs con un único comando ("Compile foo"), utilizando scripts de compilación simple, conocidos como "recipes" (del inglés recetas).
Los parámetros de comparación han sido establecidos entre el compilador de GoboLinux y el sistema Portage de Gentoo (el cual está, a su vez, basado en la colección Ports de FreeBSD), el cual lleva a cabo sus renombradas acciones con scripts conocidos como "ebuilds". Sin embargo, a diferencia del Portage (que está hecho para una jerarquía de sistema de archivos tradicional, compatible con FHS), Compile amplía la capacidad de la jerarquía de sistema de archivos distintiva de GoboLinux en el área de la administración de paquetes. Así, en GoboLinux, el sistema de archivos es el Sistema de gestión de paquetes. Para ver sus características, se puede leer el artículo: "Las Ideas Detrás de Compile".
Antes de que se realizara Compile, en los foros oficiales de Gentoo se discutió sobre la posibilidad de que terceros porten el sistema Portage de Gentoo que luego se desarrolló como un proyecto de Sourceforge, bajo el nombre de GoboPortage.
* Usa los propios sitios de descargada de los proyectos: El repositorio de la distribución (o uno de sus espejos) sólo es usado para descargar recetas. Las recetas pueden ser descargadas sobre la marcha o en lotes.
* Usa scripts de compilación minimalistas en su orientación y declaración: El típico software "configure; make; make install"; se puede escribir en dos líneas, aliviando enormemente el mantenimiento.
* Soporta dependencias estilo GoboLinux : El software compilado "a mano" por el usuario es tenido en cuenta por el mecanismo de detección.
* No interesa el path (ruta) de diseño: También funciona en una instalación Rootless (desarraigada) de GoboLinux, esto es, dentro un directorio $HOME de cualquier otra distribución.

## Diferencias entre GoboLinux y las distribuciones tradicionales
### Sistema de ficheros

En la jerarquía de GoboLinux, los archivos son agrupados por su categoría funcional, en una estructura de índice, usando enlaces simbólicos, enrutados a /System/Link: Todos los ejecutables son accesibles bajo /System/Links/Executables, todas las librerías son accesibles bajo /System/Links/Libraries, etc.
Esto elimina las distinciones tradicionales en el Estándar de Jerarquía de Sistema de Ficheros, tal como la distinción hecha entre archivos almacenados no esenciales en /usr y los esenciales, archivos de emergencia almacenados directamente en subdirectorios del directorio raíz (/).
Los desarrolladores mantienen eso, aunque estas distinciones fueron una vez muy prácticas, ellas no son necesarias en nuestro ambiente radicalmente diferente moderno.

### Enlaces simbólicos

Hay enlaces simbólicos que relacionan los directorios más usados en Unix hacia el árbol de GoboLinux. Por tanto, uno puede encontrar directorios tales como /etc, /var/log y /usr/bin en lugares determinados. Estos puntos de enlaces simbólicos para funcionalidades equivalentes bajo /System/Links, así que nombres y rutas cruciales tales como /bin/sh y /etc/passwd están resueltos corectamente. Estos directorios de compatibilidad están ocultos de la vista usando una modificación del núcleo llamada Gobohide, esta modificación, la cual implementa soporte para archivos escondidos en Linux, es usada solo por razones estéticas y es opcional

### Sistema de arranque

A diferencia de la mayoría de las distribuciones Linux, GoboLinux no usa un proceso de iniciación (init), estilo BSD o System V, utilizando en cambio un procedimiento específico de GoboLinux. En /System/Settings/BootScripts hay unos pocos archivos que comandas el proceso de arranque: El BootUp y el Shutdown corren el sistema de arranque y el de apagado, respectivamente; adicionalmente, es posible definir un script de nivel de ejecución (runlevel) para especificar diferentes vías para que el sistema pueda inicializar (por ejemplo, Single para una sesión de usuario único, Multi para una sesión multiusuario, Graphical para un arranque en modo gráfico, etc) y controlar lo que provenga de la carga del menú de arranque. El archivo /System/Settings/BootOptions separa las configuraciones específicas del sitio del resto de scripts. Tareas de aplicaciones específicas pueden ser encontradas en /System/Links/Tasks y llamadas por los scripts de arranque.

## Versiones

Las versiones son numeradas usando el sistema de numeración octal. La razón para esta numeración es dada, según sus autores, por tres motivos: mantiene el típico cero presente en muchos números de versión de softwares libres (ya que un cero inicial es el indicador de números octales en el lenguaje de programación C); no tiene puntos, y por lo tanto no hay "versiones menores"; y es un chiste sobre lo fenómeno de "saltos de versiones", puesto que, cuando son leídos como números decimales, los números octales causan un salto determinista cada ocho versiones.
* 016 - 15 de diciembre de 2016: introducido Runner, una herramienta de virtualización del sistema de ficheros. Primera versión para x86-64.
* 015 - 7 de mayo de 2014: introducido la jerarquía /System/Index
* 014 - 4 de abril de 2008: nueva versión estable, conteniendo actualizaciones de paquetes, reparos de bugs y nuevas versiones de las herramientas de gerencia de GoboLinux.
* 013 - 2 de noviembre de 2006: introducido Listener, una herramienta para escuchar eventos del sistema de ficheros e atribuir a ellos acciones a ser ejecutadas automáticamente
* 012 - 6 de junio de 2005: introducido Manager, una herramienta gráfica para la administración del sistema.
* 011 - 7 de junio de 2004: introducido Compile, la herramienta de compilación de paquetes de GoboLinux.
* 010 - 7 de enero de 2004: añadido un instalador gráfico accesible desde el entorno de escritorio del LiveCD.
* 007 - 22 de octubre de 2003: añadido Resources, un directorio de metadatos por paquete.
* 006 - 9 de mayo de 2003: introducido GoboHide, adoptada instalación de programas con una sandbox.
* 005 - 2003: primero versión pública lanzada en línea.
* Versiones anteriores a la 005 fueron usadas solamente por el grupo de desarrolladores inicial.

## Portabilidad

A marzo de 2006, GoboLinux sólo está disponible oficialmente para la arquitectura i686 y la traducción a la arquitectura i386 es específica del dominio (así, incompleta). No obstante, en 2003, Hisham Muhammad, el principal desarrollador del proyecto GoboLinux, escribió una «Guía de Portabilidad Rápida y Sucia» ("Quick-and-Dirty Porting Guide") para aquellos quienes quisieran portar la distribución a la plataforma PowerPC (entre otras arquitecturas). También trabaja para portarla él mismo. Se portó también a arquitecturas embebidas, tales como ARM y SuperH, lo que se logró fácilmente luego del lanzamiento de Bootstrap, una herramienta desarrollada específicamente para automatizar el proceso de portar la distribución.

## Notas y referencias

* ↑ Ver sección "Getting compile"
* ↑ GoboLinux Compile -- A Scalable Portage? - Slashdot, (en inglés)
* ↑ The Ideas Behind Compile Archivado el 13 de junio de 2010 en Wayback Machine. (en inglés)
* ↑ Lo dicho en los foros de Gentoo
* ↑ GoboPortage en Sourceforce.net
* ↑ Rootless GoboLinux
* ↑ Guía de Portabilidad Rápida y Sucia (Quick-and-Dirty Porting Guide) Archivado el 21 de octubre de 2016 en Wayback Machine. (en inglés)
* ↑ «GoboLinux PPC». Archivado desde el original el 9 de enero de 2008. Consultado el 5 de noviembre de 2008.
* ↑ «GoboLinux Embedded». Archivado desde el original el 18 de julio de 2019. Consultado el 7 de julio de 2024.