Skip to main content

Comparison to alternatives

The industry currently offers numerous available QUIC implementations. However, we have selected only a few for comparative analysis. The main reasons behind our choice are as follows:

  • Open source project: This facilitates the establishment of a test environment and also enables further code analysis. For instance, we didn't choose AppleQUIC or F5 QUIC.
  • Written in a system programming language: Some implementations may not be aimed at high performance and therefore cannot be fairly compared to those based on system programming languages. We didn't choose implementations based on Python/Haskell/Java etc.
  • Widely used: It is used by well-known open-source projects or large-scale network service providers.
tip

The following analysis may not be accurate as each project is currently under active development. The document may be updated or supplemented with new implementations at a later time.

Basic information

CategoryQUICHE-GNGINX-QUICQUICHE-CFLSQUICTQUIC
Primary maintainersGoogleNGINX CommunityCloudflareLiteSpeedTQUIC Community
Code repositorygoogle/quichequiccloudflare/quichelsquictquic
Programming languageC++CRUSTCRUST
Lines of codeAbout 150,000About 20,000About 40,000About 100,000About 50,000
Typical Use CasesChromium, EnvoyNginxCloudflare edge networkLiteSpeed WebServer, Web ADCTencent Cloud EdgeOne

The implementations selected for the comparison with TQUIC are shown in the table above. Two of them are used by well-known open source projects(Envoy/Nginx) and two are used by popular CDN vendors(Cloudflare/LiteSpeed). They are all written in high-performance systems programming languages.

The NGINX-QUIC codebase, despite having the fewest lines of code, currently lacks comments, unit tests, and certain important features. In contrast, the TQUIC codebase has extensive unit tests and detailed comments that make up approximately half of its total lines of code. This makes it easier for contributors to participate.

Performance and throughput

CategoryQUICHE-GNGINX-QUICQUICHE-CFLSQUICTQUIC
PerformanceNormalGoodGoodBetterBest
Congestion controlCUBIC, BBR, BBRv2, RenoRenoCUBIC, BBRCUBIC, BBRCUBIC, BBR, BBRv3, COPA
MultipathNot supportedNot supportedNot supportedNot supportedSupport Multipath QUIC

The performance of TQUIC surpasses that of the other implementations significantly. For further details on the benchmark methodology and results, please refer to the benchmark report.

Popular congestion control algorithms are supported by all these implementations, except for NGINX-QUIC.

TQUIC is the only one of these implementations that supports multipath QUIC, thereby enhancing both throughput and reliability. Some other libraries, including QUICHE-CF, are currently in development to provide support for multipath QUIC.

Quality and stability

CategoryQUICHE-GNGINX-QUICQUICHE-CFLSQUICTQUIC
TestingExtensive unit testsNo unit tests; Few integration testsExtensive unit testsMany unit tests, but limited for high-level componentsExtensive unit tests
Memory safetyNot supportedNot supportedSupportedNot supportedSupported

Most implementations have extensive unit tests, whereas NGINX-QUIC, as mentioned earlier, lacks them and only a limited number of integration tests for QUIC can be found in a separate repository.

TQUIC and QUICHE-CF are written in a memory-safe language, making them immune to Buffer Overflow vulnerability and other memory-related bugs. In contrast, LSQUIC, a C-based library that was open-sourced in 2017, has been consistently identifying and resolving memory-related bugs throughout the years. Similarly, the NGINX QUIC stack has encountered several memory-related security vulnerabilities. This is very common for implementations written in C or C++.

Usability and observability

CategoryQUICHE-GNGINX-QUICQUICHE-CFLSQUICTQUIC
Library APIsC++CRust/C/C++CRust/C/C++
API documentationNo documentationNo documentationDetailed for RUST; Limited for C/C++Very detailedVery detailed
SSL KeylogNot supportedSupportedSupportedSupportedSupported
QLOGNot supportedNot supportedSupportedNot supportedSupported

The APIs for both TQUIC and QUICHE-CF are available in multiple languages, along with detailed API documentation. The absence of comprehensive API documentation for QUICHE-G poses challenges for average users. Currently, NGINX-QUIC is not a standalone QUIC library and only works with Nginx.

The absence of an SSL Keylog or QLOG can make certain implementations (QUICHE-G/NGINX-QUIC/LSQUIC) less convenient for troubleshooting purposes.

tip

The document is open-source. Please help improve it by filing issues or pull requests.