# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

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

# GLEP 23
# https://wiki.gentoo.org/wiki/GLEP:23

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

# 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 AGPL-3+ Apache-2.0 Artistic-2 Boost-1.0 BSD BSD-2 CC0-1.0 CeCILL-2 Clarified-Artistic Clear-BSD ECL-2.0 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 HPND IJG 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++ libwebsockets metapackage MIT MPL-2.0 Nokia-Qt-LGPL-Exception-1.1 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 Transmission-OpenSSL-exception unicode Unlicense UoI-NCSA UPX-exception 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 CPAL-1.0 CPL-1.0 EPL-1.0 EUPL-1.1 gnuplot 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
# Note that the FSF lists these as nonfree: Artistic NOSA Watcom-1.0
OSI-APPROVED AFL-3.0 AGPL-3 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 ECL-2.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 OSL-2.1 PHP-3 PHP-3.01 POSTGRESQL PSF-2 QPL Sleepycat UoI-NCSA W3C Watcom-1.0 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.
# 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 ACE Allegro alternate bea.ri.jsr173 BEER-WARE boehm-gc BSD-1 BSD-with-attribution buddy bufexplorer.vim BZIP2 canfep CDDL-Schily CeCILL-C CLX CMake CPL-0.5 CRACKLIB Crypt-IDEA cryptopp czyborra DES docbook dom4j eGenixPublic-1.1 ElementTree Emacs ErlPL-1.1 FastCGI feh File-MMagic Flashpix FLEX flexmock FLTK freemarker FVWM gd gsm HTML-Tidy htmlc iASL IBPP-1.1 icu IDPL imagemagick Info-ZIP inner-net ipadic ipx-utils Ispell JasPer2.0 JDOM JNIC JOVE keynote LambdaMOO LIBGLOSS libmng libodialog libpng libtiff LLGPL-2.1 LPPL-1.3 LPPL-1.3b lsof Mail-Sendmail mapm-4.9.5 matplotlib Mini-XML minpack MIT-with-advertising mm mpich2 nap NCSA-HDF netcat NEWLIB ngrep noweb Old-MIT openafs-krb5-a Openwall otter PCRE perforce photopc PHP-2.02 PIZZA-WARE pngcrush pngnq Princeton psutils qmail-nelson rc regexp-UofT RSA rwpng scanlogd Sendmail Sendmail-Open-Source shrimp SMAIL Snd SNIA SSLeay Subversion SVFL tablelist tcltk tcp_wrappers_license TermReadKey TeX TeX-other-free Time-Format Time-modules tm-align totd UCAR-Unidata URT VTK w3m wxWinLL-3.1 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-2.5 CC-BY-3.0 CC-BY-4.0 CC-BY-SA-2.0 CC-BY-SA-2.5 CC-BY-SA-3.0 CC-BY-SA-4.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+ IPAfont 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-SA-1.0 LDP-1 LDP-1a man-pages man-pages-posix man-pages-posix-2013 MaxMind2 mplus-fonts myspell-en_CA-KevinAtkinson quake1-textures 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

# As proposed: https://archives.gentoo.org/gentoo-dev/message/6c950b46c50fe72ebc5e650bbf70f77c
# 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
# - IF (and only if) 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 atheros-hal bh-luxi Broadcom Dina hashcat intel-ucode ipw2100-fw ipw2200-fw ipw3945 MicroChip-SDCC no-source-code NVIDIA-r1 qlogic-fibre-channel-firmware radeon-ucode shmux SmartLabs sun-concurrent-util sun-jlfgr

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

# License agreements that try to take away your rights. These are more
# restrictive than "all-rights-reserved" or require explicit approval.
EULA Adaptec-EULA AdobeFlash-11.x ArxFatalis-EULA-JoWooD baudline BCS bf1942-lnxded CAPYBARA-EULA cadsoft Coherent-Graphics CROSSOVER CROSSOVER-2 CYANA DOOM3 ETQW FAH-EULA-2009 FAH-EULA-2014 FraunhoferFDK GameFront Gameplay-Group-EULA GIMPS GOG-EULA google-chrome googleearth Google-TOS IBM-J1.6 Intel-SDP Introversion LastPass LOKI-EULA LRCTF MakeMKV-EULA MARBLEBLAST Mendeley-terms MSjdbcEULA40 MTA-0.5 NVIDIA-CODEC-SDK NVIDIA-CUDA Nero-AAC-EULA Nero-EULA-US Oracle-BCLA-JavaSE PAPERS-PLEASE POMPOM postal2 Primate-Plunge PUEL Q3AEULA Q3AEULA-20000111 QUAKE4 Quartus-prime-megacore RTCW RTCW-ETEULA SCM-MICRO SJ-Labs skype-4.0.0.7-copyright spin-commercial spin-educational TeamViewer THINKTANKS UPEK-SDK-EULA ut2003 ut2003-demo Vivaldi

# Deprecated license labels, used by repoman
#DEPRECATED as-is

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