Licensing of Haskell code

Alastair Reid alastair@reid-consulting-uk.ltd.uk
Fri, 23 May 2003 16:00:43 +0100


Alastair Reid <alastair@reid-consulting-uk.ltd.uk> wrote:
> >    GPL + MIT =3D GPL      # I think this is true.
> >    BSD + MIT =3D BSD     # This may also be true
> >    x + x =3D x                     # This says that we can delete any
> > duplicates

On Friday 23 May 2003 1:37 am, Ashley Yakeley wrote:
> By "+" I assume you mean "must comply with at least one" rather than
> "must comply with both"?

I was thinking of a situation like:

  Suppose you have a program containing module A and module B.

To make it concrete, let's further assume:

  Module A has license GPL and module B has license MIT.

I want to determine: =20

  What license governs the complete program?

We all know from having seen enough examples that it's the GPL license.
That's what I meant when I wrote:

    GPL + MIT =3D GPL

i.e., if you link 2 modules one governed by GPL and the other governed by M=
IT=20
then the result has license GPL.

That is, '+' means 'must comply with both'.

The proposal was that you make a list of all the modules in your program.

=46rom this you make a list of all the licenses of all the modules.

You then apply simplification rules:
=2D eliminate duplicates
=2D where one license is strictly stronger than another, keep the stronger

This results in a list of licenses which the programmer or his lawyer can=20
puzzle over.

Notes:

1) Conceivably, there could be a license where it matters whether A imports=
 B=20
or B imports A but I'm not sure how a lawyer would interpret this in the=20
context of higher-order functions and, in any case, I've not seen such a=20
license so, as a first approximation, I'm going to ignore the difference. =
=20

2) Similarily, a license might distinguish between dynamic linking and stat=
ic=20
linking and, again, I'm going to ignore the difference.

=2D-
Alastair Reid