gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r2736 - GNUnet-docs/WWW


From: grothoff
Subject: [GNUnet-SVN] r2736 - GNUnet-docs/WWW
Date: Fri, 5 May 2006 02:29:42 -0700 (PDT)

Author: grothoff
Date: 2006-05-05 02:29:39 -0700 (Fri, 05 May 2006)
New Revision: 2736

Modified:
   GNUnet-docs/WWW/download.php3
   GNUnet-docs/WWW/faq.php3
   GNUnet-docs/WWW/hacking_afs.php3
   GNUnet-docs/WWW/protocol_cs_afs.php3
Log:
addressing 1031

Modified: GNUnet-docs/WWW/download.php3
===================================================================
--- GNUnet-docs/WWW/download.php3       2006-05-05 07:54:38 UTC (rev 2735)
+++ GNUnet-docs/WWW/download.php3       2006-05-05 09:29:39 UTC (rev 2736)
@@ -170,8 +170,8 @@
 LIV(extlink_("download/GNUnet-0.7.0c.tar.gz","GNUnet-0.7.0c.tar.gz (1945 
kb)"));
 LIV(extlink_("download/gnunet-gtk-0.7.0c.tar.bz2", "gnunet-gtk-0.7.0c.tar.bz2 
(488 kb)"));
 LIV(extlink_("download/gnunet-gtk-0.7.0c.tar.gz" , "gnunet-gtk-0.7.0c.tar.gz 
(673 kb)"));
-LIV(extlink_("/libextractor/download/libextractor-0.5.12.tar.gz",
-             "libextractor-0.5.12.tar.gz (7750 kb)"));
+LIV(extlink_("/libextractor/download/libextractor-0.5.13.tar.gz",
+             "libextractor-0.5.13.tar.gz (7750 kb)"));
 echo "</ul>\n";
 BP();
 W("The current development code is available from our Subversion repository.");

Modified: GNUnet-docs/WWW/faq.php3
===================================================================
--- GNUnet-docs/WWW/faq.php3    2006-05-05 07:54:38 UTC (rev 2735)
+++ GNUnet-docs/WWW/faq.php3    2006-05-05 09:29:39 UTC (rev 2736)
@@ -6,167 +6,85 @@
 
 H2("Questions");
 
+H3("General");
+
 echo "<ul>\n";
-LIV(extlink_("#raq","What do I do if my question is not answered here?"));
-LIV(extlink_("#license","Is the code free?"));
-LIV(extlink_("#next","When are you going to release the next version?"));
-LIV(extlink_("#gui","Is there a GUI?"));
-LIV(extlink_("#GNUweb","Is it possible to use GNUnet via a browser as an 
anonymous WWW?"));
-LIV(extlink_("#test","I cannot find anything. How can I test if it works?"));
-LIV(extlink_("#tell","How can I see which files I have indexed/inserted 
(names, descriptions, keywords)?"));
-LIV(extlink_("#compare","How does GNUnet compare to other file-sharing 
applications?"));
-LIV(extlink_("#anonymity","What do you mean by &#8220;anonymity&#8221;?"));
+LIV(extlink_("#raq",       "What do I do if my question is not answered 
here?"));
+LIV(extlink_("#compare",   "How does GNUnet compare to other file-sharing 
applications?"));
+LIV(extlink_("#anonymity", "What do you mean by &#8220;anonymity&#8221;?"));
 LIV(extlink_("#accounting","How does &#8220;accounting&#8221; work?"));
-LIV(extlink_("#shapers","Why should I not use an external traffic shaper?"));
-LIV(extlink_("#firewall","How do I have to configure my firewall?"));
-LIV(extlink_("#speed","Isn&#8217;t all this encryption going to make things 
totally slow?"));
-LIV(extlink_("#lastblocks", "Why is downloading the last few blocks so 
slow?"));
-LIV(extlink_("#attacks","Are there any known attacks?"));
-LIV(extlink_("#platform","On which platforms does GNUnet run?"));
-LIV(extlink_("#hostkey","CRC errors: the deleted hostkey problem."));
-LIV(extlink_("#database","What is the right database for me?"));
-LIV(extlink_("#delete","<tt>gnunet-unindex</tt> behaves in unexpected ways."));
-LIV(extlink_("#spam","How does GNUnet handle spam? or: what are namespaces and 
directories good for?"));
+LIV(extlink_("#license",   "Is the code free?"));
+LIV(extlink_("#speed",     "Isn&#8217;t all this encryption going to make 
things totally slow?"));
+LIV(extlink_("#attacks",   "Are there any known attacks?"));
+echo "</ul>\n";
+
+
+H3("Features");
+
+echo "<ul>\n";
+LIV(extlink_("#next",   "When are you going to release the next version?"));
+LIV(extlink_("#gui" ,   "Is there a graphical user interface (GUI)?"));
+LIV(extlink_("#tui" ,   "How can I use GNUnet from the command line?"));
+LIV(extlink_("#GNUwww", "Is it possible to surf the WWW anonymously with 
GNUnet?"));
+LIV(extlink_("#GNUweb", "Is it possible to access GNUnet via a browser as an 
anonymous WWW?"));
+LIV(extlink_("#new",    "I have some great idea for a new feature, what should 
I do?"));
+echo "</ul>\n";
+
+
+H3("Configuration and Installation");
+
+echo "<ul>\n";
+LIV(extlink_("#platform", "On which platforms does GNUnet run?"));
+LIV(extlink_("#database", "What is the right database for me?"));
+LIV(extlink_("#firewall", "How do I have to configure my firewall?"));
+LIV(extlink_("#shapers",  "Why should I not use an external traffic shaper?"));
+LIV(extlink_("#keywords", "Why do you require GNU libextractor?"));
+LIV(extlink_("#dependencies", "What are all of the dependencies for building 
GNUnet?"));
+echo "</ul>\n";
+
+
+H3("Error messages and bugs");
+
+echo "<ul>\n";
+LIV(extlink_("#assertion","I get error messages of the form &quot;Failure at 
FILE.c:LINE&quot;.  What is going on?"));
+LIV(extlink_("#hostkey",  "Checksum error: the deleted hostkey problem."));
 LIV(extlink_("#knownbugs","Are there any known bugs?"));
-LIV(extlink_("#bugs","How do I report a bug?"));
-LIV(extlink_("#keywords","Is it possible to automatically enter keywords for 
files?"));
-LIV(extlink_("#framework","Why did you change the project description from an 
anonymous file-sharing network to a peer-to-peer framework?"));
+LIV(extlink_("#bugs",     "How do I report a bug?"));
 echo "</ul>\n";
-H2("Answers");
-ANCHOR("raq");H3("What do I do if my question is not answered here?");
-BP();
-W("There are many other sources of information.");
-W("You can read additional %s, ask the question on one of the %s.",
-  ARRAY(intlink_("documentation.php3", "documentation"),
-       intlink_("mailinglist.php3","mailing lists")));
-EP();
 
-ANCHOR("license");H3("Is the code free?");
 
-BP();
-W("GNUnet is free software, available under the %s (GPL).",
-  extlink_("http://www.gnu.org/copyleft/gpl.html";,
-           "GNU Public License"));
-W("You are free to run, distribute or modify the code under the terms stated 
in that license.");
-W("We are a part of the %s.",
-  extlink_("http://www.gnu.org/","GNU project"));
-EP();
-ANCHOR("next");H3("When are you going to release the next version?");
-BP();
-W("The general answer is, when it is ready.");
-W("A better answer may be, earlier if you contribute (test, debug, code, 
document).");
-W("Every release will be anounced on the %s mailing list and on %s.",
-  ARRAY(extlink_("http://mail.gnu.org/mailman/listinfo/info-gnunet";,
-        "Announcements"),
-       extlink_("http://freshmeat.net/projects/gnunet/";,
-        "freshmeat")));
-W("You can subscribe to the mailing list or to the project on freshmeat to 
automatically receive a notification.");
-EP();
-ANCHOR("gui");H3("Is there a GUI?");
-BP();
-W("Yes, it&#8217;s called <tt>gnunet-gtk</tt>.");
-W("The GUI supports searching, downloading and inserting files.");
-P();
-W("If you prefer the shell for everything, that&#8217;s easy, too.");
-W("First, use <tt>gnunet-search</tt> to search for content:");
-P();
-PRE("$ ~/bin/gnunet-search GPL\n" .
-    
"gnunet://ecrs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992:\n"
 .
-    "gnunet-download -o &quot;COPYING&quot; 
gnunet://ecrs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992\n"
 .
-    "                    filename: COPYING\n" .
-    "                 description: The GNU Public License\n" .
-    "                      author: RMS\n" .
-    "            publication date: Sat Jun 25 08:29:13 2005");
-P();
-W("The output above is the result of searching for the keyword 
&#8220;GPL&#8221;.");
-W("<tt>gnunet-search</tt> will immediately start searching GNUnet and print 
new results (no duplicates) to the screen.");
-W("The first line is the information that is required to retrieve the file 
(query-hash, key-hash, and the size of the file, here 17992 bytes).");
-P();
-W("This is followed by additional information about the file.");
-W("In order to download the file, use");
-P();
-PRE("$ gnunet-download -o &quot;COPYING&quot; -- 
gnunet://ecrs/chk/N8RCF3TETLRU9CV1PAS7M2H9QDB36AE3.K9JO8IP7KTNFO23S3VB4TFUKLD7SO5AS.0466DC92.17992");
-P();
-W("where <tt>COPYING</tt> is the suggested filename.");
-P();
-W("If you want to add content to GNUnet, use");
-EP();
-PRE("$ gnunet-insert -m &quot;description:The GNU Public License&quot; -k GPL 
-k GNU -m mimetype:text/plain -m author:RMS COPYING");
-P();
-W("where <tt>COPYING</tt> is the filename and the arguments are the 
description of the file (<tt>-m</tt> options) and <tt>-k</tt> is used to 
specify additional keywords.");
-EP();
+H3("Common problems");
 
-ANCHOR("GNUweb");H3("Is it possible to use GNUnet via a browser as an 
anonymous WWW?");
-BP();
-W("There is currently no proxy (like fproxy in Freenet) for GNUnet that would 
make it accessible with a browser.");
-W("It is possible to build such a proxy and all one needs to know is the 
protocol used between browser and proxy and a swift look at the sources in 
<tt>src/applications/fs/tools/</tt>.");
-P();
-W("The real question is, whether or not this is a good idea.");
-W("In order to achieve anonymity, the AFS file sharing service implemented on 
top of GNUnet has a much higher latency than the WWW.");
-W("Thus, the experience of browsing the web will usually be hindered 
significantly by these delays (potentially several minutes per page!).");
-P();
-W("If you still want to write a proxy, you are welcome to send us code and 
join the developer team.");
-EP();
+echo "<ul>\n";
+LIV(extlink_("#test",       "I cannot find anything. How can I test if it 
works?"));
+LIV(extlink_("#lastblocks", "Why is downloading the last few blocks so 
slow?"));
+LIV(extlink_("#delete",     "<tt>gnunet-unindex</tt> behaves in unexpected 
ways."));
+LIV(extlink_("#tell",       "How can I see which files I have indexed/inserted 
(names, descriptions, keywords)?"));
+echo "</ul>\n";
 
-ANCHOR("test");H3("I cannot find anything. How can I test if it works?");
-BP();
-W("How can I test if it works?");
-W("Searches can return no results if no matching content is found.");
-W("For a simple test, it is suggested to search for <tt>GPL</tt>.");
-W("The GNU Public License was inserted under that keyword on the permanent 
node on <tt>gnunet.org</tt>.");
-W("This test may of course fail if <tt>gnunet.org</tt> is temporarily not 
available.");
-W("Common other problems are:");
-EP();
+
+H3("Using GNUnet");
+
 echo "<ul>\n";
-LI("firewall (UDP and TCP ports 2086 should be open)");
-LI("not connected (it may take a couple of minutes)");
-LI("typos (if you&#8217;re off by one letter, it won&#8217;t work)");
+LIV(extlink_("#spam", "Why should I insert directories instead of individual 
files?"));
 echo "</ul>\n";
 
-BP();
-W("For a test of slightly larger scale, you can try to download another 
&#8220;official&#8221; test content by searching for keyword <tt>alien</tt> or 
go directly for the content using:");
-P();
-PRE("$ gnunet-download -o &quot;Aliensong.mpeg&quot; -- 
gnunet://ecrs/chk/MN8P2LS383SRU0N68OPRBU28J0MIOPFS1BTA7K76SJUFONHHGE6LJ33PU45ASNUTGT4AP70LQUOSN79C2IODFA7D4IU0HR9K3ASIHE8.E561C1GJ1SR99AMBM7L87RF2HKGE8L7D6JLIUGT5G7UBDPCT1FNDCMV15T00LD0U92C6JE3M93JE23PJKVF2AJRHIB3VCIC41952DOO.3201028");
 
-P();
-W("Still not satisfied?");
-W("Use your imagination for guessing keywords, or try common mime-types as 
keywords (such as <tt>application/pdf</tt>, <tt>application/x-zip</tt>, 
<tt>image/jpeg</tt> or <tt>audio/mp3</tt>).");
-EP();
+H2("Answers");
 
-ANCHOR("tell"); H3("How can I see which files I have indexed/inserted (names, 
descriptions, keywords)?");
+H3("General");
+
+ANCHOR("raq");
+H4("What do I do if my question is not answered here?");
 BP();
-W("For building directories, GNUnet keeps track of all file identifiers that 
it has so far encountered, including search results, inserted or indexed files 
and files mentioned in downloaded directories.");
-W("This information is stored in plaintext to allow building of directories.");
-W("Users should run <tt>gnunet-directory -t</tt> to start tracking this 
information.");
-W("Note that the data is kept locally in the GNUnet directory and never send 
out into the network.");
-W("You can inspect the information with <tt>gnunet-directory -l</tt>.");
-W("It is probably a good idea to clean this database of your activities from 
time to time.");
-W("You can run <tt>gnunet-directory -k</tt> to remove the information 
collected so far (and to stop tracking).");
-W("Once that database has been cleaned, GNUnet can no longer tell which files 
you inserted, but it can tell you which files are indexed.");
-P();
-W("The reason why GNUnet can not tell you which files were inserted is the 
same reason, why we distinguish between indexing and insertion: deniability.");
-W("The primary use of insertion is to give an adversary no easy way to figure 
out what files are stored on your computer, and that under the assumption that 
the adversary takes full control of you machine.");
-W("Thus, GNUnet was designed to not require any information that would allow 
it to reconstruct the inserted file without the appropriate keyword (read: 
password).");
-W("If the adversary already knows the exact content, it is still possible for 
the adversary that has control of your machine to verify that the content is 
present.");
-W("The best defence against that is to insert the content with a low priority 
and to turn on <tt>ACTIVEMIGRATION</tt>.");
-W("Then you can plausibly claim that the content migrated to your node from 
another peer, and that you had no way of knowing that it was there.");
-W("In either case, how well deniability serves you will depend on your local 
court.");
-W("Since there are countries where breathing can get you into jail, saying 
that you were not able to tell what your computer was storing may not be 
sufficient.");
-W("Note that breaking your anonymity and taking control of your computer are 
steps that the adversary needs to take first, before you need to resort to 
deniability.");
-P();
-W("Indexed content is a slightly different story.");
-W("For indexed content, the goal for GNUnet is still to make it difficult for 
the adversary to establish from which machine the content originates 
(anonymity).");
-W("For indexed content GNUnet keeps links to the indexed files, typically in 
<tt>/var/lib/GNUnet/data/shared/</tt>.");
-W("GNUnet uses the list to locate the block corresponding to a request.");
-W("Do NOT edit the directory by hand.");
-W("Use <tt>gnunet-unindex</tt> to remove files from the directory.");
-P();
-W("Also, do not move or change indexed files since GNUnet relies on the paths 
of indexed files to be constant.");
-W("If you must move an indexed file, use first <tt>gnunet-unindex</tt>, then 
move the file, and then use <tt>gnunet-insert</tt> to re-insert the file.");
-// W("Or, alternatively, implement <tt>gnunet-move</tt> and submit the patch 
:-).");
+W("There are many other sources of information.");
+W("You can read additional %s, ask the question on one of the %s.",
+  ARRAY(intlink_("documentation.php3", "documentation"),
+       intlink_("mailinglist.php3","mailing lists")));
+EP();
 
-EP();
-ANCHOR("compare"); H3("How does GNUnet compare to other file-sharing 
applications?");
+ANCHOR("compare");
+H4("How does GNUnet compare to other file-sharing applications?");
 BP();
 W("As opposed to Napster and Gnutella, GNUnet was designed with security in 
mind as the highest priority.");
 W("We intend on producing a network with high security guarantees.");
@@ -351,7 +269,8 @@
 <?php
 
 
-ANCHOR("anonymity"); H3("What do you mean by &#8220;anonymity&#8221;?");
+ANCHOR("anonymity"); 
+H4("What do you mean by &#8220;anonymity&#8221;?");
 BP();
 W("Anonymity is the lack of distinction of an individual from a (large) 
group.");
 W("A central goal for anonymous file-sharing in GNUnet is to make all users 
(peers) form a group and to make communications in that group anonymous, that 
is, nobody (but the initiator) should be able to tell which of the peers in the 
group originated the message.");
@@ -370,7 +289,9 @@
 W("Since intermediaries have no means of decrypting the content and are (in 
all sane legal systems) thus not legally responsible for them (if you use the 
Internet to send an encrypted E-mail, your Internet Service Provider (ISP) will 
typically not be held responsible for the content that its servers transmit; in 
GNUnet, every peer plays the role of an ISP, providing Internet services to 
other peers).");
 EP();
 
-ANCHOR("accounting");H3("How does &#8220;accounting&#8221; work?");
+
+ANCHOR("accounting");
+H4("How does &#8220;accounting&#8221; work?");
 BP();
 W("GNUnet is based on a trust-based economic model.");
 W("Each node is forming an <em>opinion</em> on all the other nodes it is in 
contact with.");
@@ -384,8 +305,6 @@
   ARRAY(intlink_("encoding.php3","GNUnet encoding"),
        extlink_("download/ecrs.ps","ECRS"),
        intlink_("encoding.php3","encoding page")));
-
-
 P();
 W("The economic model is designed in a way that the damage that a malicious 
node can do is bounded by the formula");
 EP();
@@ -399,30 +318,21 @@
 W("Epsilon is a number smaller than the excess capacity of the network, 
whereas the excess capacity of the network are wasted resources (idle CPUs, 
idle network connections).");
 EP();
 
-ANCHOR("shapers");H3("Why should I not use an external traffic shaper?");
-BP();
-W("GNUnet %s decides who to serve when the system is loaded.",
-  extlink_("#accounting","accounting"));
-W("Packets are sent and dropped based on their priority and current load.");
-W("External shapers (like <em>token bucket filter</em>) can&#8217;t make this 
distinction and treat all GNUnet traffic as equal.");
-W("You should set GNUnets internal bandwidth limits to reflect your true 
configuration and what you can afford and <em>not use any external shaping for 
GNUnet</em>.");
-W("It&#8217;s much better to have the limits enforced by <tt>gnunetd</tt> than 
by an external mechanism.");
-EP();
 
-ANCHOR("firewall");H3("How do I have to configure my firewall?");
+ANCHOR("license");
+H4("Is the code free?");
 BP();
-W("GNUnet uses the ports 2086 and 1080 by default.");
-W("Configure your firewall to accept packets to the ports 2086 and 1080 (TCP 
and UDP) for the machine running the GNUnet daemon <tt>gnunetd</tt>.");
-W("If your firewall is a NAT box, forward packets to your GNUnet machine's 
ports 2086 and 1080 and tweak the configuration file gnunetd.conf (sections 
NETWORK, LOAD, UDP, TCP and NAT) to use the external IP of the NAT box.");
-W("Port 2087 is used for communication between <tt>gnunetd</tt> and the client 
tools as <tt>gnunet-gtk</tt>, <tt>gnunet-search</tt> etc.");
-W("There is no need to open port 2087 to the rest of the Internet.");
-P();
-W("Port 2086 is used for GNUnet's own transmission protocol, HTTP encapsulated 
GNUnet packets (\"HTTP transport\") are transmitted through port 1080 by 
default.");
-W("The HTTP transport is not necessarily required and can be disabled in 
GNUnet's configuration file.");
-W("Disabling it on firewalled systems is important, because available 
transports are advertised to other peers and activated but broken transports 
result in decreased reachability.");
+W("GNUnet is free software, available under the %s (GPL).",
+  extlink_("http://www.gnu.org/copyleft/gpl.html";,
+           "GNU Public License"));
+W("You are free to run, distribute or modify the code under the terms stated 
in that license.");
+W("We are a part of the %s.",
+  extlink_("http://www.gnu.org/","GNU project"));
 EP();
 
-ANCHOR("speed"); H3("Isn&#8217;t all this encryption going to make things 
totally slow?");
+
+ANCHOR("speed"); 
+H4("Isn&#8217;t all this encryption going to make things totally slow?");
 BP();
 W("The answer to this is, that encryption is incredibly fast.");
 W("GNUnet uses mostly AES-256, a very fast and secure cipher.");
@@ -445,29 +355,10 @@
 W("Complete decentralization is very costly and we should thus not expect to 
outperform the centralized solution, especially not if we also want 
anonymity.");
 EP();
 
-ANCHOR("lastblocks"); H3("Why is downloading the last few blocks so slow?");
 
+ANCHOR("attacks"); 
+H4("Are there any known attacks?");
 BP();
-W("Sometimes when downloading large files from GNUnet AFS, it may take a long 
time to get the last remaining blocks of the file.");
-W("This is often not an error, and if it happens, it does not automatically 
mean that the blocks must have disappeared from the network (though that is 
possible).");
-W("The explanation is as follows (its a bit technical).");
-EP();
-echo "<ul>\n";
-LI("The system starts with a fairly low TTL and probes going higher each time 
no response arrives.");
-LI("The last block is likely (as in always) to have been requested multiple 
times without success (peer busy processing other requests, message-drops, 
etc.).");
-LI("The TTL of the last block is always significantly higher than the 
(successful) ttl of the first block.");
-LI("A higher TTL <em>also</em> means that the retransmission frequency is 
lower, so GNUnet will also attempt to get that block less frequently.");
-LI("Finally, on occasion the peer may have depleted whatever initial trust it 
had in the network by the time it gets to the last block, putting it into a 
further disadvantage.");
-LI("Finally finally, a peer without trust only gets effective TTL of 0 (except 
locally), so it will now compete with other queries (in particular queries 
still in slots from the download; now, the routing table has a small resistance 
(TTL_DECREMENT) before replacing a pending query with one with a higher TTL, 
adding yet another 5s or so.");
-echo "</ul>\n";
-BP();
-W("To summarize, there are plenty of reasons why the download MUST go slower 
at the end.");
-W("However, the GNUnet developers are still investigating ways to make it 
faster.");
-EP();
-
-ANCHOR("attacks"); H3("Are there any known attacks?");
-
-BP();
 W("Generally, there is the possibility of a known plaintext attack on 
keywords, but since the user has control over the keywords that are associated 
with the content he inserts, the user can take advantage of the same techniques 
used to generate reasonable passwords to defend against such an attack.");
 W("In any event, we are not trying to <i>hide</i> content; thus, unless the 
user is trying to insert information into the network that can only be shared 
with a small group of people, there is no real reason to try to obfuscate the 
content by choosing a difficult keyword anyway.");
 W("Note that it is not necessary to use keywords (or even intelligible 
keywords) at all.");
@@ -477,29 +368,233 @@
 W("If the attacker has significantly more resources (bandwidth, control over 
Internet routers, many peers), anonymity can theoretically always be broken.");
 W("In fact, this applies to all other systems that provide anonymity.");
 W("Unlike other designs, the degree of anonymity that can be achieved in 
GNUnet depends mostly on which fraction of its resources each peer spends on 
its own requests.");
-
 P();
-
 W("Since this is a project in development, you can find a list of problems or 
report them using the %s system.",
   extlink_("https://gnunet.org/mantis/","Mantis";));
+EP();
 
+
+
+H3("Features");
+
+ANCHOR("next");
+H4("When are you going to release the next version?");
+BP();
+W("The general answer is, when it is ready.");
+W("A better answer may be, earlier if you contribute (test, debug, code, 
document).");
+W("Every release will be anounced on the %s mailing list and on %s.",
+  ARRAY(extlink_("http://mail.gnu.org/mailman/listinfo/info-gnunet";,
+        "Announcements"),
+       extlink_("http://freshmeat.net/projects/gnunet/";,
+        "freshmeat")));
+W("You can subscribe to the mailing list or to the project on freshmeat to 
automatically receive a notification.");
 EP();
 
-ANCHOR("platform"); H3("On which platforms does GNUnet run?");
 
+ANCHOR("gui");H4("Is there a graphical user interface?");
 BP();
+W("Yes, there is at least one graphical user interface it&#8217;s called 
<tt>gnunet-gtk</tt>.");
+W("Note that <tt>gnunet-gtk</tt> is a separate download.");
+W("The GUI supports searching, downloading and inserting files.");
+EP();
+
+
+ANCHOR("tui");H4("How can I use GNUnet from the command line?");
+BP();
+W("Yes, except for image previews pretty much all features can be accessed 
with various command line tools.");
+W("Use <tt>gnunet-search</tt> to search for content:");
+P();
+PRE("$ ~/bin/gnunet-search GPL\n" .
+    
"gnunet://ecrs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992:\n"
 .
+    "gnunet-download -o &quot;COPYING&quot; 
gnunet://ecrs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992\n"
 .
+    "                    filename: COPYING\n" .
+    "                 description: The GNU Public License\n" .
+    "                      author: RMS\n" .
+    "            publication date: Sat Jun 25 08:29:13 2005");
+P();
+W("The output above is the result of searching for the keyword 
&#8220;GPL&#8221;.");
+W("<tt>gnunet-search</tt> will immediately start searching GNUnet and print 
new results (no duplicates) to the screen.");
+W("The first line is the information that is required to retrieve the file 
(query-hash, key-hash, and the size of the file, here 17992 bytes).");
+P();
+W("This is followed by additional information about the file.");
+W("In order to download the file, use");
+P();
+PRE("$ gnunet-download -o &quot;COPYING&quot; -- 
gnunet://ecrs/chk/N8RCF3TETLRU9CV1PAS7M2H9QDB36AE3.K9JO8IP7KTNFO23S3VB4TFUKLD7SO5AS.0466DC92.17992");
+P();
+W("where <tt>COPYING</tt> is the suggested filename.");
+P();
+W("If you want to add content to GNUnet, use");
+EP();
+PRE("$ gnunet-insert -m &quot;description:The GNU Public License&quot; -k GPL 
-k GNU -m mimetype:text/plain -m author:RMS COPYING");
+P();
+W("where <tt>COPYING</tt> is the filename and the arguments are the 
description of the file (<tt>-m</tt> options) and <tt>-k</tt> is used to 
specify additional keywords.");
+EP();
+
+ANCHOR("GNUwww");H4("Is it possible to surf the WWW anonymously with GNUnet?");
+BP();
+W("It is not possible use GNUnet for anonymous browsing at this point.");
+W("We recommend that you use %s for anonymous surfing.",
+  extlink_("http://tor.eff.org/";, "tor"));
+EP();
+
+ANCHOR("GNUweb");H4("Is it possible to access GNUnet via a browser as an 
anonymous WWW?");
+BP();
+W("There is currently no proxy (like fproxy in Freenet) for GNUnet that would 
make it accessible with a browser.");
+W("It is possible to build such a proxy and all one needs to know is the 
protocol used between browser and proxy and a swift look at the sources in 
<tt>src/applications/fs/tools/</tt>.");
+P();
+W("The real question is, whether or not this is a good idea.");
+W("In order to achieve anonymity, the file sharing service implemented on top 
of GNUnet has a much higher latency than the WWW.");
+W("Thus, the experience of browsing the web will usually be hindered 
significantly by these delays (potentially several minutes per page!).");
+P();
+W("If you still want to write a proxy, you are welcome to send us code and 
join the developer team.");
+EP();
+
+
+ANCHOR("new");H4("I have some great idea for a new feature, what should I 
do?");
+BP();
+W("Sadly, we have many more feature requests than we can possibly implement.");
+W("The best way to actually get a new feature implemented is to do it yourself 
-- and send us a patch.");
+W("If it is a larger effort, you might want to ask on the mailinglists for 
some feedback first.");
+W("Also, check on %s to see if the feature is already being worked on.",
+  extlink_("https://gnunet.org/mantis/";, "Mantis"));
+W("A list of planned long-term features is in the %s file.",
+  extlink_("https://gnunet.org/svn/GNUnet/todo";));
+W("If you cannot code you can submit a feature request to Mantis.");
+W("Please double-check that such a request does not already exist.");
+EP();
+
+
+
+H3("Configuration and Installation");
+
+ANCHOR("platform");
+H4("On which platforms does GNUnet run?");
+BP();
 W("GNUnet is being developed and tested under Debian GNU/Linux for i386.");
 W("We have reports of working versions on FreeBSD, NetBSD, OpenBSD, Solaris 
and OS X.");
+W("However, those reports are not recent, if you can or cannot get GNUnet to 
work on those systems please let us know.");
 W("GNUnet should work on big-endian architectures, including Linux/PPC.");
 W("GNUnet has been ported to Win32.");
 W("Patches to make it work on other platforms are always appreciated.");
 W("If you had success running GNUnet on any other platform, please report!");
+EP();
 
+
+ANCHOR("database"); 
+H4("What is the right database for me?");
+BP();
+W("If you are not experienced with databases or GNUnet, you should stick to 
the default which is <tt>sqlite</tt>.");
+W("The <tt>mysql</tt> module requires manual setup, which is described %s.",
+  extlink_("user_afs.php3#mysql","here"));
+W("<tt>mysql</tt> has good performance and the database can be repaired from 
internal failures, but its more difficult to install than any of the 
alternatives.");
 EP();
 
-ANCHOR("hostkey"); H3("Checksum error: the deleted hostkey problem.");
 
+ANCHOR("firewall");
+H4("How do I have to configure my firewall?");
 BP();
+W("GNUnet uses the ports 2086 and 1080 by default.");
+W("Configure your firewall to accept packets to the ports 2086 and 1080 (TCP 
and UDP) for the machine running the GNUnet daemon <tt>gnunetd</tt>.");
+W("If your firewall is a NAT box, forward packets to your GNUnet machine's 
ports 2086 and 1080 and tweak the configuration file gnunetd.conf (sections 
NETWORK, LOAD, UDP, TCP and NAT) to use the external IP of the NAT box.");
+W("Port 2087 is used for communication between <tt>gnunetd</tt> and the client 
tools as <tt>gnunet-gtk</tt>, <tt>gnunet-search</tt> etc.");
+W("There is no need to open port 2087 to the rest of the Internet.");
+P();
+W("Port 2086 is used for GNUnet's own transmission protocol, HTTP encapsulated 
GNUnet packets (\"HTTP transport\") are transmitted through port 1080 by 
default.");
+W("The HTTP transport is not necessarily required and can be disabled in 
GNUnet's configuration file.");
+W("Disabling it on firewalled systems is important, because available 
transports are advertised to other peers and activated but broken transports 
result in decreased reachability.");
+EP();
+
+
+ANCHOR("shapers");
+H4("Why should I not use an external traffic shaper?");
+BP();
+W("GNUnet %s decides who to serve when the system is loaded.",
+  extlink_("#accounting","accounting"));
+W("Packets are sent and dropped based on their priority and current load.");
+W("External shapers (like <em>token bucket filter</em>) can&#8217;t make this 
distinction and treat all GNUnet traffic as equal.");
+W("You should set GNUnets internal bandwidth limits to reflect your true 
configuration and what you can afford and <em>not use any external shaping for 
GNUnet</em>.");
+W("It&#8217;s much better to have the limits enforced by <tt>gnunetd</tt> than 
by an external mechanism.");
+EP();
+
+
+ANCHOR("keywords"); 
+H4("Why do you require GNU libextractor?");
+BP();
+W("GNUnet needs keywords such that other users can find the files.");
+W("Typing in lots of keywords is of course a major pain.");
+W("Other systems like gnutella typically just use the filenames.");
+W("Using filenames is not a good solution since they are not always very 
descriptive and/or can be a pain to produce for the content provider in the 
first place.");
+P();
+W("GNUnet uses a better approach, which is <strong>keyword 
extraction</strong>.");
+W("The library %s was developed for the purpose of extracting keywords from 
arbitrary files.",
+  extlink_("/libextractor/","libextractor"));
+W("If keywords can easily be extracted from your files, you don&#8217;t have 
to supply keywords by hand.");
+W("<tt>libextractor</tt> can also use the filename as a source for keywords.");
+P();
+W("If you have keywords in a file that should be extracted but the file format 
is not supported by <tt>libextractor</tt>, the API of the library is be simple 
enough that any C hacker who knows the file format should be able to code a 
plugin that will allow you to extract the keywords.");
+W("If you just want filenames, <tt>libextractor</tt> can do those, too.");
+EP();
+
+
+ANCHOR("dependencies"); 
+H4("What are all of the dependencies for building GNUnet?");
+BP();
+W("The short answer is, that we cannot really tell you.");
+W("The reason is, that this depends a lot on your distribution.");
+W("For example, we use <tt>libgcrypt</tt>, which in turn requires 
<tt>libgpg-error</tt>.");
+W("However, most distributions would put these two libraries into one 
package.");
+W("Similarly, dependencies for GTK and MySQL are not always identical.");
+W("Finally, where does the list end?  Should we list <tt>libc6</tt>, 
<tt>zlib</tt>, <tt>bzip2</tt>, <tt>xlib</tt>, <tt>glib</tt>?");
+W("Also, many dependencies are optional.");
+W("You can use GNUnet without a graphical user interface.");
+W("However, even if you do not use GNUnet with a GUI, you might be using a 
<tt>libextractor</tt> binary that is linked against GTK-pixbuf to compute 
thumbnails.");
+P();
+W("What we have done instead is list all of the top-level dependencies for 
Debian GNU/Linux in the %s file.",
+  extlink("https://gnunet.org/svn/GNUnet/README.debian";, "README.debian"));
+W("This list is for the specific Debian version that most GNUnet developers 
are using.");
+W("It is also only detailing the top-level packages necessary to compile 
GNUnet.");
+W("Those packages in turn depend on other packages, which are not listed.");
+W("For example, the list will include <tt>libextractor-dev<tt> but not 
<tt>libextractor1c2a</tt> which maybe required by <tt>libextractor-dev</tt>.");
+W("In other words, <tt>apt-get</tt> is your friend, and if your distribution 
does not support automatic download of transitive dependencies you might want 
to consider switching -- at least we cannot really help you with a complete 
list in that case.");
+P();
+W("Note that the Debian package list should still be useful for you even if 
you are not running Debian.");
+W("Other distributions are likely to have similar packages.");
+P();
+W("Finally, please note that <tt>configure</tt> will succeed even if a 
suitable version of MySQL or sqLite is not detected.");
+W("The reason is, that (theoretically) you might be compiling for a 
client-only system, or you might not care about anonymous file-sharing.");
+W("If you do want to use file-sharing, please read the final lines printed by 
configure to make sure that a suitable database was found.");
+EP();
+
+
+H3("Error messages and bugs");
+
+ANCHOR("assertion");
+H4("I get error messages of the form &quot;Failure at FILE.c:LINE&quot;.  What 
is going on?");
+BP();
+W("We use a generic error message in GNUnet to indicate that something went 
wrong.");
+W("The cause is usually a bug or some data corruption on the network.");
+W("Note that the bug does not necessarily have to be in the current version -- 
the problem could be caused by another peer running a different version of 
GNUnet.");
+W("Similarly, the problem might be anything from completely harmless to 
rendering your peer useless.");
+W("In a stable, production release we would disable these messages, but for 
now we want to know about those problems.");
+W("Consequently, please report them to %s (after checking that they have not 
already been reported).",
+  extlink_("https://gnunet.org/mantis/","Mantis";));
+W("Of course, if a corresponding report already exists, feel free to add a 
note saying that you are also experiencing the problem.");
+P();
+W("We do not provide detailed information about what exactly went wrong in the 
error message for a simple reason -- there are at least 800 different potential 
problems that are reported in this way.");
+W("If we gave 800 specific error messages this would not only increase the 
binary size significantly, it would also drive people translating GNUnet into 
other languages crazy.");
+W("Finally, it takes much less time to write <tt>BREAK()</tt> in the code to 
indicate that something went wrong then to write a detailed explanation of the 
cause that anyone unfamiliar with the code can understand.");
+W("If you want to investigate what went wrong yourself, use the source.");
+P();
+W("Note that we do provided detailed error messages and warnings for problems 
that are likely not bugs in the code and that the user can address.");
+W("Also note that GNUnet is generally quite verbose in its log messages.");
+W("This is mostly useful for diagnosing problems that users report.");
+W("As long as everything seems to work, it is probably safe to ignore 
<tt>WARNING</tt> messages.");
+EP();
+
+
+ANCHOR("hostkey"); 
+H4("Checksum error: the deleted hostkey problem.");
+BP();
 W("Under certain circumstances, <tt>gnunetd</tt> will print warnings 
indicating checksum errors in messages that were received from other nodes.");
 W("This is most of the time not a bug and not a problem.");
 W("Everything is working ok.");
@@ -507,9 +602,7 @@
 W("Each node on GNUnet has a secret, public key.");
 W("When hosts start, they look at the <tt>data/hosts/</tt> directory looking 
for keys and addresses of other nodes on the network.");
 W("It will then cryptographically sign its current network address (say IP and 
port) together with a timestamp and send this, together with the public key of 
the node, to other nodes on the network.");
-
 P();
-
 W("Later, nodes will use this binding of key to address to communicate.");
 W("The binding of a public key to an address would ideally be a one-on-one 
relationship.");
 W("Due to dial-up, DHCP and other dynamic assignments, this may not always be 
the case.");
@@ -517,92 +610,32 @@
 W("A more common scenario is that the <tt>~/.gnunet/.hostkey</tt> file was 
deleted.");
 W("Other nodes on the network may still know the old hostkey and have it bound 
to that host.");
 W("Do not delete the hostkey if you want to avoid this problem!");
-
 P();
-
 W("The reason why we can&#8217;t avoid this (ok, we could just not print the 
error message, but that&#8217;s not the point), is that a malicious host could 
always claim to have any address on the Internet.");
 W("If we have two public keys for the same host, the best we can do is try out 
both.");
-
 P();
-
 W("Checking both is very cheap, and after a while (depending on the timeout 
configured in gnunetd.conf), hostkeys will eventually expire.");
-
 P();
-
 W("You may also receive messages that will result in checksum errors from 
clients that run versions of GNUnet before 0.7.0 (protocol mismatch).");
-
 EP();
-ANCHOR("database"); H3("What is the right database for me?");
-BP();
-W("If you are not experienced with databases or GNUnet, you should stick to 
the default which is <tt>sqlite</tt>.");
-W("The <tt>mysql</tt> module requires manual setup, which is described %s.",
-  extlink_("user_afs.php3#mysql","here"));
-W("<tt>mysql</tt> has good performance and the database can be repaired from 
internal failures, but its more difficult to install than any of the 
alternatives.");
 
-EP();
-ANCHOR("delete"); H3("<tt>gnunet-unindex</tt> behaves in unexpected ways.");
+
+ANCHOR("knownbugs"); H4("Are there any known bugs?");
 BP();
-W("First of all, many things can go seemingly wrong with 
<tt>gnunet-unindex</tt> and one has to understand what exactly 
<tt>gnunet-unindex</tt> does to avoid pitfalls.");
-W("The first thing to recall is that <tt>gnunet-unindex</tt> only unindexes 
blocks from the local database.");
-W("Blocks that have been replicated by other peers are not removed.");
-W("This is why it is possible that a file can still be available after running 
<tt>gnunet-unindex</tt>.");
-W("Also <tt>gnunet-unindex</tt> does <b>not</b> unindex the search-blocks 
associated with keywords.");
-W("Thus searching for the file will still list the file as if it was there.");
-W("Part of the reason for not removing the search-blocks is that the keywords 
used when indexing are not known to <tt>gnunet-unindex</tt>.");
-W("A more elaborate mechanism that uses libextractor to guess which keywords 
could have been used still needs to be implemented.");
-W("In the future we also plan to time-out search-blocks to avoid the 
search-space pollution.");
+W("The list of currently known bugs is available in the %s system.",
+  extlink_("https://gnunet.org/mantis/","Mantis";));
 P();
-W("Another important aspect of <tt>gnunet-unindex</tt> is that it may unindex 
blocks <b>shared</b> with other files or within the same file.");
-W("The reason is that blocks of identical content hash to the same identifier 
and can thus not be distinguished by GNUnet.");
-W("For highly structured content it is possible in practice that two blocks 
are identical.");
-W("GNUnet will then share the storage space for these two blocks.");
-W("When unindexing a file that contains such shared blocks, GNUnet can 
currently not recognize the sharing and will remove the block even if it is 
still used in another context.");
-W("The resulting inconsistencies can result in warnings from 
<tt>gnunet-unindex</tt>, as well as in downloads that do not complete.");
-W("In general, <tt>gnunet-unindex</tt> should be used with caution.");
 
-
-
+W("Some bugs are occasionally reported directly to developers or the developer 
mailing list.");
+W("This is discouraged since developers often do not have the time to feed 
these bugs back into the Mantis database.");
+W("Please report bugs directly to the bug tracking system.");
+W("If you believe a bug is sensitive, you can set its view status to private 
(this should be the exception).");
 EP();
-ANCHOR("spam"); H3("How does GNUnet handle spam? or: what are namespaces and 
directories good for?");
 
-BP();
-W("GNUnet&prime;s ECRS encoding/query strategy doesn&prime;t allow peers to 
benefit from false replies.");
-W("Even small blocks of incorrect response data can be detected instantly, 
resulting in no trust gain for the malicious node.");
-W("If you know the correct ECRS URI for the file you want, no intermediate 
node can cheat by false replies.");
-W("However, this leaves the problem of obtaining the URIs in the first place, 
and unfortunately if anyone can insert files under common keywords, false data 
can be inserted as well.");
-W("There doesn&prime;t seem to be any easy solution to this problem.");
-W("Ranking search results by trust could be one answer in the future.");
-W("Meanwhile, namespaces and directories are a step towards the nonspammable 
direction.");
 
-P();
+ANCHOR("bugs"); 
+H4("How do I report a bug?");
 
-W("Inserting into a namespace requires the user to create a pseudonym first, 
which is equal to a public/private key pair that identifies the namespace.");
-W("(One user can create any number of pseudonyms.)");
-W("Then, pointers to files or directories can be inserted into the 
pseudonym&prime;s namespace, signed by the private key of the pseudonym.");
-W("The signed blocks will be verified by each peer before the blocks are 
accepted or passed along.");
-W("The verification works by checking the validity of the cryptographic 
signature against the public key included in the namespace block, and by 
checking that hashing the public key results in the correct namespace 
identifier.");
-W("Thus, only the user with the private key to the namespace can publish into 
it, making it a nonspammable, secure publishing channel that other users can 
limit their searches to.");
-W("Its worth noting that naturally the pointers found from a namespace can 
point to any files chosen by the pseudonym, even if the actual files were 
inserted by someone else.");
-
-P();
-
-W("Directories are a good way to group files to meaningful collections in 
GNUnet.");
-W("The directories can contain arbitrary number of pointers to namespaces 
(SBlocks), pointers to other directories and pointers to files.");
-W("With directories, users can build networks of content, where not only 
inserted files, but also interesting other content or namespaces can be pointed 
to, just as in WWW.");
-W("Additionally, directories have two nice properties.");
-W("First, they are immutable, meaning that they can&prime;t be tampered with, 
but contain exactly those pointers the publisher intended.");
-W("The second property is that identical files pointed to by two directories 
waste no additional space, even if the directories were built by separate 
users.");
-W("This contrasts strongly to the case where similar files were archived by 
e.g. zip or tar, which could double the space usage over the network
-without any speedups in retrieval time.");
-W("By using directories to group the content enables GNUnet to spread the 
identical file blocks more efficiently.");
-
-P();
-
-W("For more info on using directories and namespaces, see GNUnet online 
documentation, or man page of <tt>gnunet-insert</tt> for examples.");
-
-EP();
-ANCHOR("bugs"); H3("How do I report a bug?");
-
 BP();
 W("Good bug reports enable developers to find and hopefully fix problems 
faster.");
 W("Nobody can or will fix a &#8220;GNUnet does not work for me.&#8221; bug.");
@@ -714,53 +747,151 @@
 echo "</dd>";
 echo "</dl>";
 EP();
-ANCHOR("knownbugs"); H3("Are there any known bugs?");
 
+
+
+H3("Common problems");
+
+ANCHOR("test");
+H4("I cannot find anything. How can I test if it works?");
 BP();
-W("The list of currently known bugs is available in the %s system.",
-  extlink_("https://gnunet.org/mantis/","Mantis";));
+W("How can I test if it works?");
+W("Searches can return no results if no matching content is found.");
+W("For a simple test, it is suggested to search for <tt>GPL</tt>.");
+W("The GNU Public License was inserted under that keyword on the permanent 
node on <tt>gnunet.org</tt>.");
+W("This test may of course fail if <tt>gnunet.org</tt> is temporarily not 
available.");
+W("Common other problems are:");
+EP();
+echo "<ul>\n";
+LI("firewall (UDP and TCP ports 2086 should be open)");
+LI("not connected (it may take a couple of minutes)");
+LI("typos (if you&#8217;re off by one letter, it won&#8217;t work)");
+echo "</ul>\n";
+BP();
+W("For a test of slightly larger scale, you can try to download another 
&#8220;official&#8221; test content by searching for keyword <tt>alien</tt> or 
go directly for the content using:");
 P();
+PRE("$ gnunet-download -o &quot;Aliensong.mpeg&quot; -- 
gnunet://ecrs/chk/MN8P2LS383SRU0N68OPRBU28J0MIOPFS1BTA7K76SJUFONHHGE6LJ33PU45ASNUTGT4AP70LQUOSN79C2IODFA7D4IU0HR9K3ASIHE8.E561C1GJ1SR99AMBM7L87RF2HKGE8L7D6JLIUGT5G7UBDPCT1FNDCMV15T00LD0U92C6JE3M93JE23PJKVF2AJRHIB3VCIC41952DOO.3201028");
+P();
+W("Still not satisfied?");
+W("Use your imagination for guessing keywords, or try common mime-types as 
keywords (such as <tt>application/pdf</tt>, <tt>application/x-zip</tt>, 
<tt>image/jpeg</tt> or <tt>audio/mp3</tt>).");
+EP();
 
-W("Some bugs are occasionally reported directly to developers or the developer 
mailing list.");
-W("This is discouraged since developers often do not have the time to feed 
these bugs back into the Mantis database.");
-W("Please report bugs directly to the bug tracking system.");
-W("If you believe a bug is sensitive, you can set its view status to private 
(this should be the exception).");
 
+ANCHOR("lastblocks"); 
+H4("Why is downloading the last few blocks so slow?");
+
+BP();
+W("Sometimes when downloading large files from GNUnet, it may take a long time 
to get the last remaining blocks of the file.");
+W("This is often not an error, and if it happens, it does not automatically 
mean that the blocks must have disappeared from the network (though that is 
possible).");
+W("The explanation is as follows (its a bit technical).");
 EP();
-ANCHOR("keywords"); H3("Is it possible to automatically enter keywords for 
files?");
+echo "<ul>\n";
+LI("The system starts with a fairly low TTL and probes going higher each time 
no response arrives.");
+LI("The last block is likely (as in always) to have been requested multiple 
times without success (peer busy processing other requests, message-drops, 
etc.).");
+LI("The TTL of the last block is always significantly higher than the 
(successful) ttl of the first block.");
+LI("A higher TTL <em>also</em> means that the retransmission frequency is 
lower, so GNUnet will also attempt to get that block less frequently.");
+LI("Finally, on occasion the peer may have depleted whatever initial trust it 
had in the network by the time it gets to the last block, putting it into a 
further disadvantage.");
+LI("Finally finally, a peer without trust only gets effective TTL of 0 (except 
locally), so it will now compete with other queries (in particular queries 
still in slots from the download; now, the routing table has a small resistance 
(TTL_DECREMENT) before replacing a pending query with one with a higher TTL, 
adding yet another 5s or so.");
+echo "</ul>\n";
+BP();
+W("To summarize, there are plenty of reasons why the download MUST go slower 
at the end.");
+W("However, the GNUnet developers are still investigating ways to make it 
faster.");
+EP();
 
+
+ANCHOR("delete");
+H4("<tt>gnunet-unindex</tt> behaves in unexpected ways.");
 BP();
-W("GNUnet needs keywords such that other users can find the files.");
-W("Typing in lots of keywords is of course a major pain.");
-W("Other systems like gnutella typically just use the filenames.");
-W("Using filenames is not a good solution since they are not always very 
descriptive and/or can be a pain to produce for the content provider in the 
first place.");
-
+W("First of all, many things can go seemingly wrong with 
<tt>gnunet-unindex</tt> and one has to understand what exactly 
<tt>gnunet-unindex</tt> does to avoid pitfalls.");
+W("The first thing to recall is that <tt>gnunet-unindex</tt> only unindexes 
blocks from the local database.");
+W("Blocks that have been replicated by other peers are not removed.");
+W("This is why it is possible that a file can still be available after running 
<tt>gnunet-unindex</tt>.");
+W("Also <tt>gnunet-unindex</tt> does <b>not</b> unindex the search-blocks 
associated with keywords.");
+W("Thus searching for the file will still list the file as if it was there.");
+W("Part of the reason for not removing the search-blocks is that the keywords 
used when indexing are not known to <tt>gnunet-unindex</tt>.");
+W("A more elaborate mechanism that uses libextractor to guess which keywords 
could have been used still needs to be implemented.");
+W("In the future we also plan to time-out search-blocks to avoid the 
search-space pollution.");
 P();
+W("Another important aspect of <tt>gnunet-unindex</tt> is that it may unindex 
blocks <b>shared</b> with other files or within the same file.");
+W("The reason is that blocks of identical content hash to the same identifier 
and can thus not be distinguished by GNUnet.");
+W("For highly structured content it is possible in practice that two blocks 
are identical.");
+W("GNUnet will then share the storage space for these two blocks.");
+W("When unindexing a file that contains such shared blocks, GNUnet can 
currently not recognize the sharing and will remove the block even if it is 
still used in another context.");
+W("The resulting inconsistencies can result in warnings from 
<tt>gnunet-unindex</tt>, as well as in downloads that do not complete.");
+W("In general, <tt>gnunet-unindex</tt> should be used with caution.");
+EP();
 
-W("GNUnet uses a better approach, which is <strong>keyword 
extraction</strong>.");
-W("The library %s was developed for the purpose of extracting keywords from 
arbitrary files.",
-  extlink_("/libextractor/","libextractor"));
-W("If keywords can easily be extracted from your files, you don&#8217;t have 
to supply keywords by hand.");
-W("<tt>libextractor</tt> can also use the filename as a source for keywords.");
 
+ANCHOR("tell"); 
+H4("How can I see which files I have indexed/inserted (names, descriptions, 
keywords)?");
+BP();
+W("For building directories, GNUnet keeps track of all file identifiers that 
it has so far encountered, including search results, inserted or indexed files 
and files mentioned in downloaded directories.");
+W("This information is stored in plaintext to allow building of directories.");
+W("Users should run <tt>gnunet-directory -t</tt> to start tracking this 
information.");
+W("Note that the data is kept locally in the GNUnet directory and never send 
out into the network.");
+W("You can inspect the information with <tt>gnunet-directory -l</tt>.");
+W("It is probably a good idea to clean this database of your activities from 
time to time.");
+W("You can run <tt>gnunet-directory -k</tt> to remove the information 
collected so far (and to stop tracking).");
+W("Once that database has been cleaned, GNUnet can no longer tell which files 
you inserted, but it can tell you which files are indexed.");
 P();
+W("The reason why GNUnet can not tell you which files were inserted is the 
same reason, why we distinguish between indexing and insertion: deniability.");
+W("The primary use of insertion is to give an adversary no easy way to figure 
out what files are stored on your computer, and that under the assumption that 
the adversary takes full control of you machine.");
+W("Thus, GNUnet was designed to not require any information that would allow 
it to reconstruct the inserted file without the appropriate keyword (read: 
password).");
+W("If the adversary already knows the exact content, it is still possible for 
the adversary that has control of your machine to verify that the content is 
present.");
+W("The best defence against that is to insert the content with a low priority 
and to turn on <tt>ACTIVEMIGRATION</tt>.");
+W("Then you can plausibly claim that the content migrated to your node from 
another peer, and that you had no way of knowing that it was there.");
+W("In either case, how well deniability serves you will depend on your local 
court.");
+W("Since there are countries where breathing can get you into jail, saying 
that you were not able to tell what your computer was storing may not be 
sufficient.");
+W("Note that breaking your anonymity and taking control of your computer are 
steps that the adversary needs to take first, before you need to resort to 
deniability.");
+P();
+W("Indexed content is a slightly different story.");
+W("For indexed content, the goal for GNUnet is still to make it difficult for 
the adversary to establish from which machine the content originates 
(anonymity).");
+W("For indexed content GNUnet keeps links to the indexed files, typically in 
<tt>/var/lib/GNUnet/data/shared/</tt>.");
+W("GNUnet uses the list to locate the block corresponding to a request.");
+W("Do NOT edit the directory by hand.");
+W("Use <tt>gnunet-unindex</tt> to remove files from the directory.");
+P();
+W("Also, do not move or change indexed files since GNUnet relies on the paths 
of indexed files to be constant.");
+W("If you must move an indexed file, use first <tt>gnunet-unindex</tt>, then 
move the file, and then use <tt>gnunet-insert</tt> to re-insert the file.");
+EP();
 
-W("If you have keywords in a file that should be extracted but the file format 
is not supported by <tt>libextractor</tt>, the API of the library is be simple 
enough that any C hacker who knows the file format should be able to code a 
plugin that will allow you to extract the keywords.");
-W("If you just want filenames, <tt>libextractor</tt> can do those, too.");
 
+H3("Using GNUnet");
+
 EP();
+ANCHOR("spam"); 
+H4("Why should I insert directories instead of individual files?");
 
-ANCHOR("framework");
-H3("Why did you change the project description from an anonymous file-sharing 
network to a peer-to-peer framework?");
 BP();
+W("GNUnet&prime;s ECRS encoding/query strategy doesn&prime;t allow peers to 
benefit from false replies.");
+W("Even small blocks of incorrect response data can be detected instantly, 
resulting in no trust gain for the malicious node.");
+W("If you know the correct ECRS URI for the file you want, no intermediate 
node can cheat by false replies.");
+W("However, this leaves the problem of obtaining the URIs in the first place, 
and unfortunately if anyone can insert files under common keywords, false data 
can be inserted as well.");
+W("There doesn&prime;t seem to be any easy solution to this problem.");
+W("Ranking search results by trust could be one answer in the future.");
+W("Meanwhile, namespaces and directories are a step towards the nonspammable 
direction.");
+P();
+W("Inserting into a namespace requires the user to create a pseudonym first, 
which is equal to a public/private key pair that identifies the namespace.");
+W("(One user can create any number of pseudonyms.)");
+W("Then, pointers to files or directories can be inserted into the 
pseudonym&prime;s namespace, signed by the private key of the pseudonym.");
+W("The signed blocks will be verified by each peer before the blocks are 
accepted or passed along.");
+W("The verification works by checking the validity of the cryptographic 
signature against the public key included in the namespace block, and by 
checking that hashing the public key results in the correct namespace 
identifier.");
+W("Thus, only the user with the private key to the namespace can publish into 
it, making it a nonspammable, secure publishing channel that other users can 
limit their searches to.");
+W("Its worth noting that naturally the pointers found from a namespace can 
point to any files chosen by the pseudonym, even if the actual files were 
inserted by someone else.");
+P();
+W("Directories are a good way to group files to meaningful collections in 
GNUnet.");
+W("The directories can contain arbitrary number of pointers to namespaces 
(SBlocks), pointers to other directories and pointers to files.");
+W("With directories, users can build networks of content, where not only 
inserted files, but also interesting other content or namespaces can be pointed 
to, just as in WWW.");
+W("Additionally, directories have two nice properties.");
+W("First, they are immutable, meaning that they can&prime;t be tampered with, 
but contain exactly those pointers the publisher intended.");
+W("The second property is that identical files pointed to by two directories 
waste no additional space, even if the directories were built by separate 
users.");
+W("This contrasts strongly to the case where similar files were archived by 
e.g. zip or tar, which could double the space usage over the network
+without any speedups in retrieval time.");
+W("By using directories to group the content enables GNUnet to spread the 
identical file blocks more efficiently.");
+P();
+W("For more info on using directories and namespaces, see GNUnet online 
documentation, or man page of <tt>gnunet-insert</tt> for examples.");
+EP();
 
-W("First of all, the goal to provide the best anonymous file-sharing system 
available is still on our minds.");
-W("Why we want GNUnet to become a framework actually follows this goal.");
-W("If other peer-to-peer applications use the GNUnet framework and tunnel 
their traffic in link-to-link encrypted GNUnet channels, the traffic on the 
GNUnet network and the number of participants increases -- which can boost 
anonymity significantly.");
-W("Furthermore, additional applications would provide us with additional 
programmers and testers which should make the core code even more solid.");
-W("Finally, we believe that certain general features of GNUnet, in particular 
peer discovery, link-to-link encryption, authentication and transport layer 
abstraction are going to be useful for other free software projects, so making 
them easily accessible will benefit free software development as a whole.");
-W("Note that this works only for free software, GNUnet is released entirely 
under the GPL, not the LGPL.");
 
-EP();
 include("html_footer.php3");
 ?>

Modified: GNUnet-docs/WWW/hacking_afs.php3
===================================================================
--- GNUnet-docs/WWW/hacking_afs.php3    2006-05-05 07:54:38 UTC (rev 2735)
+++ GNUnet-docs/WWW/hacking_afs.php3    2006-05-05 09:29:39 UTC (rev 2736)
@@ -15,7 +15,7 @@
 W("The major difference between GAP and DHT is that GAP is expected to achieve 
anonymity whereas DHT is mostly concerned with performance.");
 W("The user interface code consists mostly of straight-forward wrappers around 
the FSUI and ECRS libraries.");
 W("For a description of the user interface from the point of the user, see the 
%s.",
-  intlink_("user_afs.php3", "AFS user documentation"));
+  intlink_("user_afs.php3", "File-sharing user documentation"));
 W("The FS module is what holds the file-sharing system together, connecting 
ECRS, the SQSTORE, the local clients and the routing services.");
 W("The FS module selects between the GAP and DHT routing services depending on 
the desired level of anonymity.");
 P();

Modified: GNUnet-docs/WWW/protocol_cs_afs.php3
===================================================================
--- GNUnet-docs/WWW/protocol_cs_afs.php3        2006-05-05 07:54:38 UTC (rev 
2735)
+++ GNUnet-docs/WWW/protocol_cs_afs.php3        2006-05-05 09:29:39 UTC (rev 
2736)
@@ -1,6 +1,6 @@
 <?php
 include("scripts.php3");
-$title = "GNUnet Documentation: AFS Client-to-Node protocol";
+$title = "GNUnet Documentation: File-Sharing Client-to-Node protocol";
 $description="Protocol between client and node for (anonymous) file sharing";
 include("html_header.php3");
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]