After thinking on it, :auth<> is sort of an authentication chain. Just a
really short one.

To authenticate a module with :auth<zef:b2gills> you have to first
authenticate zef.

On Wed, May 11, 2022 at 4:02 PM Darren Duncan <dar...@darrenduncan.net>
wrote:

> This discussion thread has excellent timing, because I was otherwise about
> to
> come here and start a thread on the topic.
>
> I have been interested in the weeds of Raku's fully qualified compunit
> naming
> convention for a long long time, since I first saw it in Larry's
> Apocalypse 12
> https://raku.org/archive/doc/design/apo/A12.html section on "Versioning".
>
> My interest is not only for the Raku ecosystem itself but also its
> generalization into programming languages or code repositories in the
> abstract.
>
> For a key example, Raku's fully qualified compunit naming convention has
> an
> analogy in the Java world for versioning of JARs in Maven Central et al,
> where
> Raku's base-name plus "auth" plus "ver" correspond to Maven's "groupId"
> plus
> "artifactId" plus version number.  Or somewhat like "groupId", the typical
> Java
> package naming convention that starts with a reversed internet domain name
> of
> the creator.
>
> Many years ago (before I knew about Maven etc) I adopted the Raku fully
> qualified compunit naming convention for my own Raku-inspired projects
> including
> Muldis Object Notation (MUON) and Muldis Data Language (MDL).  Both my
> format/language specifications and artifacts/compunits are versioned with
> the
> base name plus authority plus version number triplicate.
>
> The Raku docs seem to have evolved since then but the original mention of
> "auth"
> in Apocalypse 12 highlighted internet domain names such as "
> http://www.some.com";
> as an option, I quote (slightly paraphrased):
>
>      The syntax of a versioned class declaration looks like this:
>
>      class Dog-1.2.1-cpan:JRANDOM;
>      class Dog-1.2.1-http://www.some.com
>      class Dog-1.2.1-mailto:jran...@some.com;
>
>      class Dog-1.2.1-JRANDOM;
>      class Dog-1.2.1-http://www.some.com/~jrandom;
>      class dog-1.2.1-jran...@some.com;
>
> For perhaps one of my most important contributions to this thread...
>
> The way I see it, the best interpretation of "auth" is the more abstract
> "authority" which is some kind of unique identifier for a real person or
> organization that is releasing the artifact.  This should be abstracted
> away as
> much as possible from any actual repositories where the artifact is
> available.
>
> If the general form of "auth" is basically "foo:bar" where "foo" defines a
> delegating authority that controls a namespace and "bar" is the artifact
> releasor's reserved name in that namespace, then it means "auth" is more a
> lookup in an identity broker which is orthogonal to where the artifacts
> are
> distributed.
>
> In the modern day, I see that the internet domain name system is the
> closest
> thing we have to a universal long term identity broker.  A creator
> reserves
> their name by registering and controlling the internet domain name.
>
> While possibly not strictly required, I believe this is that the Maven
> "groupId"
> and more generally the long-term practice of Java package names has done.
>
> For my part, long ago, inspired by Apocalypse 12, I started using
> "http://muldis.com"; as the authority/auth for my specs and compunits
> etc.  See
>
> https://github.com/muldis/Muldis_Object_Notation/blob/master/spec/Muldis_Object_Notation.md
> for a specific example, both the VERSION at the top, as well as the
> VERSIONING
> section at the bottom.
>
> The way I see it, though an author or distributor may use different
> repositories
> such as CPAN or Github to distribute things, all distributions by the same
> person/org should use the same "auth", and different "auth" are for
> different
> persons/orgs to distinguish themselves.
>
> When you have a Raku compunit Foo that is declaring its own fully
> qualified
> version, or is declaring its dependencies' fully qualified versions, they
> shouldn't have to be more specific than saying, I am authority X, and I
> want
> compunit Bar by authority Y.  This is like pointing to a fingerprint
> identifier,
> and that association should not break just because Bar is being
> distributed in
> different places, and it shouldn't matter where the end user gets Bar from
> as
> long as it is the same Bar.
>
> So if an author decides that their id is "CPAN:jrandom" then they should
> keep
> using "CPAN:jrandom" no matter where the artifacts are actually
> distributed.
> This "CPAN:jrandom" isn't an instruction to get the module from CPAN, it
> is just
> an instruction to get a module from anywhere the user is comfortable with
> per
> their own policies that identifies itself as "CPAN:jrandom".
>
> Independently from this, various repositories can have constraints that
> only
> someone who has proven they own "CPAN:jrandom" on CPAN etc can upload
> things
> with that auth, or at least while claiming that they are the same person.
>
> So "auth" is really about portable identities, not repositories.
>
> Now as for the original reason I was going to start this thread...
>
> Per the Apocalypse 12 example, originally I was using "http://muldis.com";
> qualified with "https://"; as a seeming standard way of being explicit
> that my
> "auth" is an internet domain name and not say a CPAN id or whatever.
>
> However, per developments in the last few years like "HTTPS Everywhere"
> and
> such, with the web in general treating unencrypted HTTP like an obsolete
> protocol people shouldn't be using anymore because security, it made me
> think
> that I need to rethink my own "auth".
>
> So something I was hoping to get input on is what is a recommended way to
> use an
> internet domain name, say "muldis.com" or alternately its reversed
> "com.muldis"
> form, as an "auth" while making it explicit that this is an internet
> domain
> name, but without naming any protocols like "http" or "https" etc.
>
> Is there some kind of best standard format for indicating this, eg
> "domain:muldis.com" but standard?
>
> So what are thoughts on what I said?
>
> -- Darren Duncan
>
> On 2022-05-06 6:48 a.m., yary wrote:
> > But I'm understanding from this conversation is that people have
> different ideas
> > of what the auth field means.
> >
> > 1. It shows who is responsible for this code. It is independent of which
> home
> > the author chooses, where home is GitHub, gitlab, cpan, zef,p6c etc.
> > 2. It shows who is responsible for this code, and its main home. Auth
> does not
> > change when stored on other homes.
> > 3. It shows who's responsible for this code in this home. It changes
> depending
> > on which home it is being uploaded to.
> >
> > So it helps to consider some cases and how we handle it.
> > 1. Long time Perl contributor has a CPAN authority, and decides to
> migrate all
> > existing projects to github as a main home.
> > 2. Long time perl contributor has a CPAN authority, no Git account
> (local
> > development). She decides to distribute new Raku projects in zef
> primarily,
> > mirrored in CPAN because she loves metacpan's API and interface.
> > 3. New contributor has modules in GitHub account, is agnostic as to
> ecosystems.
> > Wants every ecosystem to reflect latest pushes to main branch in their
> git account.
> >
> > How should the auth field work for these cases?
> >
> > More cases welcome... (Welcome to the bikeshead? 🚲🏘️🔵💚💜😢)
> >
> >
> >>>>
> >>>>     On Mon, May 2, 2022, 3:23 PM Marcel Timmerman wrote:
> >>>>
> >>>>         Hi,
> >>>>
> >>>>         I was wondering about the 'auth' specification in the meta
> file or
> >>>>         on the class/module/package. I was used to specify it as
> >>>>         'github:MARTIMM' because I store the stuff on GitHub for all
> the
> >>>>         goodies it offers. Now I see//that fez wants to start with
> 'fez:'
> >>>>         and when I look at the raku.land site for a module of mine I
> see a
> >>>>         remark /'/The uploading author of cpan:MARTIMM does not match
> the
> >>>>         META author of github:MARTIMM.' because I upload it to CPAN
> nowadays
> >>>>         and have never specified somewhere that the auth has become
> >>>>         'cpan:MARTIMM'.
> >>>>
> >>>>         I feel that this is not useful (even correct) to pin someone
> to use
> >>>>         an auth specification with a defined prefix for some
> ecosystem one
> >>>>         is using. So changing to another ecosystem forces that person
> to
> >>>>         change the auth everywhere in its code and meta files to get
> rid of
> >>>>         any errors or warnings. Besides that, the change of the
> author on
> >>>>         the same code poses the question later on, if that code is
> forked
> >>>>         and changed by someone else or that it is still the same
> developer
> >>>>         working on it?
> >>>>
> >>>>         Regards,
> >>>>         Marcel
>

Reply via email to