
Radicle: A decentralized alternative to GitHub built on IPFS - jkarni
http://www.radicle.xyz/
======
geoah
Their whitepaper is an interesting read. Most projects that try to build
dynamic data on top of merkle trees / dags seem to be using Conflict
Resolution Data Types (CRDTs) (peer-crdt, orbitdb, gun, repikativ, dat),
instead they have gone for a Replicated State Machines (RSM) with a
lisp/scheme like DSL.

This seems like an interesting alternative provided that there is a way to
resolve conflicts when multiple peers add to the same graph. Conflict
resolution doesn’t seem to be an issue for radicle as the owner of the repo
(if I understand this correctly) is the one that needs to accepts patches and
will have to republish on IPNS, thus simply appending new nodes to the DAG
after accepting the patch instead of using the ones the contributor created.
(I might really be off on this but I’d love to get how conflict resolution
works if someone understands this better).

Owh and I love the ability to use the same language to query the RSM as well.

~~~
jameshh
> Conflict resolution doesn’t seem to be an issue for radicle as the owner of
> the repo (if I understand this correctly) is the one that needs to accepts
> patches and will have to republish on IPNS

This isn't quite what happens. Anyone who is authorised to do so (according to
the semantics of the radicle code of the machine) can accept patches. They do
this by forming a valid input (a radicle expression), with the correct
signatures etc. This input is then sent to the owner via pubsub, so you are
right that it is then the owner which republished on IPNS. The owner doesn't
have to do anything manually though, this is all done automatically by the
daemon. The assumption is that the owner will republish anything that is
correct according to the machine's semantics, but it is true that the owner
can censor otherwise valid inputs.

------
bibyte
This is awesome! Many people (including me) complain that Github is too
centralized and closed source. AFAIK this is the first platform that
integrates git and IPFS. It looks like it is built around the Git CLI. So
another layer of abstraction.

One thing that stuck out to me is this line:

> Note that stack might take as much as 4GB of memory to build Radicle.

Is this normal for Haskell projects ?

~~~
jkarni
4GB is a bit of an overestimate (it's probably more like 2.5GB) but yeah,
Haskell project often consume a lot of memory when building.

That said, there are brew and deb packages!

------
Legogris
Cool! You might also want to checkout git over Secure Scuttlebutt:
[https://scuttlebot.io/apis/community/git-
ssb.html](https://scuttlebot.io/apis/community/git-ssb.html)

~~~
cloudhead
The design of SSB has been an inspiration for Radicle :) and we are aware of
git-ssb.

------
xf86alsa
Also worth mentioning GitCenter (here's a public proxy link
[https://zn.amorgan.xyz/1GitLiXB6t5r8vuU2zC6a8GYj9ME6HMQ4t/re...](https://zn.amorgan.xyz/1GitLiXB6t5r8vuU2zC6a8GYj9ME6HMQ4t/repo/?1P4w4Rvh4vS9r6G5xTiSh8qEW87EKZtnJB))
which runs on top of ZeroNet as is already in use by a number of people.
Notably ZeroNet's source code is also mirrored here.

It has issues/PRs and the like, and content can be deleted quite easily.

Supports SVN too apparently.

------
zaarn
There doesn't seem to be an obvious way to remove content (like issues, merge
requests or comments) easily from a project or ban contributors from
participating, ie, ripe for abuse by 4chan or whoever wants to set the
internet on fire today.

~~~
nukeop
You know we're living in a dystopian future where the first complaint against
an open source project is that it provides too few tools for censorship.

~~~
mikekchar
If "censorship" is stopping people from spreading certain information, what do
we call forcing people to spread certain information that they don't want to?
I wish there was a word for that.

Generally speaking, censorship is about suppressing something with the intent
that nobody can get access to it. Deciding not to forward information is not
actually censorship because generally the original speaker can choose other
avenues in which to spread their information.

I think it's interesting to imagine a situation where someone puts a political
poster on their house. They live near a busy street and so the political
poster gets a lot of views. Another person thinks this is unfair because they
don't own a house (let alone a house near a busy street). They ask the house
owner to display _their_ political poster. The owner decides not to because
they don't like the poster. Is that censorship?

Now imagine that our enterprising poor person decides to canvas the
neighbourhood to see if someone else will post their poster. The person with
the poster on their house thinks this will impede the success of the ideas on
their poster and so canvases the neighbourhood asking others not to accept the
poor person's poster. Is this censorship? If so, should we make a rule that
the person with the house is not allowed to tell others not to post other
posters? Is _that_ censorship?

Now imagine that the government made a rule. Only those who own their own
house may post posters. You may not ask others to post posters for you because
it causes problems in the neighbourhoods. Is _that_ censorship? They aren't
trying to suppress any particular message. However, the end result is that
poor people have no effective way of posting posters.

I understand that there is frustration if people don't cooperate to help you
spread the message you want to spread. However, I don't think that in itself
is censorship. It is especially frustrating when a group of people collude to
deny you a cheap/popular platform to spread your message. I don't think even
_that_ is censorship, even though it's kind of a crap thing to do. Even if
there are situations that arise that make it impossible for you to spread your
message, that is not necessarily censorship, even though it is really, really
frustrating. It's only when society actively tries to suppress any avenue for
you getting your message out is it called "censorship".

TL;DR: Nobody owes you a free lunch, no matter how hungry you may be.

~~~
nukeop
Actually in a modern democracy I am owed a free lunch.

~~~
mikekchar
Damn. Gotta get me one of those lunch tickets!

~~~
nukeop
[https://www.fns.usda.gov/snap/supplemental-nutrition-
assista...](https://www.fns.usda.gov/snap/supplemental-nutrition-assistance-
program-snap)

------
martindbp
Very interesting. Does radicle use something like the git-remote-ipfs plugin
to sync to an ipns address? Also, are objects duplicated over the filesystem,
git and ipfs or have you found some way around that? I'm working a bit on a
DVCS built on IPFS as a side project, but it's nowhere near usable (search for
IPVC on github). The natural step after replicating basic git/hg features
would be something like what radicle is doing with issues, pull requests etc.

------
h1d
It would be good if there was a mention of what IPFS is either in the title or
their page.

I assume it's this distributed file system called InterPlanetary File System.

[https://github.com/ipfs/ipfs](https://github.com/ipfs/ipfs)

~~~
willio58
Yes that’s it.

------
slim
Radicale is also the name of a great caldav/carddav server

~~~
fulafel
There's a one letter difference in the name-

> Radicle > 1 : the lower part of the axis of a plant embryo or seedling:

------
miguelmota
'Decentralized Github' is an oxymoron because the 'hub' means a centralized
place where people come to collaborate and git is already decentralized.

~~~
cloudhead
If you re-read the title, it's positioned as an /alternative/ to Github with a
non-centralized collaboration model.

------
navd
The website is a work of art, really digging the details!

~~~
uncletaco
I agree. Using the garden for tutorials is really cute and fun as well.

------
MagicPropmaker
If you want a good alternative to GitHub (though not decentralized other than
the distributed properties inherent to git), use Amazon CodeCommit. No github
politics/nonsense to deal with, just reliable hosting for git repositories
accessible anywhere with a user control system via IAM that is very
controllable.

------
jatinshah
Just a noob question here. IPFS doesn't guarantee that any data stored in it
will be available for retrieval in future (unless lots of nodes want to cache
it).

Why will anyone want to use IPFS for data storage without an availability and
latency guarantee?

~~~
iad
The low level answer is that you can pin content to the cache so it won't be
evicted:
[https://docs.ipfs.io/guides/concepts/pinning/](https://docs.ipfs.io/guides/concepts/pinning/)

However, it seems like something that would need clever UI integration to
really solve the problem. Any user oriented actions like github starring,
reddit upvoting/saving, browser bookmarking, etc. might need to also do a pin?

------
coldacid
Is anyone else as amused as I that their "Source" link leads to GitHub?

~~~
jkarni
We're definitely still in alpha - during the time we've been on HN, for
example, we've discovered that the large amount of traffic projects were
getting meant our timeouts were too short. Had we exclusively been using our
own patch system for changes, it might have been hard to submit a fix! We
turned on github issues again since if someone had a hard time installing or
running, they wouldn't have been able to submit bug reports. And we still have
breaking changes relatively often.

I'll take this opportunity to say again - this is alpha software, and not
ready for production use!

~~~
coldacid
I get that, I just find it funny. GitHub is certainly a good starting place.

------
jacobush
These flowers are like something out Alien. Scares the heck outa me.

~~~
kkarakk
all of the UI choices on the page are decentralized

------
StreamBright
How do I give access to contributors to my Rad projects?

~~~
geoah
You should only have to give them the ipfs hash that you get when initializing
your repo.

There is no notion of access restriction for now at least as this is something
missing from ipfs itself, check out radicle’s faq.

~~~
StreamBright
How can anybody compare this to Github than? I want to maintain control over
who can do what in my repo. If this solution does not support it than it is
not an alternative of Github at all.

~~~
jkarni
It does support it. In fact, it's much finer grained than Github. It's
relatively easy to change things so e.g. patches to a certain file can only be
submitted by people in a certain group, while other files anyone can change.

------
thecupisblue
Love it. Next step.

------
fooker
So..git?

------
deevolution
I really dislike the white paper format. If you print it out on paper and read
it, it's easy. It's a terrible reading experience on mobile. Why does it need
to be a pdf? At least publish 2 versions, an html version and a pdf version.

~~~
juliendonck
Thank you for your feedback. That’s a good idea. I’ll open an issue for it. :)

