TailTalk: A modern async user space AppleTalk stack with Rust and Tokio
TailTalk: A Modern Async AppleTalk Stack
TailTalk serves as a comprehensive toolkit designed to implement AppleTalk entirely within user space. It is compatible with Linux, Windows, and macOS, supporting both EtherTalk and LocalTalk network environments.
Project Philosophy: The goal is a "zero config" experience. Much like the original Macs, the software is designed to be "plug-and-play," allowing users to launch the stack and have it function immediately without tedious manual configuration.
🛠️ Technical Foundation
The project is written from the ground up using Rust and the Tokio async runtime. It maintains total independence from kernel drivers or Netatalk. The only requirements are a raw socket or a TashTalk-compatible hardware interface.
Architecture Overview
TailTalk can operate in two modes:
- In-Process: The AARP/DDP underlay runs directly within the application (default).
- Daemon Mode: A shared background process,
tailtalkd, manages interfaces and routing. It communicates with clients (via Rust or C) using a protobuf protocol over UDP or Unix sockets.
🌟 Key Features & Capabilities
The TailTalk GUI
The primary user-facing application is optimized for use with TashTalk USB. Its capabilities include:
- AFP Server: Compatible with nearly every LocalTalk-equipped vintage Mac.
- Disk Imaging: Ability to import floppy images and Stuff-It archives into the share path while preserving resource forks.
- Printer Bridging:
- Share classic LaserWriters, ImageWriters, and StyleWriters as modern AirPrint/IPP printers.
- Share modern printers back to classic Macintosh systems.
Supported Protocols
The stack provides async APIs and packet parsers for the following:
- AARP (Address Resolution Protocol)
- DDP (Datagram Delivery Protocol)
- NBP (Name Binding Protocol)
- ATP (Transaction Protocol)
- PAP (Printer Access Protocol)
- ASP (Session Protocol)
- AFP (Filing Protocol)
- Data Stream Protocol
Current Status
- Basic async stack implementation
- TashTalk USB support
- AFP and Printing services
-
Router-based network joining(Currently in progress; not yet in mainline)
Note: This is a prototype. Expect some bugs and missing functionality.
🏗️ Building the Project
Prerequisites
- Install Rust 1.90+ via
rustup.rs. - Install
cargo-packager(used for AppImage, App bundles, and Windows installers).
Windows Specifics:
- Install MSVC prerequisites.
- Download the npcap SDK.
- Set the
LIBenvironment variable to the SDK library path:C:\npcap-sdk-1.13\Lib\x64
Compilation Steps
To build the entire suite:
cargo build --release
To build only the GUI:
cargo build -p tailtalk-gui --release
Packaging by OS
| Operating System | Command | Output Format |
|---|---|---|
| Linux | cargo packager --release -f appimage -p tailtalk-gui | AppImage |
| macOS | cargo packager --release -p tailtalk-gui | App Bundle |
| Windows | cargo packager --release -f nsis -p tailtalk-gui | NSIS Installer |
Binaries are located in target/release/ and bundles in dist/.
🔌 TashTalk USB Setup
The hardware utilizes a Silicon Labs CP210x USB-to-UART bridge. Hardware IDs:
OS Configuration
Linux
To avoid running as root, implement a udev rule:
echo ' SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", TAG+="uaccess" ' \
| sudo tee /etc/udev/rules.d/99-tashtalk-usb.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
Re-plug the device after running these commands.
Windows
- Install the CP210x VCP driver from Silicon Labs.
- Install npcap 1.88.
macOS
- v11+: Native support for CP2102N.
- v10.12 - v10.15: Requires the Silicon Labs VCP driver.
EtherTalk Configuration
EtherTalk is enabled by default on macOS. For other platforms, it is an opt-in feature requiring libpcap (or npcap on Windows):
cargo build -p tailtalk-gui --features ethertalk