Kodo is a flexible C++ network coding library, intended to be used for commercial applications and research on implementation of Network Coding. The library enables researchers to implement new codes and algorithms, perform simulations and benchmark the coding operations on any platform where a recent C++ compiler is available. The library provides a multitude of building blocks and parameters that can be combined to create codes. For convenience, several codes are predefined and high-level APIs are provided.


Standard RLNC
All symbols are combined uniformly at random. In general, this type of coding is “dense”, since the symbols in the data block are mixed as much as possible. Density is lower for small field sizes.
Sparse RLNC with uniform density
Some symbols are excluded with a given probability during encoding. The remaining symbols are combined as in the standard RLNC case. This is typically useful when the block size is very high. The density can be reduced significantly without any negative effect and the decoding throughput can be increased substantially at the same time.
Sparse RLNC with fixed density
A fixed number of symbols are combined at random. This can be used when feedback is available from the decoder. The encoding process can be tuned at the encoder according to the state of the decoder.
Seed-based RLNC
Instead of sending the full coding vector, a small random seed can be sent to generate the coding vector. This reduces the overhead, but makes recoding difficult and in some cases impossible. This is typically used when recoding is not necessary or used very sparingly.
On-the-fly RLNC
Symbols can be encoded as they are made available and data is released from the decoder as decoding progresses. This is different from traditional block codes where all data has to be available before encoding or decoding takes place. This codec is well suited for low-delay services such as messaging, voice over IP or video streaming.