GNU-C-Bibliothek

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
glibc
Heckert GNU white.svg
Basisdaten
Entwickler Free Software Foundation
Aktuelle Version 2.19
(8. Februar 2014)
Betriebssystem Unix, Linux
Kategorie Laufzeitbibliothek
Standardbibliothek
Lizenz LGPL
Deutschsprachig ja
gnu.org/software/libc/
Die GNU-C-Bibliothek enthält Subroutinen um die Systemaufrufe des Linux Kernels "drumherum".

glibc, die GNU C-Bibliothek, ist eine freie Implementierung der C-Standard-Bibliothek, die vom GNU-Projekt zusammen mit der GNU Compiler Collection entwickelt wird.

Die glibc steht unter der LGPL, was den Einsatz der Bibliothek bei nicht freier Software ermöglicht. Die glibc-Bibliothek gehört zu den fundamentalsten und wichtigsten Bibliotheken eines Linux-Betriebssystems.

Eigenschaften[Bearbeiten]

Eines der Designziele der glibc ist Portabilität über verschiedene Softwareplattformen, daher ist sie auch für eine Reihe von Betriebssystemen verfügbar. Einige Betriebssysteme, darunter GNU/Linux, benutzen die glibc als ihre offizielle Standard-C-Bibliothek. Die Bibliotheken der glibc sind selbst zum größten Teil auch in C geschrieben, laufzeitkritische Routinen verwenden jedoch Assembler-Code.

Funktionalität[Bearbeiten]

Die glibc stellt die in der Single Unix Specification, POSIX (1c, 1d, and 1j) geforderte Funktionalität bereit, zusätzlich Teile der ISO C99, Berkeley Unix (BSD) Interface, der System V Interface Definition (SVID) und der X/Open Portability Guide (XPG), Issue 4.2, mit allen Erweiterungen üblich für XSI-(X/Open System Interface)-konforme Systeme mit allen X/Open-Unix-Erweiterungen.

Zusätzlich zu den von den C-Standards geforderten Funktionen bietet sie auch eine Reihe von (nicht standardisierten) Erweiterungen.

Kritik[Bearbeiten]

Ihre Universalität und ihr gleichzeitiger Fokus auf die x86-Hardware-Plattform[1][2] ist gleichzeitig aber auch der größte Kritikpunkt an der glibc. Durch die Menge des einzubindenden Codes werden gegen die glibc gelinkte Programme unnötig groß[3] und damit potenziell langsam, andere Plattformen werden gar nicht unterstützt. Eine Reihe von Projekten hat sich daher der Idee verschrieben, Alternativen zu glibc zu entwickeln, die bekanntesten sind uClibc und dietlibc. Durch Beschränkung auf die wirklich wesentlichen Dinge erreichen diese Implementierungen eine weitaus geringere Größe für die fertigen Binärprogramme, allerdings lässt sich nicht jedes glibc-Programm auch gegen diese alternativen Bibliotheken linken, oder es verhält sich während der Ausführung unerwartet. Vor allem für eingebettete Systeme sind die schlanken libc-Implementierungen jedoch sehr sinnvoll.

Geschichte[Bearbeiten]

Maintainer[Bearbeiten]

Seit einiger Zeit wird das CVS-Repository der glibc bei Red Hat (http://sources.redhat.com/) gehosted, und fast ausschließlich von Ulrich Drepper gepflegt (Maintainer). Zusätzlich werden aktuelle Snapshots in den FTP-Archiven (ftp://sources.redhat.com/pub/glibc/snapshots/, ftp://ftp.gnu.org/gnu/glibc/) und deren Mirrors bereitgestellt. Damit kommt man der Community entgegen, da man z. B. durch restriktive Firewalls nicht von überall aus per CVS auf das Internet zugreifen kann.

glibc 2.3[Bearbeiten]

Mit der glibc 2.3 wurde eine Reihe von Verbesserungen integriert, die wichtigste davon ist die Ersetzung der alten Linux-Threading-Erweiterung linuxthreads durch die Native POSIX Thread Library (NPTL), die ebenso wie die glibc selbst federführend bei Red Hat entwickelt wurde. Die NPTL ermöglicht in Zusammenarbeit ab dem Linux-Kernel 2.6 eine deutliche Leistungssteigerung beim Threading und ist dabei POSIX-konform. Da man abwärtskompatibel sein wollte, steht für Programme, die auf nicht POSIX-konforme Verhaltensweisen der alten Implementation angewiesen sind, auch weiter LinuxThreads zur Verfügung, man muss es nun aber explizit per Linker-Direktive anfordern (z. B. LD_ASSUME_KERNEL=2.4.22). Auch die glibc selbst ist in den wichtigsten Funktionen abwärtskompatibel. Der kleinste gemeinsame Nenner ist dabei die Funktionalität der libc6, weshalb die Bezeichnungen glibc und libc6 auch häufig synonym füreinander verwendet werden (auf Alpha- und IA-64-Architekturen heißen die Bibliotheken aus historischen Gründen libc6.1, bieten jedoch die gleiche Funktionalität).

EGLIBC-Fork[Bearbeiten]

Wegen eines fehlenden Fokus der glibc auf Kompatibilität mit embedded Systemen[2], besonders ARM-Prozessoren, und Problemen mit dem Umgang des Projektverantwortlichen, Ulrich Drepper, bei Fehlerberichten ("bug reports") und eingereichten Korrekturen ("patches") wurde eine Abspaltung ("fork") des Projekts namens EGLIBC erstellt.[4] Nach Selbsteinschätzung der Entwickler handelt es sich bei eglibc jedoch nicht um einen klassischen Fork, vielmehr wollen die Entwickler die Änderungen von glibc übernehmen, aber auch Patches akzeptieren, die keinen Einzug in glibc gefunden haben.[5] Damit verfolgt eglibc das Ziel, einen freundlicheren Umgang mit Entwicklern zu pflegen und Embedded-Prozessoren besser zu unterstützen.[6] Als erste große Linux-Distribution hat Debian auf diese Implementierung umgestellt.[6][7] Ubuntu verwendet seit Version 9.10 EGLIBC.[8]

Versionsgeschichte[Bearbeiten]

Die Veröffentlichungsdaten wurden, so weit möglich, vom offiziellen FTP-Server übernommen.[9]

Version Datum Bemerkungen
Ältere Version; nicht mehr unterstützt: 1.0 März 1992
Ältere Version; nicht mehr unterstützt: 1.x 1992–1994
Ältere Version; nicht mehr unterstützt: 1.09 November 1994
Ältere Version; noch unterstützt: 2.0 Februar 1997
Ältere Version; noch unterstützt: 2.1 Mai 1999
Ältere Version; noch unterstützt: 2.2 Januar 2001
Ältere Version; noch unterstützt: 2.3 Oktober 2002 Native POSIX Thread Library (NPTL)
Ältere Version; noch unterstützt: 2.4 6. März 2006
Ältere Version; noch unterstützt: 2.5 29. September 2006
Ältere Version; noch unterstützt: 2.6 17. Mai 2007
Ältere Version; noch unterstützt: 2.7 19. Oktober 2007
Ältere Version; noch unterstützt: 2.8 11. April 2008
Ältere Version; noch unterstützt: 2.9 10. März 2009
Ältere Version; noch unterstützt: 2.10 Mai 2009 (?) Datum der Version 2.10.1
Ältere Version; noch unterstützt: 2.11 3. November 2009
Ältere Version; noch unterstützt: 2.12 August 2010 (?) Datum der Version 2.12.1
Aktuelle Version: 2.13 1. Februar 2011 (?) Datum der Version 2.13
Aktuelle Version: 2.14 1. Juni 2011 Datum der Version 2.14
Aktuelle Version: 2.15 21. März 2012 Datum der Version 2.15
Aktuelle Version: 2.16 30. Juni 2012 Datum der Version 2.16
Aktuelle Version: 2.17 25. Dezember 2012 Datum der Version 2.17
Aktuelle Version: 2.18 12. August 2013 Datum der Version 2.18
Aktuelle Version: 2.19 8. Februar 2014 Datum der Version 2.19

Literatur[Bearbeiten]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Bug 5070 - glibc-2.5: ../sysdeps/unix/sysv/linux/check_pf.c:68: make_request: Assertion fails
  2. a b Ulrich Drepper: Dictatorship of the Minorities (englisch) udrepper.livejournal.com. 25. Mai 2005. Abgerufen am 15. Januar 2012: „Which architectures are worthwhile supporting? [...]. Not only do we have to look for irrelevance (what percentage cares about Vax, PArisc) support, we also have to look at the level of added complexity the support requires. Some ABIs are just deliberately defined to be different from others (see IA-64) which requires huge amounts of effort to be spent. There are also significantly diverging capabilities (e. g., the lack of atomic operations in too many architectures). This far too often causes to unnecessarily crippled code since writing code in a way which allows optimal use in all situations is very difficult. The solution must be to restrict support to only a handful of architectures which are supported in the project. All other support must happen outside the tree and therefore all the work has to be done by the special interest groups. I don't want to say we follow all these points perfectly, but for a big project glibc certainly comes closest to this.
  3. Linus Torvalds: Posting to the glibc mailing list, 9. Januar 2002 19:02:37
  4. http://www.eglibc.org/home
  5. http://www.eglibc.org/faq
  6. a b Aurélien Jarno: Debian is switching to EGLIBC (englisch) aurel32.net. 5. Mai 2009. Abgerufen am 15. Januar 2012: „More friendly upstream (especially with regard to embedded architectures): “Encourage cooperation, communication, civility, and respect among developers” (as opposed to this).
  7. timothy: Debian Switching From Glibc To Eglibc (englisch) Slashdot. 6. Mai 2009. Abgerufen am 14. Januar 2012.
  8. http://www.eglibc.org/news
  9. http://ftp.gnu.org/gnu/glibc/