go-ds-crdt
git-bug
go-ds-crdt | git-bug | |
---|---|---|
7 | 56 | |
363 | 8,007 | |
2.5% | - | |
6.1 | 6.5 | |
3 months ago | 12 days ago | |
Go | Go | |
GNU General Public License v3.0 or later | GNU General Public License v3.0 only |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
go-ds-crdt
-
CRDTs Turned Inside Out
I forgot: key-value store using MD-CRDTs was implemented here: https://github.com/ipfs/go-ds-crdt
The trickiest part was not the CRDT, but the DAG traversal with multiple workers processing parallel updates on multiple branches and switching CRDT-DAG roots as they finish branches.
-
We Put IPFS in Brave
In https://github.com/ipfs/go-ds-crdt, every node in the Merkle DAG has a "Priority" field. When adding a new head, this is set to (maximum of the priorities of the children)+1.
Thus, this priority represents the current depth (or height) of the DAG at each node. It is sort of a timestamp and you could use a timestamp, or whatever helps you sort. In the case of concurrent writes, the write with highest priority wins. If we have concurrent writes of same priority, then things are sorted by CID.
The idea here is that in general, a node that is lagging behind or not syncing would have a dag with less depth, therefore its writes would have less priority when they conflict with writes from others that have built deeper DAGs. But this is after all an implementation choice, and the fact that a DAG is deeper does not mean that the last write on a key happened "later".
-
Making CRDTs Byzantine Fault Tolerant [pdf]
The idea of DAG-embedded CRDTs is far from new and was introduced here:
https://arxiv.org/abs/2004.00107 (I'm among the authors)
Unfortunately, the verification that the author proposes (not accepting new updates until the dag below is verified) will need a lot of caveats for real world usage.
Currently we use these CRDTs for a key value database of 40M+ keys in a deployment of ipfs-cluster, which uses https://github.com/ipfs/go-ds-crdt .
- Ask HN: P2P Databases?
- Go-ds-CRDT: distributed datastore using Merkle-CRDTs
- Conflict-free replicated datatypes solve distributed data consistency challenges
-
Data Laced with History: Causal Trees and Operational CRDTs (2018)
Not 100% the thing, but potentially related work in this area:
https://github.com/ipfs/go-ds-crdt
(See link to paper, and links to other projects in it, like OrbitDB).
git-bug
-
Radicle: Peer-to-Peer Collaboration with Git
Unfortunately github appears to be actively breaking the ability to use git-bug on large repositories (like nixpkgs):
https://github.com/MichaelMure/git-bug/issues/749#issuecomme...
-
Nintendo emulator 'Suyu' removed from Gitlab following DMCA request
True but getting less true by the day:
https://github.com/MichaelMure/git-bug
https://www.fossil-scm.org/home/doc/trunk/www/index.wiki
- CRDTs Turned Inside Out
-
Sourcehut and Codeberg are both currently experiencing a DDoS attack
Only not having access to https://todo.sr.ht made me to recognize fully, that I don’t have any access to it. https://github.com/MichaelMure/git-bug suddenly looks much more interesting.
-
Gothub: Alternative front-end for GitHub written with Go
Neither do the issues support. But there is git-bug [0].
[0]: https://github.com/MichaelMure/git-bug
-
git-appraise – Distributed Code Review for Git
As a sort of spiritual successor to git-appraise, I've been working on git-bug[1] which support issues and will at some point support kanban and code review. There is a few notables improvements:
- CRDT-like reusable data structure [2][3] for true p2p workflow and easily create new entities (code review ...)
- bidirectional bridges to github, gitlab ... to ease the transition or just use git-bug as a complement of those platform
- CLI, terminal UI and web UI, for different taste and integrate into your tooling/workflow
[1]: https://github.com/MichaelMure/git-bug
[2]: https://github.com/MichaelMure/git-bug/blob/master/doc/model...
[3]: https://github.com/MichaelMure/git-bug/blob/master/entity/da...
-
Show HN: Gitopia: Decentralized GitHub Alternative for Open Source Collaboration
> but that is for the development of the platform and network of Gitopia. For the end user the workflows remain almost the same for collaboration.
I have to disagree here. Accidental complexity in a system can have severe downstream impacts on end users, whether that be in the form of poor performance, unreliability, or just slow update cycles. It's not something you can paper over and completely hide from the user.
> Along with this the blockchain layer layer offers immutable, transparent and tamper proof versioning of code
Tamper-proof can be accomplished natively by signing [0]. receive.denyNonFastForwards and receive.denyDeletes[1] can be used to make a git repository immutable. Git commits are also already content-addressable. And transparency is achieved by just having the repo available for people to clone.
> along with the collaboration meta and augments the current collaboration flow
Could this augmentation not be accomplished by storing the collaboration information in the repo under a set of special-purpose branches? Like git-bug[2] or git-issue[3]? Coupled with GPG signatures and you've got your immutability, too!
> Along with this it enables us to provide a novel means to incentivize open-source contributions along with fostering a more decentralized approach for governance (even for projects), every token holder could have a say in the decision making, reducing the risk of undue influence by a single party, hence eliminating centralized control.
This one I'll grant you, but it's by far the least compelling aspect of the project to me. I don't think we're going to solve the centralization of GitHub by centralizing on a new plutocracy, I'd much rather see efforts towards full decentralization. There's nothing inherent to Git that requires that we all use the same set of servers.
[0] https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work
[1] https://git-scm.com/book/en/v2/Customizing-Git-Git-Configura...
[2] https://github.com/MichaelMure/git-bug
[3] https://github.com/dspinellis/git-issue
-
So, I went down the rabbit hole of buying GitHub Stars, so you won't have to
Regarding the issues, there are some projects like git-bug https://github.com/MichaelMure/git-bug trying to embed these sorts of meta-work into git.
-
Let's Make Sure Github Doesn't Become the only Option
Probably git-bug is closer to what Fossil does: It uses Git as a storage engine, and can coexist with your code in the same physical repository, but the issues don't actually show up as source files. Instead, each issue is a special branch (buried in refs so it won't clutter up git branch) that has zero common ancestry with anything else. So in theory you can poke at it with Git, but really, the Git under the hood is mostly an implementation detail, and as long as you interact with those files through the tool, it guarantees you won't have merge conflicts.
-
Clocks and Causality – Ordering Events in Distributed Systems
You might be interested by git-bug and https://github.com/MichaelMure/git-bug/blob/master/doc/model..., which seems to be exactly what you describe. (Disclaimer: author).
What are some alternatives?
merkle-crdt - Merkle-Clock CRDT implementation in python
git-issue - Git-based decentralized issue management
differential-dataflow - An implementation of differential dataflow using timely dataflow on Rust.
EdenSCM - A Scalable, User-Friendly Source Control System. [Moved to: https://github.com/facebook/sapling]
verneuil - Verneuil is a VFS extension for SQLite that asynchronously replicates databases to S3-compatible blob stores.
nessie - Nessie: Transactional Catalog for Data Lakes with Git-like semantics
yjs - Shared data types for building collaborative software
Kaiserreich-4-Bug-Reports - Issue tracker for Kaiserreich for Hearts of Iron 4
Apache Ignite - Apache Ignite
dolt - Dolt – Git for Data
yata - YATA based algorithm for plain text CRDT edit merging in python
gumtree - An awesome code differencing tool