Wine

Wineとは



Wineは、主にx86アーキテクチャ上のUnixオペレーティングシステム(POSIX準拠OS)において、Windowsアプリケーションをネイティブに動作させることを目標とするプログラム群です。オープンソースのWindows API実装を通じて、X Window Systemを利用し、16ビット32ビット、64ビットのWindows GUIアプリケーションやMS-DOSアプリケーションを動作させることができます。

Linux環境を中心に開発されていますが、Solaris、FreeBSD、macOSなどへも移植されています。ただし、これらの環境では問題が発生する可能性も指摘されています。Wineの動作には、カーネルレベルのスレッドに対応したOSが必要です。

名称は、かつては頭字語として「WINE」と表記されることもありましたが、現在は「Wine」が正式な表記です。「WINdows Emulator」に由来するという説もありますが、開発者コミュニティでは「Wine Is Not an Emulator」の略であるというジョークが広く知られています。これは技術的な理由によるもので、WineがCPUエミュレーションを行わないことに起因します。

ライセンスはLGPLを採用しており、自由ソフトウェアとして配布されています。以前はBSD[[ライセンス]]が採用されていました。

概要



Wineは、仮想マシン(Xen、VMwareなど)とは異なり、互換レイヤーとして動作します。つまり、Windowsプログラムが要求するDLLの代替品を提供し、Windows NTカーネルプロセスを再現することで、Windowsプログラムをネイティブに近い形で動作させます。Linux上でWindowsを動作させるのではなく、LinuxにWindowsと同じ挙動をさせていると言えるでしょう。

そのため、WineでWindowsプログラムを動作させる際には、Windowsのコピーやライセンスは原則として必要ありません。ただし、Wineのエミュレーションライブラリが不完全な場合は、WindowsのDLLを利用することで解決できる場合があります。この場合は、Wineを動作させるコンピュータにWindowsのコピーとライセンスが必要になります。

Wineの名称は、その技術的な特徴から「Wine Is Not an Emulator」の略であるという再帰的頭字語としても説明されます。これは、WineがDOSBoxやzsnesのような典型的なエミュレータとは異なり、基本的にはCPUエミュレーションを行っていないためです。そのため、エミュレータで発生しがちなパフォーマンス低下がWineでは起こりません。アプリケーションによっては、Windows上よりも高速に動作することもあります。

Wineは高速化を重視していますが、プロジェクト規模が大きいため、本来実装されるべき機能が完全には提供されていません。再現性は仮想マシン上にインストールしたWindowsと比べると劣ります。そのため、開発の優先順位は高速化よりも再現性の向上に重点が置かれています。また、Wineはカーネルモードドライバに対応していません。

Wineに含まれるWindows API実装は「Winelib」と呼ばれ、これを用いてWindowsプログラムのソースコードからプラットフォームネイティブなバイナリをビルドすることも可能です。しかし、x86環境では、付属のバイナリローダー(`wine`コマンド)からコンパイル済みのバイナリを起動すれば、実用上速度差はほとんどありません。非x86環境でWindowsバイナリを実行する場合は、QEMUなどのCPUエミュレータを利用できますが、速度は低下します。

歴史



Wineプロジェクトは、サン・マイクロシステムズのPWI (Public Windows Initiative) やWabiの影響を受け、1993年にボブ・アムスタッドとエリック・ヤングデイルによって創始されました。当初はWindows 3.1(16ビット)アプリケーションに焦点を当てていましたが、現在は32ビットを中心に開発が進められています。1994年以降、アレクサンダー・ジュリアードがプロジェクトリーダーを務めています。

プロジェクトは難航し、互換性の向上には時間がかかりました。特に1990年代は、日本語環境でのアプリケーション動作に問題が多く、Wineのインストールや動作には高度なスキルが必要とされていました。

コーレルなどの支援により一時的に状況は好転しましたが、マイクロソフトのコーレルへの大規模投資が原因で、この支援は中止されました。現在では、CodeWeaversがジュリアード氏らを雇用し、GoogleLinuxPicasaでWineを利用し、Wineの開発を支援しています。

以下は、Wineの主なリリース履歴です。

2005年10月25日: バージョン 0.9 (最初のベータ版) リリース
2008年5月9日: バージョン 1.0-rc1 (最初のリリース候補版) リリース
2008年6月17日: バージョン 1.0 リリース
2010年5月21日: バージョン 1.2-rc1 リリース
2010年7月16日: バージョン 1.2 リリース
2012年5月7日: バージョン 1.4 リリース
2013年7月18日: バージョン 1.6 リリース
2015年12月19日: バージョン 1.8 リリース
2017年1月24日: バージョン 2.0 リリース(Microsoft Office 2013のオンラインアクティベーション、macOSでの64ビットアプリケーション起動などをサポート)
2018年1月18日: バージョン 3.0 リリース(Direct3D 10および11などをサポート)
2019年1月22日: バージョン 4.0 リリース(Vulkan 1.0、Direct3D 12などをサポート)
2020年1月21日: バージョン 5.0 リリース(マルチモニター、Vulkan 1.1などをサポート)
2021年1月14日: バージョン 6.0 リリース(コアモジュールのPEフォーマットによるビルド、WineD3DのためのVulkanレンダラーを実装)
2022年1月18日: バージョン 7.0 リリース(モジュールの大部分がPEフォーマットに移行、HIDスタックとジョイスティックのサポートを改善)
2023年1月24日: バージョン 8.0 リリース(PEフォーマット移行が完了、WOW64の改善)
2024年1月16日: バージョン 9.0 リリース(実験的なWaylandグラフィックドライバ、新しいWOW64モードを追加)

対応アプリケーション



WineにおけるWindowsアプリケーションの動作状態は、Wineアプリケーションデータベース (AppDB) で確認できます。AppDBでは、Wineユーザーからの動作報告がデータベース化され、アプリケーションの動作状況が良い順に、"Platinum"、"Gold"、"Silver"、"Bronze"、"Garbage"で評価されています。Wineのバージョンごとに評価が変わるのが一般的です。

Wine 1.0のリリース基準には、Adobe Photoshop CS2体験版、Microsoft PowerPoint Viewer 97と2003、Microsoft Word Viewer 97と2003、Microsoft Excel Viewer 97と2003が使われました。Wine 1.0では、これらのアプリケーションが問題なく動作すると報告されています。

DirectXのランタイムをWineにインストールすることは推奨されていません。DirectXがハードウェアを直接制御する場合があるため、WindowsそのものではないWine環境では、CPUやGPUなどのハードウェアを破壊する可能性があるためです。通常は、Wineが搭載しているDirectXランタイムで多くのアプリケーションが動作します。

付属プログラム



Wineには、`wine`コマンドを中心に、様々なプログラムやツールが含まれています。

wine: Windowsプログラムを起動するためのコマンド。引数にWindowsプログラムを指定します。
Wine設定 (winecfg): Wine全体の設定をGUIで行うためのプログラムです。
Wine File (winefile): MDI型のファイルマネージャWindows Explorerに相当します(Windows 3.xのファイルマネージャーに近い)。
Wine Application Uninstaller (uninstaller): GUIでプログラムをアンインストールするためのツール。
regedit: GUIでレジストリを編集するためのプログラム。
コマンドプロンプト (cmd)メモ帳 (notepad)タスクマネージャ (taskmgr)マインスイーパ (winemine)ワードパッド (wordpad)コントロールパネル (control)なども含まれています。

一部のプログラム(cmd、taskmgr、wordpad、controlなど)は、`wine`コマンドの引数としてプログラム名を指定して起動します。

例えば、ワードパッドを起動するには、ターミナルから`$ wine wordpad`と入力します。`$`はシェルのプロンプトを表します。

Wine Tools



Wine Toolsは、Wineに含まれるツール群で、PerlC言語などで記述されたUnixネイティブプログラムです。

Wine Server (wineserver): Windowsのカーネルプロセスを再現するためのプログラム。
Wine Message Compiler (wmc): メッセージファイル(.mc)をコンパイルするプログラム。
Wine C and C++ MinGW Compatible Compiler (winegcc): Linux上でMinGWの互換コンパイルを可能にするgccの実装。
Wine Interface Definition Language (IDL) compiler (widl): IDLで記述されたインターフェースをコンパイルするプログラム。
Wine DLL Tool (winedump): DLLを解析し、インポート/エクスポート関数を調べ、スペックファイル(.spec)を生成するプログラム。
Wine Maker (winemaker): WindowsのプロジェクトをWine向けにコンパイルするプログラム。
Wine Console (wineconsole): コマンドラインインターフェースのWindowsソフトウェアを実行するためのプログラム。

ディレクトリ



WineやアプリケーションのEXEファイル、レジストリなどは、通常ホームディレクトリ内の`.wine`ディレクトリに保存されます。保存先は、環境変数`WINEPREFIX`を設定することで変更できます。以前は設定ファイルとして`config`というファイルがありましたが、2005年に廃止され、現在は拡張子が`reg`のファイルに設定が保存されます。

アプリケーションのデスクトップエントリファイルやアイコンなどは、以下のディレクトリにインストールされます。

`.config/menus/applications-merged`
`.local/share/applications/wine`
`.local/share/desktop-directories`
`.local/share/icons`

これらのディレクトリにインストールされたファイルは、GNOMEやKDEなどのデスクトップ環境でメニューに使われます。

デバッグ



Wineは、環境変数`WINEDEBUG`を使用することで、様々なデバッグが行えます。

構文は以下の通りです。

bash
$ export WINEDEBUG=[クラス][+|-]チャンネル [,[クラス2][+|-]チャンネル2]


`[クラス]` には、`warn`、`err`、`fixme`、`trace` のいずれかを指定します。
`[+|-]` の指定により、チャンネルの有効/無効を切り替えます。
チャンネルには、`relay`、`dll`、`heap`、`all` などがあります。

例:

bash
$ WINEDEBUG=warn+all,+relay


この設定では、全ての警告メッセージと、全ての中継メッセージを表示します。この環境変数を使用することで、特定のDLLの関数がどのような引数で呼び出されているか、どこでどのような関数が完全に実装されていないかを確認できます。

Wineに似た他のプロジェクト



CodeWeavers: Wineをベースに、LinuxやmacOS上でWindowsアプリケーションを動作させるための製品を開発・販売しています。CrossOver LinuxCrossOver Macなどが有名です。
cedega: TransGaming TechnologiesのWine改良版プロジェクト。主にLinux上でWindowsゲームを動作させることを目的としていました。
ReactOS: Windows NTとの互換性を目指すオープンソースプロジェクト。Wineと協力して開発を進めています。
Game Porting Tool: AppleがmacOS Sonoma向けに開発した、WineをベースとしたWindows PC向けゲームの移植環境です。

Wine用のツール



Wine-Doors: GNOMEデスクトップ用のアプリケーション管理ツールで、Wineの機能を拡張します。
WineBot: Linuxパッケージマネージャのような方法で動作するアプリケーション管理ツールです。
WineTricks: Wineの動作に必要なコンポーネントをインストールするためのスクリプトです。
IEs4Linux: バージョン5から6までのInternet Explorerをインストールするユーティリティです。
WineLocale: 日本語、中国語、韓国語など(CJKV)の非Unicode文字コードをサポートするユーティリティです。
PlayOnLinux: Wineを使ってWindowsゲームのインストールを簡単にするためのアプリケーションです。

Wineを利用しているソフトウェア



CrossOver: Intel Mac、LinuxでWindowsアプリケーションを実行するためのソフトウェアです。
MikuInstaller: 初音ミクなどのWindows用DAWソフトをMacにインストールするための環境パッケージです。開発は中止されています。
Pipelight: Wineを使い、Flash PlayerやMicrosoft Silverlightなどのプラグインを使用可能にするプロジェクトでしたが、開発は終了しています。
ReactOS: カーネルドライバーを除くWindowsシステムライブラリの実装に用いられています。
VirtualBox: 一部のDirect3D操作にWineのソースコードが利用されています。
Parallels Desktop for Mac: DirectXの操作にWineのソースコードが利用されています。

参照



Darling: macOSのコードをオープンソースで実装しようというプロジェクトです。

注釈



[出典について追記が必要]

関連項目



Windows API
DirectX
ソフトウェア特許
Bash on Ubuntu on Windows
EasyWine (OSX対応のWine)
Proton (ソフトウェア)

外部リンク



WineHQ - Run Windows applications on Linux, BSD, Solaris and macOS (公式サイト、英語)
WineHQ Forums - Index page (公式フォーラム)
WineHQ - Wine Application Database (Wineアプリケーションデータベース、英語)
* Wine ニュースグループ (Google ウェブインターフェイス)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。