# Copyright 2007-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/license_groups,v 1.39 2010/02/26 11:16:54 ulm Exp $

# Please report bugs or other requests at bugs.gentoo.org and assign to
# licenses@gentoo.org

# GLEP-0023
# http://www.gentoo.org/proj/en/glep/glep-0023.html

# http://www.fsf.org/licensing/licenses/
GPL-COMPATIBLE AGPL-3 Apache-2.0 Artistic-2 as-is Boost-1.0 BSD BSD-2 CeCILL-2 DB FTL GPL-1 GPL-2 GPL-2-with-font-exception GPL-2-with-Linden-Lab-FLOSS-exception GPL-2-with-MySQL-FLOSS-exception GPL-3 GPL-3-with-font-exception ISC LGPL-2 LGPL-2.1 LGPL-3 MIT OPENLDAP OracleDB PSF-2.2 PSF-2.3 PSF-2.4 public-domain PYTHON Ruby SGI-B-2.0 unicode UoI-NCSA vim W3C WTFPL-2 ZLIB ZPL

FSF-APPROVED @GPL-COMPATIBLE AFL-2.0 AFL-2.1 AFL-3.0 Apache-1.1 APSL-2 BitTorrent BSD-4 CDDL CPL-1.0 EPL-1.0 IBM LPPL-1.2 MPL-1.0 MPL-1.1 Ms-PL NPL-1.1 openssl OSL-1.1 OSL-2.0 OSL-2.1 PHP-3.01 QPL QPL-1.0 SPL

# http://www.opensource.org/licenses
OSI-APPROVED AFL-3.0 Apache-2.0 APL-1.0 Artistic Artistic-2 Boost-1.0 BSD BSD-2 CDDL CPL-1.0 EPL EPL-1.0 GPL-2 GPL-3 IBM ISC LGPL-2.1 LGPL-3 MIT MPL-1.1 Ms-PL nethack OGTSL PHP PSF-2.2 PSF-2.3 PSF-2.4 PYTHON QPL SPL wxWinLL-3 ZLIB ZPL

# Misc licenses that are probably free software, i.e. follow the
# Free Software Definition at http://www.gnu.org/philosophy/free-sw.html
# but are not approved by either FSF or OSI. Preferably on the long
# term these should be cleared up and moved to other sets.
MISC-FREE ANTLR BEER-WARE BZIP2 CDDL-Schily CMake CRACKLIB cryptopp eGenixPublic-1.1 ElementTree Emacs FLEX FLTK FVWM gnuplot GPL-2-with-exceptions GPL-2-with-linking-exception gsm iASL IDPL imagemagick Info-ZIP JamesClark JNIC LLGPL-2.1 LPPL-1.3 LPPL-1.3c lsof MaxMind No-Problem-Bugroff OpenSoftware otter PBZIP2 PDFLite PHP-3 POSTGRESQL Princeton pysqlite RSA-MD4 RSA-MD5 Scintilla Sendmail SMAIL Subversion tcp_wrappers_license TeX w3m wxWinLL-3 Xdebug ZSH

# Metaset for all free software
FREE-SOFTWARE @FSF-APPROVED @OSI-APPROVED @MISC-FREE

# FSF-approved licenses for "free documentation" and "works of
# practical use besides software and documentation" (including fonts)
FSF-APPROVED-OTHER Arphic CCPL-Attribution-2.0 CCPL-Attribution-ShareAlike-2.0 DSL FDL-1.1 FDL-1.2 FDL-1.3 FreeArt GPL-1 GPL-2 GPL-3 OFL OFL-1.1 OPL

# Licenses for free documents, following the definition at
# http://freedomdefined.org/
FREE-DOCUMENTS @FSF-APPROVED-OTHER BitstreamVera CC-PD CCPL-Attribution-3.0 CCPL-Attribution-ShareAlike-2.5 CCPL-Attribution-ShareAlike-3.0 LDP-1 LDP-1a man-pages-posix myspell-en_CA-KevinAtkinson

# Collection of all licenses with the freedom to use, share, modify
# and share modifications
FREE @FREE-SOFTWARE @FREE-DOCUMENTS

EULA BCS Broadcom cadsoft dlj-1.1 DOOM3 ETQW IBM-J1.5 IBM-J1.6 Introversion jrockit Livestation-EULA LOKI-EULA LRCTF MARBLEBLAST Nero-EULA-US Pando-EULA POMPOM postal2 PUEL Q3AEULA QUAKE4 RTCW RTCW-ETEULA skype-eula sun-bcla-java-vm sun-prerelease-jdk6 sun-prerelease-jdk7 THINKTANKS ut2003 ut2003-demo

# As proposed: http://archives.gentoo.org/gentoo-dev/msg_6c950b46c50fe72ebc5e650bbf70f77c.xml
# Excerpt of the rules for this license group:
# - MUST permit redistribution in binary form.
# - MUST NOT require explicit approval (No items from @EULA)
# - MUST NOT restrict the cost of redistribution.
# - MAY require explicit inclusion of the license with
#   the distribution [1]
# - IFF there is an explicit inclusion requirement, USE=bindist
#   MUST cause a copy of the license to be installed in a file
#   location compliant with the license,
BINARY-REDISTRIBUTABLE @FREE Adaptec adobe-ps atheros-hal intel-psb ipw2100-fw ipw2200-fw NVIDIA qlogic-fibre-channel-firmware ralink-firmware
