.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) .\" .\" 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 turned on, 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 "Alt 3pm" .TH Alt 3pm "2014-07-31" "perl v5.18.2" "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" Alt \- Alternate Module Implementations .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& cpanm Alt::IO::All::crackfueled .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\f(CW\*(C`Alt::\*(C'\fR is the namespace for alternate implementations of \s-1CPAN\s0 modules. .PP The purpose of the Alt module is to provide documentation explaining the Alt concept, how it works, and guidelines for using it well. .SH "THE PROBLEM" .IX Header "THE PROBLEM" For a given piece of software, \s-1CPAN\s0 only allows for one implementation of a given module/distribution name. .PP GitHub on the other hand, is not limited this way. Any author can make a fork, since GitHub repos are namespaced by author id. .PP On \s-1CPAN,\s0 even the author(s) of the module in question is limited by this, as they cannot release newer or older forks of their code, without introducing a new name. .SH "THE SOLUTION" .IX Header "THE SOLUTION" A module \f(CW\*(C`Foo::Bar\*(C'\fR is distributed on \s-1CPAN\s0 as \f(CW\*(C`Foo\-Bar\*(C'\fR. It may have submodules like \f(CW\*(C`Foo::Bar::Baz\*(C'\fR. .PP To make an alternate \s-1CPAN\s0 version, leave everything exactly the same, except distribute the new version as \f(CW\*(C`Alt\-Foo\-Bar\-AltIdentifier\*(C'\fR. .PP When a user installs your module like so: .PP .Vb 1 \& cpanm Alt::Foo::Bar::better .Ve .PP they will get your version of the Foo::Bar framework (Foo::Bar, Foo::Bar::Baz). .PP Obviously, this completely overlays the old Foo::Bar install, but that's the whole idea. The user isn't surprised by this because they just asked for an \&\fBAlt\fRernate implementation. If they don't like it, they can simply reinstall the original Foo-Bar, or try some other alternate. .SH "WHENCE ALT?" .IX Header "WHENCE ALT?" The Alt\- concept was thought up by Ingy as he tried to figure out how to revamp the somewhat popular IO::All and \s-1YAML\s0.pm modules. Alternates can now be released and alpha/beta tested, while the originals remain stable. .PP When Alt-IO-All-new is \*(L"community approved\*(R" it can replace IO-All. If people want the old code, they can can install Alt-IO-All-old. .SH "GUIDELINES" .IX Header "GUIDELINES" This idea is new, and the details should be sorted out through proper discussions. Pull requests welcome. .PP Here are the basic guidelines for using the Alt namespace: .IP "Name Creation" 4 .IX Item "Name Creation" Names for alternate modules should be minted like this: .Sp .Vb 1 \& "Alt\-$Original_Dist_Name\-$phrase" .Ve .Sp For instance, if \s-1MSTROUT\s0 wants to make an alternate IO-All distribution to make it even more crack fueled, he might call it: .Sp .Vb 1 \& Alt\-IO\-All\-crackfueled .Ve .Sp He might also just call it: .Sp .Vb 1 \& Alt\-IO\-All\-MSTROUT .Ve .Sp By having 'Alt' at the start, it guarantees that it does not mess with future IO::All development. The \*(L"phrase\*(R" at the end can be anything unique to \s-1CPAN,\s0 but should describe the spirit of the alternate. If the alternate is meant to be short-lived, it can just be the author's \s-1CPAN\s0 id. .IP "Module for \s-1CPAN\s0 Indexing" 4 .IX Item "Module for CPAN Indexing" You will need to provide a module like \f(CW\*(C`Alt::IO::All::MSTROUT\*(C'\fR so that \&\s-1CPAN\s0 will index something that can cause your distribution to get installed by people: .Sp .Vb 1 \& cpanm Alt::IO::All::MSTROUT .Ve .Sp Since you are adding this module, you should add some doc to it explaining your Alternate version's improvements. .IP "Versioning" 4 .IX Item "Versioning" The \s-1VERSION\s0 of the module you are providing an alternate version of should be the same as the original module at the time you release the alternate. This will make it play well with others. .Sp To use the IO::All example, if \s-1MSTROUT\s0 releases Alt-IO-All-MSTROUT when IO::All is at version '0.46', his IO::All module should have \s-1VERSION\s0 = '0.46', but his Alt::IO::All::MSTROUT could be \s-1VERSION \s0'0.000005'. This should make the dist be Alt\-IO\-All\-MSTROUT\-0.000005. .Sp If another module wants his version of IO::All, it should list Alt::IO::All::MSTROUT 0.000005 as a prereq, and then \f(CW\*(C`use IO::All 0.46;\*(C'\fR in the code. .IP "no_index" 4 .IX Item "no_index" It is important to use the \f(CW\*(C`no_index\*(C'\fR directive on the modules you are providing an alternative to. This is especially important if you are the author of the original, as \s-1PAUSE\s0 will reindex \s-1CPAN\s0 to your Alt\- version which defeats the purpose. Even if you are not the same author, it will make your index reports not show failures. .IP "Other Concerns" 4 .IX Item "Other Concerns" If you have em, I(ngy) would like to know them. Discuss on #toolchain on irc.perl.org for now. .SH "AUTHOR" .IX Header "AUTHOR" Ingy do\*:t Net .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright 2012\-2014. Ingy do\*:t Net. .PP See