# Introducción a Linux y Arquitectura del Sistema

## Historia y filosofía del código abierto (Open Source)

### Un poco de historia

En 1970, **Ken Thompson** escribe el primer sistema operativo **Unix** en una **PDP-7**, basado en **Multics** (una derivación del proyecto MAC de los Laboratorios Bell que creó el sistema operativo de tiempo compartido \[*Multiplexed Information and Computing Service*\]). Su compañero de proyecto, **Brian Kernighan**, sugiere el nombre **UNICS** (*Uniplexed Information & Computing Service*). Consiste en un **núcleo (kernel)**, un **intérprete de comandos (shell)**, un editor y un ensamblador (el ensamblador guarda los archivos como «a.out»). En 1972, otro de sus socios en el proyecto, **Dennis Ritchie**, crea el **lenguaje C** que será una parte fundamental del sistema operativo.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1759285331171/fae41be5-f79e-4582-9e76-c13b5341fb27.png align="center")

*Figura 1: Dennis Ritchie y Ken Thompson en la PDP-11 en 1972. Bell Labs.*

A partir de entonces continuaron los esfuerzos por crear sistemas operativos compatibles con el hardware emergente, chips más rápidos y capacidades cada vez mayores. Al mismo tiempo, surgían dos tendencias para el desarrollo de nuevos sistemas: por un lado, las grandes corporaciones hacían privado su código, llegando incluso a litigios como el de **AT&T** (*USL - UNIX System Laboratories, Inc.*) contra **BSD** (*Berkeley Software Design, Inc.*), ya que **BSD** contenía código **Unix** propiedad de **AT&T**; por otro lado, *la comunidad de estudiantes y entusiastas* aportaba código sin ánimo de lucro para el desarrollo y mejora del sistema operativo.

### El Nacimiento de GNU y el Software Libre

La filosofía de **código abierto** (Open Source) tiene sus raíces en el movimiento del **Software Libre**, impulsado por **Richard Stallman** en 1983, con la fundación del **Proyecto GNU**. Stallman se opuso a la tendencia de cerrar el código fuente, fundando la **Free Software Foundation (FSF)** y desarrollando la licencia **GPL** (General Public License).

El Software Libre se define por las cuatro libertades esenciales:

* **Libertad 0:** Ejecutar el programa para cualquier propósito.
    
* **Libertad 1:** Estudiar cómo funciona el programa y modificarlo.
    
* **Libertad 2:** Redistribuir copias a quien se desee.
    
* **Libertad 3:** Distribuir copias de las versiones modificadas.
    

### GNU/Linux: La unión hace la fuerza

En 1991, **Linus Torvalds** desarrolló y publicó el núcleo (kernel) de **Linux**, inspirándose en el sistema **MINIX**. Linux proporcionó el componente fundamental que faltaba para completar el sistema operativo **GNU** de Richard Stallman, creando lo que hoy conocemos como **GNU/Linux**.

Las primeras distribuciones de Linux surgieron rápidamente:

* **Slackware** se lanzó en 1993 y sigue siendo la distribución más antigua que se mantiene, destacando por su simplicidad.
    
* **Debian**, fundado por **Ian Murdock**, se distinguió por su compromiso con el software libre y su robusto sistema de gestión de paquetes (`apt`). Debian se convirtió en la base de distribuciones posteriores, incluida **Ubuntu**.
    
* **Red Hat Linux** se introdujo en 1994, enfocándose en usuarios empresariales y ofreciendo soporte comercial. Más tarde evolucionó a **Red Hat Enterprise Linux (RHEL)** y el **Proyecto Fedora**.
    
* En la década de 2000, surgieron distribuciones populares como **Ubuntu** (2004), conocido por su facilidad de uso, y **Arch Linux** (2002), que abogó por la simplicidad y un modelo de lanzamiento continuo (*rolling release*).
    

---

## Conceptos clave: Kernel, Shell y Distribuciones

### 1\. El Kernel (Núcleo)

El **Kernel** es el corazón de cualquier sistema operativo. Actúa como el **puente** o mediador principal entre el **hardware** de la computadora y el software o los procesos de usuario.

Sus funciones críticas incluyen:

* **Gestión de Procesos:** Controla el ciclo de vida de cada aplicación, asignando los ciclos de la CPU y estableciendo prioridades.
    
* **Gestión de Memoria:** Administra la memoria RAM y la memoria virtual, garantizando que cada proceso tenga el espacio necesario sin interferir con otros.
    
* **Controladores de Dispositivos (Drivers):** Permite que el sistema operativo se comunique con el hardware conectado (teclado, disco, red, etc.).
    

### 2\. El Shell (Intérprete de Comandos)

El **Shell** es la capa más externa del sistema operativo. Es la **interfaz** que permite al usuario interactuar con el Kernel, aceptando comandos legibles por humanos y traduciéndolos al lenguaje que el núcleo entiende para su ejecución.

* En Linux, el shell más popular y predeterminado es **Bash** (*Bourne Again Shell*).
    
* Se accede al shell a través de un **emulador de terminal**.
    
* Además de ejecutar comandos interactivos, el shell incluye un lenguaje de programación para crear **Scripts de Shell**, que permiten automatizar tareas repetitivas y complejas.
    

### 3\. Las Distribuciones (Distros)

Una **distribución de Linux** es el kernel de Linux empaquetado junto con el sistema GNU, software adicional (como el entorno de escritorio, aplicaciones, y un gestor de paquetes) y una configuración específica. La variedad de distribuciones (como Debian, Fedora, Ubuntu o Arch) permite que Linux se adapte a cualquier necesidad, desde servidores empresariales (RHEL, CentOS) hasta equipos de escritorio o sistemas embebidos.

---

## El proceso de arranque (BIOS/UEFI, gestores de arranque como GRUB/GRUB2)

El proceso de arranque de un sistema Linux es una secuencia meticulosa de pasos que va desde el encendido de la máquina hasta la carga completa del sistema operativo.

<table><tbody><tr><td colspan="1" rowspan="1"><p>Etapa</p></td><td colspan="1" rowspan="1"><p>Componente Principal</p></td><td colspan="1" rowspan="1"><p>Función</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>1.</strong></p></td><td colspan="1" rowspan="1"><p><strong>BIOS/UEFI</strong></p></td><td colspan="1" rowspan="1"><p>Es el firmware que se activa al encender la computadora. Realiza una verificación inicial del hardware (POST) y localiza el gestor de arranque.</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>2.</strong></p></td><td colspan="1" rowspan="1"><p><strong>Gestor de Arranque</strong></p></td><td colspan="1" rowspan="1"><p>El firmware transfiere el control al <em>bootloader</em> (<strong>GRUB</strong> o <strong>GRUB2</strong> es el más común en Linux). GRUB carga el menú que permite seleccionar el sistema operativo o un <strong>kernel</strong> específico para iniciar.</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>3.</strong></p></td><td colspan="1" rowspan="1"><p><strong>Inicialización del Kernel</strong></p></td><td colspan="1" rowspan="1"><p>El Kernel seleccionado se carga en la memoria. Comienza a inicializar sus subsistemas, a configurar los controladores de hardware esenciales y monta un sistema de archivos en memoria (<strong>initramfs</strong> o <strong>initrd</strong>).</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>4.</strong></p></td><td colspan="1" rowspan="1"><p><strong>Systemd/Init</strong></p></td><td colspan="1" rowspan="1"><p>El kernel inicia el primer proceso de usuario (PID 1), que en los sistemas modernos es <strong>systemd</strong>. Systemd es el encargado de iniciar el resto de los servicios del sistema de forma eficiente (a menudo en paralelo), llevando la máquina al estado operativo final (<strong>target</strong>).</p></td></tr></tbody></table>

---

## Niveles de ejecución (runlevels y targets de systemd)

Los **Niveles de Ejecución** (o *Runlevels*) definen el estado operativo de un sistema Linux. El sistema tradicional **SysV init** usaba números (0 al 6) para estos estados, mientras que el sistema moderno **systemd** utiliza nombres, a los que llama **Targets** (objetivos).

Systemd mantiene la compatibilidad con los runlevels de SysV, mapeando cada número a un target específico:

<table><tbody><tr><td colspan="1" rowspan="1"><p>Runlevel (SysV Init)</p></td><td colspan="1" rowspan="1"><p>Target equivalente (systemd)</p></td><td colspan="1" rowspan="1"><p>Descripción del estado</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>0</strong></p></td><td colspan="1" rowspan="1"><p><a target="_self" rel="noopener noreferrer nofollow" href="http://poweroff.target" style="pointer-events: none"><code>poweroff.target</code></a></p></td><td colspan="1" rowspan="1"><p>Apaga el sistema.</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>1</strong></p></td><td colspan="1" rowspan="1"><p><a target="_self" rel="noopener noreferrer nofollow" href="http://rescue.target" style="pointer-events: none"><code>rescue.target</code></a></p></td><td colspan="1" rowspan="1"><p>Modo de rescate o usuario único. Mínimo de servicios activos, ideal para tareas de mantenimiento.</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>2, 3, 4</strong></p></td><td colspan="1" rowspan="1"><p><a target="_self" rel="noopener noreferrer nofollow" href="http://multi-user.target" style="pointer-events: none"><code>multi-user.target</code></a></p></td><td colspan="1" rowspan="1"><p>Modo multiusuario completo con red, pero <strong>sin interfaz gráfica</strong> (solo línea de comandos).</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>5</strong></p></td><td colspan="1" rowspan="1"><p><a target="_self" rel="noopener noreferrer nofollow" href="http://graphical.target" style="pointer-events: none"><code>graphical.target</code></a></p></td><td colspan="1" rowspan="1"><p>Modo multiusuario completo con <strong>entorno gráfico</strong> (GUI) y red. Es el modo de escritorio predeterminado.</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>6</strong></p></td><td colspan="1" rowspan="1"><p><a target="_self" rel="noopener noreferrer nofollow" href="http://reboot.target" style="pointer-events: none"><code>reboot.target</code></a></p></td><td colspan="1" rowspan="1"><p>Reinicia el sistema.</p></td></tr></tbody></table>

---

## Invitación a la Comunidad 🚀

Este *post* forma parte de una serie dedicada a la arquitectura y administración de sistemas Linux. ¡Queremos construir el mejor recurso posible **con tu ayuda**!

Te invitamos a:

* **Clonar el Repositorio:** El código fuente de todos nuestros artículos está disponible en **GitHub**.
    
* **Contribuir:** Si encuentras algún error, tienes sugerencias para mejorar la claridad de los conceptos o deseas proponer correcciones técnicas, no dudes en enviar un *Pull Request* (Solicitud de extracción).
    
* **Comentar:** ¿Tienes una pregunta o un punto de vista diferente sobre algún concepto? Abre un *Issue* (Incidencia) en el repositorio para iniciar la discusión.
    

Tu colaboración es vital para mantener este contenido preciso y actualizado.

**¡Encuentra el repositorio y participa aquí:** [github.com/rootzilopochtli/introduccion-a-linux](https://github.com/rootzilopochtli/introduccion-a-linux)

---
