Cocoa-Way – macOSでLinuxアプリをネイティブに実行するWaylandコンポジタ
(github.com/J-x-Z)- 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/tapbrew install cocoa-way waypipe-darwin
-
バイナリのダウンロード
- GitHub Releasesページから
.dmgまたは.zipファイルをダウンロード可能
- GitHub Releasesページから
-
ソースからビルド
- 依存関係をインストール:
libxkbcommon,pixman,pkg-config git clone https://github.com/J-x-Z/cocoa-way.gitcargo build --releaseコマンドでビルド
- 依存関係をインストール:
クイックスタート
- 必須コンポーネント:
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 ...
貢献
- 機能追加や変更の前にIssueを登録して議論することを推奨
- Pull Requestによる貢献を歓迎
ライセンス
- GPL-3.0
- 著作権 © 2024–2025 J-x-Z
1件のコメント
Hacker Newsのコメント
正直なところ気になることがある。Linux GUIアプリで、macOS向けのネイティブビルドが存在しないものって何があるんだろう。たいていはQtやGTKベースでマルチプラットフォームだし、ぱっと思い浮かぶ人気アプリがない
xpraで似たことができる完璧だ。これでコンテナ内でGUIアプリを動かせるようになる。以前X11で似たようなことを試したが気に入らなかった。だんだん Appleのデスクトップでの存在感 が弱くなっている気がする。結局、誰もが「開発者」になる時代が来るのではないかと思う
このプロジェクトは少し 怪しい。READMEは絵文字だらけで実装の説明もない。Metalバックエンドがあると言っているが、実際には存在しないようだ。依存関係のリストもおかしい
こういうものは Android向け にも必要だ。termux-x11は出発点にはなるが、termuxがWaylandをサポートするか、AndroidのLinux VMからWaylandソケットを公開できれば、残るのは滑らかなレンダリングのためのネイティブコンポジターだけだ
もしmacOSがGUIなしの Darwinシェルモード で起動できたなら、KDEやCOSMICのようなデスクトップ環境にbrewパッケージマネージャーを載せた、すばらしいUNIXになっていただろうと思うと惜しい
これが可能なら、macOSベースの WaylandクライアントがEGLサーフェスを生成 できるのかも気になる
もしかしてOrbstackの中でWaydroidを使って Android環境を実行 できるだろうか。理論上はいけそうだ
macOSを Windows/Linux風のキーボードショートカット に変えられれば、ずっとストレスが減ると思う
このプロジェクトが GNUstep に少しでも関心を呼び起こせるのか気になる