Here's a slightly enhanced version.  Maybe we (and here I think I mean
*someone else than me* :-) could annotate this a little bit with more
real-life examples of bad suggestions from the past (maybe changed to
protect the still living people...)

[ --- cut here --- ]

First and foremost: you are naming your module so that people
can find your module.  It's as easy - and as difficult - as that.

Suggest two-level namespaces only.  You can use deeper namespaces
than that internally in your module, of course, but for namespace
registration, only speak in two level namespaces.

        An exception to this are frameworks and/or well-documented
        practices, where the framework is the two-level top-level
        namespace, and (for example) user contributed namespaces
        are "attached" below that, leading into three- or four-
        level namepaces.  The naming rules and other administration
        of such namespaces are mostly outside this document and the
        modules list, though the many of the below rules are probably
        still applicable.

If you are thinking of introducing a new top-level namespace,
think carefully.  Does your module really not fit under any
existing category?  Suggesting new top-level namespaces is
likely to be met with great suspicion.

        Even though the module naming is in practice a first-come
        first-served process, it is quite impolite to grab top-level
        names.  Yes, even if your project/product is named with
        just a single word, please think of people trying to find
        something that would help them in their problems.  Unless
        they know of your project/product, they might not ever find
        your module.

Use as specific descriptive nouns, and even preferably, verbs, as
possible as the components of your names.  Describe the function,
not the implementation.  Avoid vague or generic words.

Remember that though you may be the first to contribute to a namespace,
you may well not be the last or the only one.  Someone might later want
to use the namespace, for something unrelated to your modules.

Stay away from qualitative (advertising) adjectives like "Fast" or
"Small", or even worse, "Super", "Hyper" and its kind.  All these are
relative virtues, and as modules develop and new modules are
introduced, also volatile and transient virtues.  You are hoping that
other programmers would use your module, and they are as suspicious
and weary of hypewords as you are.

Do not embed the implementation or interface of the module to your
module name (Foo::XS, Foo::OO).  The user shouldn't care.  Instead,
make your module clever enough to choose dynamically between
implementations and interfaces.

        We have unfortunately quite many "Object" or "OO", "XS"
        or "PL", and "Tk" or "Gtk" examples.

Co-operate.  If your module would work as a patch to an existing
module, contact the author of that module and suggest this
possibility.  Be polite.  Document your changes carefully
and supply good tests.  Also, this way you can get someone else
maintaining your code.

If you are thinking of a funny cutesy ha-ha name, please reconsider.
Trust us, the joke will feel much less funny in a month.  Note that
there is nothing wrong with recreational programming, and if you want
to show off some sort of clever trick, please use the "Acme::"
top-level hierarchy.

Do try to stay away from acronyms unless they are really widely
known (standards or de facto standards, like HTML).  Unless people
are familiar with your acronym, they will never look at your module.

If you are thinking of a module name containing a trademark,
please don't, unless you are working for the owner of the trademark.
You don't like getting phone calls from lawyers, neither do we.

        Trademark owners do have priority over deciding what
        gets published under categories named after the trademarks.
        If you were a company owning the trademark FooWare, wouldn't
        you have an interest in someone unrelated you releasing
        FooWare::Ping?  The FooWare::Ping might be either unrelated
        to your FooWare, or related but a really badly written module,
        or simply you do no want anyone thinking your company is
        responsible for the module, or someone might be trying
        to make a joke out of trademark.

        Yes, this had happened.

You don't work for the owner of the trademark but you got
a verbal/email okay from some in the company?  Sorry, that's not
enough.  Get it in writing from their lawyers, get the writing
checked by a lawyer familiar with trademarking issues.

You work for a company and you are thinking of releasing a module
somehow related to your company's product?  That's excellent, but
please check with your manager, and preferably with your lawyers.
Are you really supposed to release that software publicly?

        We have had this happening: someone working for a company
        released a module he wasn't suppposed to, and then left
        the company.  The company did learn of this and got
        a little bit huffy-- but luckily in this case the person
        was found, and they settled amicably.

Top-level names to stay away from: Devel, Sys, Text, unicore,
names all in lowercase.

        Devel is mainly meant for modules to do with
        low-level debugging of/inside Perl itself.
        It does not stand for "development" or "developer"
        in general.

        Sys is a complete disaster.  Adding Sys:: in front
        of something is completely redundant.  We are sorry
        it ever got used.  Yes, we know there's Sys::Syslog
        in the core, and we are we ashamed because of it.

        Text is most often very low in information, too.
        If your module is working with a natural language
        or languages, use "Lingua::".  "Text::" is fine
        if your module is dealing with formatting of text,
        for example.  If you are thinking of using "Text"
        because your data is "text", please don't.

        Unicore/unicore is reserved for the use of the Perl
        core for Unicode things.

        All names consisting only of lowercase letters are reserved
        for the use of the core Perl language.


-- 
$jhi++; # http://www.iki.fi/jhi/
        # There is this special biologist word we use for 'stable'.
        # It is 'dead'. -- Jack Cohen

Reply via email to