.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Software::License::OrLaterPack 3pm" .TH Software::License::OrLaterPack 3pm "2021-01-18" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Software::License::OrLaterPack \- Use GNU license with "or later" clause .SH "VERSION" .IX Header "VERSION" Version v0.10.2, released on 2016\-10\-10 22:17 \s-1UTC.\s0 .SH "WHAT?" .IX Header "WHAT?" \&\f(CW\*(C`Software\-License\-OrLaterPack\*(C'\fR (or just \f(CW\*(C`OrLaterPack\*(C'\fR for brevity) is an add-on for \f(CW\*(C`Software\-License\*(C'\fR, a set of licenses with \*(L"or later\*(R" clause (like \f(CW\*(C`GPL_3::or_later\*(C'\fR). It allows Perl developers (who use \&\f(CW\*(C`Dist\-Zilla\*(C'\fR) to release their work under the terms of a \fILicense\fR version \fIN\fR or (at user option) any later version. .PP This is \f(CW\*(C`OrLaterPack\*(C'\fR user manual. Read this if you want to use \s-1GNU\s0 license with \*(L"or later\*(R" clause. .PP If you are going to hack or extend \f(CW\*(C`OrLaterPack\*(C'\fR read module documentation, e. g. Software::License::GPL_3::or_later. General topics like getting source, building, installing, bug reporting and some others are covered in the \fI\s-1README\s0\fR file. .SH "SYNOPSIS" .IX Header "SYNOPSIS" .SH "DESCRIPTION" .IX Header "DESCRIPTION" All \*(L"or later\*(R" are just subclasses of corresponding base license classes. For example, \&\f(CW\*(C`Software::License::GPL_3::or_later\*(C'\fR is a subclass of \f(CW\*(C`Software::License::GPL_3\*(C'\fR, so any \*(L"or later\*(R" license can be used like any other license. For example, in your \fIdist.ini\fR file: .PP .Vb 1 \& license = GPL_3::or_later .Ve .PP However, licenses in the pack introduce few features not found in base classes. .SS "Program Name" .IX Subsection "Program Name" \&\f(CW\*(C`Software::License\*(C'\fR constructor accepts hashref as the only argument: .PP .Vb 4 \& $lic = Software::License::GPL_3::or_later\->new( { \& holder => \*(AqJohn Doe\*(Aq, \& year => \*(Aq2010\*(Aq, \& } ); .Ve .PP \&\f(CW\*(C`Software::License\*(C'\fR documents two keys \f(CW\*(C`holder\*(C'\fR and \f(CW\*(C`year\*(C'\fR shown in example. However, \&\f(CW\*(C`Software::License\*(C'\fR constructor just (re)blesses passed hashref to the package, keeping all the hash keys and values intact, so you can pass more arguments to the constructor. .PP \&\f(CW\*(C`OrLaterPack\*(C'\fR licenses use two more keys \f(CW\*(C`program\*(C'\fR and \f(CW\*(C`Program\*(C'\fR: .PP .Vb 6 \& $lic = Software::License::GPL_3::or_later\->new( { \& holder => \*(AqJohn Doe\*(Aq, \& year => \*(Aq2010\*(Aq, \& program => \*(Aqassa\*(Aq, \& Program => \*(AqAssa\*(Aq, \& } ); .Ve .PP These values are used as program name instead of generic \*(L"this program\*(R" in license notice, for example: .PP .Vb 1 \& Assa is free software: you can redistribute it and/or modify itX .Ve .PP \&\f(CW\*(C`program\*(C'\fR key is used in the middle of sentence, \f(CW\*(C`Program\*(C'\fR is used if program name starts a sentence. You may specify either one or both keys. If only one key specified, it is used in all the occurrences regardless of its position within a sentence. .PP Note: At time of writing, these keys are used only by licenses from \f(CW\*(C`OrLaterPack\*(C'\fR. You can safely pass them to constructor of any license, it does not hurt but keys will not be used. .PP When using \f(CW\*(C`Dist::Zilla\*(C'\fR you just specify few options, and \f(CW\*(C`Dist::Zilla\*(C'\fR does all the work on behalf of you: .PP .Vb 4 \& name = Assa \& license = GPL_3::or_later \& copyright_holder = John Doe \& copyright_year = 2010 .Ve .PP Program name is specified, but \f(CW\*(C`Dist::Zilla\*(C'\fR does not pass it to license object constructor. Patch for \f(CW\*(C`Dist::Zilla\*(C'\fR submitted but not yet applied. Meanwhile, you can hack it with little help from \&\f(CW\*(C`Hook\*(C'\fR plugin: .PP .Vb 8 \& name = Assa \& license = GPL_3::or_later \& copyright_holder = John Doe \& copyright_year = 2010 \& [Hook::Init] \& . = $dist\->license\->{ program } = $dist\->name; \& ; Voila\*`: license has \`program\` key now. \& ... .Ve .PP For accessing these keys, \f(CW\*(C`OrLaterPack\*(C'\fR introduced two methods: \f(CW\*(C`program\*(C'\fR and \f(CW\*(C`Program\*(C'\fR. They are convenient because you should not worry if the key was specified or not: a method returns best available variant of program name. For example, if \f(CW\*(C`program\*(C'\fR key was not passed to the constructor, \f(CW\*(C`$self\->{ program }\*(C'\fR will return \f(CW\*(C`undef\*(C'\fR, while \f(CW\*(C`$self\->program\*(C'\fR will return value of \f(CW\*(C`Program\*(C'\fR key, if it was specified, or \*(L"this program\*(R" as the last resort. However, these methods are not defined in base class and can be invoked only on a license from \&\f(CW\*(C`OrLaterPack\*(C'\fR. .SS "Short License Notice" .IX Subsection "Short License Notice" Standard \s-1GNU\s0 license notice consists of 3 paragraphs (more than 100 words and 600 characters). It is ok for the program documentation, but it far too long to be printed in the beginning of interactive session. For latter purpose \s-1FSF\s0 recommends to use short notice like this one: .PP .Vb 4 \& Copyright (C) 2010 John Doe \& License GPLv3+: GNU General Public License version 3 or later. \& This is free software: you are free to change and redistribute it. \& There is NO WARRANTY, to the extent permitted by law. .Ve .PP To get short license notice, pass \f(CW\*(Aqshort\*(Aq\fR argument to the \f(CW\*(C`notice\*(C'\fR method: .PP .Vb 1 \& $lic\->notice( \*(Aqshort\*(Aq ); .Ve .PP At time of writing, \f(CW\*(Aqshort\*(Aq\fR argument is respected only by licenses in \f(CW\*(C`orLaterPack\*(C'\fR. Other licenses ignore the arguments and return ordinary license note. .PP Note: This feature is considered experimental now. .SH "WHY?" .IX Header "WHY?" \&\f(CW\*(C`Dist\-Zilla\*(C'\fR is a popular tool for building \s-1CPAN\s0 distributions. Build process is controlled by \&\fIdist.ini\fR, \f(CW\*(C`Dist\-Zilla\*(C'\fR configuration file. A distribution author can specify license covering his work by using \f(CW\*(C`license\*(C'\fR option in \fIdist.ini\fR file: .PP .Vb 1 \& license = NAME .Ve .PP where \fI\s-1NAME\s0\fR is a name of module from Software::License hierarchy. .PP \&\f(CW\*(C`Software\-License\*(C'\fR is shipped with a set of popular licenses, from \f(CW\*(C`Apache_1_1\*(C'\fR to \f(CW\*(C`Zlib\*(C'\fR, including \s-1GNU\s0 licenses (\s-1GPL\s0), including their \*(L"Affero\*(R" and \*(L"Lesser\*(R" variants. .PP So, if a developer wants to release his work under the terms of the \s-1GPL\s0 version 3, he should write in his \fIdist.ini\fR: .PP .Vb 1 \& license = GPL_3 .Ve .PP However, Free Software Foundation recommends using clause "license version \fIN\fR or (at your option) any later version" . Unfortunately, \f(CW\*(C`Software\-License\*(C'\fR distribution does not supply (out of the box) a way to express such clause. .PP \&\f(CW\*(C`OrLaterPack\*(C'\fR fulfills the lack. If \f(CW\*(C`OrLaterPack\*(C'\fR is installed, a developer can specify in his \&\fIdist.ini\fR: .PP .Vb 1 \& license = GPL_3::or_later .Ve .PP In \f(CW\*(C`dist.ini\*(C'\fR: .PP .Vb 8 \& name = Foo\-Bar \& version = 0.001 \& author = John Doe \& license = GPL_3::or_later \& ; or another license, see the list of provided licenses \& copyright_holder = John Doe \& copyright_year = 2015 \& X .Ve .PP Direct usage: .PP .Vb 10 \& use Software::License::GPL_3::or_later; \& # or another license, see the list of provided licenses \& my $lic = Software::License::GPL_3::or_later\->new( { \& holder => \*(AqJohn Doe\*(Aq, \& year => \*(Aq2010\*(Aq, \& program => \*(AqAssa\*(Aq, \& } ); \& $lic\->abbr; # returns \*(AqGPLv3+\*(Aq \& $lic\->notice; # Copyright statement and 3\-paragraph GNU license notice \& X .Ve .SH "LIST OF PROVIDED LICENSES" .IX Header "LIST OF PROVIDED LICENSES" .IP "Software::License::AGPL_3::or_later" 4 .IX Item "Software::License::AGPL_3::or_later" .PD 0 .IP "Software::License::GPL_1::or_later" 4 .IX Item "Software::License::GPL_1::or_later" .IP "Software::License::GPL_2::or_later" 4 .IX Item "Software::License::GPL_2::or_later" .IP "Software::License::GPL_3::or_later" 4 .IX Item "Software::License::GPL_3::or_later" .IP "Software::License::LGPL_2_1::or_later" 4 .IX Item "Software::License::LGPL_2_1::or_later" .IP "Software::License::LGPL_3_0::or_later" 4 .IX Item "Software::License::LGPL_3_0::or_later" .PD .SH "CAVEATS" .IX Header "CAVEATS" CPAN::Meta::Spec hardcodes the list of \*(L"valid\*(R" licenses. In version 2.150001 of the module there are no \*(L"upgradable\*(R" \s-1GNU\s0 licenses, so in \s-1CPAN\s0 the GPLv3+ will look as ordinal GPLv3 (\f(CW\*(C`gpl_3\*(C'\fR), and so on. .SH "SEE ALSO" .IX Header "SEE ALSO" .IP "Dist::Zilla" 4 .IX Item "Dist::Zilla" .PD 0 .IP "Dist::Zilla::Plugin::Hook" 4 .IX Item "Dist::Zilla::Plugin::Hook" .IP "Software::License" 4 .IX Item "Software::License" .IP "Why should programs say XVersion 3 of the \s-1GPL\s0 or any later versionX? " 4 .IX Item "Why should programs say XVersion 3 of the GPL or any later versionX? " .PD .SH "AUTHOR" .IX Header "AUTHOR" Van de Bugger .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (C) 2015 Van de Bugger .PP License GPLv3+: The \s-1GNU\s0 General Public License version 3 or later . .PP This is free software: you are free to change and redistribute it. There is \&\s-1NO WARRANTY,\s0 to the extent permitted by law.