Cocoa-Way – macOS용 네이티브 Wayland 컴포지터, Linux 앱을 원활하게 실행
Source: Hacker News
🎥 Demo Video
진정한 프로토콜 이식성: Unix 소켓을 통해 OrbStack에서 Linux 앱을 Cocoa‑Way로 렌더링.
✨ Features
| Feature | Description |
|---|---|
| 🍎 Native macOS | Metal/OpenGL 렌더링, 매끄러운 데스크톱 통합 |
| 🚀 Zero VM Overhead | 가상화 없이 소켓을 통한 직접 Wayland 프로토콜 |
| 📺 HiDPI Ready | 적절한 스케일링을 지원하는 Retina 디스플레이 최적화 |
| 🎨 Polished UI | 그림자와 포커스 표시기가 포함된 서버‑사이드 데코레이션 |
| ⚡ Hardware Accelerated | 효율적인 OpenGL 렌더링 파이프라인 |
📦 Installation
Homebrew (Recommended)
brew tap J-x-Z/tap
brew install cocoa-way waypipe-darwin
Download Binary
Releases page에서 최신 .dmg 또는 .zip을 다운로드하세요.
Build from Source
# Install dependencies
brew install libxkbcommon pixman pkg-config
# Clone and build
git clone https://github.com/J-x-Z/cocoa-way.git
cd cocoa-way
cargo build --release
🚀 Quick Start
Required: Linux 앱을 연결하려면 waypipe‑darwin을 설치하세요.
brew tap J-x-Z/tap && brew install waypipe-darwin
컴포지터 시작
cocoa-way
SSH를 통해 Linux 앱 연결
./run_waypipe.sh ssh user@linux-host firefox
🏗️ Architecture
graph LR
subgraph macOS
CW[Cocoa-Way Compositor]
WP1[waypipe client]
end
subgraph Linux\ VM/Container
WP2[waypipe server]
APP[Linux App Firefox, etc.]
end
APP -->|Wayland Protocol| WP2
WP2 |SSH/Socket| WP1
WP1 -->|Wayland Protocol| CW
CW -->|Metal/OpenGL| Display[macOS Display]
🆚 Comparison
| Solution | Latency | HiDPI | Native Integration | Setup Complexity |
|---|---|---|---|---|
| Cocoa‑Way | ⚡ Low | ✅ Yes | ✅ Native windows | 🟢 Easy |
| XQuartz | 🐢 High | ⚠️ Partial | ⚠️ X11 quirks | 🟡 Medium |
| VNC | 🐢 High | ❌ No | ❌ Full screen only | 🟡 Medium |
| VM GUI | 🐢 High | ⚠️ Partial | ❌ Separate window | 🔴 Complex |
🗺️ Roadmap
- macOS 백엔드 (Metal/OpenGL)
- Waypipe 통합
- HiDPI 스케일링
- 🚧 Windows 백엔드 (win‑way)
- 📱 Android NDK 백엔드 (예정)
- 다중 모니터 지원
- 클립보드 동기화
📚 Research
이 프로젝트는 “Turbo‑Charged Protocol Virtualization” 연구 이니셔티브의 일환으로, Rust 트레이트 모노모피제이션 + SIMD 가속 픽셀 변환을 통한 무비용 크로스‑플랫폼 Wayland를 탐구합니다.
❓ Troubleshooting
SSH: “remote port forwarding failed”
원격 호스트에 오래된 소켓 파일이 남아 있을 수 있습니다. run_waypipe.sh 스크립트가 -o StreamLocalBindUnlink=yes 옵션을 사용해 이를 자동으로 처리합니다.
수동으로 실행할 경우:
waypipe ssh -o StreamLocalBindUnlink=yes user@host ...
🤝 Contributing
기여를 환영합니다! 주요 변경 사항은 먼저 이슈를 열어 논의해 주세요.
📄 License
GPL‑3.0 – Copyright (c) 2024‑2025 J‑x‑Z