W2Lライブラリ

(2010年6月20日更新)

W2Lライブラリとは

W2LライブラリはVideo maidでWindowsのCodec(DLL)を実行するためのW32Loaderを応用したライブラリです。W32LoaderはWindowsのPE形式の実行可能ファイルをIA-32のUNIX系OS上で実行します。

W32Loaderを発展させたW2LライブラリではC/C++言語で書かれたWindowsのAPIを使用するプログラムのソースコードをUNIX系OS上でコンパイルしてOSネイティブな実行可能ファイルを作成することができます。CPUはIA-32に限定されません。GTK+が動作する環境ならば、どのような環境でもソースコードから実行可能ファイルを作ることができます。

W2Lライブラリを利用すれば、Windowsプログラムを簡単にUNIX系OSに移植できます。

ライセンス

GNU GENERAL PUBLIC LICENSE

メーリングリスト

GTK+ 実験室メーリングリスト

W2Lライブラリが動作する環境

動作環境

GTK+版はGTK+-2.0以降

開発環境

GTK+版はUbuntu 10.04 LTS

動作確認ディストリビューション

サンプル

文書で説明するよりも、実物を見た方がわかりやすいと思います。15puzzle-0.0.2.tar.gzに含まれるsrc/15puzzle.c、src/15puzzle.rc、src/resource.hはWindowsのプログラムのソースコードです。15puzzle.cはC言語、15puzzle.rcはリソーススクリプトです。WindowsのAPIだけを使っており、純粋なWindowsプログラムです。これはVisual C++で

> tar zxvf 15puzzle-0.0.2.tar.gz
> cd 15puzzle-0.0.2
> nmake /f Makefile.msc

とすることでコンパイルできます。Visual C++でコンパイルした実行可能ファイルは15puzzle-0.0.2-win32.zipです。

このWindowsのプログラムのソースコードを書き変えることなく、W2Lライブラリと組み合わせてUNIX系OSのネイティブな実行可能ファイルを作ることができます。以下の一般的なUNIX系OSのビルド手順で作成できます。

 $ tar zxvf 15puzzle-0.0.2.tar.gz
 $ cd 15puzzle-0.0.2
 $ ./configure
 $ make

リソーススクリプトの処理にはGNU Binutilsに含まれるwindresが必要です。windresは標準では作成されません。windresが用意できない場合にはコンパイル済みの15puzzle.resをDownloadして下さい。

進捗

主要API実装率
DLL実装API数全API数実装率
advapi32.dll455667%
comctl32.dll508260%
comdlg32.dll62623%
gdi32.dll255454%
kernel32.dll27282932%
msvcrt.dll12873117%
ole32.dll73052%
oleaut32.dll03600%
rasapi32.dll01460%
rasdlg.dll0330%
shell32.dll2317513%
user32.dll19669528%
version.dll61442%
winmm.dll101995%
wsock32.dll387550%

スクリーンショット

W2Lライブラリの利点

Windows専用のプログラムをマルチプラットフォーム化してUNIX系OSにも対応させようと考えたとき、いくつか方法があると思いますがどの場合でもソースコードを書き直したり新規にソースコードを書く必要があります。またツールキットに対する知識やUNIX系OSに関する知識を新たに習得する必要があります。Windowsネイティブなプログラムを止めてツールキットなどでマルチプラットフォーム化した場合、新しくなったGUIや機能が既存のユーザに受け入れられるとは限りません。また書き直したプログラムが思うように動作するとも限りません。Windowsネイティブなプログラムの開発を続けつつ、UNIX系OSに移植した場合には同時に2系統のプログラムのサポートをしなければなりません。これにはコストがかかります。Windowsプログラムをマルチプラットフォーム化することは、リスクやコストがかかります。デスクトップ分野でのWindows以外のOSの普及率を考えるとリスクやコストを負ってまでWindows以外のOSに対応するメリットはありません。

しかしW2Lライブラリを利用すれば、今あるWindowsプログラムのソースコードをそのまま使ってUNIX系OSのネイティブな実行可能ファイルを作ることができます。すでに書いたソースコードを書き直す必要がありません。Windowsプログラムはそのままなので、既存のWindowsユーザが不満を持つことはないでしょう。マルチプラットフォーム化を止める場合でも、W2Lライブラリを捨てるだけで元の状況に戻るので止めることも容易です。

今現在、C/C++言語で書かれたWindowsのAPIを使用するプログラムを開発しているならば、そのままW2Lライブラリでマルチプラットフォーム化できます。

W2Lライブラリの欠点

Windowsでの実行を前提としたプログラムを書き変えることなく移植するため、UNIX系OSのプログラムとしては不自然なプログラムになってしまうことは避けられません(GUIのボタンの配置や用語の違いなど)。ドライブのルートやパスの区切りの文字などのファイルシステムの仕様の違いはある程度はW2Lライブラリが吸収しますが、問題が生じる可能性もあります。

W2LライブラリではデバイスドライバやWindows固有の機能に依存するプログラムには対応できないかもしくはUNIX系OSで動作させても無意味です。

本当にまったく書き変えることなくWindowsのプログラムをUNIX系OSでコンパイルできるかと言うと、実はそうとは言えません。Visual C++などのWindowsのコンパイラ固有の機能を利用している場合には、ソースコードの書き変えが必要です。インラインアセンブラや64ビットの整数型などです。IA-32以外のCPUにも対応するならばCPUの仕様に依存するコードも書き変える必要があります。例えばバイトオーダーや変数のビット数の決め打ちなどは危険です。しかしこれらの書き変えは元のWindowsプログラムの価値を損ねるものではありません。むしろプログラムの価値を高めます。これらの書き変えを行えば、64ビットのWindowsプログラムも作ることができるようになります。(IA-32の仕様に依存するコードでは64ビットのWindowsプログラムを作ることはできません。)

新規に開発するならば初めからマルチプラットフォームを前提としたツールキットなどを使うべきです。今現在、C/C++言語で書かれたWindowsのAPIを使用するプログラムを開発していないならば、W2Lライブラリでマルチプラットフォーム化するメリットはありません。

他のマルチプラットフォーム化の手段との比較


戻る