On Thu, May 06, 2010 at 18:06:59 -0700, Simon Michael wrote:
> I joined an interesting discussion on #darcs today; here's what I
> proposed. I think this or something like it would be a good
> direction to aim for. What do you think ?

I'd like to give a little more background to this discussion.  I think
we all agree that the current situation is bad.  It's not 100% clear
that we can/should do something about it.  I think we should, but then
we have to decide on what.

Desired outcome:

 - eliminate user confusion
 - make it easy for users to know what the 'right' thing for them is
 - make it easy to align user actions with darcs hacker intentions
   (right now, we want everybody to be using a hashed format)
 - cope well with future developments

What ails us: confusion over formats
------------------------------------
Ever since Darcs 2 was released two years ago (2008-04-07), we have been
struggling with widespread confusion over formats.  This has cost us in
many ways

 * users switching from darcs (cf. laconi.ca, now known as status.net)
 * users refusing to upgrade their client
 * users resisting format upgrades
 * users upgrading unnecessarily (painfully, alienating *their* users)

I'm not saying that the confusion is sole cause for this pain, but it's
a major contributing factor.

Background
----------
There are three dimensions to consider

 1. client support    (darcs 1 vs 2)
 2. repository format (hashed vs unhashed)
 3. patch semantics   (mergers vs conflictors)

Right now we have three format names:

  --old-fashioned (>= 1.x, unhashed, mergers)
  --hashed        (>= 2.x, hashed,   mergers)
  --darcs-2       (>= 2.x, hashed,   conflictors)

Cause for confusion: polysemy?
------------------------------
I think the confusion is due to two factors

1. "darcs 2" can either mean

    * darcs 2.x clients
    * conflictor-based patch theory
    * the --darcs-2 format

2. "hashed" can either mean

    * hashed repositories (--hashed and --darcs-2)
    * the --hashed format

Or maybe the key problem is simply that repo vs patch compatibility are
orthogonal.  We could slave one to the other, but that would be bad
because then we would not be able to do things like upgrade people to
a hashed darcs 1 format (which is one of our current objectives).

The orthogonality approach
--------------------------
The discussion started over a proposal I had to eliminate as many
double-meanings as we can exposing the orthogonality of hashed/unhashed
vs mergers/conflictors.

On IRC last night, I made a proposal along those lines. Simon and Zooko
helpfully pointed out a couple of flaws in it.  My current proposal is a
modest modification which addresses some flaws (changing meanings,
multi-dimensional choice).

We would have three formats:

   darcs-1-unhashed (>= 1.x, unhashed, mergers)
   darcs-1-hashed   (>= 2.x, hashed, mergers)     (get default)
   darcs-2-hashed   (>= 2.x, hashed, conflictors) (get/init default)

We can either make these flags like --darcs-1-unhashed or arguments to a
single --format flag, the choice of which I claim is not essential at
this time.

This approach still has at least one flaw in it, which is that users
could interpret (darcs-1-hashed) to mean that the format is compatible
with darcs 1 clients.  We could mitigate it with help text, but only so
much.

The encapsulation approach
--------------------------
Simon's approach is to hide the internal details and present flags which
answer user questions:

   darcs-1
   darcs-2-backward-compatible
   darcs-2

What is also nice about Simon's approach is that it introduces a
plan for evolution...

> - a major darcs version may introduce a new repo format "darcs-n",
> and if
>   this is not interoperable with the previous format, may introduce
> a second
>   format "darcs-n-backward-compatible" which is.

And I also like the pros he pointed out, but...

> - clear for users

I claim this is the only one that's unique to this approach

And that

> - extensible into the future
> - does not change the meaning of terms we're familiar with
> - usability-wise, the current situation is a mess that will get worse
>   without a cleanup like this

are shared by the orthogonality approach.

['Encapsulation' may be very abusively misused terminology on my
part, sorry!]

Eric's argument
---------------
I respect the position that Zooko and Simon hold, which is that users
should not subject to what are essentially implementation details.

As Zooko has once said, "No flux capacitors!" I agree with that.  I also
agree with "Don't make me think!" I hear you...

But what I'm worried about this:

 A. Future development: introducing a third repository format: what if
    the Darcs 2.x line introduces a mega-hashed repository format that
    we want everybody to use?  This means your orthogonal choices would
    be:

     * mergers vs conflictors
     * unhashed, hashed, mega-hashed
  
    How would this fit into an encapsulation model?  Would we deny
    mergers users the ability to use mega-hashed repos?

    The argument against this is YAGNI (You Ain't Gonna Need It).
    Maybe that's all that needs to be said, but I still worry.

 B. Confusion over 'compatibility': Are darcs-2-bc repos compatible with
    darcs-2 repos?
    
    No, but they're compatible with darcs-1 repos.  The current
    encapsulation approach makes the client-compatibility question
    crystal clear, but it does this by obscuring the
    repo-interoperability question, which makes me nervous.

 C. How this fits in with other commands (darcs get --lazy, darcs
    optimize --upgrade)

So I'm not really sure what to do.  I don't think the current
orthogonality approach is quite right (it still suffers from the
confusion of darcs client versions), but I'm also nervous about the
current encapsulation approach.

I think the current orthogonality approach is a little bit more
flexible, and it's also a little bit more conservative (in the
sense that it runs less risk of hiding the wrong details).

Phew!
-----
Anyway, it's all about the users in the end. If you can find a way to
kill the confusion and make users always do the 'right' thing, I'm
interested.  Simon's approach is a very nice start.  Maybe it is the
right way and I'm just being needlessly worried.  But maybe there's a
third way yet?

-- 
Eric Kow <http://www.nltg.brighton.ac.uk/home/Eric.Kow>
PGP Key ID: 08AC04F9

Attachment: signature.asc
Description: Digital signature

_______________________________________________
darcs-users mailing list
darcs-users@darcs.net
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to