Chienomi

SteamでWindows向けのみリリースされているゲームをLinuxで遊ぶ

Live With Linux::desktop

本記事の最大の主旨は題名通りWindowsのみ(あるいは稀にWindowsとMacOS)をターゲットとしてリリースされている多くのゲームをLinuxでプレイすることにある。

SteamにおいてLinuxをターゲットにリリースされているゲームはとても多いが、実際にあなたが気に入ったゲームがLinuxで動かないものはそれ以上に多いだろう。 なぜならば、Steamのゲームは膨大で、Linuxに対応している「割合」は低いから1、そして特に日本のメジャーなタイトルはまずLinuxに対応していないからだ。

しかし、世の中には “SteamDeck” というデバイスがある。 これはNintendo Switchの携帯モードのような形をしており、旧型のデバイスの例で言えばPlayStation Vitaを大きくしたようなものである。 このデバイスはSteamのゲームをプレイすることができ、それはLinux向けのゲームに限らない。

SteamDeckというデバイスはAMDのZen2ベースのオリジナルAPUを搭載した携帯ゲーム機型のPCだ。 つまりx86_64(x64)アーキテクチャのプロセッサを搭載した一般的なPCのプラットフォームで、SteamOSというOSを搭載している。 このSteamOSはつまり、Linuxディストリビューションの一種であり、初期はDebian GNU/Linuxがベースとなっていたが、現在はArchlinuxがベースになっている。

このことは、Linux上のSteamは、非Linux向けのゲームをプレイすることが可能であることを示唆している。

この話は実は割と深く、興味深い要素を含んでいる。 そこで本記事では、単にプレイする方法だけでなく、Linux, Wine, Proton, Valveといった要素全体を浅く解説していく。

Wine

WineはWindows向けのアプリケーションをLinuxで動作させるためのソフトウェアだ。

Wine Is Not Emulatorの略だからエミュレータと呼ぶのはちょっと躊躇ってしまうが、およそWindowsのAPI呼び出しをLinuxのAPIに変換するという方法によって成り立っている。 もっと別の言い方をするなら、WindowsのDLLに対する互換レイヤーである。

WineはLinux上でWindowsアプリを動かす第一の方法である。 それはLinuxアプリであるかのように動作し、パフォーマンスも比較的良好だ。 Wineは構造的にはオーバーヘッドはないし、長いこと開発されてきたから、昔のようにパフォーマンスが大きく落ちることは基本的にはない。 そして、Windowsの部品を要求しない。

Wineで動かないのであれば、Windowsそのものを利用する必要がある。 仮想化環境を用いるのだ。 違う見方をすると、Wineを使うのはWSL的なアプローチで、仮想化環境を使うのはWSL2的なアプローチである。 もっとも、WSLはカーネルレベルでLinuxアプリケーションを動作させるために手を加えているのに対し、Wineはあくまでユーザーランドライブラリでしかないという点でかなり大きな違いはある。

仮想化を用いる場合、オーバーヘッドの増加やライセンスなどまた別の問題が生じる。 Wineで動かないのであれば仮想化環境を用意せざるを得ないのだが、手軽さを含む様々な理由から、Wineのほうが優先される場合が多い。 また、現実問題としてLinuxのネイティブなインターフェイスへの変換がなされることから、ハードウェアをエミュレーションされるよりもうまく動くことがあり、一般的な説明に反して完全仮想化がWineよりも必ずしも互換性を高めるとは限らない。

ValveとProton

Valveはアメリカの企業であり、ゲーム配信プラットフォームのSteamを運営している。 非上場企業であり、従業員も350人程度とそこまで大きな企業ではないが、年間売上は5000億円規模と言われている。

そのValveだが、割とオープンな姿勢を持った企業であり、必ずしも姿勢の問題ではないが、Linuxに対してもフレンドリーだ。だから、Linuxへの展開に対しても割と積極的だし、SteamOSがある今はいっそう積極的だ。 もちろん、ValveのLinuxに対するフレンドリーさは、自社の出す製品にWindowsを採用しづらいという面があっての話でもあるのだが、ゲームエンジンやゲームプラットフォームはもともと、Linuxへの展開やOSS化にそれなりの期待を寄せているものでもあったので、その流れを引き継いでいるとも言える。

しかし、現実の問題として、Linuxで動作させることができるゲームタイトルというのは少ない。 それはValveがコントロールできる部分ではなく、あくまでゲームを作る側の事情であり、UE(Unreal Engine)やUnityはLinuxに対応することをそれほど困難としないが、実際はLinuxに対応したリリースとはあまりしない。

その理由だが、もちろんUEにせよUnityにせよ、Linuxを切り捨ててWindowsのみ、あるいはWindowsとモバイルのみとするほうが「安い」という事情もあるし、Linuxを動作プラットフォームに加えると、Linux上でのみ発生する問題もサポートせざるを得なくなる。 だから、例え(モバイルでリリースするために)クロスプラットフォームなコードを書いていたとしても、Linuxに対応させたくないという思惑が働いたりする。Linuxerは、あまりゲームにお金を払わない一方、勝手にデバッガーをしてくれたりするため、Linux向けにリリースすることは利益になるという話もあるのだが、ここは経営者の価値観に大きく左右される。 特に、Linuxユーザーは少ないためニーズに乏しく、お金もあまり出さないから魅力に乏しいのだ。

しかし、Valveの考えは逆である。 確かにLinuxユーザーはWindowsユーザーと比べ少なく、熱心なゲーマーも少ない。 だが、そのある程度のLinuxユーザーが、ちょっとしたゲームを遊ぶためにSteamを使うとしたら、Valveとしては結構な収益になる。 もともとLinuxで動作する現代的なゲームタイトルは少ないから、Linuxへのサポートを積極的に行えば簡単な覇権が取れるという意味もある。

こうしたことから、ValveはLinux上でSteamのゲームがプレイできるように、様々な面で活躍している。 これはLinuxにとっても結構な魅力であり、Linusも期待を寄せている。

しかし思うようにLinux対応タイトルは増えていない。その状態でValveがSteamDeckを出すと、あまり多くのタイトルをプレイできない魅力のないデバイスになり、SteamDeckにWindowsを導入せざるを得なくなる。 Valveとして、多くのゲームがLinuxでプレイできることは多角的な利益を生むのである。

故にValveはLinuxでのゲームプレイを支援し、Linux対応ゲームを出しやすくすると同時に、Windows向けゲームもプレイできるように手を尽くしたわけだ。

それがProtonである。 Protonは単純に言えば、WineとDXVKから成る。 WineはWindowsを想定したプログラムが実際にはLinuxを使って動作するようにするためのものであり、DXVKはWindowsの独自DirectXを、マルチプラットフォームでオープンなVulkanに変換して動作させるものである。

ValveはWineに対する貢献も大きい。 だが、単純にWineでゲームが動作しても、ゲームの場合はグラフィックレンダリングに対するリアルタイム性の要求が厳しく、ゲーム固有の面としてDirectXという存在が中核的なものになっている。 もちろん、ゲーム自体がDirectXからVulkanに移っていくことも考えられるが、Windows固有の機能を使わなくても良かったとしても、実際にWindowsアプリを開発する者はWindows固有の機能を使いがちであるし、あまり有望な話ではない。 こうした面から、「ゲームを動かすなら最大のポイントはDirectX」となり、DXVKはこのポイントを狙い撃ちしたものになる。

そして、ValveはProtonを開発し、Steam for Linuxに搭載した。 このProtonを使うことにより、Linux環境でもSteamのゲームならWindows向けに作られたゲームが動作するというシナリオが出来たわけだ。

Protonを使う

Steam for LinuxのビルドにはProtonが含まれている。 デフォルトではLinux上でプレイできるのはLinux (SteamOS)対応タイトルだけに見えるが、そうでないものもプレイするための準備は整っている。

最近はストアページにSteamDeckでのプレイについての記載がある。 これはSteamDeckの画面や性能も踏まえた内容であるが、そもそも動作するかどうかについては個別の記載があるので、開けばProtonによってLinux上でプレイ可能かどうかをある程度判断できる。

これは各タイトルに対してValveがLinux上でプレイ可能かを検証しているという意味にもなり、Valveの積極性がよく分かる。

Protonを使うには「設定」から “サポートされたタイトルでSteam Playを有効化” にチェックを入れる。 もしLinuxでプレイ可能なタイトルであってもProtonを使ってWindows版をプレイしたいなら “他のすべてのタイトルでSteam Playを有効化” を選択しても良い。

Steamの設定を開く
Steam Playの設定を行う

タイトル個別にSteam Playを使ってWindows版のプレイを可能にしたいなら、各ゲームの歯車マークから “プロパティ” を選択し、 “互換性” タブの “特定のSteam Play互換ツールの使用を強制する” にチェックを入れ、使用するバージョンを指定する。

各タイトルのプロパティでSteam Playを有効化

実際にやってみると、想像以上によく動く。

依然として原神が動かない理由

しかしWineやProtonを使ったとしても、原神はLinuxでプレイすることができない。

その理由について、割と答えはシンプルで、「アンチチートツールが動かないから」だ。

Windowsのアンチチートツールや、DRMソフトウェアは、一般的にWindowsが提供する「カーネルを覗き見る」ような機能を使っている。 しかし、Linuxにはこれに相当する機能がないため、Wineはこれに対応する機能を提供できない。 また、もうひとつ同一だが別の問題として、Wineは単純にユーザーモードで動作するものであるから、カーネルモードでの動作を必要とするものは動かない。

これは、DMM関連のアプリやDLSite Viewerなどが動かない理由でもある。

原神がアンチチートツールを使うのは、ネットゲームだからだ。 特に原神においてはソシャゲ的な要素、つまり「ガチャによる収入」に対する違反に厳しくしたい意図があり、原神は特に厳しいアンチチートツールを用いていることで知られている。

これは原神に限った話でもなく、例えばXigncodeのようなメジャーなアンチチートツールを採用するネットゲームも動作しない。 Steam上のゲームでも、アンチチートツールを理由にProtonで動作しないゲームはある。

原神の場合Linux上で動作させるためのパッチが存在しているが、要はアンチチートツールの迂回を行うものである。 原神というゲームにおいて利益を生む核心部分であるガチャに対する不正に関わる部分となるため、そのようなパッチを当ててプレイするのは、かなりリスクが高いので推奨できない。 おそらく、発覚すればBANは免れないだろう。

毎日ちょっとプレイするこの手のゲームこそLinux上でできると手間が減って良いのだが、その手のゲームはだいたい厳しいアンチチートツールを利用しているため、Linux上でのプレイは困難である。