Thank you for writing this RFI Andrew. Good job. I especially admire your call for a formal proof that your grammar can not generate the same string in two different ways, assigning two owners to the same name: that's a good exercise and would be a valuable improvement to the SRFI. Identifying issues like that and clearly stating what problem needs to be solved is often 3/4s of the battle. I'll bet the proof is easier than you think and you should give it a try -- maybe someone closer to you can give some hints. Here are some issues and proposed solutions. * Add to the Issues List I would add these issues: ~ What are the political and economic implications of this proposal? Can those implications effect the correctness of programs? Are the implications arbitrary and harmful in any way and, if so, are there ways to improve the design to reduce these effects? ~ Related to those implications: what is the role in name-space design of referential transparency? ~ Is there a way to improve the description of the design? * Political and Economic Implications ** General Description The proposal creates (by defining) an infinite name-space which has a natural tree topology. By "tree topology" we mean that every point in this name-space (each name) is, aside from being a name-in-general, the name for an infinite subspace of names which are uniquely "contained" under that name. The proposed tree looks like this: community recognition of the SRFI process | srfi-84 / | | | \ schemers.org rNrs srfi-N DNS HTTP-URL / ... \ /..\ /..\ /..\ /..\ libA libZ r6 rINf 84 inf a .. z a/~ .. z/~ / ..\ ... /..\ ... /..\ ... X::Y ... Q::R ... F::G .... The proposal is based on the idea of assigning ownership of subspaces (subtrees) to specific authorities. Thus, ICANN is authoritative for the DNS subtree; the scheme standard community is authoritative for the rNrs subtree; etc. The proposal is pleasingly and appropriately "rooted" at nothing more or less than community recognition of SRFIs in general and srfi-84 in particular. Ownership is hierarchical and complex. Thus, ICANN, W3C, and IETF are authoritative for the `http://swiss.mit.edu' name-space but they delegate that authority to MIT. MIT in turn has delegated `http://swiss.mit.edu/~jaffer' to Aubrey. ** Referential Transparency? A name is referentially transparent if, always, it refers to "the same thing". We don't necessarily mean that names in a program always refer to "the same string of bits". For example, Aubrey may want a unique name for "a development version of SLIB". Which collection of Scheme code is referred to by that name may change over time but, always, the name refers to what Aubrey has designated as an SLIB snapshot. We ought to notice that in this design the hierarchy of authority is at odds with referential transparency. At the whim of ICANN, W3C, IETF, MIT, or Aubrey a name that Aubrey chooses under this proposal can change meaning -- can no longer be the name for "a development version of SLIB". In fact, it seems inevitable that eventually such a whim *will* be exercised. It is highly likely that, eventually, neither Aubrey nor any direct or indirect designee of his will control `http://.../~jaffer'. It is entirely *possible* that, sometime after that point, the name will be re-used. Of course some of this concern is purely theoretical (like worrying about latency between Earth and Alpha Centuri while designing TCP). For example, none of us should be seriously concerned that `http:' won't have a stable enough meaning for our purposes. By the time `http:' changes meaning *that* badly enough else will have gone wrong that this Scheme name-space will be one of the least of our concerns. One doesn't have to go far down the tree, though, before the concerns are not so theoretical. I'm not too sure I see strong continuity of operations guarantees for the `rNrs' subspace. I'm pretty sure I don't see strong continuity guarantees for the `schemers.org' subspace. By the time we get `http:/.../~newbie' or open-source-project `joes:cool:hack' I'm nearly certain that the subspace is a jump-ball on the scale of just a few years, at best. ** Does it Really Matter? In some sense these concerns about referential transparency are exaggerated. The Scheme community knows, by observing other communities who wrestle with name-spaces (e.g., Java), that we can potentially get very, very far without raising these concerns. Well, really, the question comes down to "what are these names for"? If these names are nothing more than (as in the Java world) a local convention for convenience -- perhaps everything is just fine. I would like to believe that SRFI-84 has the potential for much greater significance and that, if we can, we should design with that in mind. For example, some uses of this name-space may have historical significance. They may wind up being used in R7RS. They may be of use to future historians trying to figure out what this or that mailing list discussion was about 100 years hence. More immediately, I would like to believe that these names will take on a role in access methods. I would like a Scheme loader to understand a subset of these names and for their to be a rigorous (perhaps local) correspondence between the name and what a loader should do to find a named data set or a named code library. I earlier pointed out that `http://.../~jaffer' is likely to eventually slip out of the control of Aubrey's intentions. What will happen, then, to systems which operate by loading data/code based on those names? Will their correctness be effected? I earlier pointed out that it is *possible* for names in, say, the `schemers.org' name-space of open source projects to be re-used as economic control over the domain and political control over the pages shifts. "Possible" or "likely"? Well, if nothing in the scheme world ever matters much -- "unlikely". If Scheme really starts serving certain vital roles in the world -- it all comes down to cost v. benefit, doesn't it? ** The Gist of the Nub of the Essence of the Political Foo This SRFI draft defines a set of names for people to use but the names selected by the definition have an independent existence: The names used by this draft exist prior to this draft, but for some small details of syntax, in a contentious political and economic space. The name `http://.../~jaffer' exists prior to this SRFI. Control of the name is something people can and do fight over (e.g., look at where ICANN is at). How nasty can that fight get? The answer is determined by how valuable the named things are. That fight is already well under way. Why drag Scheme into it? * Solutions In general we have seen that the current draft is weakened by a dependency upon authorities over which control is contingent and contentious. More or less by definition we can define a *standard* for names which makes no reference at all to *some* authority. Does there exist a higher authority which is more stable upon which we build universal names? It's a definite maybe: ** Crypto and Being Human to the Rescue Math and physics, specifically the physics and math of computational complexity, provide us a handy and apparently non-contentious authority that mostly does the job. With hashes and signing we can create names which are, for all practical purposes, as far as we can tell, unforgeable. With signing, especially, we can democratize this process. We presume, in this SRFI, that individuals or groups wish to allocate to themselves an infinite subspace of names. We presume that they have enough social coherence to manage internal-to-the-group secrets such as the password to a web site or.... a public key. We are not certain but I am far from certain we can do much better than to appeal to, extend, and improve our math and use math as the ultimate naming authority. Names for strings of bits are ideally the best hashes we can muster. Names for dynamic processes controlled by individuals or groups are ideally cryptographically signed definitions of those processes. ** "But quick...." The draft objects to this approach indirectly. Hash values and signatures are, pretty much by definition, incomprehensible and inconvenient. As the draft puts it, regarding a similar proposal: "Quick! Is urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 the same or different than the example UUID found in the middle of page 4 of RFC 4122?)" Can we form a math-based proposal which avoids such objections? ** Short Names, Long Names, and Disambiguating Footnotes Among certain close company I am certainly, simply, "Tom". At a greater distance I may be "Tom, the GNU Arch guy" or "Tom, the guy working on telemarketing and business development". In some places I am "Thomas Lord, with federal tax id XXX-XX-XXXX". You get the idea -- identity is one thing and names another. Identity is fundamental (well... but that's another story) but names exist in discursive context. Names are relative not just to where the named thing is in the world but also to who is speaking to whom. In a paper, the reference `[Lamport 86]' has a precise meaning but to disambiguate the meaning there is a footnote with a complete bibliographic entry. Beyond that there is a style guide that explains how to parse the bibliographic entry. Beyond that are authorities like "The Association of Computing Machinery" who can disambiguate further. Lexical scoping, as in Scheme, reflects this locality property of names. In a piece of code designed to be loaded into an environment where, at the time of loading, `call-with-current-continuation' is presumed to be defined I can usefully write: (let ((call/cc call-with-current-continuation)) ...) In doing so I have done two things: 1. I've defined a convenient local short-hand for an unwieldy name. 2. I've resolved, in a stable context, a "global" name by retrieving the named thing. Thereafter (in the enclosed code) I am insulated from redefinitions that may take space in the global name-space. The same pattern can apply to a design for "Universal Identifiers" once we acknowledge separate needs for: 1. "local" conventions for short-hand names Me and 12,000 friends can all agree that it is safe to cut and paste certain code between our works because we all mean the same thing by "call/cc". 2. "global", math/physics/human-based disambiguators We can all agree that names like: srfi84://r6rs/call-with-current-continuation/ff352a...5734 have a precise-as-we-can-get meaning. We can do our best to make collisions utterly improbable while also taking steps to make sure we are not too badly disrupted if, to our surprise, collisions eventually occur. * Conclusions and Final Thoughts The draft can be improved by: a) distinguishing conventional short-hands from universal names b) using crypto techniques to define universal names c) defining mechanism for declaring conventional mappings from universal to short-hand names d) suggesting recovery for procedures for the contingency that crypto techniques fail Difficult but solvable issues in this program include distinguishing cases where signatures are wanted from situations where hashes are wanted from situations where some combination is wanted. Reaching prematurely for too narrow a set of crypto technology is probably a mistake. If we had this conversation too many years ago it might have been tempting to say `hashes are MD4' and things like that. Nothing has really changed. A subtle point will be the idea of improving names over time. Supposing I have an SHA-based name tomorrow can I smoothly transtion to a better has tomorrow? Regards, -t