Wine license change

Patrik Stridvall ps at
Wed Feb 13 03:29:03 CST 2002

> To give a concrete technical example (but not an 
> authoritative legal one,
> as IANAL), it is my understanding of the LGPL that if someone 
> has released
> a library under the LGPL, a third party cannot distribute a modified
> version of this library that has been linked against a proprietary
> library[1].  I think because of the reduced scope of the LGPL, there's
> also less room for ambiguity on questions of aggregation vs. derived
> works.
> [1] The reason for this lies in section 2d of the LGPL:
>     d) If a facility in the modified Library refers to a function or a
>     table of data to be supplied by an application program that uses
>     the facility, other than as an argument passed when the facility
>     is invoked, then you must make a good faith effort to ensure that,
>     in the event an application does not supply such function or
>     table, the facility still operates, and performs whatever part of
>     its purpose remains meaningful.
> A library that is linked against a proprietary library cannot be used 
> without the proprietary library; it will fail to load at 
> runtime with a 
> complaint of "No such file or directory".  

If that was the only problem:


void call_this_init_on_dll_load(void) {
   HANDLE h = LoadLibrary("PROPRIETARY.DLL");

   PROPRIETARY_Foo = (void *) GetProcAddress(h, "Foo");

BOOL WINAPI Foo(void) {
   if(PROPRIETARY_Foo) {
     return PROPRIETARY_Foo();
   } else {
	/* The old implementation goes here */

So no runtime failure any more. At least not anymore than happend before.

> If "application 
> program" as 
> used above is understood to include other libraries (the 
> distinction is 
> artificial, and the LGPL 2.1 does not define "application program" to 
> exclude this interpretation), then trying to hide proprietary 
> functions in 
> a separate library that an LGPLed library is made to depend on is not 
> permitted under the LGPL.

Well, the the requirement if the function didn't exist was 
"the facility still operates, and performs whatever part of
its purpose remains meaningful."

Observe the words "remains meaningful". It doesn't have to do the same thing
as Alexandre claimed in the last discussion. Yes, I can see why he thought
since the example below paragraf d (not included in your cut) was

It should just do something that in the context of the missing function
remains meaningful. It could mean using the old Wine implementation but
I guess it could also mean that just doing:

return FALSE;

since doing that is ALWAYS meaningful for a Windows API.
Sure the application might not check but then this is
the responsebillity of application not our problem.

Beside since the Wine likely didn't have a non-stub implementation
anyway, it was probably was what it already did, so the application
crashed anyway without the patch and the proprietary library.

More information about the wine-devel mailing list