Goal: Lowest possible total transfer time - to be only hardware limited (disc or network bandwidth not latency) and as efficient as possible (low CPU/memory/resources utilization) We keep dependencies minimal in order to maximize portability and ensure a small binary size. As a bonus, this also minimizes compile time. We aren't using exceptions for performance reasons and because using exceptions