Wine

Wine （ワイン）は、オープンソースの Windows API 実装を通じて、主としてx86アーキテクチャ上のUnix系オペレーティングシステム (POSIX準拠OS) においてWindows用アプリケーションをネイティブ動作させることを目標とするプログラム群である。
X Window Systemを利用して、16ビット・32ビット・64ビットWindows向けGUIアプリケーションを動作させることができるほか、MS-DOS用アプリケーションも動作する。x86上のLinux環境を中心に開発されているので、Solaris 、FreeBSD 、macOSなど、他のOSにも移植されているが、それらの環境下では問題が発生する可能性は比較的高い。原理上、カーネルレベルのスレッドに対応しているOSであることが必要である。
名称は、もともとは頭字語であることを意識して、大文字でWINEと表記していたことがあったが、現在はWineと表記するのが正式である。"WINdows Emulator" に由来すると説明されることもあるが、Wine Is Not an Emulator に由来するという、一見してジョークとも取れる、前者とは矛盾する説明がなされることもあり、これは技術的理由による。詳しくは後述する。
ライセンスにLGPLを採用している。フリーソフトウェアである。
かつてはBSDライセンスを採用していた。
概要.
Wine以外にLinux上でWindowsアプリケーションを動作させる方法としては、XenやVMwareなど、仮想マシンを構築するものが代表的である。Wineはそれらとは異なり、互換レイヤーとして動作する。つまり、Windowsプログラムが要求するDLLの代替品を供給し、また Windows NTカーネルのプロセスを再現することによって、Windowsプログラムをネイティブ動作させる。簡単に言えばWineは、Linux上でWindowsを動作させているのではなく、LinuxにWindowsと同じ挙動をさせているのである。したがってWineでWindowsプログラムを動作させる上では、Windowsのコピーもライセンスも必要ではない。ただし、Wineのエミュレーションライブラリが不完全な場合にはWindowsのDLLを利用することで解決できる場合があるが、その場合にはWineを動作させるコンピュータにWindowsのコピーとライセンスが必要である。
ところで、Wineという名称は "Wine" Is Not an Emulator を略した再帰的頭字語であるとも説明される。DOSBoxやzsnesのような典型的なエミュレータと異なり、Wineは基本的にはCPUエミュレーションを行っていない。そのため通常この種のエミュレータに発生する、オリジナル環境と比べた著しいパフォーマンス低下がWineには見られない。このことを強調する開発者の立場から、そのような説明がなされる。実際、アプリケーションによってはWindows上より高速に動作することもあるという。同じく基本的にはCPUエミュレーションを行わない、x86上の仮想マシンにインストールしたWindows環境と比べても、そのような実行速度は優れたものである。しかし、その代償としてプロジェクト規模が巨大化したWineは、人的資源の不足のため本来実装されるべき機能が依然として完全には提供されていない。そのため再現性は仮想マシン上にインストールしたWindowsと比べて大きく劣る。高速化よりはむしろ再現性の向上を第一の目標として開発されている。 なお、ドライバは対応しない。カーネルモードドライバが多く、カーネルモードでの実行が必要なため。
Wineに含まれるWindows API実装はWinelibと呼ばれ、これを用いてWindowsプログラムのソースコードからプラットフォームネイティブなバイナリ（実行ファイルやDLL）をビルドすることも可能である。しかしながら、x86環境では付属するバイナリローダー（wineコマンド）からコンパイル済みバイナリを起動すればよく、実用上は実行速度にも大きな差はない。非x86環境でWindowsバイナリを実行するためには、QEMUなどをCPUエミュレータとして利用可能だが、低速である。
歴史.
サン・マイクロシステムズのPWI (Public Windows Initiative) や（Windows API のパブリックドメインソフトウェアによる完全代替を目指したもの）の影響を受け、ボブ・アムスタッドとエリック・ヤングデイルによりWindowsアプリケーションをLinux上で動作させることを目的としてWineプロジェクトは1993年にネットニュース上で創始された。当初はWindows 3.1用（16 ビット）アプリケーションに主眼を置いたが、現在は 32ビット中心に開発されている。1994年以降はアレクサンダー・ジュリアードがプロジェクトリーダーを務めている。
プロジェクトは困難を極め、なかなか互換性が高まらなかった。特に 1990年代は、日本語環境においてアプリケーションが思うように動かせない状況が続き、Wineのインストールや動作にもそれなりのスキルが必要とされていた。
Wineプロジェクトに着目したコーレルなどの支援によって一時的に状況は好転したが、マイクロソフトのコーレルへの大規模投資が原因となって、この支援は中止された。
現在はCodeWeaversがジュリアードらを雇っている。また、GoogleはLinux版PicasaでWineを利用し、Wineの開発を支援している。
対応アプリケーション.
WineにおけるWindowsアプリケーションの動作状態は Wine アプリケーションデータベース (AppDB) で調べることができる。Wine AppDBではWineユーザからの動作報告がデータベース化されており、アプリケーションが動作状況の良い順に "Platinum"、"Gold"、"Silver"、"Bronze"、"Garbage" で格付けされている。一般にWineのバージョン毎に格付けが変わる。
Wine 1.0で
がリリース基準に使われたこともあり、Wine 1.0ではこれらのアプリケーションが問題なく動作すると報告されている。
補足しておくと、WineにDirectXのランタイムをインストールするのは非推奨である。これはDirectXが直接ハードウェアをコントロールすることがあるため、Windowsそのものが存在しているわけではないWine環境においては、CPUやGPUといったハードウェアを破壊しかねない可能性があるためである。また、Wineが搭載しているDirectXのランタイムで大抵のアプリケーションは動く。
付属プログラム.
Wineには"wine"コマンドを中心として様々なプログラムやツールが含まれている。
コマンドプロンプト (cmd)、メモ帳 (notepad)、タスクマネージャ (taskmgr)、マインスイーパ (winemine) やワードパッド (wordpad) コントロールパネル (control) なども含まれている。コマンドラインから起動する場合、cmd、taskmgr、wordpad、controlなど一部のプログラムについては、wineコマンドの引数としてプログラム名を指定して起動する。例えば、ワードパッドを起動するには仮想端末から
 $ wine wordpad
と入力する。なお $ は Bash 等のシェルにおけるプロンプトである。
Wine Tools.
Wine ToolsはWineに含まれるツール群である。これらはWindows型実行可能ファイルではなく、PerlやC言語などで記述されたUnixネイティブプログラムである。
ディレクトリ.
WineやアプリケーションのEXEファイルやレジストリなどはホームディレクトリ内の.wineディレクトリ下に保存される。保存先は環境変数WINEPREFIXを設定することで変更できる。かつてWineの設定ファイルとしてconfigというファイルがあったが、2005年に廃止され現在は拡張子がregのファイルに設定が保存されるようになっている。
アプリケーションのデスクトップエントリファイルやアイコンなどはホームディレクトリ下の
にインストールされる。これらのディレクトリにインストールされるファイルはGNOMEやKDEなどでメニューに使われる。
デバッグ.
Wineは環境変数WINEDEBUGを使用することで、様々なデバッグが行える。
構文
 $export WINEDEBUG=[ クラス ][+|-] チャンネル [,[ クラス2 ][+|-] チャンネル2 ]
[ クラス ] にはwarn、err、fixme、traceのいずれかを指定する。また、[ +|- ]の指定によってチャンネルの入れるか入れないかを切り替える。
チャンネルにはrelay、dll、heap、allなどがある。詳しくはのList of Debug Channelsの章を参照。
例
 $WINEDEBUG=warn+all,+relay
全ての警告メッセージを表示する。すべての中継メッセージを表示する。
この環境変数の指定によって特定のdllの関数がどのような引数で呼び出されているか、どこでどのような関数が完全に実装されていないかが分かる。
参照.
Darling - Wineと同様にOSXのコードをオープンソース実装しようというプロジェクト。