Introducción al sinsentido de GNU/Linux (y Linux)

Creo que el título condensa en pocas palabras eso que voy a hablar, y es el sinsentido que es llamar “GNU/Linux” a estos sistemas,  dejando implícito el por qué “Linux” también lo es (vamos, está de más mencionar que el nombre de un kernel es el nombre de un kernel y no de un sistema operativo)
Elijan su incorrección, agarren pochoclos y disfruten del show !

Bien, para entender el argumento del GNU/Linux, tenemos que agarrar a la cima del vertical discurso que lo defiende: Richard M. Stallman

Muchos usuarios de computadoras ejecutan una versión modificada del sistema GNU cada día, sin saberlo. Debido a un particular giro en los acontecimientos, la versión de GNU que es ampliamente utilizada hoy en día se llama habitualmente “Linux”, y mucho de sus usuarios no se dan cuenta que básicamente es el sistema GNU, desarrollado por el proyecto GNU.
Efectivamente hay un Linux, y esta gente lo está utilizando, pero es sólo una parte del sistema que utilizan. Linux es el núcleo: el programa en el sistema que asigna los recursos de la máquina a los otros programas que ejecuta. El núcleo es una parte esencial de un sistema operativo, pero inútil por sí mismo, sólo puede funcionar en el contexto de un sistema operativo completo. Se usa normalmente en combinación con el sistema operativo GNU: el sistema completo es básicamente GNU con Linux, o GNU/Linux. Todas las distribuciones denominadas “Linux” son realmente distribuciones de GNU/Linux.

Según reza el artículo del proyecto GNU.
El argumento es simple : El sistema es GNU y lo que conecta con el hardware (lo físico) de la compu es otro proyecto llamado Linux

Pero … cuánto software es oficial del proyecto GNU? consultando la web vemos una lista que es bastante flaca, y que entra tranquilamente en una hoja.

¿Cuánto software forma parte de los repositorios de una distribución estándar? depende de la distribución, pero usualmente vá desde 6 mil a 29 mil¹. Como verán, hablamos de una ínfima cantidad de software GNU formando los repositorios, pero, profundicemos  más la idea con la siguiente imagen:


Fuente → http://pedrocr.pt/text/how-much-gnu-in-gnu-linux ²

Esta gráfica toma a Ubuntu³ como un objeto de análisis, y en base a eso analiza cuánto de GNU hay en esta distribución midiendo las líneas de código y midiendo lo que se considera el “core”, es decir, lo que vá a parar a las isos y sólo contando el repositorio “main”, es decir, sin software contribuido (contrib) y no-libre (non-free)

Ese 8% es muy interesante, pero hay que desglosarlo un poco más, vamos a la segunda gráfica:


 FuenteMisma que la gráfica 1 

Bien, acá tenemos la segunda gráfica (y sus porcentajes) en toda su gloria … veamos:

1) El 32% de ese 8% representa al compilador GCC … el proyecto estrella de GNU.
Bien, pero actualmente GCC tiene un competidor que es fuertemente impulsado por  Apple, y ese es LLVM/Clang (o Clang a secas nomás).

Ese fue un proyecto que arrancó  con unos puntos fuertes que competían que no tenían su contracara en GNU. Entre ellos el Static Analyzer, mejores diagnósticos de error⁴, menor consumo de memoria y CPU durante la compilación, menores tiempos de compilación⁵,  cierta compatibilidad con las extensiones de GCC⁶, su diseño altamente modular⁷, y estar pensado de lleno con el soporte de C++11 en mente entre tantas cosas !!! incluso podemos mencionar otras como el uso de LLVM, el licenciamiento, etc etc y etc.

Bien, hecha la publicidad de Clang y retomando ese 32%, voy a mencionar que este compilador sólo falla con el 12% de los paquetes de Debian⁸  y hay trabajo profundizando que este pueda compilar más y más de esos paquetes. Pronto puede que veamos una distro compilada enteramente con Clang, con lo que estaríamos destruyendo de lleno ese 32% de lo que era un 8% para empezar⁹

2) El segundo ítem más grande es gdb. PathScale liberó el source de su compilador EkoPath el año pasado, pero aparte de eso, también está PathDB, el debugger …
Pero no sólo eso, el dúo LLVM/Clang también dispone de su debugger alternativo llamado LLDB.
Lamentablemente no puedo comparar más que superficialmente si realmente llegan a ser una alternativa a GDB, si bien el trabajo también está encaminado, los probé y estaban OK para hacer “lo de siempre”, eso no basta para decir si son una alternativa real, con lo que ése no vá a ser el argumento que voy a usar para dejar al 14% GDB fuera  de línea, sino algo más simple: voy a poner su mera existencia en duda (no en negación) por el simple hecho de que es un paquete de desarrollo (un depurador)

3) A la nebulosa que representa el “userland general” que ostenta GNU, voy a plantearle cosas como lo que significan las alternativas que anda escribiendo el proyecto de FreeBSD y proyectos como Heirloom y su implementación en Arch.

Como vemos, un ya mísero 8% se encuentra fuertemente diezmado cuando abordamos la falacia de que se usa el sistema “GNU con Linux”, cuando en realidad es  “GNU, Linux y todos los demás proyectos”, que … “todo lo demás” en realidad no representa algo menor ni mucho menos despreciable, sino justamente lo más importante en una distribución contemporánea y eso no sólo desde la perspectiva de la cantidad de líneas de código, sino desde la perspectiva de qué es lo más cercano al usuario final.

Por lo que el argumento que sostiene ese nombre y que le trabaría la lengua a más de unx, está más que desarmado. En los inicios pudo ser válido,  cuando de repente no teníamos grandes colosos de código como KDE, GNOME, Xorg, Mesa3D y demás como los tenemos hoy. Pero en una distribucion contemporánea, ese argumento no puede ser más falso.

El argumento filosófico …. bueno, eso por ahora lo dejo como tarea para el hogar :D

Saludos♥
¹ → Tomo a Debian como sustento para ese 29 mil, la distribución que se le adjudica tener el repositorio más grande que hay … Naturalmente ese número requiere una fuente y no sólo eso, también señalar que eso es un dato de Febrero del 2011, cuando se liberó Debian Squeeze

² →Citada no sólo por el motivo del licenciamiento que el autor señala en su sitio, sino que es una linda forma de enriquecer la gráfica con los otros datos que aporta el autor

³ → En su release Natty Narwhal (11.04), del 28 de Abril del 2011 (en tiempos donde lo que más adelante elaboro, estaba más verde)

⁴ → GCC en su versión 4.8 busca competir contra esto

⁵ → Se apunta a competir o mejorar la situación (perdonen la imprecisión, no ví benchmarks al respecto) para GCC 4.8 también … y como comentario personal sólo voy a decir “eso lo tengo que ver”

⁶ → A modo de comentario (y protesta)  personal, quiero señalar que dichas extensiones están habilitadas de fábrica  … es decir, por ejemplo cuando se compila código C, GCC compila usando la opción -std=gnu99 por de fábrica, salvo que se especifique otra cosa (como c99, c89 o se use un flag como -ansi ).
-std  indica qué estándar usar para compilar, y gnu99 es C99, pero con las extensiones de GNU para dicho dialecto.
Clang empezó tomando un enfoque netamente ANSI, respetando los estándares … el problema es cuando los desarrolladores se acostumbran por mera desinformación (más cuando aprenden) a dichas extensiones y no tienen la conciencia de que no son estándares y que dicho código está a su suerte cuando pase por manos de otro compilador (que puede implementarlas o no)

⁷ → Lo que permite cosas interesantes como ofrecer completado de código a los IDEs o editores sin que estos tengan que reinventar la rueda haciendo su propio parseo del código y que aprovechen el motor de un compilador como es Clang.

⁸ → Revisar bien de dónde sale ese porcentaje !!! Sin embargo, es una cifra enorme, que vá en paralelo al proyecto que FreeBSD también lleva adelante de poder compilar los ports con  Clang ( El reporte del 10/07/2012 reporta 18715 ports compilados), también, y Gentoo vá por ese camino

⁹ → Uno de los principales frenos es el mismísimo kernel, aunque en el 2010 circularon unos parches no oficiales que lo permitía, se busca profundizar ese trabajo … también software como GRUB tiene problemas por el GRAN uso que el mismo hace de extensiones⁶ de GNU como funciones anidadas (que quizá pueden implementarse en Clang) entre otras piezas de software … hay trabajo encaminado a cambiar la realidad actual