wine が示すように、PE フォーマットは実際には互換性の問題ではありません。
PE は、ロード時にプログラムがどのように組み合わされるかを定義するだけです。Windows では、RUNDLL がそれを解釈し、すべてのプログラム セクションをメモリにロードし、すべてのサポート dll をメモリにロードし、関数ポインタをパッチして、プログラムがメモリに常駐する準備ができているようにします。(詳細については、 http://msdn.microsoft.com/en-us/library/ms809762.aspxを参照してください。よく読んでください! )
このすべてを実行するためにカーネル モジュールを作成するのを止めることはほとんどありません。上記のリンク先のページに詳細が記載されているため、それほど難しいことではなく、誰かが既に行っている可能性があります。
本当の問題は、オペレーティング システムの基礎です。Linux が PE をロードできたとしても、ファイル名 (\ または /) の根本的な違い、パーミッション モデルの違い、および Linux には存在しない Windows レジストリに関する問題が発生します。これは、GUI のさまざまなウィンドウ モデルに入る前の話です。
したがって、Windows プログラムを Linux で実行するためのタスクは、プログラム ローダーに関するものではなく、Linux ですべての Windows DLL をエミュレートすることに関するものです。私が理解しているように、これがワインの中心です。