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がジュリアード氏らを雇用し、
Googleも
Linux版
Picasaで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に含まれるツール群で、
Perlや
C言語などで記述された
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 LinuxやCrossOver 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 ウェブインターフェイス)