As all users of GCC will know, SCO has recently made claims concerning
alleged copyright infringement by recent versions of the operating
system kernel called Linux.  SCO has made irresponsible public
statements about this supposed copyright infringement without
releasing any evidence of the infringement, and has demanded that
users of Linux, the kernel most often used with the GNU system, pay
for a license.  This license is incompatible with the GPL, and in the
opinion of the Free Software Foundation such a demand unquestionably
violates the GNU General Public License under which the kernel is
distributed.

We have been urged to drop support for SCO Unix from this release of
GCC, as a protest against this irresponsible aggression against free
software and GNU/Linux.  However, the direct effect of this action
would fall on users of GCC rather than on SCO.  For the moment, we
have decided not to take that action.  The Free Software Foundation's
overriding goal is to protect the freedom of the free software
community, including developers and users, but we also want to serve
users.  Protecting the community from an attack sometimes requires
steps that will inconvenience some in the community.  Such a step is
not yet necessary, in our view, but we cannot indefinitely continue to
ignore the aggression against our community taken by a party that has
long profited from the commercial distribution of our programs.  We
urge users of SCO Unix to make clear to SCO their disapproval of the
company's aggression against the free software community.  We will
have a further announcement concerning continuing support of SCO Unix
by GCC before our next release.
