stringtranslate.com

glibc

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.

Historia

Ulrich Drepper en 2007, el autor principal de glibc
La biblioteca GNU C es un contenedor de las llamadas al sistema del kernel de Linux .
El núcleo de Linux y la biblioteca C de GNU forman juntos la API de Linux . Después de la compilación, los binarios ofrecen una ABI .

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]

Horquilla y variante

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]

Comité Directivo

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]

Funcionalidad

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 .

Hardware y kernels compatibles

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]

Uso en dispositivos pequeños

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]

Funciones de cadena seguras

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]

Capas de compatibilidad

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.

Véase también

Notas

  1. ^ LGPL-2.1 o posterior desde el 6 de julio de 2001, versión 2.2.4. [3] [4]
  2. ^ LGPL-2.0 o posterior desde 1992 hasta el 5 de julio de 2001. ¿Versión 1.04? hasta 2.2.3. [5] [6]

Referencias

  1. ^ Corbet, Jonathan (28 de marzo de 2012). «Un punto de inflexión para GNU libc». LWN.net. Archivado desde el original el 23 de abril de 2016. Consultado el 5 de abril de 2012 .
  2. ^ "La versión 2.40 de la biblioteca GNU C ya está disponible". 22 de julio de 2024. Consultado el 23 de julio de 2024 .
  3. ^ ab "sourceware.org Git – glibc.git/blob – Makefile". sourceware.org . Archivado desde el original el 10 de junio de 2021 . Consultado el 10 de junio de 2021 . LGPL-2.1 o posterior en los encabezados
  4. ^ "sourceware.org Git – glibc.git/commit – Actualización a LGPL v.2.1". sourceware.org . 6 de julio de 2001. Archivado desde el original el 10 de junio de 2021 . Consultado el 10 de junio de 2021 . LGPL-2.1-or-later en los encabezados
  5. ^ "glibc-1.04.tar.Z". 4 de septiembre de 1992. Archivado desde el original el 22 de diciembre de 2021 . Consultado el 22 de diciembre de 2021 .
  6. ^ "sourceware.org Git – glibc.git/commit – Importación inicial: Makefile". sourceware.org . 18 de febrero de 1995. Archivado desde el original el 10 de junio de 2021 . Consultado el 10 de junio de 2021 . LGPL-2.0 o posterior en los encabezados
  7. ^ "sourceware.org Git – glibc.git/blob – NOTICIAS". Archivado desde el original el 21 de marzo de 2022. Consultado el 26 de abril de 2019 .
  8. ^ "sourceware.org Git – glibc.git/blob – NOTICIAS". Archivado desde el original el 26 de septiembre de 2019 . Consultado el 26 de abril de 2019 .
  9. ^ "La versión 2.32 de la biblioteca GNU C ya está disponible". sourceware.org . Archivado desde el original el 28 de septiembre de 2020 . Consultado el 13 de agosto de 2020 .
  10. ^ ab "Roland McGrath se retira como mantenedor de glibc [LWN.net]". lwn.net . 7 de julio de 2017. Archivado desde el original el 1 de agosto de 2020 . Consultado el 8 de julio de 2017 .
  11. ^ Chirgwin, Richard (10 de julio de 2017). «Roland McGrath deja el cargo de mantenedor de glibc después de 30 años». The Register . Situation Publishing. Archivado desde el original el 7 de marzo de 2024 . Consultado el 1 de junio de 2024 .
  12. ^ "GNU's Bulletin, vol. 1 no. 4, febrero de 1988". Archivado desde el original el 16 de abril de 2016 . Consultado el 16 de abril de 2014 . 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.
  13. ^ "GNU's Bulletin, vol. 1 no. 12". Archivado desde el original el 11 de marzo de 2016. Consultado el 16 de abril de 2014. 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).
  14. ^ ab Corbet, Jonathan (28 de marzo de 2012). "Un punto de inflexión para GNU libc". LWN.net. Archivado desde el original el 23 de abril de 2016. Consultado el 5 de abril de 2012. 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.
  15. ^ "Glibc finalmente es software libre – The H Open: Noticias y características". H-online . Archivado desde el original el 21 de marzo de 2022 . Consultado el 19 de septiembre de 2021 .
  16. ^ Phipps, Simon (2 de septiembre de 2010). «Gnu/Linux: por fin, es realmente software libre». InfoWorld . Archivado desde el original el 28 de octubre de 2021 . Consultado el 19 de septiembre de 2021 .
  17. ^ Corbet, Jonathan. "La rotura de la ABI del glibc s390 [LWN.net]". LWN.net . Archivado desde el original el 17 de marzo de 2022 . Consultado el 17 de marzo de 2022 .
  18. ^ Claburn, Thomas. «La 'broma sobre el aborto' de Glibc deja a Richard Stallman molesto». The Register . Archivado desde el original el 17 de enero de 2023. Consultado el 17 de enero de 2023 .
  19. ^ Halfacree, Gareth. «Los proyectos de código abierto glibc y gnulib buscan cortar los lazos de copyright con la Free Software Foundation». The Register . Archivado desde el original el 17 de enero de 2023. Consultado el 17 de enero de 2023 .
  20. ^ "Historia de glibc y libc de Linux". Revista de Software Libre . Archivado desde el original el 26 de septiembre de 2021. Consultado el 10 de mayo de 2021 .
  21. ^ "Bifurcación: incluso podría pasarte a ti". 24 de octubre de 2000. Archivado desde el original el 15 de septiembre de 2009. 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
  22. ^ Lee, Elliot (9 de julio de 1998). "Una comparación técnica de glibc 2.x con bibliotecas de sistemas heredados". Archivado desde el original el 11 de abril de 2004.
  23. ^ Moen, Rick (20 de mayo de 2021) [14 de noviembre de 1999]. "Ensayo sobre el miedo a la bifurcación". linuxmafia.com . 6. glibc --> Linux libc --> glibc. Archivado desde el original el 27 de noviembre de 2023.
  24. ^ "EGLIBC: FAQ" (Preguntas frecuentes sobre EGLIBC). eglibc.org . Archivado desde el original el 17 de marzo de 2012. Consultado el 16 de septiembre de 2021 .
  25. ^ Los desarrolladores de eglibc enfatizaron que eglibc no es una bifurcación de glibc, sino una variante que acepta parches del proyecto glibc original. [24]
  26. ^ Vaduva, Alexandru (2016). Linux: desarrollo integrado: aproveche el poder de Linux para desarrollar proyectos de Linux integrados atractivos y potentes: un curso en tres módulos. Alex Gonzalez, Chris Simmonds. Birmingham, Reino Unido: Packt Publishing. p. 24. ISBN 978-1-78712-445-5.OCLC 960471438  .
  27. ^ Stiebert, Julius (6 de mayo de 2009). "Debian wechselt zur Eglibc". golem.de . Archivado desde el original el 16 de septiembre de 2021 . Consultado el 16 de septiembre de 2021 .
  28. ^ Simmonds, Chris (2017). Dominar la programación Linux embebida: liberar todo el potencial de Linux embebido (2.ª ed.). Birmingham, Reino Unido. p. 26. ISBN 978-1-78728-885-0.OCLC 995052708  .{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( enlace )
  29. ^ Vaduva, Alexandru (2015). Aprendiendo Linux embebido usando el proyecto Yocto: desarrolle sistemas Linux embebidos potentes con los componentes del proyecto Yocto. Birmingham, Reino Unido. p. 29. ISBN 978-1-78439-519-3.OCLC 914797028  .{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( enlace )
  30. ^ "página de inicio de glibc". Archivado desde el original el 22 de abril de 2016 . Consultado el 16 de abril de 2014 . 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.
  31. ^ "Ulrich Drepper". LinkedIn. Archivado desde el original el 10 de septiembre de 2014. Consultado el 13 de junio de 2012 .
  32. ^ en línea, heise (19 de agosto de 2001). "El creador de código abierto Stallman". heise en línea (en alemán). Archivado desde el original el 16 de septiembre de 2021 . Consultado el 16 de septiembre de 2021 .
  33. ^ Drepper, Ulrich (26 de junio de 2000). "RMS está en ello otra vez". sourceware.org. Archivado desde el original el 28 de diciembre de 2012. 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 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.
  34. ^ Drepper, Ulrich (15 de agosto de 2001). "glibc 2.2.4". sourceware.com. Archivado desde el original el 9 de abril de 2016. Consultado el 29 de noviembre de 2015. Y ahora algunas cosas no tan agradables. Stallman intentó recientemente lo que yo llamaría una adquisición hostil del desarrollo de glibc . 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).
  35. ^ rms-acusado-de-intentar-una-toma-hostil-de-control-de-glibc Archivado el 1 de agosto de 2020 en Wayback Machine en slashdot .com el 19 de agosto de 2001
  36. ^ "El Comité Directivo de la Biblioteca C de GNU se disuelve – The H Open: Noticias y características". H-Online . Archivado desde el original el 21 de marzo de 2023 . Consultado el 16 de marzo de 2023 .
  37. ^ McGrath, Roland (26 de marzo de 2012). «El comité directivo de glibc se disuelve». Sourceware.org. Archivado desde el original el 26 de septiembre de 2019. Consultado el 13 de junio de 2012 .
  38. ^ Myers, Joseph S. (26 de marzo de 2012). «Desarrollo y mantenimiento de la biblioteca GNU C». Sourceware.org. Archivado desde el original el 26 de septiembre de 2019. Consultado el 13 de junio de 2012 .
  39. ^ "Los mantenedores de la máquina de la biblioteca C de GNU". Archivado desde el original el 18 de abril de 2016 . Consultado el 8 de octubre de 2015 .
  40. ^ Bartley, David; Spang, Michael. «GNU/kOpenSolaris (GNU libc/base + núcleo OpenSolaris)». Archivado desde el original el 6 de noviembre de 2019. Consultado el 16 de diciembre de 2008 .
  41. ^ "Fuente de Haiku". GitHub . Archivado desde el original el 1 de mayo de 2016 . Consultado el 15 de octubre de 2014 . libroot.so no forma parte del proyecto GNU y está incluido en el código fuente de Haiku.
  42. ^ Torvalds, Linus (9 de enero de 2002). «Enviar a la lista de correo de glibc». Archivado desde el original el 12 de octubre de 2015. Consultado el 22 de julio de 2007 .
  43. ^ "Componentes OpenMoko". Archivado desde el original el 22 de abril de 2016. Consultado el 13 de mayo de 2008. 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.
  44. ^ "Re: [Familiar] ¿Qué glibc para Familiar 0.8.4?". Archivado desde el original el 12 de marzo de 2022. Consultado el 26 de noviembre de 2018. Pregunta: ¿Qué versión de GLIBC se utilizó para crear Familiar 0.8.4? Respuesta: 2.3.3
  45. ^ Kerrisk, Michael. "Los altibajos de strlcpy()". LWN.net . Archivado desde el original el 9 de diciembre de 2023 . Consultado el 9 de diciembre de 2023 .
  46. ^ Corbet, Jonathan. "Añadir strlcpy() a glibc". LWN.net . Archivado desde el original el 9 de diciembre de 2023 . Consultado el 9 de diciembre de 2023 .
  47. ^ ab "Preguntas frecuentes". sourceware.org . Archivado desde el original el 9 de diciembre de 2023 . Consultado el 9 de diciembre de 2023 .

Enlaces externos