この項目では、コンピュータソフトウェアについて説明しています。果実酒については「ワイン 」をご覧ください。
Wine (ワイン)は、オープンソース のWindows API 実装を通じて、主としてx86 アーキテクチャ 上のUnix系 オペレーティングシステム (POSIX 準拠OS) においてWindows 用アプリケーション をネイティブ動作させることを目標とするプログラム 群である。
X Window System を利用して、16ビット ・32ビット ・64ビット Windows向けGUI アプリケーションと、MS-DOS 用アプリケーションを動作させることができる。x86上のLinux 環境を中心に開発されているので、Solaris 、FreeBSD 、macOS などに移植された環境では問題が発生する可能性が比較的高い。原理上、カーネル レベルのスレッド に対応しているOSであることが必要である[ 2] 。
名称は、もともとは頭字語 であることを意識して、大文字でWINEと表記していたことがあったが、現在はWineと表記するのが正式である[ 3] 。"WIN dowsE mulator" に由来すると説明されることもあるが、W ineI sN ot anE mulator に由来するという、前者とは矛盾するジョークのような説明がされることもある。これは技術的理由によるもので、詳しくは後述する。
ライセンスにLGPL を採用している[ 4] 。自由ソフトウェア である。
かつてはBSDライセンス を採用していた。
Wine 上のMedia Player Classic バージョン 6.4.8.3 Wine以外にLinux上でWindowsアプリケーションを動作させる方法としては、Xen やVMware など、仮想マシン を構築するものが代表的である。Wineはそれらとは異なり、互換レイヤー として動作する。つまり、Windowsプログラムが要求するDLL の代替品を供給し、またWindows NT カーネル のプロセス を再現することによって、Windowsプログラムをネイティブ動作させる。簡単に言えばWineは、Linux上でWindowsを動作させているのではなく、LinuxにWindowsと同じ挙動をさせているのである。したがってWineでWindowsプログラムを動作させる上では、Windowsのコピーもライセンスも必要ではない[ 5] 。ただし、Wineのエミュレーションライブラリが不完全な場合にはWindowsのDLLを利用することで解決できる場合がある[ 6] が、その場合にはWineを動作させるコンピュータにWindowsのコピーとライセンスが必要である。
ところで、Wineという名称は "W ine"I sN ot anE mulator を略した再帰的頭字語 であるとも説明される[ 7] 。DOSBox やzsnesのような典型的なエミュレータと異なり、Wineは基本的にはCPUエミュレーションを行っていない。そのため通常この種のエミュレータに発生する、オリジナル環境と比べた著しいパフォーマンス低下がWineには見られない。このことを強調する開発者の立場から、そのような説明がなされる。実際、アプリケーションによってはWindows上より高速に動作することもあるという[ 7] 。同じく基本的にはCPUエミュレーションを行わない、x86上の仮想マシンにインストールしたWindows環境と比べても、そのような実行速度は優れたものである。しかし、その代償としてプロジェクト規模が巨大化したWineは、人的資源の不足のため本来実装されるべき機能が依然として完全には提供されていない[ 8] 。そのため再現性は仮想マシン上にインストールしたWindowsと比べて大きく劣る。高速化よりはむしろ再現性の向上を第一の目標として開発されている。 なお、ドライバは対応しない。カーネルモードドライバが多く、カーネルモードでの実行が必要なため。[ 9]
Wineに含まれるWindows API実装はWinelibと呼ばれ、これを用いてWindowsプログラムのソースコードからプラットフォーム ネイティブなバイナリ (実行ファイル やDLL)をビルド することも可能である。しかしながら、x86環境では付属するバイナリローダー(wineコマンド)からコンパイル 済みバイナリを起動すればよく、実用上は実行速度にも大きな差はない。非x86環境でWindowsバイナリを実行するためには、QEMU などをCPU エミュレータ として利用可能[ 10] だが、低速である。
サン・マイクロシステムズ のPWI (Public Windows Initiative) やWabi (英語版 ) [ 11] (Windows API のパブリックドメイン ソフトウェアによる完全代替を目指したもの)の影響を受け、ボブ・アムスタッドとエリック・ヤングデイルによりWindowsアプリケーションをLinux 上で動作させることを目的としてWineプロジェクトは1993年 にネットニュース上で創始された[ 12] 。当初はWindows 3.1 用(16 ビット)アプリケーションに主眼を置いたが、現在は 32ビット中心に開発されている。1994年 以降はアレクサンダー・ジュリアードがプロジェクトリーダーを務めている[ 13] 。
プロジェクトは困難を極め、なかなか互換性 が高まらなかった。特に1990年代 は、日本語環境においてアプリケーションが思うように動かせない状況が続き、Wineのインストールや動作にもそれなりのスキルが必要とされていた。
Wineプロジェクトに着目したコーレル などの支援によって一時的に状況は好転したが、マイクロソフト のコーレルへの大規模投資が原因となって、この支援は中止された[ 14] 。
現在はCodeWeavers がジュリアードらを雇っている[ 13] 。また、Google はLinux版Picasa でWineを利用し、Wineの開発を支援している[ 15] 。
WineにおけるWindowsアプリケーションの動作状態はWine アプリケーションデータベース (AppDB) で調べることができる。Wine AppDBではWineユーザからの動作報告がデータベース化されており、アプリケーションが動作状況の良い順に "Platinum "、"Gold "、"Silver "、"Bronze "、"Garbage " で格付けされている[ 30] 。一般にWineのバージョン毎に格付けが変わる。
Wine 1.0で
がリリース基準に使われた[ 31] こともあり、Wine 1.0ではこれらのアプリケーションが問題なく動作すると報告されている[ 32] [ 33] [ 34] [ 35] 。
補足しておくと、WineにDirectX のランタイムをインストールするのは非推奨である。これはDirectXが直接ハードウェアをコントロールすることがあるため、Windowsそのものが存在しているわけではないWine環境においては、CPUやGPUといったハードウェアを破壊しかねない可能性があるためである。また、Wineが搭載しているDirectXのランタイムで大抵のアプリケーションは動く。
Wineにはwine コマンドを中心として様々なプログラムやツールが含まれている[ 36] 。
wine 一般に Wineがインストールされた環境でWindowsプログラムを起動するにはEXEファイルをダブルクリックすればよい。しかし、場合によってはデバッグ などの目的でコマンドライン からプログラムを起動させたいことがある。wineはこのようなときに用いるコマンドで、引数にWindowsプログラムを指定する。 Wine設定 (winecfg) Wine全体の設定をGUI で行うためのプログラムである。 Wine File (winefile) MDI 型のファイルマネージャ であり、Windows Explorer に対応する(見た目としてはWindows 3.x のファイルマネージャー に近い)。コマンドラインからwine explorer
と入力することでも起動する。Wine Application Uninstaller (uninstaller) GUIでプログラムをアンインストールするためのツールであり、Windowsの「プログラムの変更と削除」に対応する。 regedit GUIでレジストリ を編集するためのプログラムであり、同名のWindows付属プログラムに対応する。 コマンドプロンプト (cmd)、メモ帳 (notepad)、タスクマネージャ (taskmgr)、マインスイーパ (winemine) やワードパッド (wordpad)コントロールパネル (control) なども含まれている。コマンドラインから起動する場合、cmd、taskmgr、wordpad、controlなど一部のプログラムについては、wineコマンドの引数としてプログラム名を指定して起動する。例えば、ワードパッドを起動するには仮想端末 から
$ wine wordpad と入力する。なお $ はBash 等のシェル におけるプロンプトである。
Wine ToolsはWineに含まれるツール群である。これらはWindows型実行可能ファイルではなく、Perl やC言語 などで記述されたUnix ネイティブプログラムである。
Wine Server (wineserver) Wineにおいて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を設定することで変更できる[ 37] 。かつてWineの設定ファイルとしてconfigというファイルがあったが、2005年 に廃止され[ 38] 現在は拡張子 がregのファイルに設定が保存されるようになっている。
アプリケーションのデスクトップエントリファイルやアイコンなどはホームディレクトリ下の
.config/menus/applications-merged .local/share/applications/wine .local/share/desktop-directories .local/share/icons にインストールされる[ 39] 。これらのディレクトリにインストールされるファイルはGNOME やKDE などでメニューに使われる。
Wineは環境変数 WINEDEBUGを使用することで、様々なデバッグが行える。[ 40]
構文
$export WINEDEBUG=[ クラス ][+|-] チャンネル [,[ クラス2 ][+|-] チャンネル2 ] [ クラス ] にはwarn、err、fixme、traceのいずれかを指定する。また、[ +|- ]の指定によってチャンネルの入れるか入れないかを切り替える。
チャンネルにはrelay、dll、heap、allなどがある。詳しくは[ 40] のList of Debug Channelsの章を参照。
例
$WINEDEBUG=warn+all,+relay 全ての警告メッセージを表示する。すべての中継メッセージを表示する。
この環境変数の指定によって特定のdllの関数がどのような引数で呼び出されているか、どこでどのような関数が完全に実装されていないかが分かる。
CrossOver - Intel Mac、Linux上でWindowsアプリケーションを利用するためのソフトウェア。あらかじめ動作を保証するアプリケーションを提示しており、そのアプリケーションに関してはドライバのインストールなどテクニカルな設定を行う必要が無い。場合によってはある程度テクニカルな設定を行う必要があるが、保証しないアプリケーションに関しても概ね動作する。多くのドライバを必要とするWindows専用のゲームソフトウェアをIntel Mac、Linux上で動かす事を主眼に据えたGamesバージョンも存在する。MikuInstaller - IntelベースのMacintoshにWindows用のDAWソフトである初音ミク をインストールするための環境パッケージ。WineやCrossOver のソースコードの一部を利用している。初音ミク をインストールするためのソフトと謳われているものの、書き換えなくても実行できるソフトがある可能性が示唆されておりまた同梱のWineを書き換えることで様々なアプリケーションをMacネイティブで実行できるともしている。なお、現在開発は中止されている。Pipelight - Wineを使い、Flash Player やMicrosoft Silverlight などのWindows以外のOS向けのプラグインが提供されていないものを使用可能にするプロジェクト。開発終了。ReactOS - カーネルドライバーを除くWindowsシステムライブラリの実装に用いられる。VirtualBox - 一部のDirect3D操作にWineのソースコードを使用。Parallels Desktop for Mac - DirectXの操作にWineのソースコードを使用。Darling - Wineと同様にOSXのコードをオープンソース実装しようというプロジェクト。^ 例えばIE6Service Pack 1のEULA には「本OSコンポーネントは、該当するOS製品の既存の機能をアップデート、またはこれに追加もしくは代替するためにのみ提供されています。」という一文があり、Windowsのアップグレードとしてのみ使用できる。 ^ 例えばIE7のEULA には「お客様は、マイクロソフト Windows XP SP2 and Windows Server 2003 SP1 ソフトウェアの有効なライセンス取得済みの複製 (以下「本ソフトウェア」といいます) ごとに、本追加物の複製 1 部を使用できます。」という一文があり、Windowsのライセンスと同等とみなしている。