c) Binärcode
83
Die Maschinensprache, oder auch der Binärcode bzw. Maschinencode, stellt die Code Form dar, die ein Computer benötigt, um ein Programm verarbeiten und ausführen zu können. In dieser Form des Code werden Informationen durch Sequenzen zweier unterschiedlicher Symbole dargestellt. Im Falle eines Computerprogramms besteht der Code nur noch aus Einsen und Nullen bzw. der Information wahr/falsch. Die kleinste Informationseinheit wird dabei als Bit bezeichnet und enthält genau diese eine Information: 1 oder 0 bzw. wahr oder falsch. Durch eine logische Verknüpfung solcher Bits lassen sich dann auch komplexe Informationen abbilden.3 Für den Menschen sind diese Bitfolgen kaum noch nachzuvollziehen. Bei reiner Betrachtung von Code in Binärform können dem Code also ohne weitere Zwischenschritte keine Informationen zu FOSS Lizenzierung und Rechtsinhabern mehr entnommen werden – sofern diese Informationen überhaupt noch im jeweiligen Code enthalten sind. Daher stellen einige FOSS Lizenzen besondere Anforderungen an die Mitlieferung von Lizenz- und Copyright Informationen für den Fall, dass die FOSS Komponente im Binärcode weitergegeben wird.
d) Executables
84
Eng mit dem Binärcode hängen die ausführbaren Dateien oder Executables zusammen. Dabei handelt es sich um Dateien, die als Computerprogramm ausgeführt werden können. Sie enthalten also den oben beschriebenen maschinenlesbaren Programmcode, der direkt oder durch eine Laufzeitumgebung – ein sog. runtime environment – ausgeführt werden kann. In einigen Fällen werden auch Dateien, die Bytecode oder Scripting Anweisungen enthalten, als ausführbare Dateien bezeichnet.4 Für dieses Buch sollen sich die Begriffe ausführbare Datei bzw. Executable einfach auf ausführbare Computerprogramme beziehen, die aufgrund ihrer Maschinenlesbarkeit keine für den menschlichen Betrachter verarbeitbaren Informationen zu FOSS Lizenzierung und Rechtsinhabern enthalten.
85
Backup: Erkennen von Code Formen anhand der Dateiendung
Anhand von Dateiendungen lässt sich bereits auf den ersten Blick erkennen, um welche Art von Code es sich bei einer Datei handelt. Mit dem Blick auf die Dateiendung kann man also direkt feststellen, ob es sich um Source Code oder um ausführbare Dateien handelt. Damit sehen Sie auch auf den ersten Blick, ob sich aus der jeweiligen Datei ggf. noch weitere Informationen für die FOSS Bewertung ziehen lassen (wie Angaben zu Copyrights und Lizenzierung in den Datei-Headern von Source Code Dateien) oder ob für die vorliegende Datei ggf. andere und/oder strengere Lizenzbedingungen gelten (für den Fall, dass die Lizenz unterschiedliche Vorgaben für die Weitergabe als ausführbare Datei macht).
Dateiendungen, die darauf hinweisen, dass es sich um Source Code handelt, sind beispielsweise .c, .h, .src oder .java. Hierbei handelt es sich jeweils um Textdateien, die Source Code oder Deklarationen zum Source Code enthalten. Auch bei Dateien, die auf .txt enden, handelt es sich um Textdateien. Solche im Code enthaltenen .txt Dateien enthalten häufig Informationen zur Lizenzierung, den Rechtsinhabern oder weitere hilfreiche Informationen zur Software (z.B. als LICENSE.txt, COPYING.txt oder README.txt).
Bei Dateiendungen wie .html oder .js handelt es sich zwar um Dateien, die von der Maschine direkt ausgeführt werden können, bei denen aber dennoch der Source Code direkt vorliegt und – z.B. mittels eines Texteditors – betrachtet werden kann. Da hier alle Informationen für den Betrachter lesbar vorhanden sind, können diese wie Source Code behandelt werden.
Hinsichtlich der ausführbaren Dateien und somit des Binärcodes dürfte die Dateiendung .exe wohl die bekannteste sein. Allerdings gibt es auch noch zahlreiche andere Dateiendungen, die auf Binärcode hindeuten, wie beispielsweise .dll oder .so, die auf Programmbibliotheken hindeuten, aber z.B. auch .msi, .bin oder .dat.
Bei der Endung .jar ist die Einordnung nicht immer auf den ersten Blick möglich. Denn hierbei kann es sich entweder um eine Java-Anwendungsdatei handeln, die durch Anklicken ausgeführt werden kann, oder aber um ein Java Archiv, das mehrere Java Dateien und auch andere Dateien enthalten kann. Diese Archive können dann mittels eines Packprogramm (wie WinZip, 7-Zip, o.ä.) geöffnet werden, um zu ermitteln, welche Art von Dateien sich darin befinden.
1 https://de.wikipedia.org/wiki/Quelltext. 2 https://en.wikipedia.org/wiki/Object_code. 3 https://de.wikipedia.org/wiki/Binärcode. 4 https://de.wikipedia.org/wiki/Ausführbare_Datei.
2. Von welchen Tools die Entwickler sprechen
86
– Entwicklung und Build sind unterschiedliche Bereiche; Entwicklung betrifft die Erstellung von Code, Build den Kompilierprozess, also die Erzeugung der Executables.
– Entwicklungsumgebungen, SDKs und Package Manager unterstützen bei der Verwaltung und Erzeugung von Code.
– Der Compiler erzeugt aus Source Code zusammen mit einem Linker ein ausführbares Programm, das nur noch in maschinenlesbarer Form vorliegt.
87
Zur Erstellung von Code bzw. Software werden unterschiedliche Werkzeuge – sogenannte Programmierwerkzeuge oder Entwicklungstools – benötigt. Dabei handelt es sich um Computerprogramme, die es ermöglichen, Code zu erzeugen und diesen anschließend weiter zu be- und verarbeiten. Um besser zu verstehen, wie Software entsteht und bei welchen Entwicklungsschritten z.B. welche Formen von Code entstehen, wollen wir hier einen kurzen Überblick über die gängigen Werkzeuge zur Erstellung und Bearbeitung von Code geben, insbesondere dort, wo diese auch im Zusammenhang mit der Bewertung von FOSS relevant sein können.
88
Es gibt grundsätzlich unterschiedliche Herangehensweisen bei der Erstellung und Bearbeitung von Code. So können entweder einzelne Programmiertools verwendet werden, die sich der Entwickler nach Bedarf selbst zusammenstellt, oder es wird auf sogenannte Entwicklungsumgebungen zurückgegriffen, die bereits alle notwendigen Hilfsprogramme mitbringen.
Abbildung 1: Software-Entwicklung/Build-Prozess© Jun Rechtsanwälte (CC BY-SA 4.0)
a) Entwicklungsumgebungen und Build-Tools
89
Bei dem Begriff „Entwicklungsumgebung“ handelt es sich um einen Oberbegriff für unterschiedliche Arten von Hilfsmitteln zur Erzeugung und Bearbeitung von Code. So fallen unter diesen Begriff beispielsweise IT-Plattformen bzw. Systemumgebungen, auf denen Software entwickelt wird, oder Sammlungen von Computerprogrammen zur Software-Entwicklung, z.B. die sogenannten integrierten Entwicklungsumgebungen oder Software Development Kits. Der Begriff „Build-Umgebung“ bezieht sich dagegen nicht auf die Erstellung von Code, sondern den darauf folgenden Schritt, nämlich das Erzeugen von Executables. Build-Tools sind also die Programme, die beim Kompilieren eingesetzt werden.
90
Bei der Systemumgebung handelt es sich einfach um eine Plattform, mit der ein informationstechnisches System betrieben wird. Ein solches System hat dabei häufig einen dreistufigen Aufbau, der aus einer Entwicklungsumgebung besteht, auf der der