WineはWindowsプログラムをLinuxなどのX Window System上で動かすためのソフトウェアでWindowsプログラムが必要とするWin32APIの実装を提供しています。またネイティブのDLLをWine上に持ってきて使うことも出来ます。
しかし実際にはなかなか動かないことが多かったり、動くとしてもコツが必要だったりするみたいで、そのためかAppDBなどを用意して有名ソフトが動くのかどうかをデータベースとして提供していたりもします。
また「なぜWineが必要なのか」としてWindowsの蔓延に対する警戒として以下のようなことも書いています。
同種の人間達は各個人が同じ脆弱性を共有する。たった一つの脆弱性を見つければその人間達すべてを滅ぼすことが出来る。我々はこのことをからよく学ばなければならない。
(途中省略)
Wineは別の手段でのWin32APIの実装であり違うOSで動作する。Wineは同じ欠点を共有せず、それにより必要な多様さを提供している。
ここではUbuntu8.04を使ってWineを動かしてみます。まずインストール。
$ sudo apt-get install wine
スタートメニューにWineが現れ、その中に「notepad」(メモ帳)がありますので起動してみます。
起動はしましたが、改行が入力できず、日本語も入力できませんでした。
これはとりあえず置いておいて、日本製の有名フリーウェアが動くかどうか試してみます。Terapadというテキストエディタをダウンロードして、~/winapps/terapad/に置いて以下のように実行してみました。
$ cd ~/winapps/terapad
$ wine TepaPad.exe
改行は出来ますが、日本語入力がやはり少しおかしくてキャレットが戻ったりしてしまうようです。
つぎにファイルマネージャのMDIEを同様に起動してみましたが以下のようなエラーがでて起動出来ませんでした。
世界最高峰ダウンロードマネージャirvineを試してみました。
これはちゃんと動くようです。
Wineの設定
Wineの設定はwinecfgで行います。設定画面にはいくつかのタブがありますが、「アプリケーション」タブが他のタブの設定の大本になります。「アプリケーション」タブで”Default Setting”が選択されていれば、他のタブの設定はこの”Default Settings”に対して行われることになります。
最初にDLLもWineに持ってきて使うことが出来ると書きましたがこれが出来るのは、kernel32.dll,gdi32.dll,user32.dll,ntdll.dll以外のDLLです。これ以外のDLLはWindowsのものを使えると言うことになります。Wine上のアプリから見えるCドライブは~/.wine/drive_cなのでWindowsのシステムドライブから上記4つ以外のDLLをこのディレクトリのWidnowsに持ってきて、Wineを設定すればよいということになるとおもいます。ところがWineで提供されたC:\Windows\System32にはすでに多くのDLLが含まれています。これらはファイルの存在を確かめるアプリやDLLのバージョンを確かめるアプリのために提供されているらしいです。いずれにしてもこの様なWindowsDLLの利用の仕方はライセンス的に問題があるかもしれません。
Wineで上記のようなDLLの設定をするにはwinecfgのライブラリタブで行います。ここでオーバーライドするライブラリを選んで追加すればそのライブラリはコピーしたネイティブのものを使うことになると思われます。しかしこのライブラリ一覧にはライブラリ名しか書いてなくて実際のDLLがどれだか分かりませんし、どのWin32APIがどのライブラリにあるかはWindowsプログラミングになれたひとしか分からないと思われます。下記のデバッグ機能を利用すればより詳細なデータを得ることが出来ます。
上記の用にwinecfgで設定したデータはすべてWineのレジストリ~/wine/*.regに保存されます。
winetricks
winetricksはWineの補助的なプログラムで、Windowsのアプリが必要とするランタイムライブラリのインストールを補助してくれるものです(マイクロソフト直接リンク)。使い方は簡単で、以下のようにダウンロードして実行すれば使えます。
$ wget http://www.kegel.com/wine/winetricks
$ sh ./winetricks
cabextractのエラーが出る場合は、sudo apt-get install cabextractを実行すればよいです。
しかしこれらの機能が上記のライブラリの設定とどう噛み合ってくるのかはなかなかわかりずらいです。いずれにしてもこれらの設定をうまく使えばいままで動かなくて諦めていたアプリも動かせるかもしれません。
デバッグ出力
環境変数WINEDEBUGを使うといろいろと出力出来ます。
$ WINEDEBUG=win wine myapp.exe