Given the above, it is possible that SWI-Prolog packages and
extensions will rely on the GPL.165On
the Unix version, the default toplevel uses the GNU readline library for
command line editing. This library is distributed under the GPL. In
practice this problem is small as most final applications have Prolog
embedded, without direct access to the command line and therefore
without need for libreadline
. The predicates
below allow for registering license requirements for Prolog files and
foreign modules. The predicate eval_license/0
reports which components from the currently configured system are
distributed under copy-left and open source enforcing licenses (the GPL)
and therefore must be replaced before distributing linked applications
under non-free license conditions.
GPL
license as well as which components prohibit
the use of other license conditions.libgcc
,
the GNU C runtime library facing similar technical issues.
As a special exception, if you link this library with other files, compiled with SWI-Prolog, to produce an executable, this library does not by itself cause the resulting executable to be covered by the GNU General Public License. This exception does not, however, invalidate any other reasons why the executable file might be covered by the GNU General Public License.
This should be the default for software contributed to the SWI-Prolog project as it allows the community to prosper both in the free and non-free world. Still, people using SWI-Prolog to create non-free applications must contribute sources to improvements they make to the community.
Other licenses known to the system are guile
, gnu_ada
,
x11
, expat
, sml
, public_domain
,
cryptix
, bsd
, zlib
, lgpl_compatible
and gpl_compatible
. New licenses can be defined by adding
clauses for the multifile predicate license:license/3. Below is an
example. The second argument is either gpl
or lgpl
to indicate compatibility with these licenses. Other values cause the
license to be interpreted as proprietary. Proprietary licenses
are reported by eval_license/0.
See the file boot/license.pl
for details.
:- multifile license:license/3. license:license(mylicense, lgpl, [ comment('My personal license'), url('http://www.mine.org/license.html') ]). :- license(mylicense).