# Proyecto GNU

El proyecto GNU es un proyecto colaborativo de software libre con el objetivo de crear un sistema operativo completamente libre: el sistema GNU. Fue anunciado por Richard Stallman en 1983. Su objetivo es brindar a los usuarios de ordenadores libertad y control en el uso de sus ordenadores y dispositivos informáticos mediante el desarrollo y la publicación colaborativos de software que otorga a todas las personas los derechos para ejecutar libremente el software, copiarlo y distribuirlo, estudiarlo y modificarlo. El software GNU otorga estos derechos en su licencia.
Para garantizar que todo el software de un ordenador otorgue a sus usuarios todos los derechos de libertad (usar, compartir, estudiar, modificar), incluso la parte más fundamental e importante, el sistema operativo (incluidos todos sus numerosos programas de utilidades) necesita ser software libre. Según su manifiesto, el objetivo fundacional del proyecto es construir un sistema operativo libre y, si es posible, "todas las utilidades que habitualmente acompañan a un sistema Unix para que se pueda prescindir de cualquier software que no sea libre". Stallman decidió llamar a este sistema operativo GNU (un acrónimo recursivo que significa "¡GNU no es Unix!"), basando su diseño en el de Unix, un sistema operativo propietario. El desarrollo se inició en enero de 1984. En 1991, apareció el kernel de Linux, desarrollado fuera del proyecto GNU por Linus Torvalds, y en diciembre de 1992 estuvo disponible en la versión 2 de la Licencia Pública General GNU. Combinado con las utilidades del sistema operativo ya desarrolladas por el proyecto GNU, permitió el primer sistema operativo que era software libre, comúnmente conocido como Linux.
El trabajo del proyecto incluye el desarrollo de software, la creación de conciencia, campañas políticas y el intercambio de material nuevo.

## Etimología

GNU es un acrónimo recursivo que significa GNU No es Unix (GNU is Not Unix). Nótese que la "G" a su vez significa "GNU". Puesto que en inglés americano "gnu" se pronuncia parecido a "new", Richard Stallman recomienda pronunciarlo con una "g" no silenciosa para evitar sugerir que se trata de algo nuevo. En español, se recomienda pronunciarlo "ñu" como el antílope africano, o bien fonéticamente como en inglés. En sus charlas Richard Stallman finalmente dice: «Se puede pronunciar de cualquier forma, la única pronunciación errónea es llamarlo Linux».

## Historia

En la década de 1970 UNIX era un sistema operativo no libre o privativo muy popular entre los reducidos usuarios académicos e industriales de la época. Se le atribuye su éxito a su portabilidad, entonces descomunal; a su arquitectura relativamente simple que ha demostrado ser técnicamente estable; y a las viejas prácticas liberales de distribución de software aunadas a regulaciones antimonopolio, que obligaron durante un tiempo a su propietario AT&T a ofrecer el código gratuitamente a diversas instituciones.
Mientras tanto Stallman venía de una tradición de programadores completamente distinta en los laboratorios del MIT, donde se usaban otros sistemas operativos autóctonos bajo el control de sus usuarios, como el Incompatible Timesharing System. Hacia principios de la década de 1980 la comunidad hacker del MIT se desmoronaba junto con sus sistemas. Muchos miembros partieron para desarrollar software privativo para compañías como Symbolics, y la nueva ola iba reemplazando el viejo software del MIT que quedaba atrapado en las arquitecturas de hardware. Habiéndose acostrumbrado a modificar y compartir tales programas en extinción; Stallman asegura que el desarrollo de un sistema operativo libre moderno y portátil (y con este el lanzamiento del movimiento del software libre) fue una reacción contra lo que de otra manera le parecía un futuro desagradable rodeado de software privativo. Así el sistema GNU fue diseñado para ser totalmente compatible con UNIX; aprovechando tanto el diseño modular y portable como sus usuarios.
El 27 de septiembre de 1983 se anunció públicamente el proyecto por primera vez en el grupo de noticias Usenet. Al anuncio original siguieron otros ensayos escritos por Richard Stallman como el "Manifiesto GNU", que establecieron sus motivaciones para realizar el proyecto GNU, entre las que destaca "volver al espíritu de cooperación que prevaleció en los tiempos iniciales de la comunidad de usuarios de ordenadores". La programación comenzó en 1984.
Stallman se había sentido decepcionado cuando al ofrecer sus programas libres a Symbolics, no eran aceptados. Dentro de sus anuncios del proyecto GNU, Stallman habla por primera vez de la idea de evitar ofrecer sus nuevos programas bajo el completo dominio público. Para asegurar que el software GNU permaneciera libre para todos sus usuarios independientemente de los distribuidores e intermediarios, el proyecto debía ser publicado bajo una licencia de derechos de autor diseñada para ofrecer las libertades, al mismo tiempo que prohibiera añadir restricciones posteriores. La idea se conoce como copyleft, y está representada en la Licencia General Pública de GNU (GNU GPL) entre otras.
En 1985, Stallman creó la Free Software Foundation (FSF o Fundación para el Software Libre) que proporciona soportes logístico, legal y financiero al proyecto GNU. La FSF también contrató programadores para contribuir a GNU, aunque una porción sustancial del desarrollo es producida por voluntarios. A medida que GNU ganaba renombre, aparecían empresas interesadas que comenzaron a contribuir al desarrollo o comercialización de productos GNU y el correspondiente soporte técnico. El más prominente y exitoso de ellos fue Cygnus Solutions, ahora parte de Red Hat.
El hecho de ser compatible con la arquitectura de UNIX implica que GNU esté compuesto de pequeñas piezas individuales, algunas de las cuales ya estaban disponibles libremente, como el sistema tipográfico TeX y el sistema gráfico X Window que se pudieron adaptar y reutilizar. Muchos otros en cambio tuvieron que ser desarrollados desde cero para luego poder ofrecerse libremente. Para 1990 el proyecto GNU ya había completado la rescritura del bien conocido editor de texto Emacs, la creación del compilador GCC, del intérprete de comandos o shell Bash, y la mayor parte de las bibliotecas y utilidades que componen un sistema operativo UNIX típico. Estos gozaron de adopción y éxito inmediato, pero faltaba un componente clave: el núcleo (kernel en inglés).
En el manifiesto GNU, Stallman menciona que "un núcleo inicial existe, pero se necesitan muchos otros programas para emular Unix". Se refería a TRIX, que es un núcleo de llamadas remotas a procedimientos, desarrollado por el MIT y cuyos autores decidieron que fuera libremente distribuido; TRIX era totalmente compatible con UNIX versión 7. En diciembre de 1986 ya se había trabajado para modificar este núcleo. Sin embargo, los programadores decidieron que no era inicialmente utilizable, debido a que solamente funcionaba en "algunos equipos sumamente complicados y caros", razón por la cual debería ser portado a otras arquitecturas antes de que se pudiera utilizar. Finalmente, en 1988, se decidió utilizar como base el micronúcleo Mach desarrollado en la CMU. Inicialmente, el núcleo recibió el nombre de Alix (así se llamaba una novia de Stallman), pero por decisión del programador Michael Bushnell se cambió a Hurd. Dando comienzo a la programación a inicios de 1990. Desafortunadamente, debido a razones técnicas y conflictos entre los programadores originales el desarrollo de Hurd se retrasó enormemente. Hurd no vio la luz de la usabilidad sino hasta mediados de la década de años 2000. Afortunadamente la gente no tuvo que esperar hasta entonces por un sistema completo y funcional; otros núcleos ya habían acaparado la atención de los programadores y alcanzado mayor madurez.
Armado con las herramientas de GNU, en 1991 el entonces estudiante universitario finlandés Linus Torvalds empezó a escribir el núcleo Linux inspirado en el sistema operativo Minix creado por el profesor de ciencias de computación estadounidense Andrew Tanenbaum. En sus primeros anuncios públicos, Torvalds le atribuía su acción a la frustración de no poder usar Minix comercialmente, y a la ausencia de núcleos libres tipo Unix como GNU Hurd; o el de BSD, descendiente de Unix que para entonces se encontraba purgando el código privativo original de AT&T y defendiéndose legalmente del mismo. A pesar de sus desacuerdos suscitados a raíz de la publicación de Linux, tanto Torvalds como Tanenbaum pronosticaban que el superior núcleo de GNU finalmente dejaría obsoletos a Linux y Minix. En 1992 Torvalds decidió cambiar la licencia no comercial de Linux a la GPL. Rápidamente, múltiples programadores se unieron al desarrollo, colaborando a través de Internet y consiguiendo que paulatinamente Linux fuera más serio, potente y compatible con UNIX. Linux fue combinado con el resto del sistema GNU, resultando un sistema operativo libre y completamente funcional en continua evolución hoy en día. La combinación es conocida como "GNU/Linux" o como una "distribución Linux" y existen diversas variantes.
También es frecuente hallar componentes de GNU instalados en un sistema BSD o un UNIX no libre, en lugar de los programas originales para UNIX. Esto se debe a que muchos de los programas escritos por el proyecto GNU han demostrado ser de mayor calidad que sus versiones equivalentes de UNIX. A menudo, estos componentes se conocen colectivamente como "herramientas GNU". Muchos de los programas GNU han sido también portados a otros sistemas operativos como Microsoft Windows y Mac OS X.

## Manifiesto GNU

Artículo principal: Manifiesto GNU
El Manifiesto GNU fue escrito por Richard Stallman para obtener apoyo y participación en el Proyecto GNU. En el Manifiesto GNU, Stallman enumera cuatro libertades esenciales para los usuarios de software:
* La libertad de ejecutar el programa para cualquier propósito (libertad 0).
* La libertad de estudiar cómo funciona el programa, y cambiarlo para que haga lo que quieras (libertad 1). El acceso al código fuente es una condición necesaria para ello.
* La libertad de redistribuir copias para ayudar a tu prójimo (libertad 2).
* La libertad de distribuir copias de tus versiones modificadas a terceros (libertad 3). Esto te permite ofrecer a toda la comunidad la oportunidad de beneficiarse de las modificaciones. El acceso al código fuente es una condición necesaria para ello.
Para implementar estas libertades, los usuarios necesitaban acceso completo al código. Para garantizar que el código siga siendo libre y suministrarlo al público, Stallman creó la Licencia pública general GNU (GPL), que permite que el software y las futuras generaciones de código derivadas de él continúen siendo libres para uso público.

## Filosofía y activismo

Artículo principal: Movimiento del software libre
Aunque la mayor parte de la producción del Proyecto GNU es de naturaleza técnica, se lanzó como una iniciativa social, ética y política. Además de producir software y licencias, el Proyecto GNU ha publicado varios escritos, la mayoría de los cuales han sido escritos por Richard Stallman.

## Software libre

El proyecto GNU utiliza software que los usuarios pueden copiar, editar y distribuir libremente. Es libre en el sentido de que los usuarios pueden cambiar el software para adaptarlo a sus necesidades individuales. La forma en que los programadores obtienen el software libre depende de dónde lo obtengan. Pueden suministrar el software al programador amigos o lo puede bajar de Internet, o la empresa para la que trabaja el programador puede adquirir el software.

## Fondos

Los ingresos de los socios y las donaciones respaldan el proyecto GNU.

## Copyleft

Artículo principal: Copyleft
El copyleft es lo que ayuda a mantener el uso libre de este software entre otros programadores. El copyleft otorga el derecho legal a todos de usar, editar y redistribuir programas o el código de los programas siempre que los términos de distribución no cambien. En consecuencia, cualquier usuario que obtenga legalmente el software tiene las mismas libertades que el resto de sus usuarios.
El Proyecto GNU y la Free Software Foundation a veces distinguen entre copyleft "fuerte" y "débil". Los programas copyleft "débiles" normalmente permiten a los distribuidores vincularlos con programas que no son libres, mientras que el copyleft "fuerte" prohíbe estrictamente esta práctica. La mayor parte de la producción del Proyecto GNU se publica bajo copyleft fuerte, aunque algunos se publican bajo un copyleft débil o una licencia de software libre laxa e improductiva.

## Desarrollo del sistema operativo

Artículo principal: GNU
El primer objetivo del proyecto GNU era crear un sistema operativo completo de software libre. Debido a que UNIX ya estaba muy extendido y se ejecutaba en máquinas más potentes, en comparación con las máquinas CP/M o MS-DOS contemporáneas de la época, se decidió que sería un sistema operativo similar a Unix. Richard Stallman comentó más tarde que consideraba a MS-DOS "un juguete".
Para 1992, el proyecto GNU había completado todas las utilidades principales del sistema operativo, pero no había completado el núcleo del sistema operativo propuesto, GNU Hurd. Con el lanzamiento del kernel de Linux, iniciado de forma independiente por Linus Torvalds en 1991, y lanzado bajo licencia GPL en la versión 0.12 en 1992, por primera vez fue posible ejecutar un sistema operativo compuesto completamente de software libre. Aunque el kernel de Linux no es parte del proyecto GNU, se desarrolló usando GCC y otras herramientas de programación GNU y se lanzó como software libre bajo la Licencia Pública General GNU. Hasta el momento, el proyecto GNU no ha lanzado una versión de GNU/Hurd que sea adecuado para entornos de producción.

## GNU/Linux

Se puede ejecutar una versión estable (o variante) de GNU combinando los paquetes de GNU con el kernel de Linux, creando un sistema funcional similar a Unix. El proyecto GNU llama a esto GNU/Linux, y las características que lo definen son la combinación de:
* Paquetes GNU (excepto GNU Hurd) - Los paquetes GNU constan de numerosas herramientas y utilidades del sistema operativo (shell, coreutils, compiladores, bibliotecas, etc.), incluida una implementación de biblioteca de todas las funciones especificadas en la interfaz de programa de aplicación del sistema POSIX (POSIX.1). El compilador GCC puede generar código máquina para una gran variedad de arquitecturas de ordenadores.
* Kernel de Linux: implementa programación de programas, multitarea, controladores de dispositivos, administración de memoria, etc. y permite que el sistema se ejecute en una gran variedad de arquitecturas de ordenadores. Linus Torvalds lanzó el kernel de Linux bajo la Licencia Pública General GNU en 1992; sin embargo, no forma parte del proyecto GNU.
* Programas que no son GNU: varios paquetes de software libre que no forman parte del Proyecto GNU pero que se publican bajo la Licencia pública general GNU u otra Licencia de software libre aprobada por la FSF.
En el sitio web de GNU, aparece una lista de proyectos y todos tienen detallado el tipo de desarrollador que puede realizar la tarea necesaria para una determinada parte del proyecto GNU. El nivel de habilidad varía de un proyecto a otro, pero se anima a cualquier persona con conocimientos previos en programación a que apoye el proyecto.
Al paquete de herramientas GNU, junto con el kernel de Linux y otros programas, generalmente se denomina distribución de Linux (distro). El Proyecto GNU llama a la combinación de GNU y el kernel de Linux "GNU/Linux", y pide a otros que hagan lo mismo, lo que da como resultado la controversia por la denominación de GNU/Linux.
La mayoría de las distribuciones de Linux combinan paquetes GNU con un kernel de Linux que contiene blobs binarios propietarios y varios programas propietarios. Aunque hay distribuciones que no usan, en el kernel de Linux, líneas de código propietarias o sospechosas de serlo, se suele usar el término Linux Libre para las mismas. En la página web de GNU se muestran algunas de ellas, que son recomendadas por la misma.

### Directrices de distribución del sistema libre GNU

Las Directrices de Distribución del sistema libre GNU (GNU FSDG) es un acuerdo de un sistema de distribución que se utiliza para explicar lo que significa que una distribución de sistema instalable (como una distribución GNU/Linux) se denomine libre y ayudar a los desarrolladores de la distribución a realizarlas de calidad.
Principalmente incluye distribuciones que son una combinación de paquetes GNU con un kernel Linux-libre (un kernel Linux modificado, que elimina blobs binarios, código ofuscado y partes de código bajo licencias propietarias) y consta solo de software libre (evitando el software propietario por completo). Entre las distribuciones que han adoptado GNU FSDG se incluyen Dragora GNU/Linux-Libre, gNewSense, GNU Guix System, Hyperbola GNU/Linux-libre, Parabola GNU/Linux-libre, Trisquel GNU/Linux, Ututo y algunas otras.
Se utilizaron como pautas para FSDG la licencia de distribución del Proyecto Fedora.

## Proyectos estratégicos

Ver también: FSF High priority projects
Desde mediados de los 90 en adelante, con muchas empresas invirtiendo en el desarrollo de software libre, la Free Software Foundation redirigió sus fondos hacia el apoyo legal y político del desarrollo del software libre. El desarrollo de software a partir de ese momento se centró en mantener los proyectos existentes y comenzar nuevos proyectos solo cuando había una amenaza aguda para la comunidad de software libre. Uno de los proyectos más notables del Proyecto GNU es la Colección de Compiladores GNU, cuyos componentes han sido adoptados como el sistema compilador estándar en muchos sistemas Unix-like.

### GNOME

El Proyecto GNU lanzó el escritorio GNOME ya que el otro entorno de escritorio, KDE, se estaba volviendo popular pero requería que los usuarios instalaran Qt, que entonces era software propietario. Para evitar la instalación de KDE con Qt, el Proyecto GNU lanzó dos proyectos simultáneamente. Uno era la biblioteca Harmony. Que era un intento de reemplazar por software libre a Qt. Si este proyecto hubiera tenido éxito, se habría terminado el problema con KDE. El segundo proyecto fue GNOME, que abordó el mismo problema desde un ángulo diferente. Su objetivo era crear un sustituto de KDE que no dependiera de software propietario. El proyecto Harmony no progresó mucho, pero GNOME se desarrolló muy bien. Finalmente, se lanzó como software libre el componente propietario del que dependía KDE (Qt).

### Empresa GNU

GNU Enterprise (GNUe) es un metaproyecto iniciado en 1996 y puede considerarse como un subproyecto del Proyecto GNU. El objetivo de GNUe es crear "aplicaciones conscientes de datos de clase empresarial" libres (sistemas de planificación de recursos empresariales, etc.). GNUe está diseñado para recopilar software empresarial para el sistema GNU en una sola ubicación (al igual que el proyecto GNOME recopila software de escritorio).

## Programas desarrollados por el proyecto GNU

* Bison: generador de analizadores sintácticos diseñado para sustituir a yacc.
* Bash: intérprete de comandos.
* Bbf: archivos de bibliotecas.
* Binutils: ensamblador GNU, enlazador GNU, y herramientas relacionadas.
* Classpath: bibliotecas para Java.
* DotGNU: sustituto de .NET.
* Emacs: editor de texto extensible y autodocumentado.
* GCC: compilador optimizado para varios lenguajes, particularmente C.
* GDB: depurador de aplicaciones.
* GNU Ghostscript: conjunto de aplicaciones para PostScript y PDF.
* GIMP: programa de edición de imágenes fotográficas como de archivos de dibujo.
* Glibc: biblioteca para lenguaje C.
* GMP: biblioteca para cálculos con precisión arbitraria.
* GNOME: ambiente de escritorio gráfico.
* GNUnet: software para redes descentralizadas de comunicaciones personales, diseñada para resistir interferencias no autorizadas.
* GNUstep: implementación del conjunto de bibliotecas OpenStep, así como herramientas para programar aplicaciones gráficas.
* GNU MDK: un conjunto de herramientas para la programación en MIX.
* GSL: biblioteca científica para GNU.
* Guix: gestor de paquetes puramente funcional.
* Gzip: aplicación y biblioteca para compresión de datos.
* Hurd: un micronúcleo y un conjunto de servidores que funcionan del mismo modo que el núcleo UNIX.
* LilyPond: editor de partituras musicales.
* Maxima: un sistema algebraico computacional.
* Octave: un programa para cómputo numérico similar a MATLAB.
* Sistema de construcción para GNU: conjunto de herramientas diseñadas para ayudar a crear paquetes de código fuente portable a varios sistemas Unix.
* Texinfo: sistema de documentación.
El proyecto GNU también ayuda con el desarrollo de otros paquetes, como:
* CVS - sistema de control de versiones para código fuente.
* DDD - herramientas gráficas para detección y depuración de errores.

## Distribuciones de GNU

Las pocas variantes puramente GNU usan el núcleo Hurd, por ejemplo Debian GNU/Hurd, aunque no ha habido lanzamientos oficiales hasta el momento.
Linux es el núcleo más usado con GNU, aunque Linux en sí no es parte del proyecto GNU (Linux-libre sin embargo sí lo es). GNU también es utilizado con otros núcleos, como en Debian GNU/kFreeBSD, Debian GNU/NetBSD, Nexenta OS o GNU-Darwin.
Actualmente las distribuciones que la FSF recomienda son aquellas que traen el kernel Linux-libre y que usan exclusivamente software libre. Algunas de éstas son Trisquel GNU/Linux, Parabola GNU/Linux, PureOS, entre otras.