Entwickler von Google haben vorgeschlagen, eine eigene libc fĂŒr LLVM zu entwickeln

Ein Entwickler von Google hat in der LLVM-Mailingliste das Thema der plattformĂŒbergreifenden Entwicklung einer Standard-C-Bibliothek (Libc) im Rahmen des LLVM-Projekts angesprochen. Aus verschiedenen GrĂŒnden ist Google mit den derzeitigen libc (glibc, musl) unzufrieden, und das Unternehmen ist auf dem Weg, eine neue Implementierung zu entwickeln, die als Teil von LLVM weiterentwickelt werden soll.

Die LLVM-Entwicklungen werden zunehmend als Grundlage fĂŒr die Erstellung von Google-Bautools verwendet. Die Hauptidee ist, dass, wenn Google bereits damit begonnen hat, seine eigene libc zu entwickeln, es sinnvoll wĂ€re, auch sein System innerhalb von LLVM weiterzuentwickeln, das bereits eine eigene Standardbibliothek fĂŒr C++ (Libc++) anbietet, jedoch keine Ă€hnliche Standardbibliothek fĂŒr C (Libc).

Die Entwicklung soll schrittweise erfolgen, wobei die FunktionalitĂ€t allmĂ€hlich erweitert wird. Die ersten Versionen sollen als eine Schicht zwischen der Anwendung und der System-Libc gestaltet werden, aus der noch nicht implementierte Funktionen ĂŒbernommen werden. Nach Erreichung eines bestimmten Funktionsniveaus kann die neue Libc als vollstĂ€ndiger Ersatz fĂŒr die System-Libc verwendet werden. Geplant ist zunĂ€chst die UnterstĂŒtzung der Architektur x86-64, Linux und die statische Verlinkung (dynamisches Laden, Linken und zusĂ€tzliche Architekturen werden in einem zweiten Schritt umgesetzt).

Das Projekt befindet sich noch in der Anfangsphase, hat jedoch bereits grundlegende Ziele definiert:

  • ModularitĂ€t und Entwicklung gemĂ€ĂŸ der Philosophie, eine granulare Bibliothek bereitzustellen, anstatt ein monolithisches Set zu liefern;
  • UnterstĂŒtzung der statischen Verlinkung in Modi mit PIE (PositionsunabhĂ€ngige ausfĂŒhrbare Dateien) und ohne PIE. Bereitstellung von CRT (C-Laufzeit) und Loader fĂŒr PIE fĂŒr statisch verlinkte ausfĂŒhrbare Dateien;
  • UnterstĂŒtzung der meisten Funktionen der Standard-C-Bibliothek mit POSIX-ErgĂ€nzungen und einigen systemabhĂ€ngigen Erweiterungen, die in bestehenden Anwendungen gefordert sind;
  • Vorsichtiger Umgang mit herstellerspezifischen Erweiterungen und deren HinzufĂŒgung nur bei Bedarf. In Bezug auf die UnterstĂŒtzung von Drittanbietererweiterungen wird vorgeschlagen, den Ansatz der Projekte Clang und libc++ anzuwenden;
  • Verwendung bewĂ€hrter Praktiken in der Entwicklung unter Verwendung von LLVM-Tools, wie die Anwendung von Sanitizern und Fuzzing-Tests von Anfang an.

Einer der aktiven Entwickler von LLVM wies darauf hin, dass die Lieferung von libc im Rahmen des LLVM-Toolkits sinnvoll ist, aber normalerweise bei einem solchen Bedarf die musl-Bibliothek verwendet wird, die qualitativ hochwertig geschrieben ist, verschiedene Architekturen unterstĂŒtzt und die erforderliche FunktionalitĂ€t bietet, einschließlich der UnterstĂŒtzung fĂŒr dynamisches Binden. Es kann gerechtfertigt sein, musl in LLVM zu integrieren und es als synchronisierten Fork des Hauptprojekts weiterzuentwickeln.

Seine Meinung hat auch ausgedrĂŒckt der Autor des Musl-Projekts, der versucht hat zu argumentieren, warum Googles Vorschlag und die Einbeziehung von Libc in die LLVM-Lieferung sehr schlechte Ideen sind:

  • Die Entwicklung und Wartung einer korrekten, kompatiblen und hochwertigen Libc ist eine sehr schwierige Aufgabe. Das Problem liegt nicht im Umfang des Codes, sondern in der GewĂ€hrleistung korrektes Verhaltens und den Schwierigkeiten bei der Implementierung von Schnittstellen angesichts des riesigen RĂŒckstands an jemals geschriebenen Anwendungen in C/C++ sowie Anwendungen in anderen Sprachen, deren Laufzeit Libc verwendet. Ein frontaler Ansatz ohne BerĂŒcksichtigung von Nuancen fĂŒhrt nur dazu, dass viele bestehende Programme nicht mit Libc arbeiten können, was das Projekt fĂŒr die Nutzer unattraktiv macht.
  • Die Unternehmensentwicklung kann Libc verderben, aber fĂŒr eine breitere Anwendung durchdringen, was dazu fĂŒhrt, dass Hacks hinzugefĂŒgt werden mĂŒssen, um die KompatibilitĂ€t in den Anwendungen sicherzustellen. Die Entwicklung unter dem Banner eines unternehmenseigenen Open-Source-Projekts wird die BedĂŒrfnisse und Lösungen des Unternehmens priorisieren, zum Nachteil der Interessen der Gemeinschaft. Zum Beispiel, wenn ein Problem identifiziert wird, das durch einen Fehler in einem anderen eigenen Programm verursacht wurde, ist es in der kontrollierten Entwicklung einfacher, die KompatibilitĂ€t von Libc mit diesem Fehler sicherzustellen, als den Fehler selbst zu beheben. Apple verwendet dafĂŒr einen Fork von BSD libc, wĂ€hrend Google in Fuchsia einen Fork von musl einsetzt. Die Erfahrung des Entwicklers von musl zeigt, dass sich hauptsĂ€chlich Juristen zur KlĂ€rung von Lizenzfragen mit ihm in Verbindung gesetzt haben, aber nie fĂŒr technische Details, bevor sie nutzlose und funktionsstörende Änderungen in ihre Abzweigungen ĂŒbernahmen.
  • Das Fehlen einer Monokultur bei der Entwicklung von libc und die Ausrichtung auf konsensbasierte Standards anstelle von zentraler Kontrolle motivieren Entwickler von Anwendungen dazu, Standards zu nutzen, anstatt sich an spezifische Implementierungen zu binden. Daher spricht sich der Autor von musl gegen die Einbeziehung seiner Bibliothek in LLVM aus, ebenso wie gegen die Entwicklung von libc im Rahmen von LLVM, da in diesem Fall der unabhĂ€ngige Charakter von libc verloren geht und eine bestimmte Implementierung zur bevorzugten Lösung fĂŒr LLVM wird, wĂ€hrend alle anderen darunter fallen.

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster