版本支持

为各语言实现提供的支持窗口列表。

protoc 和各种语言的支持窗口在本主题后面的表格中介绍。本主题中的版本号使用 SemVer 约定;在版本“3.21.7”中,我们称“3”为主版本,“21”为次版本,“7”为微版本或补丁号。

从 v21.x protoc 版本开始,我们更改了版本控制方案,以便能更灵活地更新 Protocol Buffers 中特定于语言的部分。在新方案中,每种语言都有自己的主版本,可以独立于其他语言进行递增。然而,次版本和补丁版本仍然是耦合的。这使我们可以在某些语言中引入重大变更,而无需在未经历重大变更的语言中提升主版本。例如,一个版本可能包含 protoc 版本 24.0、Java 运行时版本 4.24.0 和 C# 运行时版本 3.24.0。

在此版本控制方案之前,所有语言的主版本都是 3。此新版本控制方案的第一个实例是 Python API 的 4.21.0 版本,它是在之前的 3.20.1 版本之后发布的。与此同时发布的其他语言 API 则以 3.21.0 的版本发布。

发布节奏

Protobuf 致力于每季度发布更新。如果出现紧急需求,例如需要新 API 的安全修复,我们可能会增加一次发布。跳过发布应该是非常罕见的事件。

主(重大)版本将以第一季度的发布为目标。如果出现紧急需求,我们可能随时引入重大变更,但这应该非常罕见。

我们的支持窗口由我们的库重大变更政策定义。

Protobuf 并认为强制执行其已文档化的语言、工具、平台和库支持政策是重大变更。例如,某个版本可能会在不提升主版本的情况下放弃对某个已终止(EOL)语言版本的支持。

发布版本中有哪些变更?

二进制线路格式不会改变,即使在主版本更新中也是如此。您将能够继续使用新版本的 Protocol Buffers 读取旧的二进制线路格式的 proto 数据。新生成的 protobuf 绑定序列化为二进制线路格式后,也将能被旧的二进制文件解析。这是 Protocol Buffers 的一个基本设计原则。请注意,JSON 和 textproto 格式提供相同的稳定性保证。

descriptor.proto 架构可能会改变。 在次版本或补丁版本中,我们可能会添加新的消息、字段、枚举、枚举值、版本(editions)、版本功能等。我们也可能将现有元素标记为已弃用。在主版本中,我们可能会移除已弃用的选项、枚举、枚举值、消息、字段等。

.proto 语言语法可能会改变。 在次版本或补丁版本中,我们可能会为现有功能添加新的语言结构和替代语法。我们也可能将某些功能标记为已弃用。这可能会导致出现以前 protoc 不会发出的新警告。在主版本中,我们可能会移除对过时功能、语法、版本的支持,这将需要更新客户端代码。

生成代码和运行时 API 可能会改变。 在次版本或补丁版本中,变更将是纯粹为新功能添加的,或者是源代码兼容的更新。只需重新编译代码即可。在主版本中,生成代码或运行时 API 可能会以不兼容的方式改变,需要更改调用点。我们会尽量减少这种情况。修复或以其他方式影响未定义行为的更改不被视为重大变更,也不需要发布主版本。

操作系统、编程语言和工具的版本支持可能会改变。 在次版本或补丁版本中,我们可能会添加或放弃对特定版本的操作系统、编程语言或工具的支持。请参阅我们支持语言的基础支持矩阵

总的来说

  • 根据我们的跨版本运行时保证,次版本或补丁版本应只包含纯粹的添加性更新或源代码兼容的更新。
  • 主版本可能会移除功能、特性或以需要更新调用点的方式更改 API。

支持期限

始终支持最新版本。对早期次版本的支持在同一主版本下发布新次版本时结束。对早期主版本的支持在引入重大变更的版本发布季度之后的四个季度结束。例如,当 Protobuf Python 5.26.0 在 2024 年第一季度发布时,Protobuf Python 4.25.x 的支持将在 2025 年第一季度末结束。

以下各节提供了每种语言的支持指南。

C++

C++ 的目标是每年第一季度进行一次主版本提升。

protoc 版本可以从 Protobuf C++ 的次版本号推断出来。示例:Protobuf C++ 版本 4.25.x 使用 protoc 版本 25.x。

未来的计划以斜体显示,并可能发生变化。

发布支持日期

Protobuf C++发布日期支持结束日期
3.x2022 年 5 月 25 日2024 年 3 月 31 日
4.x2023 年 2 月 16 日2025 年 3 月 31 日
5.x2024 年 3 月 13 日2026 年 3 月 31 日
6.x2025 年 3 月 4 日2027 年 3 月 31 日
7.x2026 年第一季度2028 年 3 月 31 日

发布支持图表

Protobuf C++protoc23 年第一季度23 年第二季度23 年第三季度23 年第四季度24 年第一季度24 年第二季度24 年第三季度24 年第四季度25 年第一季度25 年第二季度25 年第三季度25 年第四季度
3.x21.x3.213.213.213.213.21
4.x22.x-25.x4.224.234.244.254.254.254.254.254.25
5.x26.x-29.x5.265.275.285.295.295.295.295.29
6.x30.x-33.x6.306.316.326.33

图例

活跃包含新功能、兼容性变更和错误修复的次版本和补丁版本。
维护包含关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计发布。为规划目的而显示。

C++ 工具、平台和库支持

Protobuf 致力于遵循 基础 C++ 支持政策 中描述的工具、平台和库支持政策。有关支持的具体版本,请参阅 基础 C++ 支持矩阵

C#

protoc 版本可以从 Protobuf C# 的次版本号推断出来。示例:Protobuf C# 版本 3.25.x 使用 protoc 版本 25.x。

未来的计划以斜体显示,并可能发生变化。

发布支持日期

Protobuf C#发布日期支持结束日期
3.x2022 年 5 月 25 日待定

发布支持图表

Protobuf C#protoc23 年第一季度23 年第二季度23 年第三季度23 年第四季度24 年第一季度24 年第二季度24 年第三季度24 年第四季度25 年第一季度25 年第二季度25 年第三季度25 年第四季度
3.x21.x-33.x3.223.233.243.253.263.273.283.293.303.313.323.33

图例

活跃包含新功能、兼容性变更和错误修复的次版本和补丁版本。
维护包含关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计发布。为规划目的而显示。

C# 平台和库支持

Protobuf 致力于遵循 .NET 支持政策 中描述的平台和库支持政策。有关支持的具体版本,请参阅 基础 .NET 支持矩阵

Java

Java 的目标是每年第一季度进行一次主版本提升。

protoc 版本可以从 Protobuf Java 的次版本号推断出来。示例:Protobuf Java 版本 3.25.x 使用 protoc 版本 25.x。

未来的计划以斜体显示,并可能发生变化。

发布支持日期

Protobuf Java发布日期支持结束日期
3.x2022 年 5 月 25 日2027 年 3 月 31 日*
4.x2024 年 3 月 13 日2028 年 3 月 31 日
5.x2027 年第一季度*2029 年 3 月 31 日

发布支持图表

Protobuf Javaprotoc23 年第一季度23 年第二季度23 年第三季度23 年第四季度24 年第一季度24 年第二季度24 年第三季度24 年第四季度25 年第一季度25 年第二季度25 年第三季度25 年第四季度
3.x21.x-25.x3.223.233.243.253.253.253.253.253.253.253.253.25
4.x26.x-33.x4.264.274.284.294.304.314.324.33

图例

活跃包含新功能、兼容性变更和错误修复的次版本和补丁版本。
维护包含关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计发布。为规划目的而显示。

Java 平台和库支持

Protobuf 致力于遵循 Java 支持政策 中描述的平台和库支持政策。有关支持的具体版本,请参阅 基础 Java 支持矩阵

在 Android 上,Protobuf 支持 Google Play 服务 支持的最低 SDK 版本,并且是 Jetpack 中的默认版本。如果两个版本不同,则支持较低的版本。

Objective-C

protoc 版本可以从 Protobuf Objective-C 的次版本号推断出来。示例:Protobuf Objective-C 版本 3.25.x 使用 protoc 版本 25.x。

未来的计划以斜体显示,并可能发生变化。

发布支持日期

Protobuf Objective-C发布日期支持结束日期
3.x2022 年 5 月 25 日2026 年 3 月 31 日
4.x2025 年 3 月 4 日待定

发布支持图表

Protobuf Objective-Cprotoc23 年第一季度23 年第二季度23 年第三季度23 年第四季度24 年第一季度24 年第二季度24 年第三季度24 年第四季度25 年第一季度25 年第二季度25 年第三季度25 年第四季度
3.x21.x-29.x3.223.233.243.253.263.273.283.293.293.293.293.29
4.x30.x+4.304.314.324.33

图例

活跃包含新功能、兼容性变更和错误修复的次版本和补丁版本。
维护包含关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计发布。为规划目的而显示。

PHP

protoc 版本可以从 Protobuf PHP 的次版本号推断出来。示例:Protobuf PHP 版本 3.25.x 使用 protoc 版本 25.x。

未来的计划以斜体显示,并可能发生变化。

发布支持日期

Protobuf PHP发布日期支持结束日期
3.x2022 年 5 月 25 日2025 年 3 月 31 日
4.x2024 年 3 月 13 日待定

发布支持图表

Protobuf PHPprotoc23 年第一季度23 年第二季度23 年第三季度23 年第四季度24 年第一季度24 年第二季度24 年第三季度24 年第四季度25 年第一季度25 年第二季度25 年第三季度25 年第四季度
3.x21.x-25.x3.223.233.243.253.253.253.253.253.25
4.x26.x+4.264.274.284.294.304.314.324.33

图例

活跃包含新功能、兼容性变更和错误修复的次版本和补丁版本。
维护包含关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计发布。为规划目的而显示。

PHP 平台和库支持

Protobuf 致力于遵循 PHP 支持政策 中描述的平台和库支持政策。有关支持的具体版本,请参阅 基础 PHP 支持矩阵

Python

protoc 版本可以从 Protobuf Python 的次版本号推断出来。示例:Protobuf Python 版本 4.25.x 使用 protoc 版本 25.x。

未来的计划以斜体显示,并可能发生变化。

发布支持日期

Protobuf Python发布日期支持结束日期
4.x2022 年 5 月 25 日2025 年 3 月 31 日
5.x2024 年 3 月 13 日2026 年 3 月 31 日
6.x2025 年 3 月 4 日待定

发布支持图表

Protobuf Pythonprotoc23 年第一季度23 年第二季度23 年第三季度23 年第四季度24 年第一季度24 年第二季度24 年第三季度24 年第四季度25 年第一季度25 年第二季度25 年第三季度25 年第四季度
4.x21.x-25.x4.224.234.244.254.254.254.254.254.25
5.x26.x-29.x5.265.275.285.295.295.295.295.29
6.x30.x+6.306.316.326.33

图例

活跃包含新功能、兼容性变更和错误修复的次版本和补丁版本。
维护包含关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计发布。为规划目的而显示。

Python 平台和库支持

Protobuf 致力于遵循 Python 支持政策 中描述的平台和库支持政策。有关支持的具体版本,请参阅 基础 Python 支持矩阵

Ruby

protoc 版本可以从 Protobuf Ruby 的次版本号推断出来。示例:Protobuf Ruby 版本 3.25.x 使用 protoc 版本 25.x。

未来的计划以斜体显示,并可能发生变化。

发布支持日期

Protobuf Ruby发布日期支持结束日期
3.x2022 年 5 月 25 日2025 年 3 月 31 日
4.x2024 年 3 月 13 日待定

发布支持图表

Protobuf Rubyprotoc23 年第一季度23 年第二季度23 年第三季度23 年第四季度24 年第一季度24 年第二季度24 年第三季度24 年第四季度25 年第一季度25 年第二季度25 年第三季度25 年第四季度
3.x21.x-25.x3.223.233.243.253.253.253.253.253.25
4.x26.x+4.264.274.284.294.304.314.324.33

图例

活跃包含新功能、兼容性变更和错误修复的次版本和补丁版本。
维护包含关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计发布。为规划目的而显示。

Ruby 平台和库支持

Protobuf 致力于遵循 Ruby 支持政策 中描述的平台和库支持政策。有关支持的具体版本,请参阅 基础 Ruby 支持矩阵

JRuby 未受官方支持,但我们尽最大努力为最新的 JRuby 版本提供非官方支持,目标是与我们的最低 Ruby 版本或更高版本兼容。