This document describes portions of version 0.99 of the PSYC Protocol for
SYnchronous Conferencing. You may consider it an Internet-Draft and as such
subject to all provisions of Section 10 of RFC2026 except that the right to
produce derivative works is not granted.
In all matters of intellectual property rights and procedures, the
intention is to benefit the Internet community and the public at
large, while respecting the design decision to keep the original author
of the protocol in charge. We don't like the bloat effects other efforts
are experiencing.
Only if you have developed an application in accordance to this specification
you may call it PSYC-compliant to the version mentioned above.
Abstract
We introduce a new URI scheme psyc:, which is used to identify or
locate a person, group, place or a service and specify its ability to
communicate using the Protocol for SYnchronous Conferencing PSYC.
People register at their favourite PSYC server and can, from then on,
be referenced there, even when they are not online.
Places (chat rooms) are essentially permanent and have a stable address
over time.
This enables for PSYC identificators to be advertised on the Web,
in E-Mail and in the UseNet, making a directory service to find people
or meet new people, intrinsic to the protocol, unnecessary. You can
create one easily with any web-based database, for instance.
Vocabulary
One of several brilliant concepts introduced by Tim Berners-Lee when
he hacked up the World Wide Web was the concept of the Uniform
Resource Locator (URL). One string giving the web browser all the
hints it needed to fetch the resource. This was fundamental for building
a world-wide hypertext.
Soon after, the idea came up of having location-independent identifiers
for the resources. One uniform string was supposed to tell the browser
all it needed to know, and it would find the nearest place where to fetch
the resource. Since the early nineties a group of researchers and enthusiasts
got together at WWW conferences and the W3C to define such a syntax for
Uniform Resource Identifiers (URI), but they just couldn't find solutions
and agreement. So the URI was boiled down to just a more generic variation
of the good old URI.
The fact that HTTP uses the acronym URI for URLs and even the specification
of the URI which resides at http://www.w3.org/Addressing/URL/uri-spec.html contains the word
URL shows how blurry the distinction has become.
In the meantime the purists got together again and tried to define the
Uniform Resource Name (URN) as being what URI was originally meant to be.
They are still doing so.
As you can see we have given it much thought, because PSYC uses the concept
of Indentification versus Location at the foundation of its protocol. Also
since PSYC uniforms identify or locate people, the 'R' in the URL URI and
URN acronyms has become inappropriate.
So we decided to introduce the new acronyms UNL and UNI. And since the
world has seen enough acronyms, we decided to avoid using them, and rather
to speak about identities and locations, pointed to by uniforms.
So whenever you see us mention a uniform just think of it as a
slightly enhanced form of a URI.
The Uniform Network Location
First off, a UNL is the acronym for Uniform Network Location, which is
semantically identical to the URL, except that "resource" isn't very
applicable to human beings.
The Uniform Network Identification (UNI) is a UNL with the additional
feature of being a permanent address for mobile entities like humans.
A UNI will relay or delegate communication to a current user's location
as long as the user is online, and also serve as guarantee of authenticity.
Syntax of psyc: Uniforms
A PSYC uniform looks like this:
psyc:[//{hostname} [: [{port}][{transport}] ] /[{object-name}] [ #{channel-name} ]
(without whitespace obviously).
A default port number will have to be decided upon.
Current best practice is to allocate port number 4404.
Transport is a single letter indicating which underlying network
protocol to use.
'c' stands for circuit, like TCP on the Internet.
'd' stands for datagram, that is UDP in the Internet context, or CP MSG on the Bitnet.
'm' could be defined to indicate usage of Multicast IP, but the
use of this isn't defined yet.
's' stands for secure. It's a variant of circuit with TLS encryption
activated. Other schemes like "http" necessitated a second scheme called
"https" for the same purpose.
The default meaning, when no transport is given, is that the addressed entity
supports both TCP and UDP, if it is on the Internet. Encryption may become
available upon negotiation.
The object-name is one of the following:
- @{group} is a programmable group channel. This actually
points to the channel's control program, which can give information about
the channel and is the authority for letting you enter the group. The
address of the control program also serves as identification of the group
and is needed as such by the routing infrastructure of PSYC.
- ~{nickname} is a freely chosen name to identify the person
who uses it. One nickname cannot be registered on one PSYC server twice,
but you may pick any server, where the nickname has not yet been registered.
The identity of a person is also used to define the group of friends or
generally his social network around him, so in a way every person is also
a group.
- ${service} identifies gateways or other kinds of automated
services.
- {future extensions} in the PSYC server which should
not require changes in the user interface programs.
Leaving the object-name out means you are referencing the PSYC server
itself for information and registration purposes.
So a typical UNI in a WWW page would be
psyc://psyc.fsf.org/@announce
and one in a .signature
psyc://psyc.int/~lynx/.
Channels are subsets of the groups defined by an identification.
Entering only certain channels of a group allows you to filter the way you
are part of it. For instance a newscasting group may define a #sports and
a #politics channel, whereas entering the group itself would bring you
all news unfiltered. Analogously, a person can put the people it knows into
channels like #friends and #family, and send differing messages to them.
A client program needs to consider all channels essentially a variant of
the same entity, this is why this is a quite compliant use of the '#' sign
according to current URI specifications.
Discussion
Should there be ways to suggest the method to be called, and
even routes for the packets to take (intermediary proxies) ?
Maybe like this:
psyc://mmp.bu.edu/%mmp.uka.de/%psyc.noris.de/~lynx
No I no longer think that's a good idea.
It is being argued that the @ and ~ should not be special
characters, that in fact there is no need to distinguish a person's
from a group's UNI, since clicking on it will make the receiving
server react appropriately (with a group-entry confirmation, or a
conversation initiation).