GNU/Linux

GNU/Linux (pronunciado oficialmente como ñu linux o también ge-ene-u linux en español)​ es una familia de sistemas operativos tipo Unix compuesto por software libre y de código abierto.​ GNU/Linux surge de las contribuciones de varios proyectos de software, entre los cuales destacan GNU (iniciado por Richard Stallman en 1983) y el núcleo Linux (comenzado por Linus Torvalds en 1991).​
A pesar de que en la jerga cotidiana la mayoría de las personas usan el vocablo Linux para referirse a este sistema operativo,​​ en realidad ese es solo el nombre del kernel o núcleo, que representa menos del 50 por ciento de todo el código del sistema. El sistema completo está formado también por una gran cantidad de componentes del Proyecto GNU junto a componentes de terceros, que van desde compiladores hasta entornos de escritorio.​​ Cabe señalar que existen derivados que usan el núcleo Linux pero que no tienen componentes GNU, como por ejemplo el sistema operativo Android.​ También existen distribuciones de software GNU donde el núcleo Linux está ausente.
Los sistemas operativos GNU/Linux se encuentran normalmente en forma de compendios conocidos como distribuciones o «distros».​ Entre las más populares se encuentran Debian, Ubuntu, Red Hat, SUSE y ArchLinux. El propósito de estas distribuciones es ofrecer GNU/Linux como un producto final para instalar o probar en un ordenador, cubriendo una gama de necesidades, las cuales van desde el uso cotidiano personal hasta aplicaciones muy específicas en ambientes especializados. Al sistema base las distros añaden su propia selección de aplicaciones y programas preinstalados (por ejemplo ambientes gráficos basados en X11, GNOME y KDE), o aplicaciones que pueden descargarse desde un repositorio para su posterior instalación.
Algunas de estas distribuciones son especialmente conocidas por su uso en servidores de Internet, en supercomputadoras, y en sistemas embebidos;​ mercados donde GNU/Linux tiene la mayor cuota de participación. El proyecto de ranking Top500.org informa que, desde 2017, las 500 supercomputadoras más potentes del mundo utilizan todas ellas alguna versión del sistema operativo GNU/Linux; y desde 2004 ya era el sistema dominante.​Diversas encuestas lo han posicionado constantemente como el sistema operativo más popular para servidores web.​​​ En aplicaciones embebidas es común encontrar Linux instalado en routers, smart TV y relojes inteligentes, sistemas de entretenimiento de automóviles, y grabadoras de video digital.​​ Aunque con menor participación, el sistema GNU/Linux también se usa en el segmento de las computadoras de escritorio, portátiles, dispositivos móviles, computadoras de bolsillo, videoconsolas y otros.
GNU/Linux es uno de los ejemplos más prominentes de software libre: todo su código fuente puede ser utilizado, modificado y redistribuido libremente por cualquier persona, empresa o institución, bajo los términos de la Licencia Pública General de GNU, así como de otra serie de licencias de derechos de autor.​
El acrónimo recursivo GNU, GNU's Not Unix (GNU no es Unix), proviene de las herramientas básicas de sistema operativo creadas por el proyecto GNU, iniciado por Richard Stallman en 1983 y mantenido por la Free Software Foundation. El nombre Linux viene del núcleo Linux, inicialmente escrito por Linus Torvalds en 1991.​
La contribución del proyecto GNU al sistema es la razón por la que existe controversia a la hora de utilizar Linux o GNU/Linux para referirse al sistema operativo formado por el sistema GNU y el núcleo Linux en su conjunto.​​
El sistema operativo Unix fue concebido e implementado en 1969 en los laboratorios Bell de AT&T en los Estados Unidos por Ken Thompson, Dennis Ritchie, Douglas McIlroy, y Joe Ossanna.​ Unix se escribió completamente en lenguaje ensamblador por primera vez en 1971, ya que era una práctica común en el momento. Más tarde, en 1973, en un enfoque innovador, se volvió a escribir en el lenguaje de programación C, por Dennis Ritchie (a excepción del núcleo y del sistema de entrada y salida de datos). La disponibilidad de un lenguaje de alto nivel para implementar Unix propició su portabilidad a diferentes plataformas de computación con mayor facilidad; ayudando así a su propagación.
Debido a un anterior caso antimonopolio que le prohibía entrar en el negocio de las computadoras, AT&T licenciaba gratuitamente el código fuente del sistema operativo Unix a cualquier persona que lo solicitara.​ Como resultado, Unix creció rápidamente y llegó a ser ampliamente adoptado por las instituciones académicas y empresas. En 1984, AT&T se despojó de Bell Labs; quedando libre de la obligación legal que requería la concesión de dichas licencias.​
El proyecto GNU, iniciado en 1983 por Richard Stallman, tiene el objetivo de crear un «sistema de software compatible con Unix, compuesto enteramente de software libre». El trabajo comenzó en el año 1984.​ Más tarde, en 1985, Stallman fundó la Free Software Foundation para financiar el desarrollo de GNU, y redactó la Licencia Pública General de GNU en 1989. A principios de la década de 1990, muchos de los programas que se requieren en un sistema operativo (como bibliotecas, compiladores, editores de texto, un shell Unix y un sistema de ventanas) ya se habían conseguido desarrollar y estaban operativos en el proyecto GNU. Sin embargo, otros elementos, como los controladores de dispositivos y los daemons, estaban todavía en desarrollo e incompletos.​
En retrospectiva, Linus Torvalds declaró que si el núcleo del proyecto GNU hubiera estado disponible en 1991, no se habría decidido a desarrollar su propio núcleo.​ Asimismo, también declaró que si el núcleo 386BSD (del cual NetBSD, OpenBSD y FreeBSD descienden), cuyo desarrollo es anterior al núcleo Linux y que no se liberó hasta 1992 por temas legales, hubiera estado disponible probablemente tampoco lo habría desarrollado.​
En 1991, cuando Torvalds asistía a la Universidad de Helsinki y era usuario del sistema operativo MINIX, creado en 1987 por Andrew S. Tanenbaum, y de los programas provenientes del proyecto GNU, estaba muy interesado por el funcionamiento de los sistemas operativos.​ Frustrado por la concesión de licencias de uso que utilizaba MINIX, que en ese momento se limitaba a uso educativo, ese mismo año decidió comenzar a desarrollar su propio núcleo​​ adoptando la estructura y código del núcleo de MINIX.
Hacia 1992, Torvalds había trabajado tanto en el desarrollo del núcleo Linux que llegó a superar a otros núcleos que se encontraban también en desarrollo en ese momento.​ Las aplicaciones GNU también se fueron desarrollando de modo que reemplazaron todos los componentes de MINIX, porque era más ventajoso utilizar el código libre del proyecto GNU con el nuevo sistema operativo. El código GNU con licencia bajo la GPL puede ser reutilizado en otros programas de computadora, siempre y cuando también se liberen bajo la misma licencia o una licencia compatible. Posteriormente Torvalds inició un cambio de su licencia original, la cual prohibía la redistribución comercial, y lo difundió bajo la licencia GPL.​ Los desarrolladores de ambas partes trabajaron para integrar componentes de GNU con el núcleo Linux, consiguiendo un sistema operativo completamente funcional.​
Muchos desarrolladores de código abierto están de acuerdo en que el núcleo Linux no fue diseñado, sino que evolucionó a través de una forma de «selección natural». Torvalds considera que, aunque el diseño de Unix sirvió como andamiaje, «Linux creció con muchas mutaciones, y debido a que las mutaciones eran menos que aleatorias, eran más rápidas y más dirigidas que las partículas alfa en el ADN».​ Raymond considera que los aspectos revolucionarios de Linux son sociales, no técnicos, antes de que el software complejo de Linux fuera diseñado cuidadosamente por grupos pequeños, pero «Linux evolucionó de una manera completamente diferente. Desde casi el principio, fue pirateado de manera bastante casual por un gran número de voluntarios coordinando sólo a través de Internet. La calidad se mantuvo no por estándares rígidos o autocracia, sino por la estrategia ingenuamente simple de publicar cada semana y obtener comentarios de cientos de usuarios en unos días, creando una especie de selección darwiniana rápida sobre las mutaciones introducidas por los desarrolladores».​ Bryan Cantrill, un ingeniero de un sistema operativo de la competencia, está de acuerdo en que «Linux no se diseñó, evolucionó», pero considera que esto es una limitación, y propone que algunas características, especialmente las relacionadas con la seguridad, no se pueden convertir en, «este no es un sistema biológico al final del día, es un sistema de software».​ Un sistema basado en Linux es un sistema operativo modular tipo Unix, que deriva gran parte de su diseño básico de los principios establecidos en Unix durante las décadas de 1970 y 1980. Dicho sistema utiliza un núcleo monolítico, el núcleo Linux, que maneja el control de procesos, las redes, el acceso a los periféricos y los sistemas de archivos. Los controladores de dispositivos se integran directamente con el núcleo o se agregan como módulos que se cargan mientras el sistema está en ejecución.
El espacio de usuario de GNU es una parte clave de la mayoría de los sistemas basados en el núcleo Linux, siendo Android la excepción notable. La implementación del Proyecto de la biblioteca C funciona como un contenedor para las llamadas al sistema del núcleo Linux necesarias para la interfaz kernel-espacio de usuario. La cadena de herramientas es una amplia colección de herramientas de programación vitales para el desarrollo de Linux (incluidos los compiladores utilizados para construir el núcleo Linux así mismo), y las coreutils implementan muchas herramientas básicas de Unix. El proyecto también desarrolla Bash, un popular shell CLI. La interfaz gráfica de usuario (o GUI) que utilizan la mayoría de los sistemas Linux se basa en una implementación del sistema X Window.​ Más recientemente, la comunidad Linux busca avanzar a Wayland como el nuevo protocolo de servidor de visualización en lugar de X11. Muchos otros proyectos de software de código abierto contribuyen a los sistemas Linux.
Los componentes instalados de un sistema GNU/Linux incluyen los siguientes:​​
Los sistemas operativos GNU/Linux pueden funcionar tanto en entorno gráfico como en modo consola, ya que el entorno gráfico no va explícitamente unido al resto de programas de manejo del sistema y puede usarse de forma opcional.​ La consola es común en distribuciones para servidores, mientras que la interfaz gráfica está orientada al usuario final, tanto de hogar como empresarial. Asimismo, también existen los entornos de escritorio, que son un conjunto de programas formado por gestores de ventanas, iconos y muchas aplicaciones que facilitan la utilización de la computadora en modo gráfico. Los escritorios más populares en GNU/Linux son: GNOME, KDE Plasma, LXQt, Xfce, MATE y Cinnamon, aunque existen muchos más, también puede usarse con solo los gestores de ventanas, que son la columna vertebral de los entornos de escritorio, y los encargados de dibujar la interfaz de las aplicaciones y la composición.
La colección de utilidades para la programación de GNU es con diferencia la familia de compiladores más utilizada en este sistema operativo. Cuenta con capacidad para compilar código fuente de lenguajes de programación como: C, C++, Java, Ada, Pascal, D y Fortran, entre muchos otros.​ Además, soporta diversas arquitecturas de procesador mediante la compilación cruzada, lo que hace que sea un entorno adecuado para desarrollos heterogéneos.
Existen varios entornos de desarrollo integrados disponibles para GNU/Linux, incluyendo Anjuta, KDevelop, Lazarus, Ultimate++, Code::Blocks, NetBeans IDE y Eclipse. También existen editores extensibles como Emacs o Vim. GNU/Linux también dispone de capacidades para lenguajes de guion (script), aparte de los clásicos lenguajes de programación de shell, o el de procesado de textos por patrones y expresiones regulares conocido como awk. La mayoría de las distribuciones tienen instalado Python, Perl, PHP y Ruby y en caso de no venir instalados estos lenguajes, es muy sencilla su instalación, generalmente a través de un repositorio común.
Las aplicaciones para GNU/Linux se distribuyen en una variedad de formatos debido a la diversidad de métodos de manejo de paquetes de software, algunos más preparados para ser ejecutados que otros. Mientras que en sistemas como Windows o MacOS el usuario normalmente busca el software de terceros por su cuenta; las distribuciones GNU/Linux fueron pioneras en los repositorios de aplicaciones soportadas oficialmente por el sistema operativo, similar a las tiendas de aplicaciones modernas, donde el usuario acude a buscar el software que desea instalar.​​ Las aplicaciones precompiladas existen mayoritariamente en los formatos.deb y .rpm, usados en Debian y Red Hat respectivamente y sus descendientes. También existe la posibilidad de compilar los programas en forma de recetas make a partir de su código fuente, y algunos desarrolladores de aplicaciones solo distribuyen su software de esta manera, transfiriendo la labor de crear un programa ejecutable a las distribuciones interesadas en empaquetar su aplicación, o al usuario por su propia cuenta, si lo desea.
Durante la primera época había pocas aplicaciones de código cerrado para GNU/Linux. Con el tiempo se fueron uniendo programas no libres al sistema GNU/Linux, entre ellos Adobe Reader, Adobe Flash, Opera, entre muchos otros. Algunos ejemplos de aplicaciones en GNU/Linux se pueden ver a continuación.
En el entorno de GNU/Linux, los dispositivos de bloques, como los discos duros, desempeñan un papel esencial en el almacenamiento de datos. Estos dispositivos se dividen en unidades lógicas más pequeñas llamadas particiones, lo que permite una organización y gestión eficiente del espacio de almacenamiento.
Cada partición se representa como un archivo en el sistema de archivos de GNU/Linux y se encuentra ubicada en el directorio /dev. Por ejemplo, el archivo /dev/sda representa el primer disco duro, mientras que /dev/sdb representa el segundo. Estos archivos de dispositivo de bloques se pueden acceder y manipular como cualquier otro archivo en el sistema.
Para asociar una partición a un sistema de archivos accesible, es necesario realizar un proceso de montaje. Durante el montaje, se conecta el sistema de archivos asociado a la partición a un punto específico en el árbol de directorios. Esto se puede hacer de forma explícita o mediante programación en el arranque del sistema.
La estructura y configuración de los dispositivos de bloques se puede examinar y modificar utilizando comandos como fdisk. Con fdisk, es posible examinar la estructura de un dispositivo conocido o realizar cambios en su estructura particionando el disco.
En el sistema de archivos de GNU/Linux, cada partición se puede formatear con un sistema de archivos específico, como ext4, XFS o NTFS. El sistema de archivos define la forma en que se organizan y almacenan los datos en la partición, permitiendo la creación y gestión de archivos y directorios.
La información sobre los dispositivos de almacenamiento disponibles en el sistema se puede obtener de diferentes maneras. Una de ellas es a través del archivo /etc/fstab, que indica los dispositivos preparados para el montaje durante el arranque del sistema o los dispositivos extraíbles que se pueden montar. Sin embargo, no es necesario que estén listados todos los dispositivos del sistema en este archivo, ya que es posible montarlos bajo demanda utilizando el comando mount o desmontarlos mediante el comando umount.
Con la adopción por numerosas empresas fabricantes, un buen número de computadoras se venden con distribuciones preinstaladas, y GNU/Linux ha comenzado a tomar su lugar en el vasto mercado de las computadoras de escritorio.
Algunas de las empresas que colaboran en la difusión de este sistema operativo ya sea trabajando en el núcleo Linux, proporcionando soluciones de software o preinstalando el sistema operativo, son: Intel,​​​Google,​​IBM,​AMD,​​​​Sun Microsystems,​Valve,​​ Dell,​​Lenovo,​​Asus,​Hewlett-Packard (HP),​​​Silicon Graphics International (SGI),​Renesas Technology,​Fujitsu,​Analog Devices,​Freescale,​VIA Technologies,​Oracle,​Novell​ y RedHat,​ entre otras.​
El respaldo de compañías de software también está presente, ya que, entre otras aplicaciones, Nero, Java, Google Earth, Google Desktop, Adobe Reader, Adobe Flash, RealPlayer y Yahoo! Messenger están disponibles para GNU/Linux. Al haber software equivalente, es innecesario instalar los precisamente mencionados con anterioridad.
Numerosos estudios cuantitativos sobre software de código abierto están orientados a temas como la cuota de mercado y la fiabilidad, y ciertamente muchos de estos estudios examinan específicamente a GNU/Linux.​
La medición «cuota de mercado» puede resultar inservible ya que es un concepto basado en ventas comerciales (unidades materiales vendidas). Por otro lado Linux es utilizado frecuentemente en servidores con acceso público desde Internet por lo que la cuota de mercado es extremadamente inferior a la cuota de uso. Baste notar, p.ej, que Facebook, Gmail, LinkedIn o Yahoo funcionan sobre servidores GNU/Linux, de tal forma que cuando se está accediendo desde un navegador ejecutándose en Windows/Mac, la aplicación real se está ejecutando en servidores Linux y los datos están almacenándose igualmente en dichos servidores.​
Hay varias empresas que comercializan soluciones basadas en GNU/Linux: IBM, Red Hat (RHEL), Rxart, Canonical Ltd. (Ubuntu), así como miles de PYMES que ofrecen productos o servicios basados en esta tecnología.
Una aproximación estadística básica y estimada sobre número de usuarios de GNU/Linux a escala global lo ofrece el proyecto Linux Counter.
Dentro del segmento de las supercomputadoras, a noviembre de 2017, el uso de este sistema ascendió al 100 % de las computadoras más potentes del mundo por su confiabilidad, seguridad y libertad para modificar el código.​ De acuerdo con TOP500.org, que lleva estadísticas sobre las 500 principales supercomputadoras del mundo, a noviembre de 2017: las 500 usaban una distribución basada en GNU/Linux.
GNU/Linux, además de liderar el mercado de servidores de Internet debido, entre otras cosas, a la gran cantidad de soluciones que tiene para este segmento, tiene un crecimiento progresivo en computadoras de escritorio y portátiles. Además, es el sistema base que se ha elegido para el proyecto OLPC: One Laptop Per Child.​
El CERN (Organización Europea para la Investigación Nuclear) usa Linux, primero Scientific Linux y luego crearon CCentSO (CERN CentOS), una versión de CentOS específica para las aplicaciones del CERN.​​
Para saber más sobre las arquitecturas soportadas, lea el artículo «Portabilidad del núcleo Linux y arquitecturas soportadas».
Hay una serie de administraciones públicas que han mostrado su apoyo al software libre, sea migrando total o parcialmente sus servidores y sistemas de escritorio, sea subvencionándolo. Como ejemplos se tiene a Alemania, Argentina, Australia, Brasil, España, Chile, China, Cuba, México, Perú, Ecuador, El Salvador, Uruguay y Venezuela.
El sistema operativo del General Atomics MQ-1 Predator está basado en GNU/Linux, así como el del Boeing P-8 Poseidon.
Parte de la comunidad y numerosos medios prefieren denominar a esta combinación como Linux, aunque GNU/Linux (con las variantes GNU con Linux y GNU+Linux) es la denominación defendida por el Proyecto GNU y la FSF junto con otros desarrolladores y usuarios para el conjunto que utiliza el sistema operativo Linux con las aplicaciones de sistema creadas por el proyecto GNU y por muchos otros proyectos de software.​​
Desde 1984, Richard Stallman y muchos voluntarios están intentando crear un sistema operativo libre con un funcionamiento similar a UNIX, recreando todos los componentes necesarios para tener un sistema operativo funcional. A comienzos de los años 1990, unos seis años desde el inicio del proyecto, GNU tenía muchas herramientas importantes listas, como editores de texto, compiladores, depuradores, intérpretes de comandos de órdenes etc., excepto por el componente central: el núcleo.
GNU tiene su propio proyecto de núcleo, llamado Hurd. Sin embargo, su desarrollo no continuó como se esperaba al aparecer el núcleo Linux. De esta forma, se completaron los requisitos mínimos y surgió el sistema operativo GNU que utilizaba el núcleo Linux.
El principal argumento de los defensores de la denominación GNU/Linux es resolver la posible confusión que se puede dar entre el núcleo (Linux) y gran parte de las herramientas básicas del resto del sistema operativo (GNU), y del sistema completo que usualmente se usa como combinación de GNU, Linux, y otros proyectos de software. Además, también se espera que con el uso del nombre GNU, se dé al proyecto GNU el reconocimiento por haber creado las herramientas de sistema imprescindibles para ser un sistema operativo compatible con UNIX, y se destaque la cualidad de estar compuesto solo por software libre. La primera distribución que incluyó el GNU en su nombre fue Yggdrasyl en 1992, donde aparecía como Linux/GNU/X. La FSF denominó a este sistema «Linux» hasta al menos junio de 1994​ y recién a partir de enero de 1995 empezó a llamarlo «GNU/Linux» (también GNU+Linux y lignux, términos que han caído en desuso a instancias del propio Stallman).​
Algunas distribuciones apoyan esta denominación, e incluyen GNU/Linux en sus nombres, como Debian GNU/Linux o GNU/LinEx, mientras que otras, como Slackware, Gentoo o Ubuntu, eligen denominarse basadas en Linux.​​​
En ocasiones, el proyecto KDE ha utilizado una tercera denominación: GNU/Linux/X para enfatizar los tres proyectos sobre los que se apoya su entorno de escritorio.
Una distribución de Linux es una distribución de software basada en el núcleo Linux que incluye determinados paquetes de software para satisfacer las necesidades de un grupo específico de usuarios, dando así origen a ediciones domésticas, empresariales y para servidores. La distribución más famosa es Ubuntu, la cual ha sido una de las que han hecho famoso a Linux en el mundo y equiparable a otros sistemas como Windows o macOS, pero Ubuntu no existiría sin Debian, una de las más antiguas y grandes distribuciones de la cual se basó Canonical para desarrollar Ubuntu.
Son distribuciones seriamente comprometidas con el Software libre y se abstienen de incluir aplicaciones, manuales y documentación que no sean libres. Algunas de ellas son:
Distribuciones para dispositivos pequeños con recursos limitados, como por ejemplo un router inalámbrico. Estas distribuciones no son autónomas sino que deben poder ser desarrolladas y compiladas sobre una de las distribuciones libres completas de la lista anterior, posiblemente con el auxilio de herramientas de desarrollo libres distribuidas junto a la misma.