English [en]   Deutsch [de]   français [fr]   日本語 [ja]   русский [ru]  

Dieses Werk ist eine Übersetzung aus dem Englischen.

GCC Runtime Library Exception (RLE): Hintergrund und häufig gestellte Fragen

Einführung

Am 29. Juni 2007 gab die Free Software Foundation die GPLv3 frei. Sie wurde sofort von 15 GNU-Projekten übernommen und weitere wechselten in den darauffolgenden Monaten. Der größte Teil der GCC-Quellcodebasis migrierte mit Version 4.2.2 auf die neue Lizenz, und nun wird der Abschluss dieses Prozesses vorbereitet.

Die Lizenzen einiger Bibliotheken, die GCC begleiten, wurden noch nicht geändert. Diese Bibliotheken werden automatisch vom Objektcode verwendet, den GCC erzeugt. Aus diesem Grund, würden diese Bibliotheken einfach nur unter den Bedingungen der GPL vertrieben, müsste der gesamte von GCC erzeugte Objektcode unter denselben Bedingungen vertrieben werden. Allerdings beschloss die FSF vor langer Zeit, Entwicklern die Nutzung der GCC-Bibliotheken zu erlauben, um jedes beliebige Programm, ohne Rücksicht auf dessen Lizenz, kompilieren zu können. Die Entwicklung unfreier Software ist nicht gut für die Gesellschaft, und wir haben keinerlei Verpflichtung, es zu erleichtern. Wir entschieden uns dafür, dies zu erlauben, weil ein Verbot wahrscheinlich nach hinten losgegangen wäre und kleine Bibliotheken zu nutzen, um die Verwendung von GCC einzuschränken, wie der Schwanz schien, der mit dem Hund wedelt.

Deshalb haben diese Bibliotheken schon immer Lizenzausnahmen gehabt, die erlauben, den von GCC erzeugten Objektcode unter jeder Lizenz zu vertreiben. Wir stellen diese Bibliotheken nun auf GPLv3 um und aktualisieren ihre Ausnahmen. Unsere grundsätzliche Politik hat sich nicht geändert; die neue Lizenz soll jegliche Nutzung von GCC erlauben, die zuvor erlaubt waren. Jedoch haben wir diese Gelegenheit genutzt, um die Ausnahme zu aktualisieren, um drei Ziele zu erreichen:

Wie bei der GPLv3, haben wir hart daran gearbeitet, um den Anliegen verschiedener Benutzer zuzuhören, während wir die Ausnahme formulierten und entsprechend anpassten. Alles in allem haben wir mehr als ein Jahr für diesen Vorgang aufgewandt. Die Free Software Foundation und das GCC Steering Committee möchten Richard Fontana, Bradley Kuhn und Karen Sandler vom Software Freedom Law Center für die geleistete Arbeit und Unterstützung bei der Ausnahme danken. Die Änderungen stärken die GCC-Gemeinschaft, und wir freuen uns auf die Entwicklungen, die der Kompiler ermöglichen wird.

Da GCC ein so wesentlicher Teil im Leben der Entwickler ist, erwarten wir viele Fragen zu diesen Änderungen und möchten sicherstellen, dass sie angesprochen werden. Im folgenden sind einige genannt, mit denen wir rechnen. Haben Sie unbeantwortete Fragen zur neuen Ausnahme, kontaktieren Sie uns bitte unter <licensing@fsf.org>.

Wie funktioniert die Ausnahme

Die benötigte Berechtigung ‑ um den Objektcode aus diesen GCC-Bibliotheken auf die Lizenz des eigenen Projekts zu übertragen ‑ ist in erster Linie in Abschnitt 1 zu finden:

„Unter dem Vorbehalt, dass der gesamte Zielcode von berechtigten Kompilierungsvorgängen erzeugt wurde, haben Sie die Berechtigung, ein Werk, dessen Zielcode durch die Kombination der Laufzeitbibliothek mit unabhängigen Modulen erzeugt wurde, zu verbreiten, selbst wenn diese Verbreitung die Bedingungen der GPLv3 ansonsten verletzen würde. Sie können dann eine solche Kombination unter Bedingungen Ihrer Wahl, im Einklang mit der Lizenzierung der unabhängigen Module, übertragen.“

Dieser Abschnitt verwendet viele definierte Bedeutungen, und deren besonderen Bedeutungen sind integraler Bestandteil für die Funktionsweise der Ausnahme. Es wird untersucht, wie sich diese Bedingungen auf gängige Szenarien beziehen.

Wenn Sie eigene Software schreiben, besteht sie aus einer Reihe von Quellcodedateien. Jede Datei ist ein selbständiges Modul, solange es nicht irgendwelchen Quellcode aus den GCC-Bibliotheken enthält.

Wenn Sie jene Quellcodedateien kompilieren, gehen sie gewöhnlich eine Reihe von Schritten durch: Quellcodeerzeugung, Vorverarbeitung, Kompilierung zu maschinennahen Quellcode, Assemblierung und Linken. Nicht alle Projekte folgen allen diesen Schritten, je nachdem, welche Programmiersprache verwendet und wie sie geschrieben wird, aber sie werden immer in dieser Reihenfolge durchlaufen, und alle, die GCC nutzen, werden den Prozess durchlaufen, benutzerfreundlichen Quellcode ‚High-Level-Code‘ in irgendeine maschinennahe Sprache ‚Low-Level-Code‘ wie Assembler-Code oder Java-Zwischencode ‚Bytecode‘ zu kompilieren. Dies ist die Phase, wenn GCC Ihren eigenen Quellcode mit dem aus den GCC-Bibliotheken kombiniert oder verbindet. Wir nennen es Kompilierung. Die Ausgabe, die man daraus erhält, wird Zielcode genannt, solange diese Ausgabe nicht als Kompilierungszwischendarstellung oder zur Erstellung einer solchen Zwischendarstellung verwendet wird.

Um diese Berechtigung auszunutzen, muss die verwendete Kompilierung, um den Zielcode zu erstellen, berechtigt sein, was bedeutet, sowohl GCC- als auch GPL-unvereinbare Software nicht zu beeinhalten. Es ist wichtig, sich daran zu erinnern, dass die Kompilierung beginnt, wenn Sie irgendeinen benutzerfreundlichen Quellcode an GCC eingeben, und endet, sobald er irgendetwas generiert, das als Zielcode betrachtet werden kann. Deswegen, solange GCC keine Zwischendarstellung schreibt, kann Ihre Kompilierung immer noch berechtigt sein, selbst wenn Sie GCC in Verbindung mit GPL unvereinbaren Assemblern, Linkern oder benutzerfreundlichen Quellcodegeneratoren verwenden: jene Programme sind nicht an der Kompilierung beteiligt, wie es hier definiert wird. Die einzige Stelle, wo man keine mit der GPL-unvereinbare Software mit GCC nutzen kann, ist, wenn der Kern der Kompilierungsarbeit durchführt wird.

Wenn man GCC also mit oder ohne mit GPL-vereinbaren Erweiterungen verwendet, wäre das eine berechtigte Kompilierung. Wenn man nur GPL-unvereinbare Kompiler benutzt, wäre das ebenfalls eine berechtigte Kompilierung (es ist nicht ungewöhnlich, dass Menschen, die Software für GNU/Linux erstellen, gegen die GCC-Bibliotheken linken, selbst wenn sie einen anderen Kompiler verwenden). Wenn man GCC allerdings in Verbindung mit GPL-unvereinbarer Software während des Transformierens von benutzerfreundlichen Quellcode in maschinennahen Quellcode verwendet, wäre das nicht eine berechtigte Kompilierung. Das würde geschehen, wenn man GCC beispielsweise mit einem proprietären Plug-in nutzt.

Solange man eine berechtigte Kompilierung verwendet, hat man die Berechtigung, den von GCC generierten Zielcode unter Bedingungen Ihrer Wahl zu verbreiten.

Wenn man wirklich GPL-unvereinbare Software in Verbindung mit GCC während der Kompilierung verwenden würde, würden man nicht in der Lage sein, von dieser Berechtigung zu profitieren. Da der ganze von GCC erzeugte Objektcode aus diesen GPL-lizenzierten Bibliotheken abgeleitet wird, bedeutet das es wäre erforderlich den Bedingungen der GPL zu folgen, wenn man etwas von diesem Objektcode verbreitet. Man könnte GCC nicht verwenden, um eigene GPL-unvereinbare Software zu entwickeln.

Häufig gestellte Fragen (FAQ)

Ich benutze eine Standardfreigabe von GCC (wie von der FSF oder mit meinem Betriebssystem bereitgestellt), um GPL-unvereinbare Software zu kompilieren. Wie wirkt sich diese Änderung auf mich aus?

Es sollte Sie überhaupt nicht beeinflussen. Sofern GCC nicht konfiguriert wurde, Zwischendarstellung auszugeben ‑ was selten ist ‑ soll die neue Ausnahme sicherstellen, dass keine Lizenzverpflichtungen entstehen, so wie die alten Ausnahmen waren.

Wen betrifft diese Änderung?

Niemand, der GCC derzeit nutzt, sollte von dieser Änderung betroffen sein. Die einzigen Änderungen der Richtlinie sollen Entwickler daran zu hindern, bestimmte Änderungen an GCC zu machen, die zukünftig möglich werden. Die FSF hat eng mit GCC-Entwicklern zusammengearbeitet, um mehr über die zahlreichen Möglichkeiten zu erfahren, wie GCC heute von Nutzern verwendet wird, und sicherzustellen, dass alle in der Lage sein werden, diese Tätigkeiten unter der neuen Ausnahme weiterhin fortzusetzen.

Ich benutze GCC in Verbindung mit proprietären Präprozessoren und/oder Quellcodegeneratoren, um mein Programm zu kompilieren. Kann ich die Ausnahme dennoch nutzen?

Ja. Die Kompilierung kann mit jedem vollständig in einer höheren, nicht-Zwischensprache vertretenen Quellcode beginnen. Dies schließt den von einem Präprozessor oder sonstiger proprietären Software generierten Quellcode ein. Als solche schließt die Kompilierung in diesem Fall keine proprietäre Software ein; sie qualifiziert sich als berechtigt, und die Ausnahme ist für dieses Programm nutzbar.

Ich benutze GCC in Verbindung mit proprietären Assemblern und/oder Linkern, um mein Programm zu kompilieren. Kann ich die Ausnahme dennoch nutzen?

Ja. Die Kompilierung endet, wenn der Kompiler Zielcode generiert, der eine Ausgabe enthält, der zur Eingabe an einen Assemblierer, Lader, Linker und/oder der Ausführungsphase geeignet ist. Mit anderen Worten: die Kompilierung ist in diesem Fall beendet, wenn Assembler-Quellcode oder unverlinkte Objektdateien von GCC vorliegen und deshalb keine proprietäre Software umfasst. Sie qualifiziert sich als berechtigt, und die Ausnahme somit für dieses Programm nutzbar.

Ich benutze GCC, um Teile meines Programms zu kompilieren, und einen proprietären Kompiler, um andere Teile zu kompilieren. Die Stücke werden anschließend während der Assemblierungs- oder Verlinkungsphasen kombiniert. Kann ich dennoch die Ausnahme nutzen?

Ja. In diesem Fall wird jedes eigenständige Modul durch eine berechtigte Kompilierung in Zielcode umgewandelt. Obwohl verschiedene Module unterschiedliche Vorgänge durchlaufen, ist die Ausnahme für dieses Programm weiterhin nutzbar.

Ich benutze eine proprietäre Kompiler-Werkzeugkette ohne irgendwelche Teile von GCC, um mein Programm zu kompilieren und mit libstdc++ zu verlinken. Mein Programm selbst enthält keinen Laufzeitbibliotheksquellcode auf dieselbe Weise, wie GCC kompilierte Programme libgcc enthalten. Kann ich die Ausnahme dennoch nutzen?

Ja. Obwohl die Kombination von libgcc mit GCC kompiliertem Objektcode wahrscheinlich der gebräuchlichste Weg ist wie die Ausnahme verwendet wird, unterscheiden weder die GNU GPL noch die GCC RLE zwischen statischem und dynamischem Linken und anderen Methoden, Quellcode innerhalb ihrer Konditionen zu kombinieren. Dieselben Berechtigungen gelten unter denselben Bedingungen, ganz gleich, welche Methode verwendet wird.

Hinweis: Wenn libstdc++ als eigenständige Bibliothek vertrieben wird, müssen die Bedingungen der GPL beachtet werden. Wird die Bibliothek selbst in Objektcodeform vertrieben, müssen den Empfängern, mit Hilfe einer der in Abschnitt 6 von GPLv3 aufgeführten Methoden, der Quellcode bereitgestellt werden. Aber solange man berechtigt ist, die Berechtigungen der GCC RLE für ein eigenes Programm zu nutzen, erstrecken sich die Bedingungen der GPL nicht darauf.

Warum ist Kompiler-Zwischendarstellung aus der Definition von Zielcode ausgeschlossenen?

Als wir erstmals daran dachten GCC eine Plug-in-Infrastruktur hinzufügen, waren wir um die Möglichkeit, dass jemand ein Plug-in schreiben würde, das lediglich GCCs interne, maschinennahe Kompilierdatenstrukturen auf der Festplatte speichern würde, zutiefst besorgt. Damit fertig, wäre andere Software in der Lage, diesen Quellcode zu optimieren oder sonst zu verbessern, ohne direkt mit GCC verbunden zu werden. Möglicherweise würde es für uns schwer sein zu argumentieren, dass diese Programme dem Copyleft der GPL unterliegen sollten, deshalb wollten wir von derartigen Abmachungen abhalten.

Wir machen das durch Ausschluss solcher Ausgabe aus der Definition des Zielcodes. Deswegen, selbst wenn jemand ein Plug-in schreibt, das diese Information auf Festplatte speichert, werden Programme, die Strukturen ändern bevor GCC Zielcode ausschreibt, mit der Kompilierung eingebunden werden. Ist das Programm proprietär, wird die Ausnahme für keine damit kompilierte Software zur Verfügung stehen; der Objektcode, den GCC letztlich erzeugt, muss unter den Bedingungen der GPL vertrieben werden.

Wenn ich etwas Quellcode in Assembler schreibe, kann ich das mit anderem normal kompilierten Objektcode kombinieren und dennoch die Ausnahme nutzen?

Ja, solange der gesamte Objektcode durch eine berechtigte Kompilierung kompiliert wurde. Der Vorgang, handgeschriebenen Assemblercode durch einen Assemblierer durchlaufen zu lassen, ist eine Kompilierung, da er „lediglich in Nicht-Zwischensprache[] dargestellten Quellcode für noch Menschen schreibbaren Quellcode […] in Zielcode transformiert.“

Welche Bibliotheken deckt die GCC Runtime Library Exception) ab?

Die GCC Runtime Library Exception deckt jede Datei ab, die einen Hinweis im Kopfbereich der Lizenz enthält, wonach die Ausnahme gilt. Dazu gehören libgcc, libstdc++, libfortran, libgomp, libdecnumber, libgcov und andere mit GCC vertriebene Bibliotheken.

Wird Classpath diese neue Ausnahme nutzen?

Obwohl Classpaths aktuelle Ausnahme einem ähnlichen Zweck dient, wurde sie zum jetzigen Zeitpunkt nicht aktualisiert. Aufgrund der jüngsten Entwicklungen in der Freie Software Java-Gemeinschaft, unterscheiden sich die Prioritäten der Lizenzrichtlinien für Classpath von anderen GCC-Bibliotheken, und wir evaluieren sie separat.

FSF„Unsere Mission ist die Freiheit zu bewahren, zu schützen und zu fördern, um Rechnersoftware nutzen, untersuchen, kopieren, modifizieren und weiterverbreiten zu können und die Rechte von Freie-Software-Nutzern zu verteidigen.“

Die Free Software Foundation ist der organisatorische Hauptsponsor des GNU-Betriebssystems. Unterstützen Sie GNU und die FSF durch den Kauf von Handbüchern und Kleidung, als assoziiertes Mitglied oder mit einer Spende direkt an die FSF oder via Flattr.

Zum Seitenanfang