Читать книгу Praxishandbuch Open Source - Christian Galetzka - Страница 39

b) Werkzeugkoffer zum Coden – Compiler, Parser, Linker und Interpreter

Оглавление

97

Wie bereits erwähnt, bedarf es spezieller Programme und Zwischenschritte, um zwischen den unterschiedlichen Formen des Code zu wechseln. Code, der in einer der gängigen Programmiersprachen geschrieben wurde, liegt zunächst im menschenlesbaren Source Code vor. Soll dieser Code dann zu einer ausführbaren Datei werden, muss er in eine maschinenlesbare Form übersetzt werden. Dazu werden spezielle Programme verwendet, die Compiler genannt werden. Compiler wandeln also Source Code in Maschinensprache um und übersetzen dabei das gesamte Programm und erzeugen dadurch zusammen mit einem Linker ein Executable, das auch separat – also ohne den Source Code – weitergegeben werden kann.

98

Backup: Kurze Übersicht zu gängigen Compilern

Es existieren zahlreiche Compiler und Linker für jede Programmiersprache. Nicht jeder Compiler und/oder Linker ist dabei gleich gut für jedes Vorhaben geeignet, da die unterschiedlichen Programme unterschiedliche Stärken und Schwächen aufweisen. Allerdings haben sich einige gängige Programme durchgesetzt, zu denen wir hier einen kurzen Überblick geben wollen.

Compiler für C und C++:

GNU GCC Compiler, Clang, Intel C++ Compiler, Microsoft Visual C++, Oracle C Compiler, Wind River (Diab) Compiler

Compiler für Java:

GNU Compiler for Java, javac, Eclipse Compiler for Java (JDT Core), Iodine

Compiler für Python:

Psyco, Cython, PyPy, Shed Skin

Viele der gängigen und oben genannten Compiler stehen unter FOSS Lizenzen und können daher in der Praxis Probleme mit sich bringen. Während einige Compiler, wie z.B. PyPy, unter liberalen Lizenzen stehen, stehen viele der gängigen Compiler, wie z.B. der GCC Compiler, der Java Compiler von Eclipse oder auch Shed Skin, unter strengen FOSS Lizenzen mit Copyleft. Gerade der GCC Compiler unter der GPL ist ein gutes Beispiel für Probleme, die mit FOSS Compilern auftreten können. Denn der GCC Compiler fügt während des Kompilierprozesses Teile seines eigenen (unter der GPL lizenzierten) Code – insbesondere einige GCC Header Dateien oder Runtime Libraries – in das kompilierte Programm ein.12 Diese GPL lizenzierten Code Bestandteile können dann ein Copyleft auslösen und so die kompilierte Software infizieren. Da die FSF dieses Problem aber erkannt hat und nicht grundsätzlich verhindern will, dass auch kommerzielle Programme mit dem GCC Compiler erstellt werden können, wurde hier eine Ausnahme, die sog. GCC Runtime Library Exception, geschaffen. Diese besagt, dass das Ergebnis eines Kompilierprozesses mit dem GCC Compiler nicht zwingend unter der GPL lizenziert werden muss, auch wenn in dem Ergebnis Code Bestandteile unter der GPL enthalten sind.

Bei dem Einsatz von FOSS Compilern sollte also immer darauf geachtet werden, ob der Compiler FOSS lizenzierten Code in das kompilierte Programm einfügt und ob bei Copyleft Lizenzen ggf. entsprechende Ausnahmen existieren, die in solchen Fällen von einem Copyleft befreien. Um diese Probleme zu umgehen, können ansonsten auch einfach kommerzielle Compiler wie beispielsweise die von Microsoft oder Wind River Systems verwendet werden.

99

Häufig gibt es bei dieser Übersetzung einen Zwischenschritt, bei dem der Source Code zunächst in eine Art Zwischencode – den oben erwähnten Object Code (siehe Rn. 82) – umgewandelt wird. Dieser Zwischencode hat den Vorteil, dass er häufig auf verschiedenen Plattformen läuft und auch von Interpretern verwendet werden kann. Diesen so entstandenen Object Code übersetzt der Compiler dann weiter in den Maschinencode, der vom jeweiligen Zielsystem verstanden werden kann. Der Linker – ebenfalls ein gesondertes Computerprogramm – setzt dann die kompilierten Programmbestandteile und -module, die mittels des Compilers erzeugt wurden, zu einer ausführbaren Datei zusammen, um auf diese Weise das fertige Programm zu erhalten. Bei dieser Zusammensetzung der Programmteile gibt es unterschiedliche Arten, die als statische und dynamische Verlinkung bezeichnet werden (siehe Rn. 106f.).

100

Neben den Compilern, die direkt Binärcode erzeugen, gibt es auch noch sog. Interpreter. Dabei handelt es sich um Programme, die Source Code direkt zur Laufzeit verarbeiten. Die Anweisung im Source Code wird dabei eingelesen, analysiert und dann ausgeführt. Anders als beim Compiler wird dadurch keine Datei erzeugt, die mehrmals ausgeführt werden kann, und es entsteht auch keine dauerhafte Übersetzung des Source Code. Der Interpreter stellt eher eine Zwischenschicht zwischen Programmiersprache und Maschine dar, die die Anweisungen des Source Code analysiert und dann die gewünschte Aktion im Zielsystem aufruft und ausführt. Man erhält durch den Einsatz eines Interpreters also kein unabhängiges Executable, sondern benötigt weiterhin den Source Code des auszuführenden Programms.13

101

Eine weitere Form von Hilfsprogrammen, mit denen man bei der Umwandlung von Code häufig zu tun hat, sind Parser. Mit einem Parser kann der Quelltext entsprechend aufbereitet werden, indem dieses Programm die Zeichenketten analysiert und in eine Repräsentation umwandelt, mit der ein anderes Programm arbeiten kann. Die meisten Programmiersprachen sind so gestaltet, dass sie für den Entwickler übersichtlich und komfortabel sind. Die oben bereits erwähnten Compiler können aber mit zusätzlich im Source Code enthaltenen Informationen, wie z.B. Kommentaren der Entwickler, nichts anfangen und diese nicht sinnvoll in Maschinensprache übersetzen. Hier hilft der Parser dabei, den Quelltext zu analysieren und zu bereinigen, so dass der Compiler im Anschluss den überarbeiteten Code verwenden und umwandeln kann.14 Ein weiteres Beispiel für ein solches Programm wäre der in einem Webbrowser enthaltene Parser, der den rein als Text vorliegenden HTML Code so aufbereitet, dass damit die entsprechende Webseite angezeigt werden kann.

102

Backup: Gängige FOSS Parser

Auch bei den Parsern gibt es zahlreiche Programme unter FOSS Lizenzen. Einige gängige FOSS Parser sind z.B. GNU Bison15, ANTLR16, JavaCC17, OpenL18, runcc19 oder SJPT20.

Wie bei den Compilern sollte auch bei den Parsern auf die Lizenzierung geachtet werden. Zwar stehen einige der Programme unter liberalen Lizenzen, für viele sind aber ebenfalls strenge Copyleft Lizenzen einschlägig. Parser dienen zwar eher zur Analyse und Aufbereitung des Code als zu dessen eigentlicher Erstellung; es ist jedoch trotzdem möglich, dass Teile des Parsers in den damit analysierten und bearbeiteten Programmcode eingefügt werden. Auch hier ist das Programm der FSF, der GNU Bison Parser, wieder ein gutes Beispiel. Um es Entwickler zu ermöglichen, auch mit einem unter der GPL lizenzierten Parser kommerzielle Programme zu erstellen, hat die FSF hier wiederum eine Ausnahme zur GPL speziell für ihren Bison Parser geschaffen. Diese sog. Bison Exception ermöglicht es, das Ergebnis aus dem Parser trotz ggf. enthaltenem GPL Code unter eine eigene Lizenz zu stellen.21

5 https://de.wikipedia.org/wiki/Systemumgebung. 6 https://de.wikipedia.org/wiki/Integrierte_Entwicklungsumgebung. 7 Augsten, https://www.dev-insider.de/was-ist-ein-sdk-a-730921/. 8 https://www.it-talents.de/blog/it-talents/alles-ueber-den-build-prozess#-ides-und-build-tools. 9 https://de.wikipedia.org/wiki/Toolchain. 10 Augsten, https://www.dev-insider.de/was-ist-eine-software-paketverwaltung-a-847919/. 11 https://www.onlinesolutionsgroup.de/blog/glossar/n/npm-node-package-manager/. 12 FSF, Using the GNU Compiler Collection (GCC), Ziff. 6.59, https://gcc.gnu.org/onlinedocs/gcc-9.2.0/gcc.pdf. 13 Augsten, https://www.dev-insider.de/der-unterschied-von-compiler-und-interpreter-a-742282/. 14 Augsten, https://www.dev-insider.de/was-ist-ein-parser-a-756662/. 15 https://www.gnu.org/software/bison/manual/. 16 https://www.antlr.org/. 17 https://cs.lmu.edu/~ray/notes/javacc/. 18 http://openl.org/. 19 https://java-source.net/open-source/parser-generators/runcc. 20 http://sjpt.sourceforge.net/. 21 https://www.gnu.org/software/bison/.

Praxishandbuch Open Source

Подняться наверх