Anonymous DVCS in the Darknet.
It offers "fn-push" and "fn-pull" as an optimized way to store code in freenet: bundles are inserted and pulled one after the other. An index tells infocalypse in which order to pull the bundles. It makes using Mercurial in freenet far more efficient and convenient.
And it is a perfect fit for the workflow automatic trusted group of committers.
Otherwise it offers the same features as FreenetHG.
The rest of the article is concerned with the older FreenetHG extension. If you need to choose between the two, use Infocalypse: It’s concept for sharing over Freenet is more robust.
Using FreenetHG you can collaborate anonymously without having to give everyone direct write access to your code.
To work with others, you simply setup a local repository for your own work and use FreenetHG to upload your code automatically into Freenet under your private ID. Others can then access your code with the corresponding public ID, do their changes locally and publish them in their own anonymous repository.
You then pull changes you like into your repository and publish them again under your key.
With pseudonymity you can't find out whom you're talking to, but you know that it is the same person, and with distibuted collaboration you don't need to let people write to your code directly, since every code repository is a full clone of the main repository.
Even if the main repository should go down, every contributor can still work completely unhindered, and if someone else breaks things in his repository, you can simply decide not to pull the changes from him.
alternatively just do
hg clone static-http://127.0.0.1:8888/USK@fQGiK~CfI8zO4cuNyhPRLqYZ5TyGUme8lMiRnS9TCaU,E3S1MLoeeeEM45fDLdVV~n8PCr9pt6GMq0tuH4dRP7c,AQACAAE/freenethg/1/
To guide you through the steps, let's assume we want to create the anonymous repository "AnoFoo".
After you got all dependencies, you need to activate the FreenetHG plugin in your ~/.hgrc file
[extensions] freenethg = path/to/FreenetHG.py
You can get the FreenetHG.py from the freenethg website or from the Mercurial repository you cloned.
Now you setup your anofoo Mercurial repository:
hg init AnoFoo
As a next step we create some sections in the .hg/hgrc file in the repository:
[ui] [freenethg] [hooks]
Now we enter the repository and use the setup wizard
cd AnoFoo hg fcp-setupwitz
The setup wizard asks us for your username to use for this repository (to avoid accidently breaking our anonymity), the address to our freenet instance and for the path to our repository on freenet.
The default answers should fit. The only one where we have to set something else is the project name. There we enter AnoFoo.
Since we don't yet have a freenet URI for the repository, we just answer '.' to let FreenetHG generate one for us. That's also the default answer.
The commit hook makes sure that we don't commit with another but the selected username.
Also the wizard will print a line like the following:
Request uri is: USK@xlZb9yJbGaKO1onzwawDvt5aWXd9tLZRoSoE17cjXoE,zFqFxAk15H-NvVnxo69oEDFNyU9uNViyNN5ANtgJdbU,AQACAAE/freenethg_test/1/
This is the line others can use to clone your project and pull from it.
And with this we finished setting up our anonymous collaboration repository.
When we commit, every commit will directly be uploaded into Freenet.
So now we can pass the freenet Request uri to others who can clone our repository and setup their own repositories in freenet. When they add something interesting, we then pull the data from their Request uri and merge their code with ours.
This workflow is already useful, but it's a bit inconvenient to have to wait after each commit until your changes have been uploaded. So we'll now change this basic workflow a bit to be able to work more conveniently.
First step: clone our repositories to a backup location:
hg clone AnoFoo BackFoo
Second step: change our .hg/hgrc to only update when we push to the backup repository, and add the default-push path to the backup repository:
[paths] default-push = ../BackFoo [hooks] pretxncommit = python:freenethg.username_checker outgoing = python:freenethg.updatestatic_hook [ui] username = anonymuse [freenethg] commitusername = anonymuse inserturi = USK@VERY_LONG_PRIVATE_KEY/AnoFoo/1/
Changes: We now have a default-push path, and we changed the "commit" hook to an "outgoing" hook which is evoked everytime changes leave this repository. It will also be evoked when someone pulls from this repo, but not when we clone it locally.
Now our commits roll as fast as we're used to from other Mercurial repositories and freenethg will make sure we don't use the wrong username.
When we want to anonymously publish the repository we then simply use
This will push the changes to the backup and then upload it to your anonymous repository.
And now we finished setting up our reopsitory and can begin using an anonymous and almost infinitely scaleable workflow which only requires our freenet installation to be running when we push the code online.
One last touch: If an upload should chance to fail, you can always repeat it manually with
...out there and do some anonymous coding (Maybe with the workflow automatic trusted group of committers).
And if this post caught your interest or you want to say anything else about it, please write a comment.
Also please have a look at and vote for the wish to add a way to contribute anonymously to freenet, to make it secure against attacks on developers.
The European Copyright directive threatens online communication in Europe.
But thanks to massive shared action earlier this year, the European parliament can still prevent the problems. For each of the articles there are proposals which fix them. The parliamentarians (MEPs) just have to vote for them. And since they are under massive pressure from large media companies, that went as far as defaming those who took action as fake people, the MEPs need to hear your voice to know that your are real.
If you care about the future of the Internet in the EU, please Call your MEPs.