# Packprogramm

Archivierungs- oder Packprogramme (kurz Packer, engl. kurz Archiver) fassen eine oder mehrere andere Dateien zu Containerdateien – sog. Archivdateien – zusammen bzw. extrahieren sie wieder daraus. Sie dienten früher oft zum Archivieren der Datensicherung auf Magnetbänder (die Dateinamenserweiterung .tar leitet sich beispielsweise von englisch tape archiver = ‚Bandarchivierer‘ ab).

## Funktionsweise

Im einfachsten Falle werden von einem Packprogramm dabei die zu archivierenden Dateien einfach als Datenstrom hintereinandergehängt und zusätzlich noch die Namen, Längen (und eventuell die Reihenfolge) der einzelnen Dateien im Index der Archivdatei festgehalten. Meist können jedoch noch weitere Metainformationen mitgespeichert werden, wie z. B. Erstellungsdaten, Zugriffsrechte und Dateiattribute, wie das Archivbit. Diese können u. U. auf Wunsch des Benutzers auch beim Packen modifiziert werden (z. B. das Zurücksetzen des Archivbits nach erfolgreicher Archivierung).
Auch wenn die Archivierung im Vordergrund steht, werden die Daten meist zusätzlich noch komprimiert, um Speicherplatz zu sparen. Daher wird der Begriff Packprogramm häufig verwendet, wenn eigentlich ein Datenkompressionsprogramm gemeint ist. Auch reine Packprogramme wie tar werden häufig bei der Datenkompression genutzt, um für Datenkompressionsprogramme wie gzip oder bzip2, die nur einzelne Dateien behandeln, vorher mehrere Dateien zu einer zusammenzufassen (progressive Kompression).

## Dateianwendung

Neben expliziten Packprogrammen und Dateimanagern die Packprogramme unterstützen, nutzen manche Anwendungsprogramme dieselben oder ähnliche eingebaute Algorithmen für ihre Daten und Einstellungen. Andere dekomprimieren bereitgestellte (und meist nur zu lesende Daten) während der Laufzeit. So möchten beispielsweise manche Programme die freie Datei für die Zuordnung von IP-Adressen zu Ländern GeoIP.dat.gz schon entpackt im Datenverzeichnis liegen haben, andere verwenden direkt die komprimierte Version.
Zusätzlich gibt es Kompressionsprogramme für Programmdateien (*.exe, *.dll etc.), welche die Lauffähigkeit der Programme erhalten, wie beispielsweise UPX. Je nach System werden die Programme nur im Speicher entpackt oder eine lokale temporäre Datei angelegt. Teilweise geht es darum Datenträgerplatz zu sparen, was in Zeiten von Diskettenlaufwerken relevant war und heute vor allem noch für Kleincomputer wie von eingebetteten Systemen relevant ist. Sonst kann es heute einen Geschwindigkeitsvorteil beim Programmstart von langsamen Datenträgern oder direkt über das Netzwerk bringen, wo die Rechenzeit zum Dekomprimieren weniger ins Gewicht fällt als die Datentransferrate. Zusätzlich sind die Programmdateien vor einfachen disassembling-Versuchen geschützt. Packer, die einen Passwortschutz beim Dekomprimieren außerhalb der Laufzeit einsetzen oder eine kryptografische Verschlüsselung eingebaut haben, schützen wirksamer gegen Analyse, Reverse Engineering und Modifikationen.

## Programmentwicklung

Sogenannte Archiver werden aber auch im Bereich der Programmentwicklung verwendet. Dort fasst ein Archiver viele Objektdateien in einem Archiv (auch Bibliothek genannt) zusammen. Anstelle der einzelnen Objektdateien muss dem Linker nur noch der Name des Archivs genannt werden, aus dem dieser sich dann die notwendigen Objektdateien heraussucht, um sie in die Zieldatei einzubinden.
Ein Beispiel für Archiverprogramme im letzteren Sinne sind der ar65-Archiver des C-Compilers cc65 oder der unter Unix-Betriebssystemen verwendete Packer ar, der unter anderem mittlerweile hauptsächlich so verwendet wird.