Petname System Andrew Wilcox (18 Mar 2006 20:54 UTC)
Re: Petname System ludovic.courtes@xxxxxx (20 Mar 2006 09:02 UTC)
Re: Petname System Ray Blaak (20 Mar 2006 17:47 UTC)

Petname System Andrew Wilcox 18 Mar 2006 20:54 UTC

My apologies for having been absent for over a month and a half!  Yow.
 First I moved, then work caught up with me, and then I fell into a
deep winter hibernation.

My thanks to Tom Lord for his insightful comments and to Tony
Garnock-Jones for posting the references to the Petname System and
Zooko's Triangle.

It took me a while to read and absorb the material.  Now that I have,
I find the arguments of Petname system quite compelling and a great
improvement over my current proposal.

While I encourage everyone to read the article, to briefly recap:

In the Petname system, the "nickname" of something is the public,
published, human readable name: "PLT Scheme", "SLIB", "Andrew Wilcox",
"Spiffy web server".

Search engines such as Google often do a good job of letting you type
in a nickname and finding the things that have that name.

Nicknames are not unique: lots of people have the name "Andrew Wilcox".

Nicknames are not secure: anyone can publish a name that might be
confused with "Andrew Wilcox" and thus leave you open to phrishing
attacks:  "Andrew Wi1cox".

Something can have multiple nicknames: "Spiffy web server", "Spiffy",
"Spiffy Egg".

Nicknames can even be misspelled.  I type in "Spify web server" and
Google says, "did you mean 'Spiffy web server'?"

The "petname" is the unqiue name that I personally give to something.
I am free to choose whatever name I wish.  I might choose "slib", or
"scheme-slib", or "jaffer-slib", or "the-standard-scheme-slib".
Whatever name that makes sense to me and disambiguates the SLIB
library from anything else in my life that I'm working with that might
also me called "slib".

The "key" is a cryptographically secure, unique, unforgable, computer
readable identifier.  At any one time, the petnames in my personal
system refer to one and only one key, and no key has more than one

An essential feature of the petname system is that the correspondence
between keys and petnames is *bidirectional*.  Whenever information is
displayed that has an item with a key corresponding to one of your
personal petnames, your petname is shown.

(I'm not sure I like the terminology of "nickname" and "petname", but
I'll let that pass for now...)

So far I have the following thoughts.

On the SRFI-83 R6RS Library Syntax mailing list, Michael Sperber
described his interpretation of the SRFI as a distribution format:

> The idea is that you send this stuff to your friends or download it
> from somewhere, and then let your Scheme implementation slurp it
> into its package library or whatever, possibly (and probably)
> translating it into a format more suitable for its internal
> processing.  [...]
> I don't expect PLT Scheme or Chez or Scheme 48 to change their
> module systems much or to stop developing new ones as a result of
> this SRFI---rather I expect that their authors will implement
> "translators" from and to the distribution format specified here.

As a distribution format, my first thought was that keys would be the
natural thing to use to refer to the library name and whatever
libraries it imports.

When I received a library, in raw form it might look something like

   (library a673482b8a1e23... 7812abe317...
      (import 87a16327dea2...)

(where these hex digits are supposed to suggest keys, although I don't
actually know what keys would look like).

On my personal system, I can map these keys to whatever petnames I want.

For example, suppose 7812abe317... was the key for R6RS.

If I dislike URI's, in my system I can map 7812abe317... to 'r6rs.

Someone else who wanted to could map 7812abe317... to "scheme://r6rs"
on their system, if that's what worked for them.

(Personally, I think Scheme symbols are natural to use for petnames,
but it's not a problem if someone else wants to use strings for their

If on my personal system I had mapped these keys to my personal
petnames of 'spiffy, 'r6rs", and 'srfi-1, when I looked at the library
I would see:

   (library spiffy r6rs
      (import srfi-1)

An essential feature of petnames is that they are bidirectional.
Let's say I make some changes to the source and send them to you.  My
personal petnames get replaced with their corresponding keys.  On your
system, they get transformed into your petnames.

Here are some advantages I see over my current proposal:

There are no problems with my losing my domain name or changing my web
site address.

We completely separate out the issue of cataloging and categorizing
libraries.  If I want to create a deeply hierarchical library catalog
and you want to create a wide and flat one, we can both go ahead and
do it.

The petname system seems to me to be conceptually simpler.  (Not
simpler as necessarily easier to understand: each part may have a
steeper learning curve... but simpler in that the parts are better
separated and fit together well).

Then I have some questions...

Is there a crypto key generating system we can use today?

Suppose when I say

   (import 87a16327dea2...)

that I'm referring not to a specific implementation of SRFI-1, but
instead to SRFI-1 as an API.

When I send you my library of code that uses SRFI-1, I'm not saying
you have to use the exact implementation of SRFI-1 in my Scheme
system, I'm saying go ahead and use whatever is the best
implementation of SRFI-1 on your system.

In such a scenario, does 87a16327dea2... need to be a
cryptographically secure key instead of for example just a UUID?  If
it does need to be cryptographically secure, what am I protecting?

Suppose I were to say that "Andrew's Super-Lister library is a
faithful implementation of SRFI-1 and does not steal your credit cards
or format your hard disk".  Such an assertion we *would* want to make
cryptographically secure.  You'd want to know that it was really me
saying it, and that the library you got was actually the Super-Lister
library I was referring to.

But if I'm just looking for a unique identifier to refer to "the
SRFI-1 API", would a UUID be good enough?