Einer der großen Unterschiede zwischen freier und proprietärer Software ist die Verfügbarkeit des Quellcodes Source Code)[30]. Das hat zur Folge, dass freie Software in Form von Archiven mit Code-Dateien vertrieben wird. Für die meisten Einsteiger ist das eine ungewöhnliche Situation, da sie sich als Benutzer von freier Software die Programme zuerst selbst durchbauen müssen, bevor sie sie benutzen können.
Es gibt aber auch fertig kompilierte Versionen des größten Teils der existierenden freien Software. Ein eiliger Benutzer muss sich nur diese kompilierten Binärdateien installieren. Einige Programme der freien Software werden jedoch nicht in dieser fertigen Form verbreitet, auch frühe Versionen kann man selten in binärer Form bekommen. Des Weiteren werden Sie für ein exotisches Betriebssystem oder eine ungewöhnliche Hardware-Architektur auch kaum dafür kompilierte Software finden. Aber der weitaus interessantere Aspekt der eigenen Software-Kompilierung ist die Möglichkeit, dabei nur die für Sie interessanten Optionen zu aktivieren oder die Funktionalität der Software zu erweitern, so dass Sie ein genau für Ihre Bedürfnisse zugeschnittenes Programm erhalten.
Zum Durchbauen der Software benötigen Sie:
einen Compiler (im Allgemeinen für C) und ein Archivierungsprogramm (z.B. tar),
etwas Nahrung (in schwierigen Fällen kann es lange dauern). Ein echter Hacker nimmt Pizza zu sichs – keine Burger!
etwas Trinkbares (aus den gleichen Gründen). Ein echter Hacker trinkt Cola – wegen des Koffeins!
die Telefonnummer Ihres technisch begabten Freundes, der sowas jede Woche macht,
Das Durchbauen eines Quellcodes bringt im Allgemeinen kaum Probleme mit sich. Als Neuling werden Sie jedoch von der kleinsten Hürde aufgehalten. Dieses Dokument soll Ihnen beim Überwinden dieser Hürden helfen.
Um einen Quellcode in ein binäres Programm umzuwandeln müssen Textdateien (normalerweise C oder C++, die die meist verwendeten Sprachen der (UNIX®) Freien Software Gemeinschaft) kompiliert werden. Einige Programme sind in Sprachen geschrieben, die kein Durchbauen benötigen (etwa perl oder die shell). Diese müssen aber zumindest eingerichtet werden.
Das Durchbauen von C-Quellen wird logischerweise von einem C-Compiler durchgeführt. Meist wird dafür der gcc, der freie Compiler des GNU-Projektes verwendet. Vollständige Softwarepakete durchzubauen ist eine komplexe Aufgabe, die aus dem nacheinander kompilieren einzelner Quellcode-Dateien besteht (aus vielerlei Gründen ist es für Entwickler einfacher, die verschiedenen Module eines Projektes in einzelne Dateien zu speichern). Für Sie wird diese Aufgabe durch ein Hilfsprogramm namens make erleichtert.
Zum Verständnis des Kompilierungsvorganges (und um in der Lage zu sein, dabei auftauchende Probleme zu beheben) sollten Sie etwas über die einzelnen dabei zu durchlaufenden Phasen wissen. Das Ziel ist die schrittweise Umwandlung einer in einer für einen ausgebildeten Menschen lesbaren Sprache geschriebenen Textdatei in eine maschinenlesbare Sprache umzuwandeln (lesbar auch für manche sehr gut ausgebildete Menschen). gcc führt dabei vier Programme nacheinander aus. Jedes davon ist für einen Schritt zuständig:
cpp: Der erste Schritt besteht darin, Direktiven im Quellcode (Präprozessoren) durch reine C-Instruktionen zu ersetzen. Im Allgemeinen bedeutet das, einen Header (#include) einzufügen oder ein Makro zu definieren (#define). Nach Beendigung dieses Schrittes besteht die Datei aus reinem C-Code.
cc1: In diesem Schritt wird der C-Code in Assembler umgewandelt. Der generierte Code ist von der verwendeten Architektur abhängig.
as: Jetzt wird aus dem Assemblercode ein Objektcode (oder auch Binärcode) erzeugt. Übrig bleibt am Ende des Vorgangs eine .o-Datei.
ld: Im letzten Schritt (Verlinkung) werden alle Objekt-Dateien (.o) und ihre entsprechenden Bibliotheken miteinander verbunden und es entsteht eine ausführbare Datei.
Ein korrekt aufgebautes Programmpaket der freien Software hat immer die gleiche Struktur:
Eine Datei INSTALL, die den Installationsprozess beschreibt.
Eine Datei README, die allgemeine Informationen zum Programm enthält (kurze Beschreibung, Autor, URL der Website, Dokumentation, hilfreiche Links, usw.). Falls keine Datei INSTALL vorhanden ist, findet man eine kurze Installationsbeschreibung in der Datei README.
Eine Datei COPYING, die die Lizenz oder die Herausgabebedingungen des Programms enthält. Manchmal wird statt dessen auch eine Datei LICENSE mit gleichem Inhalt benutzt.
Eine Datei CONTRIB oder CREDITS, in der einige Leute aufgelistet werden, die an der Entstehung der Software beteiligt waren (aktive Mitarbeit, sachdienliche Kommentare, Programme von Drittanbietern, usw.).
Eine Datei CHANGES (oder weniger häufig NEWS), die neueste Änderungen und Bugfixes enthält.
Eine Datei Makefile (siehe „Make“), die den Kompilierungsablauf steuert (notwendig für make). Falls diese Datei nicht bereits existiert, muss sie in einem vor der Kompilierung stattfindenden Konfigurationsprozess generiert werden.
Sehr oft findet man eine Datei configure oder Imakefile, die die Erstellung einer neuen, auf die Erfordernisse eines bestimmten Systems abgestimmte Datei Makefile ermöglicht (siehe „Konfiguration“).
Ein Verzeichnis, das die Quellcode-Dateien enthält und wo normalerweise am Ende des Durchbauens die neue Binärdatei abgelegt wird. Meistens trägt dieses Verzeichnis den Namen src.
Ein Verzeichnis mit der Programm-Dokumentation (meist als Handbuchauszug oder Texinfo-Datei), gewöhnlich mit dem Namen doc.
Manchmal findet sich auch ein Verzeichnis, das programmspezifische Dateien enthält (Konfigurationsdateien, Fall-Beispiele oder sonstige Hilfsdateien).
[30] Das ist nicht ganz korrekt, da es einige proprietäre Programme gibt, deren Quellcode offen gelegt wird. Allerdings darf ihn der Anwender – anders als bei freier Software – nicht benutzen oder nach seinem Willen verändern.