¿Qué hace que una distribución sea GNU? ¿Hay distribuciones de Linux que no sean GNU?

¿Qué hace que una distribución sea GNU? ¿Hay distribuciones de Linux que no sean GNU?

Entonces GNU/Linux es un sistema operativo que consta de varios programas como mínimo: Linux kenel, gcc, gnu-binutils, escritorio Gnome, etc.

  • ¿Qué hace que una distribución de Linux sea GNU? ¿Son las herramientas con las que se compiló el kernel? ¿Son las herramientas con las que se envía la distribución?

  • ¿Existen sistemas operativos de escritorio completamente funcionales que estén basados ​​en Linux pero no en GNU?

Respuesta1

ElLa Fundación para el Software Libre sostieneque la mayoría de las distribuciones de Linux son en realidad sistemas GNU, que utilizan un kernel de Linux. Basan esta afirmación en el hecho de que GNU era un proyecto de larga data para desarrollar un sistema operativo libre antes de que apareciera Linux, y queel núcleo era sólo la última pieza que faltaba. Tienen razón en que prácticamente todas las distribuciones de escritorio y servidores basadas en Linux utilizan al menos algunos componentes GNU, quizás lo más importante es elBiblioteca GNU C(glibc),Utilidades principales de GNU(coreutils) y elIntentocaparazón. Además, el desarrollo del kernel de Linux está inherentemente ligado a GCC, debido a lautilización de extensiones GCC.

Algunos sistemas integrados, quizás el más notable Android de Google, no utilizan ningún componente o biblioteca GNU. En Android, por ejemplo, la biblioteca GNU C es reemplazada por la biblioteca Bionic C basada en BSD de Google. La FSF está de acuerdo en que no es apropiado referirse a dicho sistema como"Sistemas GNU" o "GNU/Linux", pero por otro lado tampoco querrían que se los denomine simplemente sistemas "Linux". Al menos podemos sacar la conclusión de que parece haber consenso sobre el hecho de que el uso de herramientas GNU para construir el núcleo nonohacer de un sistema un "sistema GNU".

Respuesta2

La historia de la terminología GNU/Linux se remonta a principios de los años 1990.

En 1991, Linus Torvalds comenzó el proyecto del kernel de Linux desde su habitación en Helsinki. No mucho después, el kernel de Linux comenzó a ganar un impulso sustancial, ayudado por el auge de Internet.

En ese momento, el proyecto GNU de Richard Stallman todavía planeaba utilizar el micronúcleo HURD como núcleo del sistema operativo GNU planeado. Sin embargo, cuando las distribuciones de Linux (sistemas operativos gratuitos tipo Unix basados ​​en el kernel de Linux) comenzaron a formarse en torno al nuevo proyecto del kernel de Linux, Stallman se interesó. Cuando comenzó el proyecto Debian en 1993, bajo el liderazgo de Ian Murdock, la FSF dio cierto apoyo financiero al joven proyecto. Sin embargo, los desarrolladores de Debian rápidamente se separaron de Stallman y la FSF, en parte por cuestiones técnicas. Un problema, por ejemplo, fue que Stallman quería conservar los símbolos de depuración en el programa, mientras que Debian quería eliminarlos.

Una vez que Debian y la FSF se separaron, Stallman solicitó que Debian se refiriera a sí mismo como GNU/Linux. La solicitud se hizo a Bruce Perens, ya que Murdock le había entregado el liderazgo. Dado que estas organizaciones se habían separado en buenos términos y compartían (y comparten) objetivos comunes, los desarrolladores de Debian hicieron lo que él pidió. Por supuesto, es cierto que Stallman ha promovido dichos nombres de forma independiente, pero la cooperación de un sistema operativo real basado en Linux para referirse a sí mismos como tales ha sido importante para promover el uso de dichos nombres.

El razonamiento dado por Stallman incluía que (a) el núcleo del sistema, aparte del kernel de Linux, eran en gran medida herramientas GNU, (b) el kernel de Linux era en cierto sentido la culminación/finalización del proyecto GNU, que había estado tratando de obtener un núcleo funcional desde hace algún tiempo, por lo que debería usar este nombre como una forma de reconocer y recordar a la gente los ideales del proyecto GNU. La razón (a) tiende a mencionarse con bastante más frecuencia, aunque no era exactamente cierta entonces, y es aún menos cierta ahora. Aunque partes claramente importantes de un sistema operativo basado en Linux dependen de herramientas GNU, por ejemplo, bash, gcc, binutils, gdb, libc, etc., en algunos casos estos pueden ser reemplazados por otras herramientas. Así pues, tales argumentos son al menos discutibles y, de hecho, han sido muy debatidos.

Hasta donde yo sé, sólo Debian y (algunos de) sus derivados (siguiendo el ejemplo de su padre) se refieren a sí mismos como GNU/Linux. Sin embargo, las otras denominadas distribuciones de Linux, como Fedora, Gentoo, etc., en esencia no se diferencian de Debian: es prácticamente el mismo software. Así que uno tiene igualmente buenas razones para referirse a ellos como GNU/Linux.

No hay muchos sistemas que utilicen el kernel de Linux sin el espacio de usuario de GNU, ya que los dos se desarrollaron en gran medida juntos y están entrelazados de varias maneras. (Por ejemplo, el kernel de Linux está escrito en el C extendido (GNU) de gcc y no se compila con un compilador de C estándar). Como dijo Thomas, el ejemplo obvio es Android, pero como Google lo ha bifurcado tanto, Es cuestionable si es correcto referirse al kernel de Android como Linux, aunque se habla de una fusión/reconciliación en el futuro.

Como nota al margen, es desafortunado notar que Stallman y la FSF aparentemente presionan bastante la terminología GNU/Linux. Por ejemplo, Jonathan Corbetescribió en un comentario de LWNque la FSF se niega a hablar con él a menos que utilice el término GNU/Linux. Jon, además de ser fundador de LWN, también es un desarrollador de kernel senior y respetado. En su totalidad, el comentario dice:

Sólo para que quede claro: dejamos de pedir comentarios a la FSF hace muchos años porque la FSF se negó a hablar con nosotros sin promesas previas de nuestra parte sobre lo que diríamos y qué términos usaríamos. No estamos dispuestos a hacer tales promesas. Si la política del FSF en este sentido ha cambiado, estaremos encantados de saberlo.

Esto es claramente una referencia a la insistencia en la terminología GNU/Linux, entre otras cosas.

La historia anterior se trata con cierto detalle en el Capítulo 6 ("Arrancar y luego rootear") de "Rebel Code" de Glyn Moody.

Respuesta3

Un sistema operativo es una combinación de un núcleo y una zona de usuario. Básicamente, el kernel administra el hardware mientras que el área de usuario proporciona una interfaz completa a los usuarios.

En una distribución GNU/Linux común,linuxproporciona el núcleo mientras que elproyecto ÑUtrae las herramientas del área de usuario. GNU se inició mucho antes que Linux y proporciona una gran cantidad de utilidades para construir un sistema operativo completo.

Sin embargo, les faltaba un núcleo. Aunque tenían lahurdkernel, estaba tardando demasiado en estar listo. Y luegovino linuxCon la ayuda de un gran entusiasmo a su alrededor, ha evolucionado más rápido que el Hurd.

Ahora tienes una zona de usuario y un kernel de dos proyectos diferentes. Y como para cada uno es imprescindible tener un sistema operativo, ¿por qué no nombrar la asociación?GNU/Linux¿Entonces a cada proyecto se le da su parte del crédito?

Tiene otras zonas de usuario como las utilidades BSD oCaja ocupada. Sin embargo, son más o menos completos en comparación con las utilidades GNU y algunos programas funcionarán sólo con un usuario GNU. Por ejemplo, la mayoría de los sistemas operativos BSD utilizan GCC como compilador, mientras queLVMpronto cambiará esta situación.

Y como sistema operativo universal, puedes ejecutarDebian con un kernel FreeBSD y un espacio de usuario GNU.

Respuesta4

¿Qué hace que una distribución de Linux sea GNU? ¿Son las herramientas con las que se compiló el kernel? ¿Son las herramientas con las que se envía la distribución?

Si y si. El kernel es un ejecutable monolítico e independiente.Todomás reside en "tierra de usuario". Generalmente, las aplicaciones de usuario hacen uso de al menos una biblioteca del sistema, la biblioteca C estándar. 1 Además de varias funciones de utilidad, esto es lo que proporciona acceso a las llamadas al sistema: solicitudes para que el sistema, es decir, el núcleo, realice algo, que es necesario incluso para tareas muy básicas, como trabajar con archivos. La implementación de la biblioteca C utilizada con Linux es glibc, la biblioteca GNU C.

El núcleo de Linux en sí está escrito en C y también requiere una biblioteca C para funcionar, excepto que en este caso las partes necesarias están compiladas internamente y no externamente. El compilador que normalmente se utiliza para esto es GCC (la "Colección de compiladores GNU") y la biblioteca C es glibc.

Dado que prácticamente todo el espacio de usuario está compilado con glibc, es una de las cosas más esenciales del sistema después del kernel. Otro componente esencial es el vinculador, que conecta un ejecutable a una biblioteca externa. Ese también es un producto GNU.

Para ilustrar esto, puede utilizar lddvarios ejecutables, incluidas bibliotecas (que son ejecutables, pero no por sí solas). Como dice en la página de manual, "ldd imprime las bibliotecas compartidas requeridas por cada programa o biblioteca compartida especificada en la línea de comando". P.ej:

> ldd /bin/bash
    linux-vdso.so.1 =>  (0x00007fff7348e000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fdbdae7f000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fdbdac7b000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fdbda8c3000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fdbdb0c8000)

Observe "libc.so.6": eso es glibc (no lo confunda con glib, otro producto GNU fundamental para Linux, pero no tan fundamental como glibc). Si observa todas las demás cosas mencionadas (excepto la primera, que se explica a continuación), notará que todas están vinculadas a libc. Veamos el propio libc.so.6:

> ldd /lib64/libc.so.6
    /lib64/ld-linux-x86-64.so.2 (0x00007f9cefa04000)
    linux-vdso.so.1 =>  (0x00007fffb21ff000)

"ld-linux-x86-64.so.2" es el vinculador mencionado anteriormente (generalmente ldy tiene una página de manual). No puede ejecutar ldd en él, pero filedice que está vinculado dinámicamente, supongo que libc (esto puede parecer circular, pero no lo es) y linux-vdso. Este último es bastante interesante porque notarás solo una dirección después del =>. Esto se debe a que en realidad es parte del núcleo.

La biblioteca C, AFAIK, es lasoloobjeto compartido en el sistema que no se vincula a la biblioteca C: está enel centrode todo el lío. Incluso la biblioteca base de otros lenguajes compilados usa libc, por ejemplo:

> ldd libstdc++.so.6.0.17 
    linux-gate.so.1 =>  (0xf77b8000)
    libm.so.6 => /lib/libm.so.6 (0xf7684000)
    libc.so.6 => /lib/libc.so.6 (0xf74d2000)
    /lib/ld-linux.so.2 (0xf77b9000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf74b5000)

Tenga en cuenta que las bibliotecas y el enlazador tienen varios seudónimos implementados con enlaces simbólicos (por ejemplo, /lib64/ld-linux-x86-64.so.2 es en realidad /lib64/ld-2.15.so).

También tenga en cuenta que gccel compilador "nativo" (ya que compila el kernel y la biblioteca C) no tiene que estar presente en el sistema, pero libc y ld sí, de lo contrario nada puede funcionar.


Ese no es el único conjunto de cosas que ofrece GNU. También son responsables del bashshell y otras herramientas y utilidades principales que hacen que el sistema sea similar a *nix y (en su mayoría) compatible con POSIX. Y GNOME, uno de los primeros DE's de Linux y uno de los más utilizados. Y la simplista mencionada anteriormente, que proporciona muchas funciones de alto nivel para admitir cosas como GNOME y otros DE. GNOME se basa en GTK, que se desarrolló originalmente para GIMP. GTK también es fundamental para varios otros DE; GTK y GIMP también son productos GNU. Han hecho muchas cosas.


1 Existe una aplicación de usuario que no se vincula a ninguna biblioteca; estos se llamanestáticoejecutables y esencialmente significa que tienen partes de esa biblioteca compiladas en ellos (tal como lo hace el kernel).

información relacionada