Is Git viable for ultra-decentralized anonymous code development?
13 06 Sep 2015 08:39 by u/netburn
I'm essentially asking if Git is truly decentralized, in the case that a draconian government decides to censor an open source project. These days, we just run git on a server somewhere, publish the location, and that server acts as the "synchronization" point. If that server goes down, ok, no big deal, we've got a backup, start a new server, rebuild, everything's ok. But what if hosting that repo directly becomes illegal? What if things get nasty, and we have to resort to something like torrenting over proxys and vpns to share code? Would Git remain a viable tech to manage decentralized, anonymous, collaborative coding?
21 comments
4 u/Caboose_Calloway 06 Sep 2015 11:25
Very pertinent question. We must make sure Open Source survives even if governments start to not like it.
Currently GIT doesn't seem resistant to government pressure. But I believe it could become so with some work.
I think the most important think is the ownership of the infrastructure that makes up the internet. We must build completely personally owned networks where traffic can not be spied on by tapping on an AT&T box. Not a Darknet but a rabbit hole of sorts, once a rabbit gets in you never know where it may come out.
3 u/mwolf 06 Sep 2015 16:50
I'm curious what you mean by git not seeming resistant to government pressure. Has something happened in the past where developers of git caved to government whim?
1 u/netburn [OP] 06 Sep 2015 20:18
No, I'm speculating, but I imagine one day we may need unstoppable social coding. For example, with everyone moving to Linux recently, what if someone decided to build an open source excel clone (operationally, not code wise)..I mean a perfect clone, because I know tons of people who build their lives upon Excel and would never try switching unless it was perfect. Then let's say Microsoft sues the pants off the developers etc for copyright/patent infringement...they would attack anyone and everyone associated with it, and our government would help them of course, because they have a legal case. But if the code was decentralized and anonymous, then they wouldn't have anyone to attack. Their efforts to stop the software developers would be just about as successful as the MPAA stopping movie torrents..... It's just an example, but I'm really wondering what is possible with Git. It seems to me that the failure point might be that the "authoritative" repo in Git must remain known, trusted, and contain the latest changes. Today, it's easy to know where the main repo lives, where to send your updates, etc, and the main developers easily publish that location. But what if the code could not live in one place, because the Feds would raid every server you set up as the "trusted" synchronization point? What if the Feds aggressively attack any server hosting a repo that contains a new unbreakable encryption library. Or like what happened in China, they force someone to shut down their Github repo because they're publishing code to subvert their "Great Firewall". I'm clearly speculating, but I'm wondering if Git is flexible enough to overcome such challenges.
1 u/mwolf 06 Sep 2015 22:32
check out the forking workflow.
The idea for a need of a central repo server is unnecessary. at the end of the day to push to a repo, one needs to trust the remote, and the remote needs to trust the submitter at some point along the line.
0 u/netburn [OP] 06 Sep 2015 21:08
You mean something like creating our own hardlines? That would be great, but feasibility would prove near science fiction. It may come to steganography over tcp/ip, disguising packets as approved data... Or in the future possibly quantum entanglement, but I'd guess quantum tech for common people is at least 20 years out.
1 u/Caboose_Calloway 07 Sep 2015 00:37
No it is definitely not science fiction. All the technology necessary for doing that already exists, and it is cheap too compared to the recurring payments to Comcast.
My idea is to make every individual act like a tier-1 node but on personal level. In other words you agree to provide connectivity in a settlement free manner and other users connect to you under the same terms.
You also own the part of the infrastructure which is on your land. You own your router and the cables that go to the other flats and you also own the microwave p2p links on your balcony which connect you to other flats several miles away. For example a pair of these sell for $190 on Amazon.
We can also talk about laying your own fiber. The technology for doing that exists too.
2 u/asdghjklfghasldk 06 Sep 2015 16:11
Um what makes it centralized in any sense of the word? The choice to Bless a one instance of the repository (usually server) as the source of truth is usually an arbitrary choice.
Git makes a pristine copy of the source to you system, it verifies that this copy is the same as the original source location using cryptographic hashes of the data, (it may not prevent you from losing data but you will know if it is tampered with) it was designed for decentralized coding with an emphasis of ensuring no one slipped in changes by accident or by nefarious design
if hosting it becomes illegal burn it to CD an mail it out, hell turn it into 2D barcodes and fax it to your contacts in a prearranged order that would be hard for others to figure out
fact is the contents of a project are is just data and everyone has the data if they have a copy of repository, any attack on how to share the data is an attack on communications architecture and that has as many work arounds as there are inventive people in the world e.g. https://en.wikipedia.org/wiki/IP_over_Avian_Carriers
so whats the source of this fearmongering ? is it someones inability to use the tool? or it it a confusion that Gihub = GIT? (spoiler Git hub is just one way among thousands to use git)
4 u/bilog78 06 Sep 2015 17:38
This is something that needs to be stressed out more. A lot of people are used to think/work with Git as some sort of centralized VCS with an offline mode, but the truth is that it is completely decentralized. You can have a small team cooperate by just adding each other's repository as remote, and exchange patches and commits by pulling from each other. It becomes somewhat unwieldy as the team grows larger, but it's a perfectly valid M.O.
0 u/netburn [OP] 06 Sep 2015 20:48
Yes, I get this concept, and it definitely works for smaller teams as long as the team is coordinated. But yeah, larger projects where you would like to have anonymous submissions would be challenging. You can definitely have groups of friends all exchange their repo locations, give them ssh access, etc.. But let's say you want anonymous contributions for a large project, yet prevent people from knowing where your server is located... For this case, I'm wondering how to manage that situation, and if Git is capeable of working in that environment.
1 u/bilog78 07 Sep 2015 07:47
There are two issues at play here.
The real problem with #1 is how to verify the authenticity of the clones. How does everybody not in the team know that the repositories are mirrors of the team's own? AFAIK the best that can be done is signed tags.
The second issue, which is what worry the most about, is actually the least risky, since —unless the repository consists chiefly of an unwieldy number of binary blobs— contributions can be provided in a variety of efficient ways, since they are plain text: from emails to pastebins you can spread over your work in all kinds of ways which is basically impossible to bottle up. EDIT: to clarify, I'm talking about exchanging commits in the form of patches (see
git format-patchand its counterpartgit am), which is how development is handled in a lot of projects (forget “pull requests” and that kind of crapola).Again, larger patchsets might be more cumbersome to exchange, but still pretty much doable. Worst case, you can always put online some text-encoded git bundle. But heck, even in the old newsgroups days the exchange of binaries was a solved probem.
Also, without supporting mailing lists, the patch review process might be annoying. Again, Usenet could be a solution.
0 u/netburn [OP] 06 Sep 2015 20:37
My concern here is that the "blessing" of one repo may need to be changed quite frequently if the server is constantly raided or censored. Is there a simple way to transparently redirect people to the latest repo? Would the developers easily manage this without confusing contributors? This process would hopefully be simple enough as to not discourage contributors And could this repo exist centrally, or would it need to be decentralized? I'm not fearmongering, I'm legitimately curious for my own sake; I'm interested if there are simple methods to make coding with Git resilient, anonymous, and secure without imposing difficulties on contributors. Although it would be cool, I would be pissed if we had to socially code via carrier pigeon.
0 u/asdghjklfghasldk 06 Sep 2015 22:48
well if you want security you have to accept that it may not be simple
if you want to change your blessed source you just need to point your copy to the source pull the changes there and resolve your copies differences against theirs prior to merging your work back in (something like this helps explain the process better than I can http://think-like-a-git.net/sections/graph-theory.html)
if you want simpler you will need to accept that you will need a single source of truth and that has its own risks
2 u/purr 07 Sep 2015 00:34
I suppose Git could be made anonymous and resistant to censorship by implementing/using the Git protocol through a darknet like Tor or I2P.
1 u/SithEmpire 06 Sep 2015 13:49
Even if Git isn't truly decentralised, I would note that Mercurial is. Without delving into any sort of discussion about which version control package is 'better', the point is that we have the technology in the context of your question.
4 u/bilog78 06 Sep 2015 17:35
In what way Mercurial is more decentralized than Git?
1 u/SithEmpire 14 Sep 2015 15:17
I didn't say that either was (key word is 'if'); to paraphrase what I meant:
"I know that there exists at least one version control package which is decentralised, so the technology exists regardless of whether Git provides it or not."
0 u/mwolf 09 Sep 2015 18:13
I don't know what you mean by "truly decentralized."
The standard git workflow is centralized (see github) but the underlying models git use has no notion of which remotes take precedence. This all comes from outside sources like the user or the central service like github.
0 u/SithEmpire 14 Sep 2015 15:19
I meant it in the same context as the OP, which I presume would be 'still able to continue functioning after the feds have confiscated the server'.
0 u/mwolf 06 Sep 2015 17:20
It's my understanding that if you're using the SSH protocol to access a git repo, the whole connection will be secure and commits can be completely anonymous. Your face is an email address at most, which can be protected with gpg or other pgp implementations. I don't use any other tool but a quick google for "Mercurial ssh" indicates mercurial has similar support.
The technology certainly exists to be secure with modern version control tools. The trouble is if the government is at war with the internet, there is more trouble than just ensuring anonymous access. The internet itself is nowhere near decentralized in its present form and the people will have more problems than decentralized anonymous development if the government gets nasty and starts say chasing down anyone that uses "encryption not on the approved list."
0 u/netburn [OP] 06 Sep 2015 21:01
I agree that the contributors today can already be anonymous, but I'm curious about protecting the host and the repo server. Usually today you can just google the repo location, anonymously commit or clone, and you're done; however the repo server is "known" and easily attacked/raided if big brother doesn't approve, and the server owners can be located if they're not experienced in IT ghostery.
Yeah, I would love a decentralized everything.
0 u/clickbot 07 Sep 2015 09:20
Did you know you can send git pushes by mail?
git format-patch