La biblioteca C de GNU , comúnmente conocida como glibc , es el Proyecto GNU aplicación de la 's biblioteca estándar C . A pesar de su nombre, ahora también es compatible directamente con C ++ (e, indirectamente, con otros lenguajes de programación ). Fue iniciado en la década de 1980 por la Free Software Foundation (FSF) para el sistema operativo GNU .
Autor (es) original (es) | Roland McGrath |
---|---|
Desarrollador (es) | Proyecto GNU |
Versión inicial | 1987 [1] |
Lanzamiento estable | 2,33 [2] (1 de febrero de 2021 ) [±] |
Repositorio | |
Escrito en | C |
Sistema operativo | Tipo Unix |
Tipo | Biblioteca de ejecución |
Licencia | Desde 2.2.4: LGPL-2.1-or-later [3] [4] 0.1? a 2.2.3: LGPL-2.0-o-posterior [5] |
Sitio web | www |
Lanzado bajo la GNU Lesser General Public License , [3] glibc es un software libre . El proyecto GNU C Library proporciona las bibliotecas centrales para el sistema GNU, así como muchos sistemas que usan Linux como núcleo . Estas bibliotecas proporcionan API críticas, incluidas ISO C11 , POSIX.1-2008 , BSD , API específicas del sistema operativo y más. Estas API incluyen funciones fundamentales como abrir , leer , escribir , malloc , printf , getaddrinfo , dlopen , pthread_create , crypt , login , exit y más.
Historia
El proyecto glibc fue inicialmente escrito principalmente por Roland McGrath, que trabajaba para la Free Software Foundation (FSF) en la década de 1980 cuando era adolescente. [6] En febrero de 1988, describe FSF glibc como habiendo casi completado la funcionalidad requerida por ANSI C . [7] Para 1992, tenía las funciones ANSI C-1989 y POSIX.1-1990 implementadas y se estaba trabajando en POSIX.2. [8] En septiembre de 1995 Ulrich Drepper hizo su primera contribución a la glibc y en 1997 la mayoría de los compromisos fueron realizados por él. Drepper ocupó el puesto de mantenimiento durante muchos años y hasta 2012 acumuló el 63% de todos los compromisos con el proyecto. [9]
En mayo de 2009, glibc se migró a un repositorio de Git . [9]
Libc de Linux
En 1994, los desarrolladores del kernel de 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 con GNU Libc. [10]
Cuando la FSF lanzó glibc 2.0 en enero de 1997, los desarrolladores del kernel descontinuaron Linux libc debido al cumplimiento superior de glibc 2.0 con los estándares POSIX. [11] glibc 2.0 también tuvo una mejor internacionalización y una traducción más profunda, capacidad IPv6 , acceso a datos de 64 bits, instalaciones para aplicaciones multiproceso, compatibilidad con versiones futuras y el código era más portátil. [12]
La última versión usada de Linux libc usó el nombre interno ( soname ) libc.so.5 . Siguiendo a esto, glibc 2.x en Linux usa el soname libc.so.6 [13] [se necesita una mejor fuente ]
Comité Directivo
A partir de 2001, el desarrollo de la biblioteca había sido supervisado por un comité, [14] con Ulrich Drepper [15] como contribuyente y mantenedor principal. 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 de Richard Stallman. [16] [17] [18]
En marzo de 2012, el comité directivo votó para disolverse y destituir 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 de toma de decisiones). [19] [20]
En julio de 2017, 30 años después de que comenzara con glibc, Roland McGrath anunció su partida, "declarándome mantenedor emérito y retirándome de la participación directa en el proyecto. Estos últimos meses, si no los últimos años, han demostrado que no me necesita más ". [6]
Conmutadores de Debian
Después de largas controversias sobre el estilo de liderazgo de Drepper y la aceptación de la contribución externa, [21] [22] [23] Debian cambió públicamente a la bifurcación glibc EGLIBC en 2009 [24] y volvió a glibc con la versión Debian 8.0 (Jessie) en abril de 2015. [25]
Historial de versiones
Para la mayoría de los sistemas, la versión de glibc se puede obtener ejecutando el archivo lib (por ejemplo, /lib/libc.so.6).
Versión | Fecha | Notas | Adopción |
---|---|---|---|
0,1 - 0,6 | Octubre de 1991 - febrero de 1992 | ||
1.0 | Febrero de 1992 | ||
1.01 - 1.09.3 | Marzo de 1992 - diciembre de 1994 | ||
1,90 - 1,102 | Mayo de 1996 - enero de 1997 | ||
2.0 | Enero de 1997 | ||
2.0.1 | Enero de 1997 | ||
2.0.2 | Febrero de 1997 | ||
2.0.91 | Diciembre de 1997 | ||
2.0.95 | Julio de 1998 | ||
2.1 | Febrero de 1999 | ||
2.1.1 | Marzo de 1999 | ||
2.2 | Noviembre de 2000 | ||
2.2.1 | Enero de 2001 | ||
2.2.2 | Febrero de 2001 | ||
2.2.3 | Marzo de 2001 | ||
2.2.4 | Julio de 2001 | ||
2.3 | Octubre de 2002 | ||
2.3.1 | Octubre de 2002 | ||
2.3.2 | Febrero de 2003 | Debian 3.1 (Sarge) | |
2.3.3 | Diciembre de 2003 | ||
2.3.4 | Diciembre de 2004 | Estándar para Linux Standard Base (LSB) 3.0 | RHEL 4 (actualización 5) |
2.3.5 | Abril de 2005 | SLES 9 | |
2.3.6 | Noviembre de 2005 | Debian 4.0 (Etch) | |
2.4 | Marzo de 2006 | Estándar para LSB 4.0, soporte de inotificación inicial | SLES 10 |
2.5 | Septiembre de 2006 | Completa inotify ayuda | RHEL 5 |
2.6 | Mayo de 2007 | ||
2,7 | Octubre de 2007 | Debian 5 (Lenny), Ubuntu 8.04 | |
2.8 | Abril de 2008 | ||
2.9 | Noviembre de 2008 | ||
2.10 | Mayo de 2009 | ||
2.11 | Octubre de 2009 | SLES 11, Ubuntu 10.04, eglibc usado en Debian 6 (Squeeze) | |
2.12 | Mayo de 2010 | RHEL 6 | |
2.13 | Enero de 2011 | eglibc 2.13 usado en Debian 7 (Wheezy) | |
2.14 | Junio de 2011 | ||
2.15 | Marzo de 2012 | Ubuntu 12.04 y 12.10 | |
2.16 | junio 2012 | Compatibilidad con x32 ABI , conformidad con ISO C11 , SystemTap | |
2.17 | Diciembre 2012 | Soporte ARM de 64 bits | Ubuntu 13.04, RHEL 7 |
2.18 | Agosto 2013 | Compatibilidad mejorada con C ++ 11 . Soporte para elisión de bloqueo Intel TSX . Soporte para las microarquitecturas Xilinx MicroBlaze e IBM POWER8 . | Fedora 20 |
2.19 | Febrero 2014 | Sondas SystemTap para malloc . Compatibilidad con la función indirecta GNU (IFUNC) para ppc32 y ppc64. Nueva macro de prueba de funciones _DEFAULT_SOURCE para reemplazar _SVID_SOURCE y _BSD_SOURCE. Documentación de seguridad preliminar para todas las funciones del manual. Cambio de ABI en ucontext y jmp_buf para s390 / s390x. | Ubuntu 14.04, eglibc 2.19 usado en Debian 8 (Jessie), openSUSE 13, SLES 12 |
2,20 | Septiembre de 2014 | Soporte para bloqueos de descripción de archivo | Fedora 21 |
2.21 | Febrero de 2015 | Nueva implementación de semáforo | Ubuntu 15.04, Fedora 22 |
2.22 | Agosto de 2015 | Soporte para habilitar Google Native Client (NaCl), que originalmente se ejecutaba en x86, que se ejecutaba en ARMv7-A , Unicode 7.0 | Fedora 23 |
2.23 | Febrero de 2016 | Unicode 8.0 | Fedora 24, Ubuntu 16.04 |
2,24 | Agosto de 2016 | Se han eliminado algunas funciones obsoletas | Fedora 25, Ubuntu 16.10 y 17.04, Debian 9 (Stretch) |
2,25 | Febrero de 2017 | Los getentropy y getrandom las funciones, y la han añadido fichero de cabecera. | Fedora 26 |
2,26 | Agosto de 2017 | Rendimiento mejorado (caché por subproceso para malloc), compatibilidad con Unicode 10 | Fedora 27, Ubuntu 17.10 |
2,27 | Febrero de 2018 | Optimizaciones de rendimiento. Soporte RISC-V . | Fedora 28, Ubuntu 18.04 |
2,28 | Agosto de 2018 | statx , renameat2 Unicode 11.0.0 | Ubuntu 18.10, [26] RHEL 8.0.0, [27] Debian 10 (Buster), [28] Fedora 29 [29] [30] |
2,29 | Febrero de 2019 |
| Ubuntu 19.04, [32] Fedora 30 [33] [34] |
2.30 | Agosto de 2019 | Unicode 12.1.0, el enlazador dinámico acepta el --preload argumento para precargar objetos compartidos, la gettid función se ha agregado en Linux, compatibilidad con el calendario de Minguo (República de China), se agregó una nueva era japonesa a la configuración regional ja_JP, las funciones de asignación de memoria fallan y el tamaño total del objeto es mayor que PTRDIFF_MAX ; CVE - 2019-7309 y CVE- 2019-9169 fijo [35] | Ubuntu 19.10, [36] Fedora 31 [37] |
2,31 | Febrero de 2020 | Soporte estándar inicial C2x | Ubuntu 20.04, [38] Fedora 32 [39] |
2,32 | Agosto de 2020 | Unicode 13.0, atributo 'acceso' para mejores advertencias en GCC 10, es decir, para "ayudar a detectar desbordamientos de búfer y otros accesos fuera de límites" [40] | Ubuntu 20.10, Fedora 33 |
2,33 | Febrero 2021 | HWCAPS | Ubuntu 21.04 |
2,34 | TBA | Ubuntu 21.10 |
Funcionalidad
glibc proporciona la funcionalidad requerida por la Especificación Única de UNIX , POSIX (1c, 1d y 1j) y algunas de las funciones requeridas por las interfaces ISO C11 , ISO C99 , Berkeley Unix (BSD), la Definición de Interfaz del Sistema V (SVID) y la X / Open Portability Guide (XPG), edición 4.2, con todas las extensiones comunes a los sistemas compatibles con XSI ( X / Open System Interface ) 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 .
Kernel y hardware compatibles
glibc se utiliza en sistemas que ejecutan muchos kernels y arquitecturas de hardware diferentes . Su uso más común es en sistemas que usan el kernel de Linux en hardware x86 , sin embargo, el hardware oficialmente soportado [41] incluye: ARM de 32 bits y su ISA de 64 bits más reciente (AArch64) , C-SKY , DEC Alpha , IA-64 , Motorola m68k , MicroBlaze , MIPS , Nios II , PA-RISC , PowerPC , RISC-V , s390 , SPARC y x86 (las versiones anteriores admiten TILE ). Es compatible oficialmente con los kernels de Hurd y Linux . Además, hay versiones muy parcheadas 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 . [42] También se utiliza (en una forma editada) y se denomina libroot.so en BeOS y Haiku . [43]
Usar en dispositivos pequeños
glibc ha sido criticado por ser " inflado " y más lento que otras bibliotecas en el pasado, por ejemplo, por Linus Torvalds [44] y programadores de Linux embebidos . Por esta razón, se han creado varias bibliotecas estándar de C alternativas que enfatizan una huella más pequeña. Sin embargo, muchos proyectos de dispositivos pequeños utilizan GNU libc sobre las alternativas más pequeñas debido a su compatibilidad con aplicaciones, cumplimiento de estándares e integridad. Los ejemplos incluyen Openmoko [45] y Familiar Linux para dispositivos portátiles iPaq (cuando se usa el software de visualización GPE ). [46]
Capas de compatibilidad
Hay capas de compatibilidad (" shims ") que permiten que los programas escritos para otros ecosistemas se ejecuten en sistemas de oferta de interfaz glibc. Estos incluyen libhybris , una capa de compatibilidad para Bionic y Wine de Android , que puede verse como una capa de compatibilidad desde las API de Windows hasta glibc y otras API nativas disponibles en sistemas similares a Unix.
Ver también
- Gnulib
- API del kernel de Linux
Referencias
- ^ Corbet, Jonathan (28 de marzo de 2012). "Un punto de inflexión para GNU libc" . LWN.net.
- ^ Adhemerval Zanella (1 de febrero de 2021). "La versión 2.33 de la biblioteca GNU C ya está disponible" (lista de correo) . Consultado el 2 de febrero de 2020 .
- ^ a b "sourceware.org Git - glibc.git / blob - Makefile" . sourceware.org . Consultado el 10 de junio de 2021 .
LGPL-2.1-o posterior en los encabezados
- ^ "sourceware.org Git - glibc.git / commit - Actualización a LGPL v.2.1" . sourceware.org . 6 de julio de 2001 . Consultado el 10 de junio de 2021 .
LGPL-2.1-o posterior en los encabezados
- ^ "sourceware.org Git - glibc.git / commit - Importación inicial: Makefile" . sourceware.org . 18 de febrero de 1995 . Consultado el 10 de junio de 2021 .
LGPL-2.0-o posterior en los encabezados
- ^ a b "Roland McGrath se retira como mantenedor de glibc [LWN.net]" . lwn.net . El 7 de julio de 2017 . Consultado el 8 de julio de 2017 .
- ^ "GNU's Bulletin, vol. 1 no. 4, febrero de 1988" .
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 listos en algún momento de esta primavera.
- ^ "Boletín de GNU, vol. 1 no. 12" .
Ahora contiene todas las funciones ANSI C-1989 y POSIX.1-1990, y se está trabajando en las funciones POSIX.2 y Unix (BSD y System V)
- ^ a b Corbet, Jonathan (28 de marzo de 2012). "Un punto de inflexión para GNU libc" . LWN.net.
De las casi 19.000 confirmaciones encontradas en el repositorio de git del proyecto (que contiene cambios desde 1995), Ulrich realizó más de 12.000.
- ^ "Historia de glibc y Linux libc" . Revista de software libre . Consultado el 10 de mayo de 2021 .
- ^ "Bifurcación: hasta te puede pasar a ti" . 12 de septiembre de 2008.
la división entre GNU LIBC y Linux LIBC - continuó durante años mientras Linux se estabilizaba, y luego las bifurcaciones se volvieron a fusionar en un solo proyecto
- ^ Lee, Elliot (2001). "Una comparación técnica de glibc 2.x con bibliotecas de sistema heredadas" . Archivado desde el original el 11 de abril de 2004.
- ^ "Ensayo sobre el miedo a la bifurcación, ver" 6. glibc -> Linux libc -> glibc " " .
- ^ "página de inicio de glibc" .
En 2001, se formó el Comité Directivo de la Biblioteca GNU C…, y actualmente está integrado por Mark Brown, Paul Eggert, Andreas Jaeger, Jakub Jelinek, Roland McGrath y Andreas Schwab.
- ^ "Ulrich Drepper" . LinkedIn . Consultado el 13 de junio de 2012 .
- ^ Drepper, Ulrich (26 de junio de 2000). "RMS está de nuevo" . sourceware.org . Consultado el 20 de noviembre de 2015 .
Hace unas semanas, RMS inició el siguiente ataque contra mí (un solo correo, seguido de intentos indirectos de tomar influencia, seguido de otro correo hoy). 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 formar parte. Algunos de ustedes (a saber, Roland y Andreas S.) probablemente sepan esto ya que él 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 está ayudando en absoluto, es todo lo contrario. Primero, no tengo conocimiento de ninguna política esencial que esté violando. Los únicos 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.
- ^ Drepper, Ulrich (15 de agosto de 2001). "glibc 2.2.4" . sourceware.com . Consultado el 29 de noviembre de 2015 .
Y ahora algunas cosas no tan bonitas. Stallman intentó recientemente lo que yo llamaría una toma de control hostil del desarrollo de glibc. Trató de conspirar a mis espaldas y persuadir a los otros desarrolladores principales para que tomen el control para que al final él tenga el control y pueda dictar lo que le plazca. Este intento falló, pero siguió presionando a la gente en todas partes y se puso realmente feo. Al final acepté la creación de un llamado "comité de dirección" (SC).
- ^ rms-acusado-de-intentar-glibc-hostile-takeover en slashdot .com el 19 de agosto de 2001
- ^ McGrath, Roland (26 de marzo de 2012). "disolución del comité directivo de glibc" . Sourceware.org . Consultado el 13 de junio de 2012 .
- ^ Myers, Joseph S. (26 de marzo de 2012). "Desarrollo y mantenimiento de la biblioteca GNU C" . Sourceware.org . Consultado el 13 de junio de 2012 .
- ^ Ulrich Drepper 2007-10-03 06:13:55 UTC "Esto no tiene nada que ver con" solo x86 ". Todas las ABI diseñadas por personas que tienen un poco de comprensión no requieren cambios. Cualquier cambio tendrá un impacto negativo en las arquitecturas bien diseñadas para el único beneficio de esta basura incrustada. Pero su propia versión del archivo en el complemento ".
- ^ Drepper, Ulrich (25 de mayo de 2005). "Dictadura de las Minorías" . udrepper.livejournal.com . Consultado el 15 de enero de 2012 .
¿Qué arquitecturas vale la pena apoyar? […]. No solo tenemos que buscar el soporte de irrelevancia (qué porcentaje se preocupa por Vax, PArisc), también tenemos que mirar el nivel de complejidad adicional que requiere el soporte. Algunas ABI simplemente se definen deliberadamente para ser diferentes de otras (ver IA-64), lo que requiere una gran cantidad de esfuerzo. También hay capacidades significativamente divergentes (por ejemplo, la falta de operaciones atómicas en demasiadas arquitecturas). Esto con demasiada frecuencia provoca un código innecesariamente paralizado, ya que escribir código de una manera que permita un uso óptimo en todas las situaciones es muy difícil. La solución debe ser restringir el soporte a solo un puñado de arquitecturas que son compatibles con el proyecto. Todos los demás apoyos deben ocurrir fuera del árbol y, por lo tanto, todo el trabajo debe ser realizado por los grupos de intereses especiales. No quiero decir que sigamos todos estos puntos a la perfección, pero para un gran proyecto, glibc ciertamente se acerca más a esto.
- ^ Jarno, Aurélien (5 de mayo de 2009). "Debian está cambiando a EGLIBC" . aurel32.net . Consultado el 15 de enero de 2012 .
Upstream más amigable (especialmente con respecto a las arquitecturas integradas): “Fomente la cooperación, la comunicación, la cortesía y el respeto entre los desarrolladores” (en contraposición a esto).
- ^ timothy (6 de mayo de 2009). "Debian cambiando de Glibc a Eglibc" . Slashdot . Consultado el 14 de enero de 2012 .
- ^ Registro de cambios del paquete Debian
- ^ "CosmicCuttlefish / ReleaseNotes - Wiki de Ubuntu" .
- ^ "Capítulo 5. RHEL 8.0.0 versión Red Hat Enterprise Linux 8" .
- ^ "Capítulo 2. Novedades de Debian 10" .
- ^ "Cambios / GLIBC228" .
- ^ "Red Hat Bugzilla: error 1598403" .
- ^ "sourceware.org Git - glibc.git / blob - NOTICIAS" .
- ^ "DiscoDingo / ReleaseNotes - Wiki de Ubuntu" .
- ^ "Cambios / GLIBC229" .
- ^ "Red Hat Bugzilla: error 1653403" .
- ^ "sourceware.org Git - glibc.git / blob - NOTICIAS" .
- ^ "EoanErmine / ReleaseNotes - Wiki de Ubuntu" .
- ^ "Cambios / GLIBC230" .
- ^ "Focal (20.04): paquete glibc: Ubuntu" .
- ^ "Cambios / GLIBC231" .
- ^ "La versión 2.32 de la biblioteca GNU C ya está disponible" . sourceware.org . Consultado el 13 de agosto de 2020 .
- ^ "Los mantenedores de máquinas de la biblioteca GNU C" .
- ^ Bartley, David; Spang, Michael. "GNU / kOpenSolaris (GNU libc / base + núcleo de OpenSolaris)" . Consultado el 16 de diciembre de 2008 .
- ^ "Fuente Haiku" .
libroot.so no forma parte del proyecto GNU y está incluido en el código fuente de Haiku.
- ^ Torvalds, Linus (9 de enero de 2002). "Publicar en la lista de correo de glibc" .
- ^ "Componentes de OpenMoko" .
Usaremos glibc (no uClibC)… Las alternativas pueden ahorrar más espacio y estar más optimizadas, pero es más probable que nos den problemas de integración.
- ^ "Re: [Familiar] ¿Qué glibc para Familiar 0.8.4?" .
Pregunta: ¿Qué versión de GLIBC se usó para construir el Familiar 0.8.4? Respuesta: 2.3.3
enlaces externos
- Página web oficial