TailTalk: Ngăn xếp AppleTalk bất đồng bộ hiện đại viết bằng Rust và Tokio

Công nghệ12 tháng 9, 2026·7 phút đọc

TailTalk là bộ công cụ mã nguồn mở cho phép xây dựng ngăn xếp AppleTalk chạy hoàn toàn trong không gian người dùng trên Linux, macOS và Windows, không phụ thuộc vào Netatalk hay driver kernel. Dự án viết bằng Rust với Tokio, hỗ trợ EtherTalk và LocalTalk, giúp kết nối máy Mac cổ với hệ thống hiện đại.

TailTalk: Ngăn xếp AppleTalk bất đồng bộ hiện đại viết bằng Rust và Tokio

TailTalk: Ngăn xếp AppleTalk bất đồng bộ hiện đại viết bằng Rust và Tokio

TailTalk là một bộ công cụ mã nguồn mở cho phép xây dựng các triển khai AppleTalk chạy hoàn toàn trong không gian người dùng (userspace) trên Linux, macOS và Windows thông qua mạng EtherTalk hoặc LocalTalk. Dự án được viết lại từ đầu bằng RustTokio, không phụ thuộc vào Netatalk hay bất kỳ driver kernel nào — chỉ cần một raw socket và/hoặc thiết bị tương thích TashTalk cho LocalTalk.

Điểm đáng chú ý là TailTalk có thể chạy đồng thời nhiều bản sao của ngăn xếp trên cùng một máy, mang lại sự linh hoạt chưa từng có cho việc kết nối với các dòng máy Mac cổ.

Mục tiêu của dự án

Tác giả khởi tạo TailTalk với mục đích rất thực tế: sao chép tập tin đến và đi từ những chiếc Mac cũ, in ấn trên các dòng máy in LaserWriter, ImageWriterStyleWriter kết nối mạng, đồng thời có thể viết phần mềm bất đồng bộ hiện đại để giao tiếp với chúng.

Triết lý thiết kế của dự án là "zero config" — giống như chạy trên một chiếc Mac thời kỳ đó. Chỉ cần cắm vào, khởi chạy và mọi thứ sẽ hoạt động mà không cần cấu hình phức tạp.

Hiện tại TailTalk chỉ hoạt động trong thiết lập không có router. Nhóm phát triển đang hoàn thiện khả năng tham gia mạng có router một cách trơn tru, nhưng tính năng này chưa được đưa vào nhánh chính.

Giao diện TailTalk GUI

Đây là chương trình hướng đến người dùng hiện tại, dùng với TashTalk USB. Nó bao gồm một AFP server tương thích với gần như mọi máy Mac được trang bị cổng LocalTalk.

Giao diện này còn có thể nhập các tập tin lưu trữ Stuff-It và ảnh đĩa mềm, sau đó nạp chúng vào thư mục chia sẻ trong khi vẫn bảo toàn resource fork — một chi tiết cực kỳ quan trọng đối với hệ thống Mac cổ.

Ngoài ra, TailTalk GUI hỗ trợ chia sẻ các máy in LocalTalk như LaserWriter, ImageWriter và StyleWriter sang mạng hiện đại dưới dạng máy in AirPrint / IPP, và ngược lại, chia sẻ máy in hiện đại cho các máy Mac cổ.

Các giao thức được hỗ trợ

TailTalk cung cấp bộ phân tích gói tin (packet parser) và API bất đồng bộ đầy đủ cho gần như toàn bộ các giao thức AppleTalk chính:

  • AARP (AppleTalk Address Resolution Protocol)
  • DDP (Datagram Delivery Protocol)
  • NBP (Name Binding Protocol)
  • ATP (AppleTalk Transaction Protocol)
  • PAP (Printer Access Protocol)
  • ASP (AppleTalk Session Protocol)
  • AFP (AppleTalk Filing Protocol)
  • ADSP (AppleTalk Data Stream Protocol)

Dự án cũng hỗ trợ chạy với TashTalk dành cho các máy Mac dùng LocalTalk. Lớp nền AARP/DDP có thể chạy trong cùng tiến trình (mặc định) hoặc trong một daemon chia sẻ tên là tailtalkd, giúp nhiều ứng dụng khách cùng sử dụng giao diện mạng, địa chỉ và quy tắc định tuyến qua giao thức protobuf trên Unix socket hoặc UDP socket.

Yêu cầu hệ thống và cách xây dựng

Dự án yêu cầu Rust 1.90 trở lên, có thể cài đặt từ rustup.rs. Việc build sử dụng cargo-packager để tạo AppImage cho Linux, App bundle cho macOS và trình cài đặt cho Windows.

TailTalk được xây dựng bằng RustTailTalk được xây dựng bằng Rust

Trên Windows, cần cài đặt các yêu cầu tiên quyết MSVC theo hướng dẫn của rustup, đồng thời tải SDK npcap từ npcap.com và trỏ biến môi trường LIB đến thư mục chứa SDK.

Để build toàn bộ dự án, chạy lệnh sau từ thư mục gốc:

cargo build --release

Hoặc chỉ build giao diện TailTalk GUI:

cargo build -p tailtalk-gui --release

Sau khi build xong, các tập tin nhị phân sẽ nằm trong target/release/. Tùy theo hệ điều hành, chạy lệnh đóng gói tương ứng để tạo bản phân phối hoàn chỉnh.

Cấu hình phần cứng TashTalk USB

TashTalk USB sử dụng chip cầu USB-to-UART Silicon Labs CP210x (VID 10c4, PID ea60). Trên Linux, module kernel cp210x thường đã được cài sẵn nhưng thiết bị chỉ truy cập được bằng quyền root. Để cấp quyền truy cập cho người dùng thường mà không cần root, cần tạo một quy tắc udev.

Trên macOS 11 trở lên, hệ điều hành hỗ trợ sẵn chip CP2102N. Với các phiên bản từ 10.12 đến 10.15, cần cài driver từ Silicon Labs. Trên Windows, cần cài driver CP210x VCP và npcap 1.88.

Hỗ trợ EtherTalk

EtherTalk được biên dịch sẵn vào GUI trên macOS, nơi libpcap đi kèm hệ điều hành. Trên Linux và Windows, tính năng này là tùy chọn — cần build với cờ --features ethertalk sau khi đã cài libpcap (hoặc libpcap-dev) hay SDK npcap.

TailTalk hỗ trợ tài liệu đầy đủTailTalk hỗ trợ tài liệu đầy đủ

Trên macOS, việc bắt và chèn gói tin đi qua các thiết bị /dev/bpf*, vốn chỉ dành cho root theo mặc định. Để dùng EtherTalk với tài khoản thường, cần cài gói ChmodBPF (có sẵn trong bộ cài Wireshark hoặc cài qua Homebrew). Gói này tạo nhóm access_bpf, gán quyền cho các thiết bị BPF và thêm người dùng vào nhóm — lưu ý cần đăng xuất và đăng nhập lại để thay đổi có hiệu lực.

Các chương trình demo

Tác giả đã viết 4 chương trình demo để kiểm chứng chức năng trong quá trình phát triển:

  • aep-echo — chương trình echo đơn giản, gửi yêu cầu đến địa chỉ đích và in ra thời gian phản hồi
  • afp-server — máy chủ AFP tương thích phiên bản 1.0, 1.1 và 2.0, hỗ trợ đọc ghi tập tin và duyệt thư mục cơ bản trên hệ thống Mac cổ
  • nbp-lookup — thực hiện tra cứu NBP theo chuỗi yêu cầu và trả về kết quả
  • pap-print — gửi tập tin PostScript đến máy in PAP, hướng đến dòng LaserWriter

Ngoài ra còn có tailtalkd (daemon lớp nền) và tailtalk-gui (giao diện đồ họa để chia sẻ thư mục dưới dạng volume qua EtherTalk và/hoặc LocalTalk).

Kiểm thử với phần cứng thực tế

Theo tác giả, cách kiểm thử hiệu quả nhất ngoài unit test chính là dùng phần cứng thật. Thiết lập kiểm thử hiện tại bao gồm máy Linux chạy TailTalk, PowerBook G3 chạy Mac OS 9.2 qua Ethernet, máy in LaserWriter 4/600 PS qua AsanteTalk, Color StyleWriter 2200 qua bộ chuyển EtherTalk, ImageWriter II với thẻ LocalTalk, Macintosh SE/30 chạy System 7.1 và Macintosh Classic chạy System 6.0.8.

Một chi tiết thú vị: khi bật nguồn, AsanteTalk sẽ "lắng nghe" các gói tin đến từ phía Ethernet trước khi quyết định hoạt động dưới pha EtherTalk nào. Nếu không thấy gói EtherTalk Phase 2, thiết bị sẽ mặc định chuyển sang Phase 1. TailTalk hỗ trợ Phase 1 và hoạt động tốt với LaserWriter cùng NBP, nhưng AFP sẽ không hoạt động do phản hồi bị loại bỏ.

Đóng góp và giấy phép

Tác giả mong muốn dự án phát triển thành nền tảng có thể dùng để xây dựng các triển khai AppleTalk hoàn chỉnh hơn. Mọi đóng góp đều được chào đón, nhưng cần mở issue trước để thảo luận về những thay đổi dự kiến. Các Pull Request cần nêu rõ hệ thống nào đã được dùng để kiểm chứng thay đổi.

Dự án được phát hành dưới giấy phép GNU General Public License v3.0.

Chia sẻ của tác giả: "Dự án này đã giúp tôi nhận ra những hệ thống cũ có thể kỳ quặc đến mức nào."

Đối với cộng đồng yêu thích retro computing và những ai muốn hồi sinh dàn máy Mac cổ của mình, TailTalk là một dự án đáng theo dõi — đặc biệt khi nó kết hợp sức mạnh của RustTokio với sự hoài cổ của AppleTalk.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗