Ryujinx

Ryujinx (リーユージンクス) とは、フリーかつオープンソースで開発されている、Nintendo Switchのゲームエミュレータである。対応プラットフォームはWindows、Linux、macOS。
なお、このソフトウェアは任天堂によって公認されたものではない。
概要.
ソースコードは C# で書かれている。
2022年11月現在、約3,800タイトルでテストが行われていて、そのうち3,600以上でゲームの起動が可能で、さらにその中でも約3,200タイトルがプレイ可能とされている。互換性リストも公開されており、誰でも自由に新しいゲームのテスト結果を反映させて、既存のテスト結果を更新したりできる。
Ryujinxという名称の由来は、初期の開発に使用されていたRyuJITと、Nintendo Switchの開発コードネーム「NX」を合わせた造語である。
特徴.
動作要件.
このエミュレータを実行するには、少なくとも8GBのRAMが搭載されている必要がある。この要件を満たさない場合、ゲームプレイ体験が悪化したり、予期しないクラッシュが起こる場合がある。
また、Nintendo Switch本体から吸い出したファームウェアとキー、OpenALバイナリが必要である。
機能.
オーディオ.
オーディオ出力は完全にサポートされている。一方、マイクによる音声入力は対応していない。
入力.
キーボード、マウス、タッチ入力、Joy-Con、およびほぼすべてのコントローラを使用できる。モーションコントロールはほぼネイティブ対応している。デュアルJoyConモーション対応に関しては、DS4WindowsやBetterJoyなどの外部ソフトウェアを必要とする。入力設定メニューからすべて設定できる。
DLCと拡張機能.
GUIでの操作により、アドオンコンテンツやダウンロードコンテンツの管理が可能である。Mod(romfs、exefs、チートなどのランタイム)と呼ばれる、ゲーム内容などの改変を行える一連のプログラム群にも対応している。
設定.
ログ保存の有効化や無効化、コントローラのボタン割り当てのための設定を行うことができる。
CPU.
CPUの動作を再現するARMeilleureによりARM v8に対応できるため、現在、ほとんどの64ビットARMv8と、部分的な32ビットサポートを含むARMv7以前の命令の一部に対応している。ARMコードをカスタムIRに変換・最適化しそれをx86コードに変換することで動作させている。3つのメモリマネージャオプションがあり、ソフトウェアベース（低速）モードとホストマップモード（はるかに高速）の両方を活用する。
またRyujinxでは、ゲームが読み込まれるたびに翻訳する必要がないように、本質的に翻訳された機能をキャッシュするオプションのProfiled Persistent Translation Cacheも備えています。これにより、ほぼすべてのゲームのロード時間（ゲームの起動からタイトル画面に到達するまでの時間）の大幅な短縮を実現している。
グラフィックス.
それぞれOpenTKまたはSilk.NETのカスタムビルドを通じて、OpenGL（バージョン4.5以上）、Vulkan、またはMetal（MoltenVK経由）を使用して、SwitchのMaxwell GPUの動作を再現している。Ryujinxにはエンドユーザーが利用できる、6つのグラフィック機能強化があり、ディスクシェーダーキャッシング、解像度スケーリング、アンチエイリアシング、スケーリングフィルター（FSRを含む）、異方性フィルタリング、アスペクト比調整を使うことができる。これらの機能は、GUIで必要に応じて調整または切り替えることが可能である。
フレームレートも60フレーム、一部では120フレームまでの向上に対応する。
進捗の公開.
Ryujinx teamは活発にブログを更新している。新しいバージョンは最初にPatreonで公開され，翌週に公式ウェブサイトで独自の進捗レポートを公表する。機能の発表は、Ryujinxブログ、Patreon、Twitter、Reddit、YouTubeなど、複数のプラットフォームで同時にリリースされる。
yuzuとの比較.
Ryujinxとyuzuの開発チームは、それぞれ異なるメンバーで構成されているが、双方共に開発は安定しており、ほぼ同等である。以前はRyujinxの方が、互換性のないゲームの起動、特定のゲームのレンダリング改善が若干速かった。
開発初期の頃は、研究成果のいくつかが両プロジェクト間で共有されていたが、2019年以降のRyujinxは、MITライセンスの下での運営に移行したため、コードは一方向にしか移植できなくなった。yuzuはRyujinxのコードを移植できるが、逆にRyujinxはyuzuのコードを使用できない。移植元を明記せずにRyujinxコードを含んで実装されたとされ、ライセンス違反が指摘されたyuzuのコードに関しては、いくつか軽度な論争があった。
歴史.
Ryujinxの開発は、2017年11月にgdkchanによって開発が始まった。開発開始後すぐに、Discordサーバーと基本的なウェブサイトが公開された。当初はARMコードを翻訳し、ChocolArm64経由の.NET ILやRyuJITが、ARMエミュレーションに活用される方針だった。このことがRyujinxという名前の由来になった。
しかし、いくつかの技術的制限の突破のために、より柔軟なJITを必要としてgdkchanが作成したのが、前述のARMeilleureという名前のカスタムJITである。
2017年4月の段階ですでに、Cave Story+、ぷよぷよテトリスの起動に、商用ゲームとして初めて成功した。
その後も、2018年4月から5月にかけて、The Binding of Isaac: Afterbirth+、ONE PIECE アンリミテッドワールド レッド デラックスエディション、1-2-Switchといった複数のタイトルの起動に成功した。翌月の6月上旬には、スーパーマリオ オデッセイのイントロ部分を起動して描画することができるようになった。さらに、前述のONE PIECEに関しては、7月上旬に3Dゲームとして初めて、動作に成功した。
2018年9月、マルチコアスケジューリングが実装された。
同年12月には、大乱闘スマッシュブラザーズ SPECIALが起動した。
2020年3月、あつまれ どうぶつの森の動作に対応する特別なバージョンが公開された。これには、特別なプログレッシブバグ修正やその他の最適化が含まれていたが、同年5月2日までに、専用ビルドは削除されている。
その後の4月にも、「ASTRAL CHAIN」や「ポケットモンスター ソード・シールド」などの厳選されたタイトルを、許容可能なパフォーマンスで実行したことが報じられたり、9月にはゼルダの伝説 ブレス オブ ザ ワイルドのMODが、Cemu、yuzu、Ryujinxなどのエミュレータで動作することが取り上げられたりした。
同年7月、4K・8K解像度へのアップスケーリングに対応した。
翌8月末、Nintendo Switchエミュレータとして初めて、ローカル対戦に対応した。これにより対応ゲームにおいて、Ryujinxを使用している世界中のプレーヤーと対戦できるようになった。当初はディスクシェーダーキャッシングに対応していなかったため、ネットワーク同期されなかったり、頻繁にネットワークから切断されるなどの問題点があったが、約3ヶ月後の11月12日、堅牢なディスクシェーダーキャッシングが実装された。