I'm in the midst of moving, so I haven't yet had a chance to read
Zooko's Triangle. I do have time this morning to comment on one
thread, without meaning to imply that I'm not paying attention to the
other ideas.
In "module naming"
(http://lists.gnu.org/archive/html/guile-devel/2001-04/msg00285.html),
Neil Van Dyke writes:
> We *might* also socially consider that hypothetical Apache team to
> have "ownership" of the `(apache)' namespace, such that it would
> be understood that other people probably shouldn't be naming modules
> `(apache ...)' without approval from the team, unless the team already
> gave blanket approval for anyone to add modules into that namespace.
Alex Shinn writes:
> For a centralized naming authority, we'd setup some sort of
> registration system at a server like schemers.org, and delegate module
> namespaces to separate "entities," either organizations or individual
> authors, presumably identified uniquely by a public key. This is
> complicated, rigid and doesn't scale well.
OK, let's not do that. :-)
Are you familiar with CPAN (http://cpan.org, the Comprehensive Perl
Archive Network)?
CPAN is ten years old, so I'm sure that CPAN has made mistakes that we
could learn from.
Various adjectives (not all complementary...) come to my mind when I
think of CPAN.
"Rigid", however, is not one of them.
In CPAN, if you write a module that interactions with, controls,
tests, analyzes, works with, improves, extends, or otherwise has
something to do with Apache, you can put your module in the "Apache::"
namespace.
Control over the "Apache::" namespace is not delegated to a separate entity.
I haven't thought about what a schemers.org library registry might
look like in any kind of detail, but what I had in mind was along
these lines. (If we use a flatter namespace as Neil recommends,
replace all "web-server:apache" with "apache" in the following
description).
One person would be able to register their open source library as
"web-server:apache:foo", someone else could use
"web-server:apache:bar", and a third person could use
"web-server:apache:baz".
Now, once you have a universal identifier, you and only you may create
additional symbols with that particular name using the double colon
extension mechanism in the current specification.
For example, suppose Apache was written in Scheme, and the Apache
webserver itself had the schemers.org name of "web-server:apache".
Using the extension mechanism in the current specification, various
parts of the server could be named such things as
"web-server:apache::front-end", "web-server:apache::internals", or
whatever.
Only the Apache team could name things like that.
However this would not give the Apache team control over the
"web-server:apache" namespace.
Other people can still use "web-server:apache:foo",
"web-server:apache:turbo-charge", "web-server:apache:hate", or
whatever.
But once you had "web-server:apache:foo", you and only you (or people
you delegated your authority to...) could name things such as
"web-server:apache:foo::abc".
Andrew