Post by Kevin
I believe deception and impersonation are important.
I agree. One of the core tenets of Fossil is durable accountability, and here we have a case where it allows the who-did-what history to be muddied.
What Fossil allowed in the case that started this thread is fine: I reassigned some of my own commits under an incorrect user name to the one I prefer that fossil-scm.org know me by.
What I hope we get to in this thread are the further implications of the power which drh has granted me on fossil-scm.org, and whether we wish to limit that power.
Post by Kevin
I would recommend the study of block chain or blockchain technologies,
such as Bitcoin. These technologies use signed hashes.
I don’t see how that gets you anything but pseudonymity within the system. That may be useful, and we’ll get to that below, but I don’t think that’s good enough for fossil-scm.org.
As I understand them, cryptocurrencies only give you accountability at the borders of the system when the pseudonymous identity gets transformed to a real identity. In the case of Bitcoin, it happens when you cash out.
Case in point: we don’t know who Satoshi Nakamoto is, because he has never cashed out any of his/their Bitcoins.
If anything about Fossil changes as a result of this discussion, I want to allow it to work *within* a DVCS trust relationship tree. There is no analogous “border” in Fossil for users to cross.
Post by Kevin
someone added a copyright comment in several pre-existing open source
program sources, as if they were the author.
Fossil already protects against that.
If I change the program text as you say, we have the version-controlled history to fall back on.
If I reassign one of drh’s commits to myself, Fossil still remembers the original committer name. Fossil is just *showing* something different in the UI now.
What I want is an option that allows a repo admin to insist that the identity on the checkins match the logged-in user name.
This should be optional, and maybe fossil-scm.org doesn’t end up enabling it. I think I might do so on my public repos, though.
The larger the project, the less likely you will probably want to enable such features because trust becomes more complicated:
Alice -> Bob -> Charlize -> Donny
Donny “owns” the main project repo, and he has given login rights to Charlize. She in turn publishes her repository publicly, and has given Bob the right to log into it, and he in turn has done the same for Alice. If Charlize syncs with Donny, her repo may push artifacts originally checked in by Alice or Bob.
That sort of thing is much rarer in the Fossil world than in the Git world. If I, as the repo maintainer, decide that trust should not be transitive in this way, I should be able to insist that checkins from Charlize be tagged as “from Charlize” only.
Whether that means rewriting authorship during sync or denying non-matching artifacts is a separate matter, one I don’t feel qualified to opine on, since it probably impacts the very operation of Fossil at a deep level.
The only other way I see to go is to depend on some outside identity provider.
GitHub does it by being centralized, but part of the problem is that Fossil doesn’t currently get that same benefit even when you do use it as a centralized DVCS.
Git does it by using email addresses for identity instead of user names, which lets Git leverage the uniqueness of email addresses, enforced by DNS, domain name registrars, and such. Coupled with GPG, you can assert identity even in the face of transitive trust relationships, which is why the world’s Linux contributors don’t all need to coordinate with Linus Torvalds to get a login on his central repo. I don’t think we want to complicate Fossil in this same way.
Another path may be to use protocols like OAUTH. The identity provider makes an assertion, and the Fossil repo can then choose what to do about that assertion.
The central repo’s admin could choose one trusted OAUTH provider, so that in my distributed trust relationship example above, Donny could trust Alice because he trusts the OAUTH provider. Donny’s repo could run in three modes:
a) I trust anyone that my OAUTH provider trusts
b) I trust anyone on this whitelist, which my OAUTH provider also trusts; that trust is transitive
c) I trust only those on this whitelist
In mode c, Alice gets to push to Donny only if she gets her identity approved by Charlize and Donny, in addition to Bob, who already trusts her. Until then, commits from her get stripped at the Bob->Charlize barrier.
In mode b, Alice gets to push to Donny because Donny trusts Charlize to whitelist people wisely. This is how some clubs operate: anyone may invite any other person, transitively, but membership is always sponsored.
In mode a, everyone just coordinates directly with the OAUTH provider. Donny trusts the OAUTH provider to make sensible assertions. In this mode, the Fossil repo’s contents could be near-pseudonymous, with commits traceable back to real-world identities only when law enforcement gets involved.
That then leads to the possibility of trusting *all* OAUTH providers. This might be of use in a wiki-only project, where any contribution is welcome. All that is wanted is a strong pseudonymous identity proof. All we care about in this mode is that you are unspoofably you.
This in turn gets you to true pseudonymous identity protocols like SQRL, which only prevent identity spoofing, but prove nothing about real-world identity unless someone manages to seize the user’s private keys. (On purpose.)
Post by Kevin
Another example is where the original author is over written, or not
mentioned or barely mentioned.
Technical means are generally poor solutions to social problems.
I don’t think the problems I’m advocating for a fix to are primarily social problems. They’re more “How do I *x* in the face of *y*?” problems.
The social aspect of the problem is already reasonably well solved in Fossil already: If I were to impersonate drh on the fossil-scm.org repo, I would lose my login privileges, and all my fraudulent checkins would get pushed off onto a branch, backed out, and/or relabeled. In this hypothetical, I violated Wheaton’s Law and that problem got solved.
I want to restrict this thread to the technical issues: preventing wyoung/tangent confusions, or helping Donny trust Alice, or or giving Donny the tools to *not* trust Alice just because Bob trusts Alice.