Cocoa-Way – macOS에서 Linux 앱을 네이티브로 실행하는 Wayland 컴포지터

4 hours ago 1
  • macOS에서 Linux 애플리케이션을 가상머신 없이 실행할 수 있게 하는 Wayland 컴포지터로, Metal/OpenGL 기반 렌더링을 사용해 macOS 창 환경과 자연스럽게 통합됨
  • Unix 소켓을 통한 직접 Wayland 프로토콜 통신으로 성능 손실을 최소화하며, HiDPI 디스플레이 최적화서버 측 데코레이션을 지원
  • Rust로 작성되어 있으며, 하드웨어 가속 렌더링을 통해 낮은 지연과 높은 효율을 제공
  • SSH와 waypipe-darwin을 이용해 Linux 호스트의 앱을 macOS 창으로 표시할 수 있음
  • GPLv3 라이선스로 공개되어 있으며, Windows와 Android 백엔드 확장을 포함한 로드맵이 진행 중임

개요

  • Cocoa-Way는 macOS에서 Linux 애플리케이션을 네이티브 환경처럼 실행할 수 있게 하는 Wayland 컴포지터
  • Metal/OpenGL 렌더링을 통해 macOS 데스크톱과 자연스럽게 통합되며, 가상머신 없이 소켓을 통한 직접 Wayland 프로토콜 연결을 지원
  • HiDPI 디스플레이 최적화, 서버 측 데코레이션, 하드웨어 가속 렌더링 기능 포함
  • Rust로 작성되었으며, GPLv3 라이선스로 배포

주요 기능

  • 네이티브 macOS 통합: Metal/OpenGL 기반 렌더링으로 macOS 창 관리 및 시각 효과와 완전한 호환성 유지
  • Zero VM Overhead: 가상화 없이 Unix 소켓을 통한 직접 Wayland 프로토콜 통신으로 성능 손실 최소화
  • HiDPI 지원: Retina 디스플레이에 맞춘 스케일링과 픽셀 정밀도 제공
  • UI 완성도 향상: 그림자, 포커스 인디케이터 등 서버 측 데코레이션 기능 포함
  • 하드웨어 가속: 효율적인 OpenGL 렌더링 파이프라인으로 낮은 지연과 높은 성능 구현

설치 방법

  • Homebrew 설치 (권장)

    • brew tap J-x-Z/tap
    • brew install cocoa-way waypipe-darwin
  • 바이너리 다운로드

    • GitHub Releases 페이지에서 .dmg 또는 .zip 파일 다운로드 가능
  • 소스 빌드

빠른 시작

  • 필수 구성요소: waypipe-darwin 설치 필요
    • brew tap J-x-Z/tap && brew install waypipe-darwin
  • 컴포지터 실행 cocoa-way
  • Linux 앱 연결 ./run_waypipe.sh ssh user@linux-host firefox
  • SSH를 통해 Linux 호스트의 Wayland 앱을 macOS 창으로 표시

아키텍처

  • macOS 측에는 Cocoa-Way 컴포지터waypipe 클라이언트 존재
  • Linux VM 또는 컨테이너 측에는 waypipe 서버Linux 앱 존재
  • Linux 앱 → Wayland 프로토콜 → waypipe 서버 → SSH/소켓 → waypipe 클라이언트 → Cocoa-Way → Metal/OpenGL → macOS 디스플레이
  • 전체 경로가 가상화 없이 직접 연결되어 낮은 지연과 높은 효율 제공

비교

솔루션 지연 HiDPI 네이티브 통합 설정 복잡도
Cocoa-Way ⚡ 낮음 ✅ 완전 지원 ✅ 네이티브 창 🟢 쉬움
XQuartz 🐢 높음 ⚠️ 부분 지원 ⚠️ X11 특이점 존재 🟡 중간
VNC 🐢 높음 ❌ 미지원 ❌ 전체 화면 전용 🟡 중간
VM GUI 🐢 높음 ⚠️ 부분 지원 ❌ 별도 창 🔴 복잡

로드맵

  • ✅ macOS 백엔드 (Metal/OpenGL)
  • ✅ Waypipe 통합
  • ✅ HiDPI 스케일링
  • 🚧 Windows 백엔드 (win-way)
  • 📱 Android NDK 백엔드 (계획 중)
  • ⏳ 멀티 모니터 지원
  • ⏳ 클립보드 동기화

연구 배경

  • “Turbo-Charged Protocol Virtualization” 연구 프로젝트의 일부로, Rust 트레이트 모노모픽화SIMD 기반 픽셀 변환을 활용한 제로 코스트 크로스플랫폼 Wayland 가상화를 탐구

문제 해결

  • SSH 오류 “remote port forwarding failed” 발생 시, 원격 호스트에 남은 소켓 파일이 원인
    • run_waypipe.sh 스크립트는 -o StreamLocalBindUnlink=yes 옵션으로 자동 처리
    • 수동 실행 시: waypipe ssh -o StreamLocalBindUnlink=yes user@host ...

기여

  • 기능 추가나 변경 전 이슈 등록 후 논의 권장
  • Pull Request를 통한 기여 환영

라이선스

  • GPL-3.0
  • 저작권 © 2024–2025 J-x-Z
Read Entire Article