VARA ist für viele Winlink-Nutzer das Standardmodem, sowohl auf Kurzwelle als auch über FM-Funkgeräte. Die Originalsoftware von EA5HVK ist allerdings proprietär und läuft nur unter Windows, unter Linux also meist mit Wine. xara ist eine Neuimplementierung in Rust, die mit VARA HF 4.9.0 und VARA FM 4.4.0 kompatibel ist und nativ unter Linux, FreeBSD und macOS läuft.

Weil der Quellcode unter der MIT-Lizenz steht, lässt sich darin nachlesen, wie das Funkprotokoll aufgebaut ist. Daraus ist diese kleine Serie entstanden:

  1. dieser Überblick
  2. Die Bitübertragung: Tonfolgen, FSK, PSK und OFDM
  3. ARQ, Geschwindigkeitsanpassung und das Host-Protokoll

Alle Angaben beziehen sich auf xara 0.1.3. Wo ich Zahlen nenne, stammen sie aus den Tabellen im Quellcode oder sind daraus berechnet. Wie VARA intern aufgebaut ist, ist unbekannt.

Was xara kann

Laut README und Changelog bietet xara:

  • VARA HF in den Bandbreiten 500, 2300 und 2750 Hz und VARA FM in den Varianten narrow und wide
  • die gewohnten TCP-Ports: Kommandoport 8300, Datenport 8301 und KISS auf 8100. Ein Client, der VARA über TCP ansteuert, sieht dieselbe Schnittstelle.
  • eine Weboberfläche für Konfiguration und Betrieb
  • Audio über PulseAudio/PipeWire, ALSA und CoreAudio, experimentell auch den (tr)uSDX
  • PTT über RTS/DTR, CM108/CM119-GPIO, hamlib rigctld oder VOX
  • Digipeating im FM-Modus
  • xara-monitor, einen passiven Empfänger, der VARA-HF-Verbindungen zwischen anderen Stationen mitlesen kann und nie sendet
  • Aufnahme von RX, TX und PTT als FLAC-Datei zur Fehlersuche

Ein minimaler Start sieht so aus:

xara --call DC8WAN --hf 2300 --audio alsa \
     --capture plughw:CARD=Device,DEV=0 \
     --playback plughw:CARD=Device,DEV=0

Zum Senden kommen --radio und eine --ptt-Option dazu, zum Beispiel --ptt cm108:DEV für ein USB-Interface mit CM108-Chip.

Aufbau des Codes

Das Projekt ist in mehrere Rust-Crates aufgeteilt, und diese Aufteilung entspricht ziemlich genau den Schichten des Protokolls:

CrateAufgabe
xara-phyModulation und Demodulation, Fehlerkorrektur (Turbo-Code), CRC, Kontrollframes, Busy-Erkennung, CW-ID
xara-arqVerbindungsaufbau, Quittungen, Geschwindigkeitsanpassung, Kompression, KISS, Digipeater
xara-hostdie TCP-Schnittstelle zu Winlink-Clients (Kommando-, Daten- und KISS-Port)
xara-uiWeboberfläche und Wasserfall
xaradas eigentliche Programm: Audio, PTT, Konfiguration, Monitor

Dazu kommt ein Verzeichnis vectors/ mit Testvektoren im JSON-Format: Codebücher, Frames, Pegel, Timing und aufgezeichnete Abläufe von Host-Kommandos. Daran prüft die Testsuite, ob xara dieselben Frames, Töne und Antworten erzeugt wie VARA.

Das Protokoll in einem Absatz

VARA arbeitet mit zwei Arten von Aussendungen. Kurze Kontrollframes sind Folgen von Sinustönen, die aus einem Codebuch mit 58 Einträgen stammen. Ein Kontrollframe überträgt also keine Bits, sondern nur eine Codenummer wie “ACK, eine Stufe schneller” oder “Verbindungswunsch an Rufzeichen X”. Datenframes tragen die Nutzdaten. Sie sind mit CRC-16 gesichert, mit einem Turbo-Code geschützt und werden je nach Kanalqualität als FSK, PSK oder OFDM ausgesendet. Auf HF gibt es dafür bis zu 17 Geschwindigkeitsstufen, von 18 bit/s (SNR-Schwelle −13,6 dB) bis rund 8500 bit/s (Schwelle 18 dB). Die Gegenstation quittiert jeden Datenblock mit einem Kontrollframe und schlägt dabei gleich die Stufe für den nächsten Block vor.

Die Details dazu stehen in den beiden folgenden Artikeln.

Registrierte Geschwindigkeiten

Ohne Registrierung begrenzt xara die HF-Verbindung wie das Original auf Stufe 4 (175 bit/s bei 2300 Hz) und FM auf Stufe 2. Wer eine registrierte VARA-Lizenz besitzt, kann xara mit dem Build-Feature registered übersetzen und mit --registered starten, dann stehen die höheren Stufen zur Verfügung.

Lizenz

xara ist Copyright (c) 2026 x0rro und steht unter der MIT-Lizenz. Der Code liegt auf GitHub unter x0rro/xara, dort finden sich auch reproduzierbare Release-Builds für x86_64, aarch64 und armv7.