Cuanto de GNU tiene GNU/Linux

A través de LWN.net he llegado al artículo How much GNU is there in GNU/Linux? - Split Perspective. En él, su autor indica que tras analizar las líneas de código del repositorio principal de Ubuntu 11.04 (Natty), tan solo el 8% del total se corresponde con el Proyecto GNU.

Imagen de Split Perspective by Pedro Côrte-Real ©Copyright

En su análisis, las líneas de código se distribuyen de acuerdo al gráfico de la derecha.

A la vista de estos resultados, a priori podría parecer que el peso de GNU en GNU/Linux es muy limitado. Y al menos si hablamos de números brutos esta afirmación es correcta sin embargo es importante destacar la importancia de las contribuciones de GNU.

Obviamente me refiero al bloque formado por glibc, GCC e incluso GDB. Estas piezas son claves para el funcionamiento de cualquier sistema Linux. Coloco en cursiva la palabra «claves», porque en si bien existen alternativas, a día de hoy, ninguna está a la altura de las herramientas GNU.

glibc
Los desarrolladores del kernel Linux hicieron un fork de glibc, al cual llamaron Linux libc, sin embargo con la publicación de glibc 2.0 abandonaron su fork y volvieron a usar glibc. Existen muchas otras alternativas, como puede ver a continuación, pero ninguna a la altura de libc.

  • dietlibc Usada en sistemas empotrados.
  • uClibc Usada en sistemas empotrados.
  • klibc
  • EGLIBC, abreviatura de Embedded GLIBC.
  • Newlib Usada en sistemas empotrados.
  • Bionic Usada en sistemas empotrados. Es la biblioteca C usada en Android.

Como podrá ver, todas las alternativas de libc están enfocadas a sistemas empotrados por lo que glibc hoy por hoy es la única ópcion para sistemas no empotrados. Si no lo fuera, hace tiempo que Linus hubiese descartado glibc ya que siempre ha sido muy crítico hacia glibc, tal y como se puede leer en el mensaje de Linus Torvalds en la lista de correos de libc.

GCC
Los rivales de GCC se pueden resumir en uno, Clang. Sin embargo Clang , hoy por hoy no puede suplantar a GCC. Es cierto que el avance de clang ha sido enorme e incluso puede compilar un kernel Linux funcional, tal y como puede leer en Clang builds a working 2.6.36 Kernel; sin embargo aun no es capaz de suplir a GCC al compilar un kernel para producción puesto que Clang falla al compilar partes muy importante, aunque no críticas, tales como: SELinux, IPSec, Posix ACLs, eCrypt, IP6, Netfilter, Virtualización.

A la vista de los resultados podemos concluir que las aportaciones del proyecto GNU en GNU/Linux, en números brutos, son muy limitadas; y si tenemos en cuenta que la mayoría de estas aportaciones pueden ser reemplazadas por otras herramientas, obtenemos que las única herramientas GNU imprescindibles en entornos GNU/Linux no empotrados son GCC y libc.

EDICIÓN [2011/06/01 20:45]: Tal y como señala un pobrecito hablador en Barrapunto, eglibc es un reemplazo de glibc y de hecho actualmente debian hace uso de eglibc en lugar de la biblioteca C de GNU glibc. Por tanto la única utilidad GNU que no puede ser reemplazada, a día de hoy, es GCC.

8 comentarios:

#
Anónimo dijo...

hummm...¿Balde de agua fría?

No tengo datos ni conocimientos suficientes para criticar (refutar) la entrada.Pero como quisiera que el dat fuera errado.

Siento postear algo visceral en lugar de uno cerebral perooo...es que dolió.

#
Antonio Guillen dijo...

@Anónimo

Existen bastante detractores de este pequeño experimento porque afirman que el método de medición no es representativo en ningún sentido.

Antes de continuar me gustaría recalcar a que se refiere el término GNU, ya que en otros lugares he visto que pensaban de que se hablaba de licencias. Con GNU, tal y como dice el primer párrafo del post, se hace referencia al Proyecto GNU y en ningún momento se hace referencia a ningún tipo de licencia. Es decir, nos referimos al software producido por el Proyecto GNU.

Aclarado esto, he de decir que aunque entiendo la postura de los que afirman que este experimento no es representativo de nada; personalmente creo que el dato con el que nos tenemos que quedar, es el destacado en el post, existen pocas herramientas GNU imprescindibles.

Las únicas herramientas GNU imprescindibles son GCC, glibc y GDB (si eres programador). El resto de herramientas de GNU pueden ser remplazadas, aunque es raro que alguien prescinda de la consola por excelencia Bash, GNU Binutils, Coreutils, findutils o Diffutils.

PD: Gracias por el comentario :P

#
exio4 dijo...

jeje. pues te digo.. eso es un repositorio de ubuntu, y contando TODO el software. si vemos un sistema normal. o minimo cambia mucho =)

#
Antonio Guillen dijo...

@exio4
Antes de nada gracias por aportar tu punto de vista. Pero ten en cuenta que tu argumentación funciona en ambos sentidos. Un sistema normal, o mínimo, no tiene GCC ni GDB ni muchas otras utilidades de GNU.

GCC es necesario para compilar no para el funcionamiento normal del sistema. En debian, por ejemplo, todo el software de los repos esta compilado por lo que GCC no es necesario. GDB y muchas otras utilidades GNU, más de lo mismo. Como ya apunto un pobrecito hablador glibc no se usa en debian. Por tanto al final resulta que menos de la mitad del software GNU se encuentra presente en una instalación normal de debian.

#
malevolent dijo...

Hombre, pues yo veo que GNU/Linux tiene de GNU exactamente 1/3 (del nombre :P)

Ahora en serio, las estadísticas sabemos todos que se pueden presentar a gusto de quien las prepara, no por azar a escogido Ubuntu, una distro comercial 100%, para "desmembrarla" y poner esos (por cierto, bastante feos) gráficos de tarta.

Hablando de esos gráficos, ¿soy el único que considera sospechosamente turbio ese 56% de "other"? ¿Significa que solo ha podido catalogar un 44% de un sistema comercial como Ubuntu y tiene la osadía de aseverar que tan solo un 8% de todas las líneas de código de todas las distribuciones GNU/Linux pertenecen al proyecto GNU?

Luego pone links a una lista de GNOME (según él, tan solo un 5% del peso de todas las distribuciones GNU/Linux y eso que son cientos de megas en líneas de código...¿quizás haya metido gran parte del anterior 56% allí?) de hace tres años donde discutían unas proposiciones de Stallman de, y cito a Philip Van Hoof que a su vez cita a RMS, "evitar voiding presentar software propietario como legítimo", que no es en absoluto lo que da a entender el señor Côrte-Real
diciendo que GNOME se "escindió" del proyecto GNU. Pues como en la propia web de GNOME dicen: GNOME is Free Software, y vinculan la definición al proyecto GNU...

Eso es marear al personal y hacer falsas definiciones.

Bueno, podría seguir hinchando mi comentario, pero creo que mi postura queda más que expuesta: No me creo nada de lo que dice ese caballero.

Ya no digo que GNU/Linux es lo que es gracias al proyecto GNU o no existiría. Tampoco hablo de que por licencias, el porcentaje de líneas de código de alienarían con la GPL y por tanto con el proyecto GNU. Hablo única y exclusivamente de que el señor del artículo no da datos ni reales ni objetivos de lo que está aseverando y es como si yo ahora os pusiera una tarta diciendo que el 90% del código de un sistema windows es GNU... a ver quien me cree...

Saludos

#
Antonio Guillen dijo...

@malevolent Desconozco los motivos por lo que ha optado una u otra distribución, pero imagino que lo lógico es pensar que es porque "todo el mundo" conoce Ubuntu. No es lo mismo el tamaño de la comunidad de Gentoo que la de Ubuntu, por ejemplo.

Respecto al 56% de other, para lo que se está midiendo tan solo son necesarios dos grupos: GNU y no GNU. Aunque imagino que vio interesante destacar algunas de las piezas de software con más líneas de código.

Respecto a creer o no lo que dices tal o cual persona, es bueno ser escéptico pero en este caso no veo motivos. En cualquier caso siempre se puede repetir el análisis, y sobre la distribución que se quiera. Para esta tarea CLOC puede ser muy útil.

Por último, GPL y GNU son independientes y por tanto las líneas de código bajo licencia GPL no deben ser consideradas GNU. Un claro ejemplo es el kernel Linux, el cual es código GPL pero no guarda relación con GNU.

#
malevolent dijo...

Por dónde empezar...Primero: nunca nadie (que sepa de lo que habla) ha dicho que GNU/Linux es puramente GNU, sino que ha salido gracias a las herramientas GNU de las que depende.

Más. Después de haber trasteado con CLOC un buen rato, me reafirmo: este hombre se está inventado estos datos. Ya no digo que la tarea de ir archivo por archivo todos los archivos fuente de un sistema GNU/Linux indagando con CLOC te tomaría meses, pero no, lo que digo es que con CLOC puedes hacer bastantes cosas útiles, pero no sabrás exactamente de qué librerías tira un componente o una aplicación si no te sumerges tú mismo en el código fuente.

Pero pongamos que este señor ha puesto a trabajar digamos a una treintena de programadores expertos durante medio año (imposible, no solo porque el hecho de haberlo llevado a cabo no tiene ningún sentido, sino porque no hubiera sido una triste entrada en un artículo de un blog que pone datos ves a saber de donde, sin contrastar ni nada), pero es igual, démoslo por hecho y que hayan podido ver que efectivamente, sorpresa de sorpresas, el código fuente usado en su totalidad, dejándo de lado el lenguaje, que es lo que CLOC parsea, no hace ni llamadas a bajo nivel de as o de algún otro proceso GNU.

Aún así, decenas de miles de esos paquetes solo son compilables con gcc o necesitan ser preparados con GNU make, o es necesario hacerlo en un shell GNU bash, o tiene fuertes dependencias por ejemplo de gtk+ o de ncurses... o te acaban dando las fuentes en gzip... es decir. El proyecto GNU está presente en todos los lados.

En lo de que se haya decantado por una distribución comercial es porque para que parezca más creíble, sencillamente éstas tienen menor carga "moral" a la hora de usar herramientas ajenas al proyecto GNU. Si en lugar de Ubuntu hubiera escogido una distribución como Ututo, Blag o gNewSemse, por mencionar unas pocas, otro gallo hubiera cantado... pero como comento anteriormente, dudo que en el proceso de GNOME no haya dependencias de gtk+, dudo que en la generación y posterior compilado del kernel no intervengan las GNU binutils , el GNU Debugger o el GNU Autotools

Por otro lado, ¿cuánto de Nokia hay en Linux? ¿Cuánto de Novell? ¿Cuánto de RedHat? ¿cuánto de Google? ¿Hay más líneas de código que las que hay del proyecto GNU? Comento esto porque tenemos que recordar que GNU/Linux es un sistema que ha ido evolucionando por muchísimos factores. Si se es tan puritano como RMS, doy por hecho que no se hubiera avanzado tanto, pero los programadores alrededor del mundo han usado y creado aplicaciones y librerías, tirando de aplicaciones y librerías GNU ya creadas, no vas a inventar la rueda de nuevo, y si no, que se lo pregunten a Torvalds. Solo se ha cambiado si la herramienta en cuestión ofrece algo más que la GNU. Por otro lado, el nombre es GNU / Linux, es decir, un entorno GNU con un núcleo linux. La conjunción de las dos cosas es lo que hace el SO, por separado no son nada. Si quieres un entorno (casi puro) GNU, tenemos que irnos a GNU Hurd, donde quitamos linux de en medio por hurd, y ahí si que tenemos tanto un entorno fuertemente dependiente de las herramientas GNU y un kernel GNU... pero no es el caso, ya partimos de la base de que tenemos un híbrido. Como he dicho antes, nadie nunca ha dicho que Linux es solo GNU.

Ya para acabar de enrollarme, y después de darle vueltas, quizá lo que quiere decir este señor y lo que tú has visto, es que "utilidades" GNU de las miles que hay en un sistema GNU/Linux som más bien pocas. Ahí si que tengo que decir un rotundo sí. De hecho son muy pocos paquetes los que hay GNU (http://www.gnu.org/s/#allgnupkgs) y si sumas las GNU toolchains te dan otras tantas, pero pocas... pero el tema está en que el resto de paquetes, cuentan con estas utilidades como base, son su dependencia.

Bueno, que no sé si he divagado demasiado... y si en algún momento parezco irrespetuoso o pedante, mis disculpas.

Saludos

#
Antonio Guillen dijo...

No quiero restar importancia a GNU, pero tampoco darle más de la que corresponde. GNU es un proyecto, como otro cualquiera.

Es lógico suponer que la tarea de análisis del respositorio con LOC fue automatizada, porque como tu mismo has visto es una tarea titánica para hacerla manualmente. Lo que un grupo de humanos hace en años, un script lo hace en minutos.

También comentas sobre dependencias. Pero el estudio solo habla de cuanto código es de GNU y cuanto no. Aquí las dependencias no tienen sentido. De igual forma que es ilógico afirmar que gnome guarda relación con X.Org Foundation por depender de las X-Window. Las dependencias son una forma de no reinventar la rueda.

Después comentas sobre la carga moral y distribuciones comerciales. Pero el hecho es que todo el software que tiene GNU están en los repositorios de Ubuntu. Además pocas distribuciones cumplen con los estándares morales de GNU: ni debian, ni Slackware, ni... ¿No sería útil un análisis de este tipo en Debian? ¿Que importancia tiene la moralidad en un análisis de un repositorio de software? ¿Usar un entorno gráfico (gnome, KDE, OpenBox...) es amoral? Desde mi punto de vista, incluir la moralidad en este punto es un sinsentido.

En referencia a cuanto código contribuye cada empresa, hay multitud de análisis de este tipo. Pero de nuevo no veo que referencia guarda una variable con otra. ¿O el hecho de que IBM o Oracle subvencionen a la GNU significa que su software ya no puede ser considerado GNU?

Después comentas que GNU/Linux hace referencia a un sistema formado por un conjunto de utilidades de GNU corriendo sobre un núcleo Linux. Esta claro que cada uno puede usar el término que quiera pero esta explicación a mi, personalmente, me chirria. Y me chirría porque no uso Linux + software GNU, sino Linux con mucho software de muchos proyectos, no solo de GNU. Depués comentas que se podría usar GNU/Hurd, pero eso es incorrecto. El nivel de desarrollo de Hurd tremendamente limitado. Hurd solo soporta i386, carece de X, el soporte de hardware es inesxistente... Hurd, hoy por hoy, es no es una opción.

Creo que te equivocas en tus conclusiones. El análisis es sobre el sofware de un repositorio, no sobre un sistema GNU/Linux. Tal vez en mi PC no estén todas las utilidades GNU, pero si lo están en el repositorio que ha sido analizado. De igual forma que en mi PC no esta KDE pero si en el repositorio analizado.

Por último agradecerte tu punto de vista. Esta claro que cada uno tiene su punto de vista, lo que no significa que ni yo ni tu tengamos razón, simplemente que ambos vemos las cosas de distinta forma. De nuevo gracias por aportar tu punto de vista.

Saludos

Publicar un comentario en la entrada

Recuerde que puede utilizar algunos códigos HTML como <b>para negrita</b>, <i>para cursiva</i> y <a href="URL">para enlaces</a>.