info-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Fwd: [Cvsnt] cvs + M$ Integration with VS IDE]


From: Laine Stump
Subject: Re: [Fwd: [Cvsnt] cvs + M$ Integration with VS IDE]
Date: 14 Oct 2000 12:25:33 -0400
User-agent: Gnus/5.0807 (Gnus v5.8.7) Emacs/20.7

Tony Hoyle <address@hidden> writes:

> Laine Stump wrote:
> > The way you previously explained it, he was calling a GPL'ed DLL -
> > that's the same (in the eyes of the GPL) as executing a separate
> > binary. He's not violating the GPL unless his program links in GPL'ed
> > code *at compile time*; runtime is okay. (Of course he should check
> > this out with a lawyer to be sure, but that's the way I've always
> > understood it.)
> 
> No...  DLLs are linked at compile time, just like unix .so files.  They
> are merely loaded dynamically.

As a matter of fact, I'm at this moment looking at a Microsoft
Platform SDK documentation, which states that there are two ways of
calling a function in a DLL: "loadtime linking", and "runtime
linking".

The *implib* is linked at compile time, not the DLL itself. The implib
contains the info necessary to load the DLL and do the fixups so that
the DLL functions will be called; this fixup (ie "linking") happens at
program *load* time. Note that an IMPLIB is *extremely* simple, and
it's very straightforward to create your own implib for a DLL without
any access to the source (as long as you know the names of the
functions; in some cases you'll need to know the "ordinal number" of
the functions as well, depending on how the DLL was built); the result
would be that you are linking with *your* (license of your choice)
implib at compiletime, and only linking the (GPL'ed) DLL at loadtime.

Alternately, you can build your program with no implib at all, and
have your application load the DLL explicitly, using the LoadLibrary()
function call, then GetProcAddress() to find the addresses of all the
functions you want to use. In this case you are not even linking at
load time, but at *run* time. (to be completely "clean", you'd want to
not use any .h files that had the GPL on them either)

So, fortunately you are incorrect.

The only real question is whether or not loadtime/runtime linking is
considered "linking" for purposes of the GPL. Since it is acceptable,
for example, to have a proprietary LKM that gets "linked" into the
Linux kernel at boottime/runtime, I'd say that it looks like it *is*
acceptable, but again, I'm not an authority on the intracacies of the
GPL.

> >From the GPL:
> 
> This General Public License does not permit incorporating your
> program into proprietary programs.  If your program is a subroutine
> library, you may consider it more useful to permit linking
> proprietary applications with the library.  If this is what you want
> to do, use the GNU Library General Public License instead of this
> License.

If you are calling a GPL'ed DLL, you are not incorporating that DLL
into your program, you are merely calling it; almost exactly the same
as if you were calling cvs.exe with system(). If this weren't
acceptable, NetBSD, FreeBSD, and OpenBSD would all be in violation of
the GPL, because they load and execute GPL'ed binaries. I'd venture to
guess that the legality of those 3 OSes has been closely scrutinized,
so again this looks like no problem.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]