La biblioteca C de GNU , conocida comúnmente como glibc , es la implementación del proyecto GNU de la biblioteca estándar de C. Proporciona un contenedor para las llamadas al sistema del núcleo Linux y otros núcleos para su uso en aplicaciones. A pesar de su nombre, ahora también soporta directamente C++ (e indirectamente, otros lenguajes de programación ). Fue iniciada en la década de 1980 por la Free Software Foundation (FSF) para el sistema operativo GNU .
glibc es software libre publicado bajo la Licencia Pública General Reducida de GNU . [3] El proyecto de la Biblioteca C de GNU proporciona las bibliotecas centrales para el sistema GNU, así como para muchos sistemas que usan Linux como núcleo . Estas bibliotecas proporcionan API críticas que incluyen ISO C11 , POSIX.1-2008 , BSD , API específicas del sistema operativo y más. Estas API incluyen funciones fundamentales como open , read , write , malloc , printf , getaddrinfo , dlopen , pthread_create , crypt , login , exit y más.
El proyecto glibc fue escrito inicialmente en su mayor parte por Roland McGrath, quien trabajaba para la Free Software Foundation (FSF) en el verano de 1987 cuando era adolescente. [10] [11] En febrero de 1988, la FSF describió a glibc como alguien que había completado casi la funcionalidad requerida por ANSI C. [ 12] Para 1992, tenía implementadas las funciones ANSI C-1989 y POSIX.1-1990 y estaba trabajando en POSIX.2. [13] En septiembre de 1995, Ulrich Drepper hizo su primera contribución a glibc y para 1997 la mayoría de los commits fueron hechos por él. Drepper ocupó el puesto de mantenedor durante muchos años y hasta 2012 acumuló el 63% de todos los commits al proyecto. [14]
En mayo de 2009, glibc se migró a un repositorio Git . [14]
En 2010, se resolvió un problema de licencia que fue causado por la implementación de Sun RPC en glibc que no era compatible con GPL . Se solucionó volviendo a otorgar licencias a los componentes de Sun RPC bajo la licencia BSD . [15] [16]
En 2014, glibc sufrió un error de ruptura de ABI en s390. [17]
En julio de 2017, 30 años después de haber fundado glibc, Roland McGrath anunció su marcha, "declarándose mantenedor emérito y retirándose de la participación directa en el proyecto. Estos últimos meses, si no los últimos años, han demostrado que ya no me necesitáis". [10]
En 2018, el mantenedor Raymond Nicholson eliminó una broma sobre el aborto del código fuente de glibc. Fue restaurada más tarde por Alexandre Oliva después de que Richard Stallman exigiera que se la devolvieran. [18]
En 2021, se eliminó del proyecto el requisito de cesión de derechos de autor a la Free Software Foundation . [19]
En 1994, los desarrolladores del núcleo Linux bifurcaron glibc. Su bifurcación, "Linux libc", se mantuvo por separado hasta alrededor de 1998. Debido a que la atribución de derechos de autor era insuficiente, los cambios no se pudieron fusionar de nuevo en GNU Libc. [20] Cuando la FSF lanzó glibc 2.0 en enero de 1997, los desarrolladores del núcleo descontinuaron Linux libc debido a la mayor conformidad de glibc 2.0 con los estándares POSIX. [21] glibc 2.0 también tenía una mejor internacionalización y una traducción más profunda, capacidad IPv6 , acceso a datos de 64 bits, facilidades para aplicaciones multiproceso, compatibilidad con versiones futuras y el código era más portátil. [22] La última versión utilizada de Linux libc usaba el nombre interno ( soname ) libc.so.5 . A partir de esto, glibc 2.x en Linux usa el soname libc.so.6 [23] [ se necesita una mejor fuente ]
En 2009, Debian y varios derivados cambiaron de glibc a la variante [25] eglibc. [26] Eglibc fue respaldado por un consorcio formado por Freescale , MIPS , MontaVista y Wind River . [27] Contenía cambios que lo hacían más adecuado para el uso integrado y había añadido soporte para arquitecturas que no eran compatibles con glibc, como el PowerPC e500 . El código de eglibc se fusionó de nuevo con glibc en la versión 2.20. [28] Desde 2014, eglibc está descontinuado. El Proyecto Yocto y Debian también volvieron a glibc desde el lanzamiento de Debian Jessie . [29]
A partir de 2001, el desarrollo de la biblioteca estuvo supervisado por un comité [30] , con Ulrich Drepper [31] como principal colaborador y mantenedor. La instalación del comité directivo estuvo rodeada de una controversia pública, ya que Ulrich Drepper la describió abiertamente como una maniobra de adquisición hostil fallida por parte de Richard Stallman . [32] [33] [34] [35]
En marzo de 2012, el comité directivo votó disolverse y eliminar a Drepper a favor de un proceso de desarrollo impulsado por la comunidad, con Ryan Arnold, Maxim Kuvyrkov, Joseph Myers, Carlos O'Donell y Alexandre Oliva asumiendo la responsabilidad del mantenimiento de GNU (pero sin poder adicional para la toma de decisiones). [36] [37] [38]
glibc proporciona la funcionalidad requerida por la Especificación Única de UNIX , POSIX (1c, 1d y 1j) y parte de la funcionalidad requerida por las interfaces ISO C11 , ISO C99 , Berkeley Unix (BSD), la Definición de Interfaz de System V (SVID) y la Guía de Portabilidad X/Open (XPG), Edición 4.2, con todas las extensiones comunes a los sistemas compatibles con XSI (Interfaz de Sistema X/Open) junto con todas las extensiones X/Open UNIX.
Además, glibc también proporciona extensiones que se han considerado útiles o necesarias durante el desarrollo de GNU .
glibc se utiliza en sistemas que ejecutan muchos núcleos diferentes y diferentes arquitecturas de hardware . Su uso más común es en sistemas que usan el núcleo Linux en hardware x86 , sin embargo, el hardware oficialmente soportado [39] incluye: ARM , ARC , C-SKY, DEC Alpha , IA-64 , Motorola m68k , MicroBlaze , MIPS , Nios II , PA-RISC , PowerPC , RISC-V , s390 , SPARC y x86 (las versiones antiguas soportan TILE ). Soporta oficialmente los núcleos Hurd y Linux . Además, hay versiones con muchos parches que se ejecutan en los núcleos de FreeBSD y NetBSD (a partir de los cuales se construyen los sistemas Debian GNU/kFreeBSD y Debian GNU/NetBSD , respectivamente), así como una versión bifurcada de OpenSolaris . [40] También se utiliza (en forma editada) y se llama libroot.so en BeOS y Haiku . [41]
En el pasado, se ha criticado a glibc por ser " inflada " y más lenta que otras bibliotecas, por ejemplo, por Linus Torvalds [42] y por programadores de Linux embebido . Por este motivo, se han creado varias bibliotecas estándar de C alternativas que enfatizan un tamaño más pequeño. Sin embargo, muchos proyectos de dispositivos pequeños usan GNU libc en lugar de las alternativas más pequeñas debido a su compatibilidad con aplicaciones, cumplimiento de estándares y completitud. Algunos ejemplos incluyen Openmoko [43] y Familiar Linux para dispositivos portátiles iPaq (cuando se usa el software de pantalla GPE ). [44]
glibc no implementa las interfaces de verificación de límites definidas en C11 y no implementó strlcpy y strlcat [45] [46] hasta 2023 debido a que "en la práctica, estas funciones pueden causar problemas, ya que su uso previsto fomenta el truncamiento silencioso de datos, agrega complejidad e ineficiencia y no evita todos los desbordamientos de búfer en los destinos". [47] Las preguntas frecuentes señalaron que las interfaces de verificación de límites eran opcionales en el estándar ISO y que snprintf estaba disponible como alternativa. [47]
Existen capas de compatibilidad (" shims ") que permiten que los programas escritos para otros ecosistemas se ejecuten en sistemas que ofrecen la interfaz glibc. Entre ellas se incluyen libhybris , una capa de compatibilidad para Bionic de Android , y Wine , que puede considerarse una capa de compatibilidad de las API de Windows con glibc y otras API nativas disponibles en sistemas tipo Unix.
LGPL-2.1 o posterior en los encabezados
LGPL-2.1-or-later en los encabezados
LGPL-2.0 o posterior en los encabezados
La mayoría de las bibliotecas están listas. Roland McGrath [...] tiene un conjunto casi completo de funciones de biblioteca ANSI C. Esperamos que estén listas en algún momento de esta primavera.
Ahora contiene todas las funciones ANSI C-1989 y POSIX.1-1990, y se está trabajando en POSIX.2 y funciones Unix (BSD y System V).
De las casi 19.000 confirmaciones que se encontraron en el repositorio git del proyecto (que contiene cambios desde 1995), más de 12.000 fueron realizadas por Ulrich.
la división entre GNU LIBC y Linux LIBC - continuó durante años mientras Linux se estabilizaba, y luego las bifurcaciones volvieron a fusionarse en un solo proyecto
{{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace ){{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace )En 2001 se formó el Comité Directivo de la Biblioteca C de GNU..., que actualmente está formado por Mark Brown, Paul Eggert, Andreas Jaeger, Jakub Jelinek, Roland McGrath y Andreas Schwab.
La esencia es que se queja de que no estoy siguiendo las "políticas de GNU" y, por lo tanto, tengo que ser reemplazado por un comité directivo del que podría ser parte. Algunos de ustedes (a saber, Roland y Andreas S.) probablemente saben sobre esto ya que propuso a ambos como otros miembros del comité. Además, estaba Mark Brown en la lista (conozco a alguien con este nombre en IBM que también encajaría en este grupo, pero no estoy seguro de si realmente es él). De todos modos, rechazo esto por completo. No ayuda en absoluto, lo contrario es cierto. Primero, no estoy al tanto de ninguna política esencial que esté violando. Las únicas son que no estoy siguiendo órdenes de RMS, que claramente tienen intenciones políticas (lo que por supuesto es un sacrilegio) y posiblemente que no me importa Winblowz (si es que esto último cuenta). Nada de esto cambiará de ninguna manera.
Trató de conspirar a mis espaldas y persuadir a los otros desarrolladores principales para que tomaran el control de modo que al final él tuviera el control y pudiera dictar lo que le placiera. Este intento fracasó, pero siguió presionando a la gente de todas partes y la cosa se puso realmente fea. Al final acepté la creación de un llamado "comité directivo" (SC).
libroot.so no forma parte del proyecto GNU y está incluido en el código fuente de Haiku.
Usaremos glibc (no uClibC)... Las alternativas pueden ahorrar más espacio y estar más optimizadas, pero es más probable que nos den dolores de cabeza por la integración.
Pregunta: ¿Qué versión de GLIBC se utilizó para crear Familiar 0.8.4? Respuesta: 2.3.3