La historia de Linux está muy ligada a UNIX, por tanto vamos a empezar viendo un poco de la historia de este último.
Historia de Unix
A mediados de los de la decada de los 60' varias grandes empresas norteamericanas se juntaron para tratar de hacer un sistema operativo de gran potencia al que denominaron MULTICS. El proyecto fue un fracaso pero uno de los programadores del MIT que había trabajado en el proyecto, Ken Thompson, y un grupo de colaboradores decidieron escribir una versión miniatura de MULTICS. Unos de los compañeros de Ken, Brian Kernigham, en una reunión de equipo, bromeando llamó al sistema de Ken Thompson UNICS.
UNICS fue un gran éxito y Ken decidió que UNIX era un nombre más atractivo que UNICS. Había nacido UNIX.
Un famoso articulo del año 1974 que describía UNIX atrajo la atención de las universidades que solicitaron el código fuente para estudiarlo y explicarlo en las aulas. Muy pronto, UNIX logró una gran aceptación en la comunidad científica y el interés por este sistema operativo comenzó a extenderse. A partir de este momento comienza una verdadera avalancha de versiones del sistema, lo que en un principio empezó como un proyecto de investigación se convirtió más tarde en un gran negocio.
Las más importantes de todas las versiones de UNIX fueron la BSD (Berkeley Software Distribution), de la Universidad de California en Berkeley, que contenía una serie de mejoras que hicieron a UNIX un sistema operativo más amigable, y la System V. Actualmente el System V es considerado el estándar de UNIX, ya que toda la industria se ha agrupado entorno a él.
La aparición de Minix
A pesar del éxito comercial de UNIX y de su aceptación como sistema operativo, el código fuente de UNIX no podía ser explicado en aulas universitarias, de modo que el desarrollo de sistemas operativos volvía a ser una ciencia restringida a un reducido grupo de empresas y personas.
Ante esta situación, el conocido profesor Andrew Tanenbaum decidió imitar a Ken Thompson cuando escribió el código de UNIX basándose en MULTICS, e inspirándose en UNIX llevó a cabo un nuevo sistema operativo mucho más reducido, al que llamó MINIX (de Mini-UNIX). MINIX había sido desarrollado en una IBM PC y ofrecía las mismas llamadas al sistema que UNIX V7. Tanenbaum hizo público el código de MINIX, y su texto aún se usa en la mayoría de las universidades del planeta para enseñar las bases del diseño de sistemas operativos.
Linus Torvalds empieza a desarrollar Linux
A principios de los 90 Linus Torvalds, un estudiante universitario, decidió crear su propia versión de Unix, que superara las limitaciones del sistema minix. Este sistema lo llamó Linux (Contracción de Linus y Unix). Pocos meses después publicó su primera versión, numerada como versión 0.01. Esta versión solamente contenía un kernel (núcleo del sistema operativo) muy rudimentario. El 5 de Octubre de 1991 fue creada y públicada la versión 0.02 cuando Torvalds logró ejecutar programas como el Bash y el Gcc (básicos para un sistema unix). Por aquel entonces decidió difundirlo pública y gratuitamente (bajo la licencia GNU, de la que hablaremos mas adelante) e invitó a todo aquel que pudiera a aportar ideas nuevas y a mejorar el código via Internet. Gracias a estos aportes Linux comenzó a evolucionar rápidamente.
A partir de ese momento, y a pesar de que Linus sigue teniendo la última palabra sobre el contenido del kernel o núcleo del sistema operativo, el proyecto se a ido abriendo a la comunidad con la participación de programadores de todo el mundo, que reproduciendo a una escala mucho mayor el esquema seguido por gran parte de las aplicaciones GNU.
Con el paso del tiempo se han ido sucediendo las versiones, y Linux ha ido tomando cuerpo como una muy seria alternativa a los demas sistemas operativos, tanto Unix tradicionales como Windows. Así, los sistemas Linux actualmente representan una gran amenaza competitiva para los desarrolladores de sistemas operativos propietarios. Microsoft ha comenzado a advertir la creciente popularidad de Linux y el riesgo que esto representa para su dominio del mercado. Linux se encuentra actualmente en el segundo lugar de las mayores amenazas para Microsoft, según lo anunció la empresa, siendo las condiciones económicas su amenaza número uno.
Linux en la actualidad
La creciente popularidad de Linux se debe -entre otras razones- a su extraordinaria estabilidad, al acceso libre al código fuente (lo que permite personalizar el funcionamiento) y a la abundancia de documentación relativa a los procedimientos. Dia a dia, más y más programas están disponibles para este sistema, y la calidad de los mismos aumenta de versión a versión. La gran mayoria de los mismos vienen acompañados del código fuente y se distribuyen gratuitamente bajo terminos similares a los del núcleo.
Hoy en dia Linux es distribuido a través de múltiples ``distribuciones". Existen numerosas distribuciones de Linux (también conocidas como "distros"), ensambladas por empresas (caso de SuSE, RedHat), como fundaciones (caso de Debian o Gentoo) e incluso administraciones públicas (caso de Linex y Guadalinex en España). Cada distribución suele incluir software adicional, incluyendo software que facilita la instalación del sistema.
La base del sistema de cada distribución es muy parecida, incluyendo varios paquetes básicos del proyecto GNU, incluyendo un intérprete de comandos y utilidades como bibliotecas, compiladores y editores de texto. Estos componentes (esenciales para un sistema funcional) provienen del proyecto GNU, anterior a Linux. Es por esto que Richard Stallman (fundador del proyecto) pide a los usuarios que se refieran a dicho sistema como GNU/Linux. A pesar de esto, la mayoría de los usuarios continúan llamando al sistema simplemente "Linux" y las razones expuestas por Richard Stallman son eterno motivo de discusión1.1.
Ventajas de GNU/Linux
- Precio: Debido a que su licencia es GNU, podemos descargarlo gratuitamente desde Internet o comprarlo a un precio muy asequible.
- Requerimientos: Actualmente los sistemas operativos necesitan mucha máquina y recursos del sistema para ejecutarse con fluidez, Linux, al poder funcionar exclusivamente en modo texto sin la necesidad de cargar un entorno gráfico puede ejecutarse en cualquier máquina a partir de un i386. Evidentemente si queremos sacarle todo el partido necesitaremos una máquina mucho más potente.
- Estabilidad: Al tener su núcleo basado en UNIX, hereda esa estabilidad que siempre ha caracterizado a los sistemas UNIX.
- Seguridad: A nivel de servidor podemos encontrar que la seguridad de GNU/Linux frente a otros servidores de código cerrado del mercado es mucho mayor.
- Multitarea real: Es posible ejecutar varios procesos simultáneamente.
- Velocidad: Debido a la multitarea real que incorpora, y que no es necesario cargar su entorno gráfico para ejecutar servicios o aplicaciones, hacen que su velocidad sea muy superior a otros sistemas operativos que necesitan imperiosamente cargar un montón de aplicaciones gráficas para su funcionamiento.
- Código Fuente: El paquete incluye el código fuente, lo que es posible modificarlo y adaptarlo a nuestras necesidades libremente. Sin olvidar todo lo que se puede aprender de su funcionamiento.
- Entorno de Programación: Es ideal para la programación, ya que se puede programar para otros sistemas operativos. Además está extensamente documentado, y existen infinidad de herramientas para el programador.
- Crecimiento: Su sistema de crecimiento, gracias a la licencia GNU, el código abierto, y la gran comunidad de miles de programadores, es de los más rápidos que existen en la actualidad.
Características de GNU/Linux
Todo el mundo ha oído hablar de la potencia y fiabilidad que hacen de GNU/Linux un maravilloso sistema operativo. Pero en realidad, ¿qué características hacen que GNU/Linux sea lo que es?.
En la historia de los sistemas operativos ha habido diversas soluciones a los diferentes problemas que se han ido encontrando. Éstos pueden ser, el de la concurrencia de procesos, la memoria compartida, la comunicación de procesos, el soporte a múltiples usuarios, etc ...
Muchos conocemos las limitadas características de MS-DOS como sistema operativo monotarea y monousuario, que a algunos nos sirvieron en nuestras primeras andaduras en esto de la informática. Pero como todo, los sistemas operativos cambian y evolucionan con respecto a los requerimientos de sus usuarios. En los sistemas operativos actuales, sean de código libre o comerciales, hay algunas palabras que están en boca de todos. Multitarea, multiusuario, portabilidad, etc ... ¿Qué quieren decir cada uno de estos términos?.
- Multitarea. La palabra multitarea describe la capacidad de ejecutar varios programas al mismo tiempo sin detener la ejecución de cada aplicación. Se le denomina multitarea prioritaria porque cada programa tiene garantizada la oportunidad de ejecutarse, y se ejecuta hasta que el sistema operativo da prioridad a otro programa, por medio del módulo planificador para que se ejecute. Linux y otros sistemas operativos multitarea consiguen el proceso de prioridad supervisando los procesos que esperan para ejecutarse, así como los que se están ejecutando. El sistema programa cada proceso para que disponga de las mismas oportunidades de acceso al microprocesador. El resultado es que las aplicaciones parecen estar ejecutándose al mismo tiempo (en realidad hay una demora de billonésimas de segundo entre una ejecución y otra). Linux también es capaz de gestionar máquinas con varios procesadores, obteniendo la capacidad de procesar paralelamente (a la vez) varios procesos (tantos como microprocesadores tenga la máquina). Esto es lo que se llama concurrencia real.
- Multiusuario. La idea de que varios usuarios pudieran acceder a las aplicaciones o a la capacidad de proceso de un único PC era una utopía hace relativamente pocos años. La capacidad de Linux para asignar el tiempo de microprocesador simultáneamente a varias aplicaciones ha derivado en la posibilidad de ofrecer servicio a diversos usuarios a la vez, ejecutando cada uno de ellos una o más aplicaciones. La característica más relevante de Linux y sus funciones de multiusuario y multitarea, es que más de una persona puede trabajar con la misma máquina simultáneamente desde el mismo terminal o desde terminales distintos. No se debe confundir ésto con el hecho de que muchos usuarios puedan actualizar el mismo archivo simultáneamente, característica que es potencialmente confusa, ya que es otro tipo de problema de concurrencia.
- Shell programable. El shell programable es otra característica que hace que UNIX, y por tanto GNU/Linux, sea lo que es: el sistema operativo más flexible de los existentes. Dentro del marco del shell hay un nuevo mundo accesible a todos aquellos que sean lo suficientemente aventureros como para dominar los entresijos de la sintaxis de los comandos de GNU/Linux. La programación del shell de GNU/Linux ofrece tantas funciones como personas deseen utilizarlas. Muchos utilizan esta característica para personalizar su sistema y hacerlo más amigable. Otros lo encuentran muy útil para simplificar muchas de las aplicaciones que ejecutan, permitiéndoles realizar una serie de procesos en segundo plano (background) para poder trabajar en otros.
- Independencia de dispositivos. Las características que Linux ha heredado de UNIX hacen que éste se aproveche de las mejores características de UNIX. Una de ellas es la adaptabilidad del kernel en cuanto a la visualización de dispositivos nuevos en el sistema, ya que el kernel de UNIX/Linux ve a estos dispositivos como enlaces, o simples controladores. No obstante, si existiese algún problema con algún dispositivo, y al tener el código libre, siempre se puede programar un controlador para un dispositivo que no exista, cosa que no puedes hacer en ningún otro sistema operativo comercial.
- Comunicaciones y redes. La superioridad de UNIX sobre otros sistemas operativos es igualmente evidente en sus utilidades y conexión en red. Linux no es ninguna excepción. Ningún otro sistema operativo incluye unas posibilidades de conexión en red tan ajustadamente acopladas y ningún otro sistema operativo posee la flexibilidad incorporada de estas mismas características. Internet nació y se creó en un mundo UNIX.
- Portabilidad. La portabilidad es simplemente la posibilidad de transportar un sistema operativo de una plataforma a otra sin que se vea alterado su comportamiento. En la actualidad, Linux es capaz de correr en multiples plataformas, como pueden ser el i386, ALPHA, MAC, etc...
La organización de los directorios en GNU/Linux
Debido a la gran cantidad de distribuciones existentes se ha promovido el uso de la Filesystem Hierarchy Standard (www.pathname.com/fhs/). Esta guía permite al usuario encontrar los ficheros que buscan sin importar la distribución que tenga instalada.
El objetivo de esta guía es definir el propósito y función de cada directorio del sistema. Aunque la primera impresión resulta un poco caótica (cada nuevo programa instalado distribuye sus archivos por varios directorios) a la larga es una organización realmente ingeniosa.
La estructura de directorios más comunes y sus funciones son:
- /: es el directorio raíz1.2, y a partir de él cuelgan todos los demás.
- /bin: contiene los ejecutables básicos del sistema.
- /sbin: contiene los ejecutables del administrador del sistema.
- /usr: contiene todo lo demás: programas, juegos, etc ...
- /home: aquí residen las ``casas de los usuarios del sistema en las cuáles guardan sus archivos y configuraciones personales. Por ejemplo el usuario ``paquito tendrá su casa en /home/paquito.
- /root: es el directorio de trabajo del administrador.
- /etc: contiene las configuraciones específicas del sistema, entre ellas las necesarias para arrancar. También contiene las configuraciones globales del software instalado.
- /tmp: se utiliza para almacenamiento temporal de información.
- /var: contiene archivos variables, como pueden ser las colas de impresión, etc ...
- /boot: es donde se encuentran los archivos de arranque, así como el kernel que se cargará en el inicio.
- /dev: contiene todos los dispositivos1.3 (devices).
- /proc: guarda la información sobre los procesos que hay en ejecución y sobre el sistema en general (CPU, memoria, etc ...).
- /lib: contiene la biblioteca de funciones necesarias para el compilador de C. Contiene las bibliotecas compartidas, esenciales en el sistema.
- /media: es donde se suelen encontrar los dispositivos externos como las unidades de CD o DVD.
Notas al pie
... discusión1.1En el mundo del software libre hay un montón de ``eternas discusiones
, síntoma para muchos de la libertad de elección que proporciona. ... raíz1.2Recordemos que el sistema se organiza como un árbol invertido de directorios, por tanto ``el raíz es la base del árbol. ... dispositivos1.3En UNIX todo es un fichero. Esto significa que todos los dispositivos de hardware instalados (teclados, ratones, tarjetas de audio...) son ficheros que se pueden encontrar en /dev.