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
-
Homepage
-
개발자
- Cocoa-Way – macOS에서 Linux 앱을 네이티브로 실행하는 Wayland 컴포지터