Linux y el Proyecto GNU

Este artículo fue escrito por Richard Stallman, y me pareció conveniente publicarlo en el blog. Todos los usuarios de sistemas libres debemos conocer la diferencia entre linux y GNU. ¿Tu la sabes?

Muchos usuarios de computadoras usan una versión modificada del sistema GNU (18.000 caracteres) a diario, sin darse cuenta. Debido a un particular giro de acontecimientos, la versión de GNU más ampliamente usada hoy es, con frecuencia, más conocida como «Linux», y muchos usuarios no son conscientes del alcance de su conexión con el Proyecto GNU.
Efectivamente hay un Linux, y esta gente lo usa, pero no es el sistema operativo. Linux es el núcleo: el programa del sistema que asigna los recursos de la máquina a los otros programas que usted ejecute. El núcleo es una parte esencial de todo sistema operativo, pero inútil por sí solo; sólo puede funcionar en el contexto de un sistema operativo completo. Linux se usa normalmente en combinación con el sistema operativo GNU: el sistema completo es básicamente GNU, con Linux actuando de núcleo.
Muchos usuarios no son plenamente conscientes de la diferencia entre el núcleo, que es Linux, y el sistema completo, al que también llaman «Linux». El uso ambiguo del nombre no facilita la comprensión. A menudo, estos usuarios piensan que Linus Torvalds desarrolló todo el sistema operativo en 1991, con un poco de ayuda.
Los programadores generalmente saben que Linux es un núcleo. Pero como generalmente han oído llamar también «Linux» a todo el sistema, frecuentemente se imaginan una historia que justifique que todo el sistema se llame como el núcleo. Por ejemplo, muchos creen que una vez que Linus Torvalds terminó de escribir Linux, el núcleo, sus usuarios buscaron más software libre que lo acompañara, y encontraron que (sin ninguna razón en particular) casi todo lo necesario para hacer un sistema de tipo Unix estaba ya disponible.
Lo que encontraron no fue una casualidad: era el sistema GNU. El software libre disponible conformaba un sistema completo porque el Proyecto GNU había estado trabajando desde 1984 en hacer uno. El Manifiesto GNU (31.000 caracteres) había definido la meta de desarrollar un sistema libre de tipo Unix, llamado GNU. El Anuncio Inicial del Proyecto GNU también bosqueja algunos de los planes originales para el sistema GNU. Para cuando se escribió Linux, el sistema estaba casi terminado.
La mayoría de los proyectos de software libre tienen el objetivo de desarrollar un programa particular para una tarea particular. Por ejemplo, Linus Torvalds se propuso escribir un núcleo de tipo Unix (Linux); Donald Knuth se propuso escribir un formateador de textos (TeX); Bob Scheifler se propuso desarrollar un sistema de ventanas (el Sistema de Ventanas X). Es natural medir la contribución de este tipo de proyectos en base a los programas específicos que hayan producido.
Si intentásemos medir la contribución del Proyecto GNU de esta manera, ¿qué conclusión obtendríamos? Un vendedor de CD-ROM encontró que en su «Distribución Linux», el software GNU constituía el contingente único, alrededor del 28% del total de código fuente, y esto incluía varios de los principales componentes esenciales sin los cuales no habría sistema. El propio Linux era alrededor del 3%. Así que si usted fuera a elegir el nombre del sistema basándose en quién escribió los programas que lo forman, la opción única más adecuada sería «GNU».
Pero no pensamos que ésa sea la manera correcta de enfocar la cuestión. El Proyecto GNU no era, y no es, un proyecto para desarrollar paquetes de software específicos. No era un proyecto para desarrollar un compilador de C, aunque lo hicimos. No era un proyecto para desarrollar un editor de textos, aunque desarrollamos uno. El propósito del Proyecto GNU era desarrollar un sistema libre de tipo Unix completo: GNU.
Mucha gente ha hecho importantes contribuciones al software libre del sistema, y todas ellas merecen reconocimiento. Pero la razón por la que es un sistema integrado --y no sólo una colección de programas útiles-- es que el Proyecto GNU se había propuesto hacerlo así. Hicimos una lista de los programas necesarios para hacer un sistema libre completo, y sistemáticamente encontramos, escribimos, o buscamos gente para escribir todo lo que había en la lista. Escribir componentes esenciales pero poco divertidos (1) porque no se puede tener un sistema sin ellos. Algunos de nuestros componentes del sistema, las herramientas de programación, se hicieron populares por sí mismas entre los programadores, pero escribimos muchos componentes que no son herramientas (2). Incluso desarrollamos un juego de ajedrez, GNU Chess, porque un sistema completo necesita también buenos juegos.
A principios de los años 90 habíamos preparado todo el sistema salvo el núcleo (y también estábamos trabajando en un núcleo, el GNU Hurd, que funciona sobre Mach). El desarrollo de este núcleo fue mucho más duro de lo que esperábamos; el GNU Hurd empezó a funcionar de manera fiable en 2001. Ahora estamos empezando a preparar el lanzamiento real del sistema GNU, con el GNU Hurd.
Afortunadamente, no hubo que esperar al Hurd, porque Linux ya estaba disponible. Cuando Linus Torvalds escribió Linux, rellenó la última laguna importante. La gente pudo entonces poner Linux junto al sistema GNU para obtener un sistema libre completo: una versión basada en Linux del sistema GNU; el sistema GNU/Linux, para abreviar.
Juntarlos suena sencillo, pero no fue un trabajo trivial. Algunos componentes de GNU (3) necesitaron cambios sustanciales para funcionar con Linux. Integrar un sistema completo en forma de una distribución que funcionara sin más que «desembalarla» fue también un gran trabajo. Esto precisó resolver la cuestión de cómo instalar y arrancar el sistema (un problema que no habíamos atacado, porque todavía no habíamos alcanzado ese punto). La gente que desarrolló las diversas distribuciones del sistema hicieron una contribución sustancial.
El Proyecto GNU apoya tanto a los sistemas GNU/Linux como al sistema GNU (incluso económicamente). Financiamos la reescritura de las extensiones relacionadas con Linux de la biblioteca de C de GNU, de modo que ahora se integran bien, y los sistemas GNU/Linux modernos usan la versión actual de la biblioteca sin necesidad de hacerle modificaciones. También financiamos las primeras etapas del desarrollo de Debian GNU/Linux.
A día de hoy usamos sistemas GNU basados en Linux para la mayor parte de nuestro trabajo, y esperamos que usted también lo haga. Pero por favor, no confunda a la gente usando el nombre «Linux» de manera ambigua. Linux es el núcleo, uno de los principales componentes del sistema. El sistema en su conjunto es más o menos el sistema GNU, con Linux añadido. Cuando hable de esta combinación, por favor, llámela «GNU/Linux».
Si quiere poner un enlace a una página sobre «GNU/Linux» para mayor referencia, esta página y http://www.gnu.org/gnu/thegnuproject.es.html son una buena elección. Si menciona Linux, el núcleo, y quiere añadir un enlace para mayor referencia, http://www.kernel.org/ es un URL adecuado.
Apéndice: Además de GNU, otro proyecto ha producido independientemente otro sistema operativo libre de tipo Unix. Este sistema es conocido como BSD, y fue desarrollado en la Universidad de California, Berkeley. En los 80 no era libre, pero se volvió libre a principios de los 90. Cualquier sistema operativo libre hoy día es casi con toda seguridad una variante del sistema GNU, o algún tipo de sistema BSD.
La gente pregunta a veces si BSD es también una versión de GNU, como GNU/Linux. Para hacer su código libre, los desarrolladores de BSD se inspiraron en el ejemplo del Proyecto GNU, y hubo llamamientos explícitos de activistas de GNU que ayudaron a persuadirlos, pero su código se superponía poco con el de GNU. Los sistemas BSD de hoy en día usan algunos programas GNU, del mismo modo que el sistema GNU y sus variantes usan algunos programas de BSD; sin embargo, tomados en su conjunto, son dos sistemas diferentes que evolucionan por separado. Los desarrolladores de BSD no escribieron un núcleo y lo añadieron al sistema GNU, así que un nombre como GNU/BSD no encajaría en esta situación.
[Si le gustaría saber más sobre este asunto, puede leer también nuestras Preguntás Más Frecuentes sobre GNU/Linux.]

Notas:

  1. Estos componentes poco divertidos pero esenciales incluyen el ensamblador de GNU, GAS y el enlazador, GLD, ambos son ahora parte del paquete GNU Binutils, GNU tar, y más.
  2. Por ejemplo, el Bourne Again SHell (BASH), el intérprete Ghostscript, y la biblioteca de C de GNU no son herramientas de programación. Tampoco lo son GNUCash, GNOME, o GNU Chess.
  3. Por ejemplo, la biblioteca de C de GNU.