RustDesk는 Rust로 작성된 오픈소스 원격 데스크톱 애플리케이션이다. TeamViewer의 대안으로 소개되며, 기본 설정 없이 동작하고 셀프 호스팅을 선택할 수 있다.
README의 흐름은 꽤 선명하다. src/client.rs가 피어 연결을 시작하고, src/rendezvous_mediator.rs가 rustdesk-server와 통신하면서 직접 연결을 기다린다. TCP hole punching이 되면 두 장치가 직접 붙고, 안 되면 rendezvous/relay 서버를 거친다. RustDesk가 자체 서버를 쓰거나, rendezvous/relay 서버를 직접 세우거나, 심지어 서버를 직접 작성할 수 있다고 적어둔 이유가 여기에 있다.
이 구조는 TeamViewer 같은 중앙 서비스의 편리함과 셀프 호스팅의 통제권 사이에서 선택지를 노출한다. 연결이 잘 될 때는 직접 경로가 깔끔하지만, NAT와 방화벽을 넘지 못하는 순간 릴레이가 필요하다. 즉 내 데이터는 내가 관리한다는 문장은 서버를 설치하는 순간 운영 책임으로 바뀐다.
코드 구조도 이 실행 모델을 따라간다. libs/hbb_common은 비디오 코덱, TCP/UDP 래퍼, protobuf, 파일 전송 유틸리티를 맡고, src/server는 오디오·클립보드·입력·비디오 서비스와 네트워크 연결을 다룬다. 화면 캡처는 libs/scrap, 키보드와 마우스 제어는 libs/enigo로 분리돼 있다. 기능 목록보다 연결 경로와 장치 제어의 경계가 먼저 보이는 설계다.
다만 셀프 호스팅을 가볍게 보면 안 된다. README는 Sciter UI를 deprecated로 표시하고 Flutter 빌드 경로를 별도 CI로 안내한다. 직접 빌드하려면 Rust와 C++ 환경, vcpkg, libvpx·libyuv·opus·aom 같은 의존성이 필요하고, Docker 빌드도 첫 실행 뒤 캐시와 호스트의 실행 파일 위치를 이해해야 한다.
그래서 RustDesk를 볼 때 먼저 물어야 할 것은 플러그인이 얼마나 많은가가 아니다. 우리 환경에서 직접 연결이 얼마나 자주 성립하는지, 릴레이 서버를 누가 운영하는지, 원격 입력과 클립보드 정책을 어디서 통제할지다. RustDesk의 실행 모델은 제품의 장점과 관리 비용을 같은 화면에 올려놓는다.