Developer Handbook
This book is intended to be an introduction for programmers that want to extend the GNUnet framework. GNUnet is more than a simple peer-to-peer application.
For developers, GNUnet is:
developed by a community that believes in the GNU philosophy
Free Software (Free as in Freedom), licensed under the GNU Affero General Public License
A set of standards, including coding conventions and architectural rules
A set of layered protocols, both specifying the communication between peers as well as the communication between components of a single peer
A set of libraries with well-defined APIs suitable for writing extensions
In particular, the architecture specifies that a peer consists of many
processes communicating via protocols. Processes can be written in almost
any language.
C
, Java
and Guile
APIs exist for accessing existing
services and for writing extensions.
It is possible to write extensions in other languages by
implementing the necessary IPC protocols.
GNUnet can be extended and improved along many possible dimensions, and anyone interested in Free Software and Freedom-enhancing Networking is welcome to join the effort. This Developer Handbook attempts to provide an initial introduction to some of the key design choices and central components of the system.
This part of the GNUnet documentation is far from complete, and we welcome informed contributions, be it in the form of new chapters, sections or insightful comments.
- Contributing
- Style and Workflow
- Repository Structure
- libgnunetutil
- System Architecture
- Internal dependencies
- Subsystem stability
- Basic Services
- STATISTICS — Runtime statistics publication
- ATS — Automatic transport selection
- TRANSPORT — Overlay transport management
- Address validation protocol
- NAT library
- Distance-Vector plugin
- SMTP plugin
- Why use SMTP for a peer-to-peer transport?
- How does it work?
- How do I configure my peer?
- How do I test if it works?
- How fast is it?
- Bluetooth plugin
- What do I need to use the Bluetooth plugin transport?
- How does it work2?
- What possible errors should I be aware of?
- How do I configure my peer2?
- How can I test it?
- The implementation of the Bluetooth transport plugin
- WLAN plugin
- TRANSPORT-NG — Next-generation transport management
- HOSTLIST — HELLO bootstrapping and gossip
- PEERINFO — Persistent HELLO storage
- PEERSTORE — Extensible local persistent data storage
- CORE — GNUnet link layer
- NSE — Network size estimation
- DHT — Distributed Hash Table
- REGEX — Service discovery using regular expressions
- CADET — Confidential Ad-hoc Decentralized End-to-end Transport
- RPS — Random peer sampling
- Peer-to-Peer Set Operations
- SET — Peer to peer set operations (Deprecated)
- SETI — Peer to peer set intersections
- SETU — Peer to peer set unions
- VPN and VPN Support
- GNS and GNS Support
- GNS — the GNU Name System
- NAMECACHE — DHT caching of GNS results
- NAMESTORE — Storage of local GNS zones
- Applications
- REST API
- C Tutorial
- Introduction to GNUnet Architecture
- First Steps with GNUnet
- Developing Applications
- GNU Free Documentation License
- Doxygen