3
0
Mirror von https://github.com/PaperMC/Velocity.git synchronisiert 2024-12-27 00:23:19 +01:00
Velocity/native
Andrew Steinborn af629cf000
Fall 2024 recompile of the natives (#1416)
This time around, instead of the very ad hoc approach I have historically taken, this time we actually have a convenient script that takes care of basically all the hard work necessary, including cross-compilation.

We compile natives for Ubuntu 20.04 LTS (OpenSSL 1.1.x native and libdeflate) and Ubuntu 22.04 LTS (OpenSSL 3.x.x native), for both x86_64 and aarch64.

The macOS natives have also been recompiled on macOS Sonoma.
2024-08-31 20:30:47 -04:00
..
build-support Fall 2024 recompile of the natives (#1416) 2024-08-31 20:30:47 -04:00
src Fall 2024 recompile of the natives (#1416) 2024-08-31 20:30:47 -04:00
build.gradle.kts Migrate buildSrc plugins to build-logic 2023-10-27 16:03:15 -04:00
README.md Provide crypto native for Linux x86_64 and OpenSSL 3.0.x (#854) 2022-08-28 17:24:56 -04:00

velocity-natives

This directory contains native acceleration code for Velocity, along with traditional Java fallbacks.

Compression

  • Supported platforms: Linux x86_64 and aarch64, with Java 11 ByteBuffer API support as a fallback. Compiled on CentOS 7.
  • Rationale: Using a native zlib wrapper, we can avoid multiple trips into Java just to copy memory around.

Encryption

  • Supported platforms: Linux x86_64 (OpenSSL 1.0.x and OpenSSL 1.1.x) and aarch64 (OpenSSL 1.1.x only)
  • Rationale: Using a C library for encryption means we can limit memory copies. Prior to Java 7, this was the only way to use AES-NI extensions on modern processors, but this is less important since JDK 8 has native support.
  • OpenSSL is not included in Velocity. Every distribution provides it now. To deal with ABI incompatibilities, the native library (which only calls into OpenSSL and contains no cryptographic code) are available for CentOS 7 (OpenSSL 1.0.0-based), Debian 9 (OpenSSL 1.1.0-based) and Debian Bookworm (OpenSSL 3.0.0-based) to provide the widest, most reasonable compatibility with most modern distributions.

OS support

The natives intend to have the widest possible range of compatibility with modern Linux distributions (defined as those being released in or after 2014).

In theory, these libraries can be compiled for any Unix-like system (in the past, we supported macOS), but interest in other systems is minimal at best, thus we focus on Linux x86_64 and aarch64 as they are commonly used platforms.

Alpine Linux support is on a "best-effort" basis only. Using apk add libc6-compat may enable native support.