# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/license_groups,v 1.187 2013/02/07 23:12:14 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.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 CeCILL-2 Clarified-Artistic Clear-BSD 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 Nokia-Qt-LGPL-Exception 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.
# Note: Licenses for fonts should be included in @MISC-FREE-DOCS.
# TODO: maybe add a category for BSD-alike MISC-FREE licenses for easy
# separation?
# BSD-4 alikes: dom4j FastCGI icu JDOM
MISC-FREE Allegro alternate ANTLR bea.ri.jsr173 BEER-WARE boehm-gc BSD-1 BSD-with-attribution buddy bufexplorer.vim BZIP2 CDDL-Schily CeCILL-C CFS CMake CPL-0.5 CRACKLIB cryptopp czyborra DES docbook dom4j eGenixPublic-1.1 ElementTree Emacs ErlPL-1.1 FastCGI feh Flashpix FLEX flexmock FLTK freemarker FVWM gd gnuplot gsm HTML-Tidy htmlc iASL IBPP-1.1 icu IDPL IJG imagemagick Info-ZIP inner-net ipadic ipx-utils Ispell JasPer2.0 JDOM JNIC JOVE keynote LIBGLOSS libmng libodialog libpng libtiff LLGPL-2.1 LPPL-1.3 LPPL-1.3b lsof mapm-4.9.5 matplotlib md2k7-asyouwish minpack MIT-with-advertising mm mpich2 nap NCSA-HDF netcat NEWLIB ngrep noweb npm Old-MIT openafs-krb5-a OpenSoftware Openwall otter PCRE perforce photopc PHP-2.02 pngcrush pngnq Princeton psutils pysqlite qmail-nelson rc regexp-UofT RSA Scintilla Sendmail shrimp skype-4.0.0.7-third-party_attributions.txt SMAIL SNIA SSLeay Subversion SVFL tablelist tcltk tcp_wrappers_license TermReadKey TeX TeX-other-free Time-modules tm-align w3m wxWinLL-3 x2x xbatt xboing XC Xdebug xtrs xvt 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 CC-BY-2.0 CC-BY-SA-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+ ODbL-1.0 OFL OFL-1.1 OPL

# Misc licenses for free documents and other works (including fonts)
# that follow the definition at http://freedomdefined.org/ but are NOT
# listed in @FSF-APPROVED-OTHER.
MISC-FREE-DOCS BitstreamVera CC-PD CC-BY-2.5 CC-BY-3.0 CC-BY-SA-2.5 CC-BY-SA-3.0 CC-SA-1.0 LDP-1 LDP-1a man-pages man-pages-posix MaxMind2 mplus-fonts myspell-en_CA-KevinAtkinson Texinfo-manual UbuntuFontLicense-1.0 Unicode_Fonts_for_Ancient_Scripts vlgothic wxWinFDL-3

# Metaset for all free documents
FREE-DOCUMENTS @FSF-APPROVED-OTHER @MISC-FREE-DOCS

######################################################################

# 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 hashcat 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:
