Spurred by some of the recent discussion threads, I started writing
the below.  But then I stopped: don't we already have something like
the below already, in several places, and that hasn't helped much...
I have little idea where to put this, if anywhere.

--- 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.

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.

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 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 interface is in text, please don't.

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

        All lowercase names 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