About GNUnet
GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. A first service implemented on top of the networking layer allows anonymous censorship-resistant file-sharing. Anonymity is provided by making messages originating from a peer indistinguishable from messages that the peer is routing. All peers act as routers and use link-encrypted connections with stable bandwidth utilization to communicate with each other. GNUnet uses a simple, excess-based economic model to allocate resources. Peers in GNUnet monitor each others behavior with respect to resource usage; peers that contribute to the network are rewarded with better service.
GNUnet is part of the GNU project. Our official GNU website can be found at http://www.gnu.org/software/gnunet/. GNUnet can be downloaded from this site or the GNU mirrors.
There are two graphical user interfaces for the GNUnet framework. You can download them separately; some screenshots are available.
Why GNUnet?
The first question that developers of any of the dozens of emerging P2P networks (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) should probably answer is why yet another network? GNUnet was started in late 2001 with a set of new technical ideas for secure peer-to-peer networking. Most of the key technical contributions behind GNUnet are described in detail in our research papers. The ideas include an improved content encoding (ECRS, the encoding for censorship resistant sharing) and a new protocol for anonymous routing (gap). Properties of the content encoding and the routing protocol allow GNUnet to reward contributing peers with better service using an excess-based economic model for resource allocation. Furthermore, GNUnet is extensible and makes it easy to build new peer-to-peer applications or add alternative network transports to the base system. When GNUnet was started, existing systems were investigated (at the time in particular Freenet and mnet) to find a starting point. However, the conclusion was that the envisioned system was too far from the existing codebases to benefit from building on top of any of those.
GNUnet continues to improve both in terms of technical ideas and implementation, often thanks to discussions with developers from related projects. Probably the most well-known such project is TOR, a peer-to-peer network that acts as a proxy which anonymizes low-latency TCP traffic. TOR is general in design and lacks features that would be specific to (anonymous) file-sharing, such as searching, swarming or caching.
In conclusion, we believe that GNUnet is (or at least will become) the best solution for (anonymous) file-sharing. The key technical ideas continue to distinguish GNUnet from other projects with similar goals. Some GNUnet developers also have the ambition to provide a good general infrastructure for developing new peer-to-peer protocols. In the meantime, users that are looking for faster, non-anonymous solutions or to anonymize their HTTP traffic should probably look elsewhere.
News
Older news can be found here.
- 2008-08-16: GNUnet 0.8.0b released
-
Download GNUnet 0.8.0b here.
Updating should be trivial -- simply run gnunet-update. As an optional step, republication of content is recommended.Noteworthy improvements since GNUnet 0.8.0a are:
- Fixed keyword extraction for files in subdirectories
- Fixed keyword expiry
- gnunet-qt: Added URI support
- 2008-07-20: GNUnet 0.8.0a released
-
Download GNUnet 0.8.0a here.
Updating should be trivial -- simply run gnunet-update.Noteworthy improvements since GNUnet 0.8.0a are:
- Fixed processing of namespace advertisements (you should now be able to discover namespaces)
- Fixed bus error on Sparc64 systems (gnunetd crash)
- Fixed parsing of the HOSTLIST option (delayed bootstrapping of new peers)
- Fixed bug where resizing the data store would not result in a proper bloomfilter recomputation during gnunet-update (caused shared content to not be found anymore)
- Fixed bugs with content expiration (do not be surprised if your datastore usage drops for a while after starting the new version)
- Downloads making no progress will no longer block downloads that could make progress (gnunet-gtk, gnunet-qt)
- Reduced cost of restarting gnunet-auto-share (for restarts while large publication is ongoing)
- Various cosmetic improvements (including documentation and minor crashes)
- 2008-07-13: libextractor 0.5.20c released
- Version 0.5.20c of libextractor has been released. This fixes locale paths (for translations). It also ensures that plugin loading and unloading are thread-safe. Some linkage errors on OpenBSD were resolved. An experimental thumbnail extractor based on ffmpeg was added (but is not enabled by default due to security concerns).
- 2008-06-14: GNUnet 0.8.0 released
-
Download GNUnet 0.8.0 here.
On Windows, older versions of GNUnet need to be uninstalled first (including the database and config files).
This release breaks backwards-compatibility on many levels. In particular, 0.8.0 peers will not connect to the 0.7.3-network. Moreover, 0.8.0 is unable to access content inserted into the local 0.7.3-style database. There is no code for data migration, so all data will have to be indexed again.Updating should be relatively easy -- simply delete all your old GNUnet data and run gnunet-update. Note that if you are updating from 0.8.0pre0 or 0.8.0pre1, you only have to run gnunet-update. Read the UPDATING file for details (on what to delete).
Noteworthy improvements since GNUnet 0.7.3 are:
- Major new features:
- Added support for google-style searches
- Added support for ranking search results by availability
- User-friendly naming of namespaces and pseudonyms
- Added new "hostlist" application which is an integrated HTTP hostlist server using libmicrohttpd
- Added new tool gnunet-auto-share for automatic sharing of files in a directory
- Improved GAP search requests to gather more search results (using bloom filter to exclude known responses)
- Improved file-sharing datastores to return more diverse search results (randomized starting point in iteration)
- Made GNUnet finally work (again) on OpenBSD
- Minor improvements:
- Integrated IPv6 transports with existing IPv4 transports (making full use of dual-stacks where available)
- Added IPv6 support to the HTTP transport
- Improved FSUI suspend/resume IO performance
- Added options to gnunet-peer-info to determine identity of local peer
- Added sanity check for module configuration
- Added self-evaluation (amount of trust earned, spent, awarded)
- Added directory name as metadata for files in directories
- Added options for gnunet-insert to just compute the URI or just add keywords to already shared file
- Added support for pausing of a search (to FSUI and gnunet-gtk)
- Improved latency of some operations in gnunet-gtk
- Various cosmetic improvements in gnunet-gtk
- Improved scalability of datastores to handle many results for the same keyword (from O(n) to O(1) by adding extra index)
- Improved bandwidth consumption for file-sharing (reduced overheads by 64 bytes per 32k block)
- Improved performance of the dstores (used for DHTs)
- Writable files (like the content of /etc and /var) are now stored to CSIDL_COMMON_APPDATA ("C:\ProgramData\" on Vista, "C:\Documents and Settings\All Users\Application Data\" on XP) on Windows.
- Bugfixes:
- Fixed bug in HTTP transport causing certain messages not to be delivered
- Fixed rare crash in GAP routing
- Fixed reporting of errors during insertion if datastore got full
- Fixed various bugs with recursive downloads
- Fixed bug causing problems when downloading very large files already in the local datastore
- Fixed bug causing certain search results from the local datastore not showing up properly
- Fixed bug revealing that user sharing files is using W32
- Fixed various issues with the build process for various platforms
- Fixed bug in DHT routing table construction (increases number of DHT connections, resulting in faster routing)
- Fixed deadlock in gnunet-gtk
- Fixed issue with GNUnet clients and GNUnet daemon running on different architectures (Mantis #1312)
- Fixed deadlock in MySQL sqstore module
- Changes relevant for developers:
- Improved and simplified various APIs
- Added support for chat (client-server and UI only, no P2P support yet)
- Added asynchronous search and download methods to ECRS (saves one thread per search/download for most GNUnet-tools)
- Improved performance of make check by using a weak PRNG (for testing only)
- Major new features:
Helping GNUnet
Help is always welcome.
Here are some ideas:
- join our IRC channel #gnunet on freenode and our community and help newcomers
- write easy setup instructions
- build universal static binaries and upload them
- build binary packages for your OS/distribution and upload them
- Fix bugs or contribute new code
Roadmap
Here is the current development plan:
- fix bugs
- improve testbed harness to allow automated testing and profiling
- extend GTK UI (unindex, better support for collections and directories, integrated configuration)
- complete and integrate DHT implementation
- make VPN module easy to use
- design and implement secure chat
- create a secure and decentralized e-mail system
- add transport for direct use of WiFi (skip TCP/IP layer)
- add HTTPS transport