18

I was looking through the contributors of Kovri, and saw that an account named Orignal had contributed a lot in the early days.

Looking at his current projects, it appears that he is now working on something called i2pd, which bares striking similarities to Kovri.

After a little bit of research, it appeared that Kovri and i2pd are two projects sprouted from the same initial project. But as it quickly became apparent to me, that there was a lot more to it, I felt it would be better if one of you could shed some light on it.

My questions would be;

What is the main differences between i2pd and Kovri?

And with the more subjective glasses on, why is the one more beneficial than the other for the Monero project?

3 Answers 3

16

Kovri is an alternative implementation in C++ of the I2P protocol which original daemon i2p is written in Java, is bloated and quite difficult to use. Kovri is a fork of the C++ implementation i2pd.

You'll find a quite good answer in Kovri's FAQ

Why should I use Kovri instead of i2pd?

  • Security: our focus is on securing our software; not rushing to get things done for the sake of having a release
  • Quality: you're supporting efforts to ensure a quality codebase that will stand the test of time. This includes all aspects of code maintainability
  • Monero: you will be supporting a crypto-currency that prides itself on privacy-preservation and anonymity while increasing both your privacy and anonymity

What are the biggest differences between Kovri and i2pd?

  • We provide a Forum Funding System for features/development.
  • We focus on creating a "secure by default", easily maintainable, more-likely-to-be-reviewed I2P router. This will come with the cost of dropping lesser-used features found in the other routers, but core functionality and an API will be fully intact. By creating a smaller, efficient, "bare-bones" router, we will provide developers and researchers more time for security auditing and more time to question the I2P design and specifications.
  • We focus on implementing an intuitive, developer-friendly API for any application to connect to and use the I2P network; this includes Monero. We provide both end-users and developers a quality assurance and development model in order to provide better software for everyone.
  • We will implement alternative reseeding options so users can use Pluggable Transports instead of HTTPS for reseed.
  • We will implement extended functionality (hidden mode + disabled inbound) to provide anonymity for those who live in countries with extreme conditions or those firewalled by carrier-grade NAT or DS-Lite.
  • We will always create a welcome environment for collaboration.
  • We will always listen to your feedback and do our best to improve Kovri!

Why did you fork from i2pd?

We forked for at least several reasons:

  • We wanted a robust, secure, and viable C++ implementation of the I2P network; and i2pd was not delivering
  • We wanted a positive community that encouraged collaboration for the betterment of the software; not negative, narcissist glory
  • We wanted a lead developer who could lead; not someone who could ignore requests for responsible disclosure or tuck-tail-and-run when faced with collaborator conflict

What were the turning points that lead to forking from i2pd (and why are there two i2pd repositories: one on Bitbucket and one on GitHub)?

So began the drama of i2pd.

In early/mid 2015, one of the developers with push privileges on GitHub pushed a commit(s) that i2pd's first author did not like. Instead of working together to resolve the issue, said author took i2pd to Bitbucket, deleted all existing git history, and made himself sole 'contributor' of the software. He then vowed to never return to Irc2P.

These actions offended many in the I2P community, including the developers, and nearly ended the C++ project.

In the fall of 2015, along came anonimal who, not wanting to see everyone's work to go to waste, revived the project through contributions of their own and by reigning-in development. An open invitation for all remaining active developers to meet and discuss i2pd's future was then given. i2pd's first author never showed but the act of meeting apparently rustled i2pd's feathers to the point where he retaliated and began to work on GitHub again - but this time within an openssl branch (which turned out to be the Bitbucket repository) instead of the community-driven master branch.

Seeing that this sort of erratic behavior would only hurt the I2P network and the project as a whole, the remaining developers continued to have several important meetings and set the foundation for what is now Kovri.

1
  • 1
    You are confusing the main implementation i2p that is in Java and i2pd that is in C++. Kovri is a fork of i2pd.
    – Clement J.
    Commented Oct 15, 2016 at 20:09
10

There are three major implementations of I2P routers

  • Java I2P: the official client by the creators of the protocol. This is by far the most used.
  • i2pd: a c++ implementation of the client
  • Kovri: a fork of i2pd by the Monero Project team.

First, let's see why i2pd has been created:

  • Java I2P has built-in applications for torrents, e-mail and so on. i2pd is just a router which you can use with other software through I2CP interface.

  • i2pd does not require Java. It's written in C++.

  • i2pd consumes less memory and CPU.

  • i2pd can be compiled everywhere gcc or clang presented (including Raspberry and routers).

  • i2pd has some major optimizations for faster cryptography which leads to less consumption of processor time and energy.

Usage of C++ made it easy to integrate Monero with it since Monero software are written in this language. Speed is also important to use it as a transport layer for a crypto-currency.

However for the reasons mentioned in the FAQ cited by pebx, it was possible for the Monero Project developers to work with those of i2pd and therefore i2pd has been forked.

The "striking similarities" that you noticed come from Kovri being a fork of i2pd (some codebase up to the point of the fork).

Kovri being steered with the goal of integration with Monero software, it is obviously more beneficial to the Monero Project.

6

while @pebx wrote the Monero-side of the story, here is the answer I found from the i2pd-side of the story: Kovri and the curious case of code rot

I thought that this discussion should somehow be balanced instead of being an echo-chamber.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.