
Linux環境で作業していて、時折Windows専用のアプリケーションを実行する必要が生じた場合、行き詰まりを感じることはよくあります。WinBoatは、そうした状況に対する新たな選択肢として登場しました。互換性レイヤーを提供するのではなく、実際のWindowsインスタンスを実行し、それをデスクトップにシームレスに統合するのです。
そのアイデアはシンプルでありながら強力です。DockerとKVMを使って実際のWindows環境を構築し、FreeRDPを使ってLinuxセッション内にそのウィンドウをネイティブウィンドウのように表示します。奇妙な依存関係や予測不能なパッチに悩まされることはもうありません。Windowsで動作するプログラムは、強力なグラフィックアクセラレーションやカーネルレベルの不正対策が必要なシナリオを除き、Linuxでも動作するはずです。
WinBoat とは何ですか? なぜ興味深いのですか?
WinBoatは、Windows for Penguinsの精神に忠実に、 WindowsアプリをLinuxシステム上で最小限の摩擦でシームレスに動作させることを目指すプロジェクトです。API変換ではなく、KVMとDockerコンテナによる仮想化を利用してWindows環境をカプセル化し、それをシステム内の独立したウィンドウとして表示します。
WinAppsのような従来のアプローチと比較すると、主な違いはユーザーエクスペリエンスにあります。WinAppsでは、設定の大部分はユーザー自身が行う必要があり、多くの手動設定、基本的なTUI、タスクバー上のいくつかのウィジェット、そして散在するコンソールコマンドが使われます。一方、WinBoatは、特定の前提条件を満たした後、面倒な作業をすべて自動で行い、洗練されたインターフェースで関連情報を表示し、設定ファイルと格闘したり、一連のコマンドを記憶したりすることなく、より完全なエクスペリエンスを提供します。
WineやCrossOverを使わない理由が気になる方もいるかもしれませんが、例外的なケースがあるため、 WinBoatを使うとスムーズに動作しない、あるいは起動すらできないアプリケーションが存在します。WinBoatはまさにそうした問題を解決するために開発されました。必要な時にWindowsデスクトップをフルに利用できるようにするためです。実際のテストでは、Affinity Photo、Paint Tool SAI v1.0、Adobe製品群、AeroChat、Acrobat、そしてもちろんOfficeなどが動作確認されており、Office 365も動作することが確認されています。
WinBoatの仕組み:ウィンドウ統合による仮想化
WinBoatは内部的には、Dockerをオーケストレーターとして、KVMをハードウェア支援仮想化技術として使用して、Windows仮想マシンを実行します。WindowsはFreeRDPを介してLinux上にレンダリングされるため、他のシステムアプリと同様に、デスクトップ間でドラッグしたり、タスクバーにピン留めしたり、Alt+Tabで切り替えたりすることができます。
この発明の素晴らしさは、シームレスなユーザーエクスペリエンスにあります。洗練されたインターフェース、自動化されたインストールプロセス、そして必要に応じてフルバージョンのWindowsデスクトップを起動できるオプションが備わっています。不要な場合は、特定のアプリケーションのみを開き、まるでネイティブアプリケーションのようにシームレスに統合できるため、セッション全体を通して一貫した外観と操作感を実現できます。
優れた機能
- すっきりしたインターフェース 視覚的な統合により、Windows ウィンドウが Linux 自体のウィンドウのように見えます。
- 自動インストール: 好みとリソースを選択すると、システムが調理を担当します。
- ほぼすべてのアプリを実行 Windows 上で実行され、デスクトップ上のシステム レベル ウィンドウとして表示されます。
- フルデスクトップ 必要なときに Windows を利用できるだけでなく、個々のアプリを統合された方法で起動することもできます。
- ファイル統合: Windows のホーム ディレクトリをマウントして、ドキュメントを直接共有します。
- 便利な追加機能 スマートカード パススルー、リソース監視などの機能が現在進行中およびすでに導入されています。
システムの前提条件
作業を開始する前に、使用する機器がこれらの最低要件を満たしていることを確認してください。そうでない場合、最初から問題が発生する可能性があります。各項目を注意深く確認し、予期せぬ事態を避けてください。
- RAM:少なくとも4 GB。
- CPU: 最低 2 つのスレッド。
- ストレージ: /var に 32 GB の空き容量があります。
- 仮想化: BIOS または UEFI で KVM が有効になっています。
- デッカー: コンテナ化に必要です。
- Docker Compose v2: docker-compose.yml ファイルとの互換性に不可欠です。
- Dockerグループ: ユーザーを docker グループに追加します。
- 無料RDP: サウンドサポート付きバージョン 3.xx。
- カーネルモジュール: iptables と iptable_nat をロードします。
ソフトウェア要件に加えて、ご使用のディストリビューションでKVMが実際に動作していることを確認する必要があります。BIOSでKVMが無効になっている場合、またはカーネルによってKVMがブロックされている場合は、他のすべての機能が正常に動作していても、何も起動できなくなります。
ダウンロードとインストール: 利用可能なバージョン
プロジェクトのリリースセクションからLinuxビルドをダウンロードできます。現在、ほとんどのケースに対応できる2つのオプションがあり、どちらも比較的簡単に習得できます。ご使用のディストリビューションとワークフローに最適なものをお選びください。
- AppImage: 複雑なインストールなしでほとんどのディストリビューションで動作するポータブル形式。
- アンパック: 解凍されたファイル。linux-unpacked/winboat 内のバイナリを実行するだけです。
開発者が指摘している非互換性にご注意ください。現在、Podman、Docker Desktop、Podmanソケットを使用してDockerをエミュレートするディストリビューション、またはルートレスコンテナ構成はサポートされていません。これらの環境に依存している場合は、今後のバージョンをお待ちいただく必要があります。
最大の欠点として挙げられるのは、完全な機能を利用するには、Docker、Compose v2、オーディオ機能付きFreeRDP 3、iptablesモジュール、そしてdockerグループへの参加など、いくつかの追加ツールを手動でインストールする必要がある点です。しかし、このハードルを乗り越えれば、残りの部分はスムーズに動作します。
ソースコードからコンパイルして実行する
アプリケーションを自分のマシン上でビルドしたい場合は、必要な依存関係さえ揃っていれば、手順は簡単です。始める前に、Node.jsとGoをインストールしておく必要があります。
- リポジトリをクローンします。
git clone https://github.com/TibixDev/WinBoat - 依存関係をインストールします:
npm i - アプリとゲスト サーバーをコンパイルします。
npm run build:linux-gs - 結果のバイナリは次のようになります。
dist、AppImageとUnpackedバリアント付き
開発においては、ローカル環境でより簡単に反復開発を行えるよう、ワークフローが若干変更されます。Node.jsとGoが準備できたら、以下の手順に従ってください。
- リポジトリをクローンします。
git clone https://github.com/TibixDev/WinBoat - 依存関係をインストールします:
npm i - ゲスト サーバーを構築します。
npm run build-guest-server - 開発モードでアプリを起動します。
npm run dev
デバイスとハードウェア構成
Windowsからハードウェアにアクセスする必要がある場合、サポート状況はデバイスの種類によって異なります。USB接続については既にオプションが用意されていますが、現状では設定は手動で行う必要があります。アプリにUSBパススルー機能が追加されれば、インターフェースから設定できるようになります。それまでは、ファイルを編集する必要があります。
WinBoatがインストールされたら、フォルダに移動します ~/.winboat ファイルを開く docker-compose.ymlここで、ゲストに表示したい USB デバイスを追加できます。 修正後、変更を適用するには docker-compose down y docker-compose up -d 同じディレクトリ内にあります。
グラフィックスとアクセラレーション: WinBoat の現状
現在、GPUパススルーは正常に動作していません。準仮想化ドライバを使用したアクセラレーションの実装を計画していますが、まだ作業が必要です。OpenGL用のMVisor Win VGPUドライバを調査しましたが、結果は有望です。ただし、このドライバは別のハイパーバイザ向けに設計されており、WinBoatで使用されているQEMUとは互換性がありません。
DirectXドライバーの開発に取り組んでいるチームもありますが、現時点では確実にテストできるものはありません。目標は、安定性を損なうことなく、これらのコンポーネントが十分に成熟し、一般利用に適した状態になった時点で統合することです。
綿密に調査されてきたプロジェクトの一つがLooking Glass、特にその間接表示ドライバです。これは、2つ目のGPUが不要になるためです。このドライバはいくつかの回避策を用いてコンパイルおよび実行されましたが、画面は真っ黒になるだけでした。作者自身もまだ一般公開できる状態ではないと述べており、統合にはさらなる開発を待つ必要があります。
アンチチートやその他のWinBoat制限のあるゲーム
カーネルレベルのアンチチート機能を搭載したゲームをプレイしたい場合、残念ながら良いニュースはありません。これらのシステムは仮想化を検知してブロックするため、WinBoat上で実行することはできません。このような制限のないゲームや、保護機能がそれほど厳重ではないゲームであれば状況は異なるかもしれませんが、それはこのプロジェクトの主な目的ではありません。
Flatpak での Podman のステータスとパッケージング
Podmanのサポートは計画されており、チームとコントリビューターによる作業も既に始まっています。しかし、ネットワークの問題によりゲストサーバーにアクセスできず、ユーザーエクスペリエンスが損なわれています。これらの問題が解決されるまで、Podmanのサポートはバックログに残されます。
WinBoatをFlatpakに変換することもロードマップに含まれていますが、Flatpakはアプリケーションをシステムから非常に厳密に分離しているため、かなりの労力が必要になります。インストール済みのアプリケーション、Dockerバイナリ、そのソケット、その他のユーティリティを公開する必要があり、しかもサンドボックスのセキュリティを損なうことなく実現しなければなりません。簡単な作業ではありませんが、不可能ではありません。
ファイル統合とワークフロー
生活を楽にする実用的な利点の1つは、LinuxのホームディレクトリがWindows内にマウントされることです。これにより、追加のリソースをマウントしたり、見慣れない場所から手動でコピーしたりすることなく、ファイルを相互に共有できます。オフィス業務、編集作業、CAD作業などにおいて、これは非常に便利なショートカットです。
うまく機能するアプリと使用例
WinBoatの真価は、Wineがまだ完全には対応していないプログラムを使用する際に明らかになります。代表的な例としては、Affinity Photo、Paint Tool SAI v1.0、Adobe製品の一部、そしてAeroChatやAcrobatといったツールが挙げられます。中でもOfficeは際立っており、Office 365をほとんど問題なく使用できることが確認されています。
このアプローチは、いくつかの重要なWindowsユーティリティは必要だが、それ以外のすべてはLinux環境で行いたいというプロフェッショナルにとって最適です。デザイン、高度なオフィスアプリケーション、あるいは特定のエンタープライズアプリケーションなどは、この混合利用モデルに特に適しています。
WinBoatプロジェクトとライセンスに協力する
バグ修正、機能改良、ドキュメント改善など、貢献はいつでも歓迎します。チームは技術的な貢献に重点を置いていただくようお願いしており、政治的、性的、その他開発に貢献しないセンシティブな内容を含むプルリクエストは破棄します。ご協力いただける場合は、課題セクションにアクセスして改善点を提案し、具体的なプルリクエストを作成するのが最善の方法です。
バグ報告や機能提案に加えて、実際の使用状況に関するフィードバックを共有したり、マニュアルの不明点を明確にする手助けをすることもできます。このプロジェクトはMITライセンスで公開されており、様々な環境での共同作業や導入を促進します。また、同様のアイデアを持つ他のプロジェクトからインスピレーションを受けたとも述べており、それらもチェックしてみる価値があります。
プライバシーに関する注意事項、通知、ソースコンテキスト
参照した情報の一部は、プライバシーに関する通知を表示するプラットフォームのスレッドから得たものです。Redditの場合、同社とそのパートナーが、より良いユーザーエクスペリエンスの提供、サービスの維持、品質の向上、コンテンツと広告のパーソナライズ、および広告効果の測定のために、Cookieおよび類似の技術を使用していることを示す典型的なメッセージが表示されます。すべてのCookieを受け入れる場合は、そのまま続行できます。必須ではないCookieを拒否した場合でも、プラットフォームの機能に必要な特定のCookieが使用される場合があります。また、Cookieに関する通知とプライバシーポリシーも参照してください。
一部のX埋め込みコンテンツでは、ブラウザでJavaScriptが無効になっている場合、JavaScriptを有効にするか、互換性のあるブラウザを使用するように求めるメッセージが表示されます。ヘルプセンター、利用規約、プライバシーポリシー、Cookieポリシー、会社概要、広告データへのリンクも表示され、すべてXの企業ロゴが入っています。これらは標準的なプラットフォームメッセージであり、WinBoatの機能には影響しません。
最後に、一部の記事では、空の表やコンテンツを含まないプレースホルダーを含むレイアウトが使用されています。これらの視覚要素は元のデザインの一部であり、WinBoatに関する関連技術情報は含まれていません。
良い顔でテストを受けるための実践的なヒント
このプロジェクトは多くの作業を自動化していますが、それでも準備しておくと役立ちます。ユーザーがDockerグループに属していること、およびsudoなしでコンテナを実行できることを確認してください。FreeRDPがバージョン3.xxで音声が有効になっていることを確認してください。以前のバージョンでは音声に問題が発生する可能性があります。また、デプロイ中に容量不足にならないよう、/varが利用可能であることを確認してください。
Windows環境で特定のUSB周辺機器を使用する予定がある場合は、それらの識別子を控えておき、docker-compose.ymlへの変更内容を記録してください。コンテナのアップロードとダウンロードを行う前に簡単なチェックリストを作成しておくと、特にコンピュータを切り替える場合や、プロジェクトを他の人と共有する場合に時間を節約できます。
WinBoatは、Linuxを放棄することなくWindowsのような環境を必要とするユーザーにとって、実用的なソリューションを提供します。洗練された仮想化、FreeRDPと統合されたWindows、明確な要件、そしてグラフィックアクセラレーション、Podmanサポート、Flatpakパッケージングの改善に重点を置いたロードマップが特徴です。ベータ版でも既に本格的な作業が可能であり、WineやProtonでは不十分な場合、特にLinux上で動作が不安定な重要なデザイン、オフィス、またはエンタープライズワークフローアプリケーションにとって、魅力的な代替手段となります。