# Boost (C++-Bibliothek)

Boost (englisch Boost C++ Libraries) ist eine freie C++-Bibliothek, die aus einer Vielzahl von portablen Unterbibliotheken besteht. Die Unterbibliotheken dienen unterschiedlichsten Aufgaben von Algorithmen auf Graphen über Metaprogrammierung bis hin zu Speicherverwaltung.
Es können jederzeit neue Bibliotheken zur Eingliederung in Boost vorgeschlagen werden, diese müssen jedoch einen aufwendigen Review-Prozess durchlaufen. Teile von Boost wurden in einen sogenannten Technical Report des Standardisierungskomitees für C++ übernommen und später in die Sprache C++ integriert (ISO/IEC 14882:2011).

## Anwendungsgebiete

Boost besteht aus Unterbibliotheken zu verschiedensten Zwecken. Gemeinsam ist ihnen das Ziel der Produktivitätssteigerung beim Programmieren mit C++. Außerdem sollen Boost-Bibliotheken portabel und allgemein anwendbar sein. Ansonsten dienen sie in ihrer Gesamtheit keinem speziellen Zweck.
Folgende Themenbereiche werden durch Boost zurzeit unter anderem abgedeckt:
* Algorithmen
* Bildverarbeitung
* Container
* Datenstrukturen
* Eingabe und Ausgabe
* Funktoren und funktionale Programmierung
* Generische Programmierung
* Interoperabilität mit Python
* Iteratoren
* Mathematik und Numerik
* Nebenläufigkeit
* Parsen
* Präprozessor-Metaprogrammierung
* Programmierschnittstellen
* Programmkorrektheit und Testen
* Netzwerk-Unterstützung
* Softwareseitiges Multithreading
* Speicherverwaltung
* Template-Metaprogrammierung
* Umgehungslösungen für Probleme mit defekten Compilern
* Verarbeitung von Zeichenketten und Text

## Entwicklung

Das Boost-Projekt wurde im Jahr 2000 ursprünglich von Mitgliedern des C++-Standardisierungskomitees gegründet, um Vorschläge für C++-Erweiterungen öffentlich zu machen und im praktischen Einsatz zu testen. Inzwischen ist Boost eine große Sammlung von C++-Bibliotheken unabhängig von ihrer Relevanz für den nächsten C++-Standard.
Auch bekannte kommerzielle Firmen steuern Code und Bibliotheken bei, etwa die Grafikbibliothek GIL (Generic Image Library) von Adobe.
Einige der Bibliotheken wurden mittlerweile in den bereits verabschiedeten C++-Library Technical Report 1 (TR1) verbindlich aufgenommen und finden sich somit im kommenden C++-Standard wieder. Zehn Boost-Bibliotheken wurden dabei vom C++-Komitee akzeptiert. Außerdem wurden für den geplanten Technical Report 2 (eine vom Standardisierungskomitee anzunehmende Erweiterung des kommenden C++-Standards) einige weitere Boost-Bibliotheken vorgeschlagen.
Noch in der Gemeinschaft aktiver Initiatoren von Boost sind unter anderem Beman Dawes und David Abrahams. Der Autor mehrerer Bücher über C++, Nicolai Josuttis, stellte 2001 die Boost.Array-Bibliothek zur Verfügung. Etwa 3000 Leute haben sich in die Boost-Mailinglisten eingetragen und einige dutzend davon sind auch regelmäßig aktiv.

## Qualitätssicherung
### Aufnahme neuer Bibliotheken

Jede neue Bibliothek, die in Boost aufgenommen werden soll, muss einem sogenannten Review durch die Boost-Community unterzogen werden. Dabei können von interessierten Entwicklern sowohl Bewertungen abgegeben werden, als auch Zustimmung oder Ablehnung zum Ausdruck gebracht werden. Diese werden ausgewertet und haben Einfluss auf die Aufnahme in die Bibliothek. Durch diesen Prozess soll eine hohe Qualität erreicht werden, da diese eventuell den Weg in den C++-Standard finden.
Unabhängig vom Reviewprozess muss eine Bibliothek, die Teil von Boost werden soll, unter anderem
* in geklärter Urheberrechtssituation stehen,
* bestimmte Lizenzbedingungen erfüllen (empfohlen wird die Boost Software License),
* von allgemeinem Nutzen sein,
* portabel sein.
Auch muss der Autor aktiv am Qualitätssicherungsprozess teilnehmen und formale Dinge wie z. B. Quellcodeformatierung oder Dokumentation müssen den vereinbarten Richtlinien entsprechen.

#### Lizenzbedingungen

Um Teil von Boost zu werden, muss eine Bibliothek eine Lizenz aufweisen, die folgende Bedingungen erfüllt:
* Sie muss leicht lesbar und verständlich sein.
* Sie muss jedem zu jedem Zweck (kommerziell und nicht-kommerziell) kostenfreie Kopier-, Nutzungs- und Modifikationsrechte einräumen.
* Sie muss verlangen, dass die Gültigkeit der Lizenz in jeder Kopie oder Modifikation der Softwarequellen angegeben wird.
* Sie darf nicht verlangen, dass die Lizenz bei erzeugten ausführbaren oder Binärdateien angegeben wird.
* Sie darf nicht verlangen, dass der Quelltext bei erzeugten ausführbaren oder Binärdateien mitgeliefert wird.
* Sie darf die Benutzung von Namen und Beschreibung der Bibliothek auf die Standardversion auf der Boost-Webseite beschränken.
Als Ergebnis dieser Bedingungen ist es möglich, alle Boost-Bibliotheken ohne Kenntnis der konkreten Lizenz zu nutzen. Man kann Boost-Bibliotheken in Projekten nutzen, die unter einer Lizenz mit Copyleft-Klausel stehen, ebenso wie in Projekten, die nicht quelloffen sind.
Es wird dringend empfohlen, auf die Boost Software License zurückzugreifen, da es ein langfristiges Ziel ist, alle Boost-Bibliotheken unter einer einheitlichen Lizenz zur Verfügung zu stellen. De facto ist es unwahrscheinlich, dass eine Bibliothek ohne Boost Software License akzeptiert wird.

### Tests und Pflege

Alle Boost-Komponenten werden regelmäßig auf verschiedensten alten und neuen Compilern getestet. Es werden unterschiedliche Dinge, wie die Kompilierfähigkeit, Funktionsfähigkeit und Vollständigkeit der Lizenzinformationen überprüft. Die Ergebnisse werden regelmäßig auf der Boost-Mailingliste angekündigt und auf der Boost-Webseite veröffentlicht.
Boost enthält ein eigenes Test-Framework, mit dem auch versucht wird, die Qualität der Boost-Bibliotheken aufrechtzuerhalten. Dieses ist lose nach Maximen des Extreme Programming aufgebaut.
Bei Bugs bitten die Boost-Entwickler um Meldung auf einer der Mailinglisten oder im Boost-eigenen Trac, allerdings bevorzugt erst nachdem der meldende Programmierer überprüft hat, ob der Fehler in der aktuellen Entwickler-Version behoben ist.
Test und Pflege von Boost wird durch die stark variierende Qualität der unterstützten Plattformen und vor allem Compiler erschwert, was man unter anderem an zahlreichen Varianten und Umgehungslösungen innerhalb des Boost-Codes erkennen kann.
Kritisch ist, dass einige Boost-Bibliotheken lange Zeit keine Pflege erhalten oder erhalten haben, was zumindest ihre Tauglichkeit für moderne Anwendungen einschränken kann.

## Technik

Viele Teile von Boost machen umfangreichen Gebrauch von Templates, d. h. generische Programmierung oder Metaprogrammierung. Dies stellt hohe Anforderungen an die Konformität der zu verwendenden Compiler. Es wird jedoch parallel versucht, so viele Compilerfehler wie möglich zu umgehen. Die Entwicklungen decken auch Beschränkungen der bisherigen Compiler auf und können so zu weitergehenden Vorschlägen für die Standardisierung von Compilern und deren Konformitätstests führen.