Request for discussion: Using PE libraries for Wine dependencies

Rémi Bernon rbernon at codeweavers.com
Mon Apr 13 13:15:29 CDT 2020


On 4/13/20 5:02 PM, Zebediah Figura wrote:
>>
>> So I think that although it could be seen as the architecturally 
>> "correct" approach, relying on distributions -or redistributed 
>> packages- to provide pristine PE versions of the dependencies is not 
>> going to work out.
> 
> ...but I don't see how that implies that we can't use this approach for 
> building and distributing them. Frankly, I can't see how it applies any 
> approach. It does mean we have to do a bit of work to tweak the loader 
> if we don't just statically link everything, but I don't think it'd end 
> up being very much work.
> 

Sure, statically linking can also solve most issues here, assuming these 
dependencies do not require being dynamically linked.


But in the dynamic linking scenario, IIUC Wine currently offers only one 
choice: loading the builtin vs native version of a given DLL.

For instance, to illustrate, I understand that to properly manage SDL2 
without conflict with an application shipping its own incompatible 
version of it, we would have to load these:

   application.exe
     -> SDL2.dll (native)
     -> xaudio2_7.dll (builtin)
         -> FAudio.dll (builtin)
             -> SDL2.dll (builtin)

So we would have to decide whether to load SDL2 as builtin or native 
depending in which context it is loaded.

Then maybe I'm wrong but I understand that, currently, wine only handles 
the builtin vs native by always loading the requested version of the 
DLL, wherever it's loaded from, so would this contextual loading also 
apply to all libraries, or just the dependencies somehow?

Would it be something like a third possible option to native/builtin 
choice, like "load builtin if from a builtin / native if from native" 
setting? It seems a little bit convoluted to me to be honest when we can 
just rely on the existing mechanism and custom wine libraries.


A more troublesome issue I can think of with this approach: when 
investigating Denuvo protection, I could see that the DRM did some 
consistency checks for some selected libraries. And it did these checks 
by name, not caring about where the libraries were loaded from, but 
checking their contents against disk.

Now, pure guess here, but I can imagine that having two different DLLs 
loaded with the same name, and with a name that's possibly one of the 
selected libraries to check could cause some confusion and undesired 
trouble. Having internal wine dependencies live under a fake name could 
prevent future pain IMHO, especially when passing DRM checks is the main 
purpose for all this.

-- 
Rémi Bernon <rbernon at codeweavers.com>



More information about the wine-devel mailing list