It looks like Wine, like any other major project, is built out of a number of orthogonal features: -- a loader for NE/PE formats -- environment setup as per Win32 specs -- implementation of Win32 API (as a big collection of subprojects) In theory, the loader is an independent piece of code: native Linux code could be compiled in PE format, while our implementation of Win32 could be compiled in ELF (what we're now doing) or PE (hopefully soon). Now, out of the formats we support, the only interesting one to factor out is PE. If we can do that, we can then teach ld to work with the PE format as a native format. You can than have Linux apps compiled to PE (rather than ELF). Why would you do that? Say, you like your PE-only compiler better, etc -- truth be told, I don't care. :) Moreover, since most development tools have been ported to Cygwin, they already know PE. This make the whole idea even so much more attractive. The only problem right now it that the PE loader contains Win32 calls. Questions is: should we rewrite the PE loader only in terms of Unix API and put it in winelib? (or a separate lib?) -- Dimi.