Given the above, it is possible that SWI-Prolog packages and
extensions will rely on the GPL.91On
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 commandline and therefore without
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 currenly 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.
GPLlicense 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
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
to indicate compatibility to these licenses. Other values cause the
license to 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).