# Unison (Software)

Unison ist ein freies Synchronisierungsprogramm für Unix/Linux, Windows, macOS, Solaris und einige andere Betriebssysteme. Es gleicht Dateien zwischen lokalen oder entfernten (auf anderen Computern liegenden) Verzeichnissen ab.

## Merkmale

Unison verfügt über die folgenden Merkmale:
* Plattformübergreifend verfügbar (Windows, Linux, Unixe, macOS etc.)
* Kann Änderungen im Dateibestand auf beiden Seiten der Replikation verarbeiten; Konflikte (gleiche Datei auf beiden Seiten geändert) werden angezeigt und können manuell aufgelöst werden.
* Kann die geänderten Dateien sichern (Backup-Funktion).
* Abgleich über Rechnernetze (LAN, Internet) durch Direktverbindung (Socket) oder getunnelt über ssh
* Bandbreitenoptimiert durch Nutzung des rsync-Algorithmus, damit nur geänderte Blöcke von Dateien übertragen werden müssen.
* Arbeitet als Userlevel-Programm und benötigt keine Root- bzw. Administratorenrechte.
* Fehlertolerant, um auch bei Programmabbrüchen oder Netzwerkfehlern stets einen konsistenten Zustand der Replikaten zu bewahren.

## Funktionsweise

Unison kann über die Kommandozeile mit Parametern aufgerufen oder über Profildateien gesteuert werden. Dabei kann es interaktiv oder batchgesteuert automatisch ausgeführt werden. Im Batch-Modus werden die eindeutigen Änderungen automatisch synchronisiert. Dateien mit Replikationskonflikten werden übersprungen.
Das Programm prüft nach dem Start den Dateibestand pro Verzeichnis bzw. Computer und vergleicht die Zeitstempel der Dateien. Stellt es Veränderungen fest, werden die Änderungen der entsprechenden Dateien genauer analysiert. Danach erstellt Unison eine Replikationsliste mit Vorschlägen für deren Synchronisation und markiert nicht automatisch auflösbare Konflikte.

## Beispiele für die Verwendung

* Abgleich eines Verzeichnisses mit einer externen Festplatte als Backup
* Direkter Abgleich von Verzeichnissen zwischen zwei vernetzten Computern
* Abgleich von Verzeichnissen zwischen einem oder mehreren Computern (Linux, Apple, Windows etc.) mit einem Server

## Benutzeroberflächen

Für den interaktiven Einsatz existieren GUI-Versionen von Unison. Unter Windows und Linux basieren sie allgemein auf GTK+. Die GUI-Versionen ermöglichen eine einfachere Übersicht über die Replikate und die vorgeschlagene Synchronisation. Änderungen können per Tastatur oder Maus einzeln vorgemerkt und danach gebündelt umgesetzt werden.

## Einschränkungen

Unison arbeitet auf Basis der lokalen Dateisysteme. Findet die Replikation zwischen unterschiedlichen Dateisystemen statt, können Probleme in den folgenden Bereichen auftreten:
* Dateiattribute, wenn sie nicht gleichartig von beiden Dateisystemen unterstützt werden (Beispiel: FAT32- ggü. POSIX-Attribute)
* Dateiberechtigungen, wenn sie unterschiedlich behandelt werden (Beispiel: NTFS- ggü. FAT32- ggü. Unix-Dateisysteme).
* Dateinamen, wenn deren Groß-/Kleinschreibung unterschiedlich interpretiert wird (Beispiel: NAME.TXT, name.txt oder Name.txt sind unter Unix-Dateisystemen drei unterschiedliche Dateien, aber unter FAT32 wegen fehlender Unterscheidung zwischen Groß- und Kleinschreibung ein und dieselbe Datei).
* Symbolische Links, die insbesondere in Unix-artigen Systemen häufig zur Anwendung kommen.
Eine Einschränkung älterer Versionen (vor 2.52) war, dass zur Synchronisation über das Netz beide Rechner die gleiche Version von Unison, kompiliert mit der gleichen OCaml-Version, ausführen mussten. Das führte regelmäßig zu Problemen bei der Synchronisation zwischen unterschiedlichen Betriebssystemen, die unterschiedliche Unison-Versionen über ihre Package-Repositories anboten. Diese Versionsabhängigkeit besteht seit Version 2.52 nicht mehr: Client und Server können unterschiedliche Unison-Versionen, mit unterschiedlichen OCaml-Versionen kompiliert, ausführen, solange auf beiden Rechnern mindestens Version 2.52 läuft. Wenn einer der beteiligten Rechner Version 2.48 oder 2.51 ausführt, kann der andere Rechner jede Version ab 2.52 ausführen, die mit der gleichen OCaml-Version kompiliert wurde.