Eine Bibliothek erspart es dem Programmierer, das Rad ständig neu zu erfinden. Daneben kann sie aber auch Anwendungen beschleunigen und den Entwickler vor gefährlichen Fehlern bewahren. Eine Vorstellung der Neuerungen in Version 2.9 der GNU C-Bibliothek.
Große Entwicklungssprünge sind von der neuen Version 2.9 der Glibc ([1], [2]) nicht zu erwarten, schließlich soll sie ja stabile Schnittstellen garantieren. Aber als Bibliothek, gegen die der Großteil der Programme auf einer typischen Linux-Installation gelinkt ist, übt sie erheblichen Einfluss auf Performance und Sicherheit des Systems aus. Die Library-Entwickler haben auch bei der jüngsten Ausgabe der freien C-Bibliothek vom November 2008 an einigen Stellschräubchen gedreht, um die Code-Bibliothek zu optimieren. Erste Linux-Distributionen nutzen die neue Release bereits im Produktiveinsatz.
Wer steckt dahinter?
Maintainer und Hauptentwickler der Glibc ist derzeit Ulrich Drepper. Der deutsche Informatiker lebt in Kalifornien und arbeitet dort beim Linux-Distributor Red Hat. Über die Bibliothek entscheidet er nicht allein: Politisch wichtige Entscheidungen trifft das GNU C Library Steering Committee, dem unter anderem die Suse-Mitarbeiter Andreas Jaeger und Andreas Schwab, der Red-Hat-Mann Jakub Jelinek sowie der Original-Autor der Bibliothek, Roland McGrath, angehören.
Die Weiterentwicklung umfasst beispielsweise Security-Features. Die Verantwortung für die Sicherheit einer Anwendung liegt zwar zunächst bei deren Entwickler, doch Ulrich Drepper ist überzeugt, die verwendete Bibliothek müsse nach Kräften mithelfen. “Bei Library-Code muss man einfach auf Nummer sicher gehen”, schreibt er in seinem Blog [3]. “Das bedeutet zwar eine Menge Arbeit, aber die muss einfach gemacht werden.”
Release 2.9 bringt neben Bugfixes ein Security-relevantes Detail: Viele Funktionen und Systemaufrufe verwenden nun das Close-on-Exec-Flag, wenn sie einen Dateideskriptor öffnen. Warum das relevant ist, erläutert Drepper in folgendem Beispielszenario: Ein Webbrowser hat in einem Tab eine Internetbanking-Seite geöffnet, in einem anderen lädt er eine beliebige Seite, die ein Flash-Objekt enthält. Um das Objekt anzuzeigen, startet der Browser per »fork()« und »exec()« einen Plugin-Prozess. Dieser erbt vom Browserprozess alle offenen Dateideskriptoren, sofern diese nicht mit Close-on-Exec markiert sind.
Böswillig konstruierte Flash-Inhalte dürften so vertrauliche Informationen aus den vom Elternprozess geöffneten Dateien lesen, also etwa aus dem Onlinebanking-Tab des Browsers. Solche Informationslecks könnte der Programmierer durch Schließen der Filedeskriptoren vor dem Aufruf von »exec(«) verhüten – er vergisst aber vielleicht, dies zu erledigen. Gut, wenn bereits beim Öffnen der Deskriptoren das Flag zum automatischen Schließen gesetzt ist, und noch besser, wenn die Bibliothek dabei hilft.
Kernel-Schnittstellen
Um diese Security-Verbesserung auch bei Systemaufrufen zu nutzen, die Programme an den Linux-Kernel absetzen, hat Ulrich Drepper Patches auf der Kernel-Mailingliste eingereicht. Sie schaffen neue Systemaufruf-Varianten wie »dup3()«, »pip2()« »epoll_create1()« und »inotify_init1()«. Diese unterscheiden sich von ihren Namensbrüdern ohne Numeral darin, dass sie als zusätzlichen Parameter das Close-on-Exec-Flag aufnehmen. Dem Systemaufruf »popen()« zum Öffnen von Pipes verpasste der Entwickler zu diesem Zweck den Modus »e«.
Die Änderungen gingen in Kernel 2.6.27 ein, Glibc 2.9 unterstützt selbstverständlich die neuen Linux-Schnittstellen. Diese Kombination aus Kernel und passender C-Bibliothek ist die Basis für Red Hats und Novells jüngsten Community-Distributionen: Fedora 10 erschien nur wenige Tage nach der neuen Library-Version im November 2008, Open Suse 11.1 (Abbildung 1) etwa vier Wochen später.

Abbildung 1: Open Suse 11.1 gehört zu den ersten Distributionen, die die Glibc-Version 2.9 als C-Bibliothek verwenden. So kommt sie auch in den Genuss der neu geschaffenen Kernel-Schnittstellen.
Update bei den Distributionen
Andreas Jaeger ist nicht nur Mitglied des Steering Committee, er hält bei Novell auch den Posten als Director Platform Open Suse. Die Distribution sei bei der Arbeit an ihrer Version 11.1 bereits im August 2008 auf die Entwicklerversion von Glibc 2.9 umgestiegen. “Die Development-Version der Glibc ist grundsätzlich sehr stabil”, antwortet er auf die Frage nach Problemen beim Update, “dank der unterstützten Standards ändert sich das API nicht – das Kompilieren der Programme an sich macht daher in der Regel keine Probleme.” Eher komme es zu Laufzeitfehlern. Diese ermittelt die Community-Distribution durch automatisierte Tests, die der Open-Suse-Buildservice durchführt, der für Version 11.1 erstmals die komplette Distribution baute.
Mit der Aufnahme von Glibc 2.9 in Open Suse 11.1 findet die Bibliothek auch Eingang in das kommende Suse Linux Enterprise 11. Das Community-Suse gilt wie der Fedora-Entwicklerzweig Rawhide als Testfeld für Glibc-Aktualisierungen. Käufer der DELUG-Ausgabe dieses Linux-Magazins finden Open Suse 11.1 für 64-Bit-Rechner auf der Heft-DVD.
|
Tabelle 1: Neuerungen in Glibc |
|---|
Performance und Funktionalität
Die progressiven Distributionen profitieren nicht nur in Sachen Security von der neuen Bibliotheksversion. Die Funktionen »memmem()«, »strstr()« und »strcasestr()« erfuhren eine Neuimplementierung mit verbesserten Algorithmen. Ulrich Drepper führte neue, optimierte Umwandlungsmakros ein. Sie tragen Namen wie beispielsweise »le32toh« oder »htobe64«. Das erste Makro konvertiert einen 32-Bit-Integer von Little Endian (»le«) in die native Byte-Reihenfolge des Hosts (»h«), das zweite einen 64-Bit-Integer von der nativen Byte-Reihenfolge des Hosts zu Big Endian (»be«).
Drepper, von dem es heißt, 95 Prozent der Glibc-Entwicklung stammen von ihm, hat sich auch bemüht Anwendungsentwicklern das Schreiben von IPv6-konformen Programmen zu erleichtern: Die Funktion »getaddrinfo()« macht den Lookup gleichzeitig für IPv4- und IPv6-Adressen. Trotz mehr als zehnjähriger Geschichte, so klagt er in einem englischsprachigen Aufsatz auf seiner Homepage [4], wüssten viele nicht, wie man IPv6-konform oder noch besser protokollunabhängig programmiere. Allen, die Programme aktualisieren oder neu schreiben, empfiehlt er die Lektüre seines Artikels – und die Verwendung seiner Funktion.
Andere Neuerungen betreffen weniger Programmier-Interna, sondern spiegeln Entwicklungen in der Außenwelt wider: Die wachsende Verbreitung freier Software in Indien drückt sich in zusätzlichen Standort-Einstellungen in der Glibc 2.9 aus: Hinzugekommen sind Sortierregeln für weitere indische Sprachen sowie Locales für Sindhi und Kaschmiri. Die Unterstützung in der C-Bibliothek ist der erste grundlegende Schritt zur Lokalisierung von Software.
Schrittweise
Eine Übersicht über die wichtigsten Neuerungen gibt Tabelle 1. Auch die jüngste GNU-C-Bibliothek, derzeit auf dem Weg in die Distributionen, wird die Linux-Welt nicht von einem Tag auf den anderen schneller oder sicherer machen – aber sie arbeitet immerhin daran.
|
Infos |
|---|
|
[1] Offizielle Glibc-Homepage bei GNU: [http://www.gnu.org/software/libc/] [2] Glibc-Homepage für Entwickler bei Red Hat: [http://sources.redhat.com/glibc/] [3] Ulrich Dreppers Blog: [http://udrepper.livejournal.com] [4] Ulrich Drepper, “Userlevel IPv6 Programming Introduction”: [http://people.redhat.com/drepper/userapi-ipv6.html] |






