Xo 0.17 release notes
Introduction
Xo 0.17 makes public key crypto and bulk TLS much faster and fixes a macOS XProtect false positive.
Runtime
- Faults on Linux unwind without
/proc(and under valgrind): the auxiliary vector is read from memory. - Native standard input from a FIFO sees its end of input on macOS.
- Processes have 256 static words for the runtime’s own state (decision 0237).
- Security and CoreFoundation load lazily on macOS: start up went from 28.5M to 14.4M instructions on LLVM.
Compiler
- Add with carry chains on arm64, up to 8 pairs an instruction (decision 0231).
- Large constant integer lists are kept as data: the HTTP client went from 2.51 to 2.12 MB on LLVM.
Standard library
- P-256, X25519 and RSA use the carry chains: RSA 4096 server handshakes take 45.6% fewer instructions on arm64 and 43.3% on LLVM, RSA 2048 32.9% and 29.9%.
- P-384 and P-521 signing use fixed base tables made on first use (0.37 to 0.45 of the time); ML-KEM takes 8 to 12% fewer instructions on arm64.
- AES-GCM: GHASH folds four blocks per reduction and CTR runs 64 byte chunks. Bulk TLS beats Mbed TLS on both backends (AES-128, TLS 1.2: arm64 13.6, LLVM 11.8, Mbed 14.0 million instructions per MiB).
Ports
- macOS: binaries from Xo’s own linker no longer match an XProtect signature (a program hung waiting for assessment); all 179 test programs scan clean.