#7904·onnx

feat: bump protobuf floor to 6.x (off EOL), raise C++ standard to 20, and drop Win32 — target 1.23 (Q1/27 release)

Author: andifeCreated May 3, 2026Updated Sep 13, 2026
Labelstopic: buildprotobuf

Background

ONNX's vendored protobuf (FetchContent) already builds at v33.6 / runtime 6.33.6. What's currently stale is the declared minimum that downstream consumers see, and the C++ standard used at build time:

File Current Possible change
pyproject.toml protobuf>=4.25.1 protobuf>=6.30
requirements.txt protobuf>=4.25.1 protobuf>=6.30
requirements-min.txt protobuf==4.25.1 protobuf==6.30.0
INSTALL.md recommends 5.29.2 6.33.x to match vendored fetch
CMakeLists.txt CMAKE_CXX_STANDARD 17 CMAKE_CXX_STANDARD 20

Motivation

Per Google's official support matrix:

  • Protobuf C++ 4.x: EOL since 31 March 2025
  • Protobuf C++ 5.x: EOL since 31 March 2026
  • Protobuf C++ 6.x: Maintenance (EOL 31 March 2027) — the lowest still-supported line

On the C++ side, toolchain support for C++20 is now well established across all major platforms (GCC 10+, Clang 10+, MSVC 19.29+). The downstream coordination concern has also eased: onnxruntime has moved non-CUDA builds to C++20 (microsoft/onnxruntime#27178, merged March 2026), with CUDA builds retaining C++17 for now.

The vendored FetchContent build path already builds 6.33.6, so the protobuf change would be purely about the declared floor that consumers see.

Potential impact

  • Protobuf floor: drops declared support for system protobuf 4.x/5.x. Users on those versions can fall back to the FetchContent path, which already builds 6.33.6. Wire format is unaffected — protobuf guarantees no wire-format changes across majors.
  • C++20 floor: drops very old toolchains (pre-GCC 10, pre-Clang 10, pre-MSVC 19.29), all of which are themselves out of mainstream support.