Our time together this summer now comes to a middle. Google Summer of Code midterm evaluations were this week. I'm happy to report that I passed and will stay in the program for the rest of the summer. By now I've been thinking about and working on this project for around three months, and there's enough done and enough clearly planned that I can make an effort to talk about it in more concrete, practical terms. You may want to grab a beverage - this will be longer than usual.
Version control, also known as revision control and source control, is a type of software that allows labeling and managing changes to files. These changes are stored in a series that make up a history of how files have changed over time. Examples of this are Concurrent Versions Systems (CVS), Subversion (SVN), Fossil, Monotone, Git, and Mercurial. These tools are often used to manage source code files for software projects. This project works with distributed version control software. (DVCS) The "distributed" part of "distributed version control" means there is no inherent centralization. Fossil, Monotone, Git, and Mercurial provide distributed version control. A collection of files and history created using version control is called a repository. Infocalypse is an extension for Mercurial which allows Mercurial to download and publish repositories using Freenet. Web of Trust is an official Freenet plugin which allows people to create and discover identities, which can be thought of as accounts for services on Freenet. [0] It is intended to provide spam resistance, and is somewhat similar to the trust system in Freenet Message System, [1] which is forum software for Freenet. The goal of this project is to add Web of Trust integration to Infocalypse to make Infocalypse easier to use, and to write a DVCS web interface plugin for Freenet for the same reason. As SomeDude requested, all this is designed so that other distributed version control software can add support for Freenet and Web of Trust in very similar ways, and hopefully even use the same web interface plugin without making changes to it. Before I started working on Infocalypse, it was primarily the product of djk and ArneBab. djk did maintenance and wrote the core functionality. ArneBab did maintenance and added integration with the normal ("built-in") push (publish changes), pull (download changes), and clone (copy) commands, as well as support for accessing Freenet repositories using URIs starting with "freenet:". So far, ArneBab's built-in command support and support for "freenet:" paths have not been incorporated into the official version of Infocalypse, nor has my work. I haven't yet tried contacting djk to discuss reviewing the changes. I plan to do so soon if djk doesn't pop up in one of these threads. Terminology: - WoT stands for Web of Trust. - A local WoT identity (currently called an "own identity" in the WoT interface) is controlled by the owner of the local Freenet installation. - A remote WoT identity is one other than the local identity whose perspective on other identities is in use. The local identity is in this case called the "truster." Note that a local identity can also be a remote identity if there are multiple local identities. Local identities can still know of one another like any other identities. - A WoT identifier is of the format nickname@public key hash. The public key hash is also called the identity's ID. In addition to WoT, there is also LCWoT, which stands for Less Crappy Web of Trust. [2] It is a reimplementation of Web of Trust that has a slightly different feature set and is much faster. It is not a complete replacement for WoT. Its author, digger3, only wrote it because WoT has severe performance problems. digger3 does not intend to maintain it, especially if WoT's performance is fixed. Whenever a local identity is used, it is enough to specify enough of the nickname and ID to uniquely identify an identity. If I have the local identities Absolutely@wHllqvhRlGLZZrXwqgsFFGbv2V9S33lq~-MTIN2FvOw and A@uT0HBEQr17txtrkVt~auRBBFUtSubZQWeTAbIgXWMkc, "A" matches both, as does "A@", but "Ab" and "A@u" match the first and second, respectively. With LCWoT this matching is also available for remote identities, but for WoT it is not. p0s, the primary WoT developer, plans to add support. [3] Infocalypse cannot resolve remote identities with the current (build 22) official release of WoT, though it should be able to in the next release. [4] Because support for built-in commands was added later, there tend to be two ways to do things: one through commands starting with "fn-" and another with push, pull, or clone. The following examples all work with the current (04a0c9d0c8c2) version of Infocalypse. Throughout these examples I use my WoT identity and the repository name "pyProbe". Once configured with fn-setup, the following WoT-enabled operations are available: Publish a repository to Freenet: hg fn-create --wot operhiem1/pyProbe.R1 hg clone . freenet:operhiem1/pyProbe ".R1" specifies a redundancy level, which controls how Infocalypse balances tradeoffs between the repository being more reliable to download and the user being theoretically easier to track. ".R1" is on the side of more accessibility, and ".R0" is on the side of more security against tracking. With fn-create, Infocalypse does not assume a redundancy level, and one will not be used if it is not specified. With clone, in an attempt to improve ease of use, if a redundancy level is not given ".R1" will be used. Download a repository from Freenet: mkdir pyProbe; cd pyProbe; hg init; hg fn-pull --wot operhiem1/pyProbe hg clone freenet:operhiem1/pyProbe pyProbe With a target repository set, either a "default" or "default-push" path, or other Infocalypse configuration, to publish changes: hg fn-push hg push Pushing to a path specified on the command line is also possible. To download changes: hg fn-pull --wot operhiem1/pyProbe hg pull freenet:operhiem1/pyProbe A pull request is a message one developer working on a project can send to another when the sending developer has made changes they would like the receiving developer to review and consider for inclusion in their repository. Receiving pull requests does not work with the current official stable version of Freemail, which is v0.2.3.2. Sending should work. Receiving should work with the official master branch [5] after it fixes the current build problems. [6] Compared to the previous release, among other things it includes my change which makes searching the inbox for messages more flexible. [7] To send a pull request: hg fn-pull-request --wot operhiem1/pyProbe To receive a pull request: hg fn-check-notifications --wot operhiem1 One problem with finding a repository using WoT is that someone controlling an identity might maliciously try to be confused with another. If the nicknames are identical the only way to distinguish them is identity ID, and Infocalypse will not select an identity if there are multiple matches. WoT nicknames support Unicode, so all of the following valid nicknames are different. The first contains only ASCII characters, and the subsequent ones each substitute one letter with one from the Cryllic alphabet. [8] 1. operhiem1 2. оperhiem1 3. oрerhiem1 4. opеrhiem1 5. operhіem1 6. operhiеm1 Depending on the font these can look identical. If someone clicks a link or copies text that provides a nickname, they might be tricked into selecting an identity they did not intend to. Including part of the identity ID in the identifier makes this much more difficult, but I have a plan to address this problem without losing much convenience. I will implement always printing the full nickname and identity ID when an identifier is resolved, so that people can ensure it is what they were expecting. It will also set a Mercurial path that will always point to that repository. In Mercurial, a path is a constant name for a repository. It is similar to what git calls a remote. If you want to try Infocalypse and the (currently poorly designed and with no useful functions - I will fix it) DVCS web interface, the source code is available. [9][10] If you want directions on setting up Infocalypse to begin with, see here. [11] I hope that made sense. If not, please ask and I will be happy to clarify. It's been very fun working on this project. Thanks, operhiem1 PS: It was really tempting to sign with a Cryllic variation. Would you be able to tell? [0] https://wiki.freenetproject.org/Web_of_Trust [1] freenet:USK@0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/137/trust.htm [2] https://github.com/tmarkus/LessCrappyWebOfTrust [3] https://emu.freenetproject.org/pipermail/devl/2013-July/037223.html [4] https://github.com/freenet/plugin-WoT-staging/pull/17 [5] https://github.com/freenet/plugin-Freemail-staging [6] https://github.com/freenet/plugin-Freemail-staging/pull/17 [7] https://github.com/Thynix/Freemail/commit/8fe160141ce647176cea51b80291e3e2a1ac005f [8] https://en.wikipedia.org/wiki/Cyrillic_characters_in_Unicode#Basic_Cyrillic_alphabet [9] https://bitbucket.org/operhiem1/wiki_hacking [10] https://github.com/Thynix/plugin-DVCS-WebUI [11] http://mercurial.selenic.com/wiki/Infocalypse
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Devl mailing list Devl@freenetproject.org https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl