# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/license_groups,v 1.155 2012/12/18 06:15:06 vapier 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.gnu.org/licenses/license-list.html
# GPL or LGPL with various exceptions are also included here, because
# they are more permissive than the licenses they are based on.
GPL-COMPATIBLE AGPL-3 Apache-2.0 Artistic-2 Boost-1.0 BSD BSD-2 CC0-1.0-Universal CeCILL-2 Clarified-Artistic FTL gcc-runtime-library-exception-3.1 GPL-1 GPL-1+ GPL-2 GPL-2+ GPL-2-with-exceptions GPL-2-with-font-exception GPL-2-with-linking-exception GPL-2-with-MySQL-FLOSS-exception GPL-3 GPL-3+ GPL-3-with-font-exception ISC LGPL-2 LGPL-2+ LGPL-2-with-linking-exception LGPL-2.1 LGPL-2.1+ LGPL-2.1-with-linking-exception LGPL-3 LGPL-3+ LGPL-3-with-linking-exception libgcc libstdc++ metapackage MIT MPL-2.0 OPENLDAP PSF-2 PSF-2.2 PSF-2.3 PSF-2.4 public-domain PYTHON qwt Ruby Ruby-BSD SGI-B-2.0 Sleepycat tanuki-community unicode Unlicense UoI-NCSA vim W3C WTFPL-2 ZLIB ZPL

FSF-APPROVED @GPL-COMPATIBLE AFL-2.1 AFL-3.0 Apache-1.1 APSL-2 BitTorrent BSD-4 CDDL CNRI CPL-1.0 EPL-1.0 EUPL-1.1 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

# http://www.opensource.org/licenses
OSI-APPROVED AFL-3.0 AGPL-3 Apache-1.1 Apache-2.0 APL-1.0 APSL-2 Artistic Artistic-2 Boost-1.0 BSD BSD-2 CDDL CNRI CPAL-1.0 CPL-1.0 EPL-1.0 EUPL-1.1 GPL-1+ GPL-2 GPL-2+ GPL-3 GPL-3+ HPND IBM IPAfont ISC LGPL-2+ LGPL-2.1 LGPL-2.1+ LGPL-3 LGPL-3+ LPPL-1.3c MIT MPL-1.0 MPL-1.1 MPL-2.0 Ms-PL nethack NOSA OFL-1.1 PHP-3 PHP-3.01 POSTGRESQL PSF-2 QPL Sleepycat W3C wxWinLL-3 wxWinLL-3.1 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.
# Licenses in this list should NOT appear directly or indirectly in @FSF-APPROVED or @OSI-APPROVED
# TODO: maybe add a category for BSD-alike MISC-FREE licenses for easy seperation?
# BSD-4 alikes: dom4j FastCGI icu jaxen JDOM saxpath
MISC-FREE Allegro ANTLR as-is bea.ri.jsr173 BEER-WARE boehm-gc BSD-1 BSD-with-attribution BZIP2 CDDL-Schily CeCILL-C CMake CPL-0.5 CRACKLIB cryptopp czyborra docbook dom4j eGenixPublic-1.1 ElementTree Emacs ErlPL-1.1 FastCGI FLEX FLTK freemarker FVWM gnuplot gsm HTML-Tidy htmlc iASL IBPP-1.1 icu IDPL IJG imagemagick Info-ZIP ipadic Ispell JasPer2.0 jaxen JDOM JNIC JOVE libmng libpng libtiff LLGPL-2.1 LPPL-1.3 LPPL-1.3b lsof matplotlib md2k7-asyouwish mplus-fonts NCSA-HDF noweb openafs-krb5-a OpenSoftware otter perforce PHP-2.02 Princeton psutils pysqlite rc regexp-UofT RSA saxpath Scintilla Sendmail skype-4.0.0.7-third-party_attributions.txt SMAIL SNIA SSLeay Subversion SVFL tcltk tcp_wrappers_license TeX TeX-other-free UbuntuFontLicense-1.0 vlgothic w3m wxWinLL-3 Xdebug xtrs YaTeX zpaq ZSH
# The following are NOT valid in @MISC-FREE:
# arj - usage restrictions
# freedist - Doesn't grant the right to do modifications.
# lha - restrictions on distribution, doesn't grant the right to do modifications.

# 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.1+ FDL-1.2 FDL-1.2+ FDL-1.3 FDL-1.3+ FreeArt GPL-1 GPL-1+ GPL-2 GPL-2+ GPL-3 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-2.5 CCPL-Attribution-3.0 CCPL-Attribution-ShareAlike-2.5 CCPL-Attribution-ShareAlike-3.0 CCPL-ShareAlike-1.0 LDP-1 LDP-1a man-pages man-pages-posix MaxMind2 myspell-en_CA-KevinAtkinson Texinfo-manual wxWinFDL-3

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

EULA AdobeFlash-10.3 BCS Broadcom cadsoft DOOM3 ETQW FraunhoferFDK google-chrome googleearth Google-TOS IBM-J1.5 IBM-J1.6 Intel-SDP Introversion Livestation-EULA LOKI-EULA LRCTF MakeMKV-EULA MARBLEBLAST Mendeley-EULA MSjdbcEULA40 Nero-AAC-EULA Nero-EULA-US Oracle-BCLA-JavaSE POMPOM postal2 PUEL Q3AEULA QUAKE4 RTCW RTCW-ETEULA SCM-MICRO skype-eula skype-4.0.0.7-copyright spin-commercial spin-educational sun-bcla-java-vm THINKTANKS UPEK-SDK-EULA 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 adobe-ps atheros-hal intel-psb intel-ucode ipw2100-fw ipw2200-fw ipw3945 libertas-fw NVIDIA qlogic-fibre-channel-firmware radeon-ucode ralink-firmware SmartLabs

# Deprecated license labels, used by repoman
# as-is: see note in licenses/as-is and bug 436214
DEPRECATED as-is

# Local Variables:
# mode: conf-space
# mode: visual-line
# End:
