For internal package names many packages have a pseudo namespacing scheme of prefixing commands with a (hopefully) unique prefix, so
longtable internals are all
tabularx internals are all
For packages using
expl3 conventions the internal prefixing is more formalised and there is a register of prefix names to avoid clashes.
At the top level you could do that (without the non-letter-separator) so
longtable has some lengths starting
\LT without an
\LTpre but mostly you just don't do that and "grab" some usefully short name.
There are usually fewer top level commands and it is easier to alias them:
if two packages define
\foo it is often (not always:-) enough to use something like
So that you have both functionalities available but under the names
Again the programming model underlying
expl3 tries to formalise this, the idea is that you have your functionality written using prefixed names and
expl3 syntax conventions but then one or more top level user interface commands can be defined using
xparse that call the underlying code, so if you need a different name you should at most have to change the
xparse declaration, all the main functionality should be in uniquely prefixed package code.