TailTalk: Rust와 Tokio로 만든 현대적인 비동기 유저스페이스 AppleTalk 스택
TailTalk는 Netatalk나 커널 드라이버에 의존하지 않고 순수 Rust로 작성된 완전한 유저스페이스 AppleTalk 프로토콜 스택입니다. Linux, macOS, Windows에서 로우 소켓 또는 TashTalk 호환 장치만으로 구형 매킨토시와 파일 전송, 레거시 프린터 공유(AirPrint/IPP 변환)를 가능하게 합니다. Rust 1.90 이상에서 빌드할 수 있으며 현재 라우터 없는 환경에서 동작하는 프로토타입 단계입니다.
TailTalk
TailTalk는 Linux, macOS, Windows 시스템에서 EtherTalk 또는 LocalTalk 네트워크를 통해 완전한 유저스페이스 AppleTalk 구현을 구축하기 위한 "툴킷"으로 설계되었습니다. Netatalk나 어떤 커널 드라이버에도 의존하지 않고 처음부터 새로 작성되었습니다. 필요한 것은 로우 소켓 그리고/또는 TashTalk 호환 장치(LocalTalk용)와 까다로운 옛날 컴퓨터를 다룰 인내심뿐입니다. 완전한 AppleTalk 스택을 제공하며, 동일한 머신에서 여러 복사본을 동시에 실행할 수 있습니다.
이 프로젝트를 시작한 이유는 제 오래된 맥과 파일을 주고받고, LaserWriter, ImageWriter, 네트워크 연결된 StyleWriter로 인쇄하며, 이들과 통신하는 현대적인 비동기 소프트웨어를 작성하기 위해서였습니다. 현재 TailTalk는 라우터 없는 설정에서만 동작합니다. 라우터가 있는 네트워크에 자연스럽게 참여하는 기능은 개발 중이지만 아직 메인라인 코드에는 포함되지 않았습니다. 스택의 각 부분은 당시 맥에서 실행되던 것처럼 최대한 "제로 컨피그(설정 불필요)"를 지향합니다. 그냥 꽂고 실행하면 번거로움 없이 바로 동작해야 합니다. 이 프로젝트는 진행 중인 프로토타입이므로 버그와 누락된 기능이 있을 수 있습니다.
TailTalk GUI
이것은 TashTalk USB와 함께 사용하기 위한 현재의 사용자용 프로그램입니다. LocalTalk 포트가 탑재되어 출하된 거의 모든 맥에서 동작해야 하는 AFP 서버를 포함하고 있습니다. 또한 Stuff-It 아카이브와 플로피 디스크 이미지를 임포트하여 리소스 포크(resource fork)를 보존한 채 공유 경로에 로드하고 원격 클라이언트에서 사용할 수 있게 합니다. 추가로 LocalTalk 지원 LaserWriter, ImageWriter, StyleWriter를 현대 네트워크에서 AirPrint / IPP 프린터로 공유하고, 현대 프린터를 클래식 맥에 공유하는 기능도 지원합니다.
최신 릴리스는 여기서 확인할 수 있습니다: https://github.com/FeralFirmware/TailTalk/releases/latest
기능
거의 모든 주요 AppleTalk 프로토콜에 대한 패킷 파서와 완전한 비동기 API를 제공합니다.
- AppleTalk Address Resolution Protocol (AARP)
- Datagram Delivery Protocol (DDP)
- Name Binding Protocol (NBP)
- AppleTalk Transaction Protocol (ATP)
- Printer Access Protocol (PAP)
- AppleTalk Session Protocol (ASP)
- AppleTalk Filing Protocol (AFP)
- AppleTalk Data Stream Protocol
또한 TashTalk를 통해 LocalTalk 맥과 함께 실행하는 것을 지원합니다. AARP/DDP 하부 계층은 인프로세스(기본값)로 실행하거나, 인터페이스를 소유하고 Unix 또는 UDP 소켓을 통한 protobuf 프로토콜로 여러 클라이언트에 DDP 소켓, 주소 지정, 라우팅 규칙을 제공하는 공유 데몬 tailtalkd에서 실행할 수 있습니다. TailTalk(TalkStack::builder().daemon_unix(..))이나 일반 C 클라이언트에서 사용할 수 있습니다. docs/daemon-protocol.md를 참고하세요.
빌드
사전 요구 사항
이 프로젝트는 Rust 1.90 이상이 필요하며, rustup.rs에서 설치할 수 있습니다. 기본적으로 사용 중인 OS와 CPU 아키텍처에 맞는 컴파일러가 설치됩니다.
이 프로젝트는 Linux용 AppImage, macOS용 App 번들, Windows용 인스톨러를 빌드하기 위해 cargo-packager를 사용합니다. cargo install cargo-packager로 설치하세요.
Windows 전용
rustup book에 명시된 대로 Windows MSVC 사전 요구 사항이 설치되어 있는지 확인하세요. Windows에는 npcap SDK를 컴퓨터 어딘가에 저장해야 합니다. npcap.com에서 받을 수 있습니다. SDK 압축을 푼 폴더를 LIB 환경 변수로 지정하세요. 예: C:\npcap-sdk-1.13\Lib\x64
빌드 실행
사전 요구 사항이 설치되면 저장소 루트에서 cargo build --release를 실행해 전체를 빌드하거나, TailTalk GUI만 빌드하려면 cargo build -p tailtalk-gui --release를 실행하세요. 빌드 후 바이너리는 target/release/에 위치합니다. 그 다음 OS에 따라 다음을 실행하세요:
Linux
cargo packager --release -f appimage -p tailtalk-gui
macOS
cargo packager --release -p tailtalk-gui
Windows
cargo packager --release -f nsis -p tailtalk-gui
결과물 번들은 dist/에 생성됩니다.
TashTalk USB 빠른 시작 가이드: Setup.md
TashTalk USB는 Silicon Labs CP210x USB-UART 브리지(VID 10c4, PID ea60)를 사용합니다.
Linux
cp210x 커널 모듈은 이미 설치되어 있을 가능성이 높지만, 기본적으로 장치 노드는 root만 접근할 수 있습니다.