版本支持
本主题后面的表格涵盖了 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 的 schema 可能会改变。在次版本或补丁版本中,我们可能会添加新的消息、字段、枚举、枚举值、版本(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.x | 2022年5月25日 | 2024年3月31日 |
4.x | 2023年2月16日 | 2025年3月31日 |
5.x | 2024年3月13日 | 2026年3月31日 |
6.x | 2025年3月4日 | 2027年3月31日 |
7.x | 2026年第一季度 | 2028年3月31日 |
发布支持图表
Protobuf C++ | protoc | 23年第一季度 | 23年第二季度 | 23年第三季度 | 23年第四季度 | 24年第一季度 | 24年第二季度 | 24年第三季度 | 24年第四季度 | 25年第一季度 | 25年第二季度 | 25年第三季度 | 25年第四季度 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 21.x | 3.21 | 3.21 | 3.21 | 3.21 | 3.21 | |||||||
4.x | 22.x-25.x | 4.22 | 4.23 | 4.24 | 4.25 | 4.25 | 4.25 | 4.25 | 4.25 | 4.25 | |||
5.x | 26.x-29.x | 5.26 | 5.27 | 5.28 | 5.29 | 5.29 | 5.29 | 5.29 | 5.29 | ||||
6.x | 30.x-33.x | 6.30 | 6.31 | 6.32 | 6.33 |
图例
活跃 | 包含新功能、兼容性变更和错误修复的次版本和补丁版本。 |
---|---|
维护 | 包含关键错误修复的补丁版本。 |
生命周期结束 | 版本不受支持。用户应升级到受支持的版本。 |
未来 | 预计的发布。为规划目的而显示。 |
C++ 工具、平台和库支持
Protobuf 致力于遵循基础 C++ 支持政策中描述的工具、平台和库支持政策。有关具体支持的版本,请参阅基础 C++ 支持矩阵。
C#
protoc 版本可以从 Protobuf C# 的次版本号推断出来。例如:Protobuf C# 版本 3.25.x 使用 protoc 版本 25.x。
未来计划以斜体显示,并可能发生变化。
发布支持日期
Protobuf C# | 发布日期 | 支持结束 |
---|---|---|
3.x | 2022年5月25日 | 待定 |
发布支持图表
Protobuf C# | protoc | 23年第一季度 | 23年第二季度 | 23年第三季度 | 23年第四季度 | 24年第一季度 | 24年第二季度 | 24年第三季度 | 24年第四季度 | 25年第一季度 | 25年第二季度 | 25年第三季度 | 25年第四季度 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 21.x-33.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.26 | 3.27 | 3.28 | 3.29 | 3.30 | 3.31 | 3.32 | 3.33 |
图例
活跃 | 包含新功能、兼容性变更和错误修复的次版本和补丁版本。 |
---|---|
维护 | 包含关键错误修复的补丁版本。 |
生命周期结束 | 版本不受支持。用户应升级到受支持的版本。 |
未来 | 预计的发布。为规划目的而显示。 |
C# 平台和库支持
Protobuf 致力于遵循.NET 支持政策中描述的平台和库支持政策。有关具体支持的版本,请参阅基础 .NET 支持矩阵。
Java
Java 的目标是每年第一季度进行一次主版本升级。
protoc 版本可以从 Protobuf Java 的次版本号推断出来。例如:Protobuf Java 版本 3.25.x 使用 protoc 版本 25.x。
未来计划以斜体显示,并可能发生变化。
发布支持日期
Protobuf Java | 发布日期 | 支持结束 |
---|---|---|
3.x | 2022年5月25日 | 2027年3月31日* |
4.x | 2024年3月13日 | 2028年3月31日 |
5.x | 2027年第一季度* | 2029年3月31日 |
注意
Protobuf Java 3.x 版本的维护支持窗口将为 36 个月,而不是主版本系列中最终版本的典型 12 个月。未来的主版本更新(5.x,计划于 2027 年第一季度)将采用改进的“滚动兼容性窗口”,这应能允许恢复到 12 个月的支持窗口。在 2025 年第一季度和 2026 年第一季度将不会有主版本升级。发布支持图表
Protobuf Java | protoc | 23年第一季度 | 23年第二季度 | 23年第三季度 | 23年第四季度 | 24年第一季度 | 24年第二季度 | 24年第三季度 | 24年第四季度 | 25年第一季度 | 25年第二季度 | 25年第三季度 | 25年第四季度 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 21.x-25.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 |
4.x | 26.x-33.x | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.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.x | 2022年5月25日 | 2026年3月31日 |
4.x | 2025年3月4日 | 待定 |
发布支持图表
Protobuf Objective-C | protoc | 23年第一季度 | 23年第二季度 | 23年第三季度 | 23年第四季度 | 24年第一季度 | 24年第二季度 | 24年第三季度 | 24年第四季度 | 25年第一季度 | 25年第二季度 | 25年第三季度 | 25年第四季度 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 21.x-29.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.26 | 3.27 | 3.28 | 3.29 | 3.29 | 3.29 | 3.29 | 3.29 |
4.x | 30.x+ | 4.30 | 4.31 | 4.32 | 4.33 |
图例
活跃 | 包含新功能、兼容性变更和错误修复的次版本和补丁版本。 |
---|---|
维护 | 包含关键错误修复的补丁版本。 |
生命周期结束 | 版本不受支持。用户应升级到受支持的版本。 |
未来 | 预计的发布。为规划目的而显示。 |
PHP
protoc 版本可以从 Protobuf PHP 的次版本号推断出来。例如:Protobuf PHP 版本 3.25.x 使用 protoc 版本 25.x。
未来计划以斜体显示,并可能发生变化。
发布支持日期
Protobuf PHP | 发布日期 | 支持结束 |
---|---|---|
3.x | 2022年5月25日 | 2025年3月31日 |
4.x | 2024年3月13日 | 待定 |
发布支持图表
Protobuf PHP | protoc | 23年第一季度 | 23年第二季度 | 23年第三季度 | 23年第四季度 | 24年第一季度 | 24年第二季度 | 24年第三季度 | 24年第四季度 | 25年第一季度 | 25年第二季度 | 25年第三季度 | 25年第四季度 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 21.x-25.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | |||
4.x | 26.x+ | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.33 |
图例
活跃 | 包含新功能、兼容性变更和错误修复的次版本和补丁版本。 |
---|---|
维护 | 包含关键错误修复的补丁版本。 |
生命周期结束 | 版本不受支持。用户应升级到受支持的版本。 |
未来 | 预计的发布。为规划目的而显示。 |
PHP 平台和库支持
Protobuf 致力于遵循PHP 支持政策中描述的平台和库支持政策。有关具体支持的版本,请参阅基础 PHP 支持矩阵。
Python
protoc 版本可以从 Protobuf Python 的次版本号推断出来。例如:Protobuf Python 版本 4.25.x 使用 protoc 版本 25.x。
未来计划以斜体显示,并可能发生变化。
发布支持日期
Protobuf Python | 发布日期 | 支持结束 |
---|---|---|
4.x | 2022年5月25日 | 2025年3月31日 |
5.x | 2024年3月13日 | 2026年3月31日 |
6.x | 2025年3月4日 | 待定 |
发布支持图表
Protobuf Python | protoc | 23年第一季度 | 23年第二季度 | 23年第三季度 | 23年第四季度 | 24年第一季度 | 24年第二季度 | 24年第三季度 | 24年第四季度 | 25年第一季度 | 25年第二季度 | 25年第三季度 | 25年第四季度 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4.x | 21.x-25.x | 4.22 | 4.23 | 4.24 | 4.25 | 4.25 | 4.25 | 4.25 | 4.25 | 4.25 | |||
5.x | 26.x-29.x | 5.26 | 5.27 | 5.28 | 5.29 | 5.29 | 5.29 | 5.29 | 5.29 | ||||
6.x | 30.x+ | 6.30 | 6.31 | 6.32 | 6.33 |
图例
活跃 | 包含新功能、兼容性变更和错误修复的次版本和补丁版本。 |
---|---|
维护 | 包含关键错误修复的补丁版本。 |
生命周期结束 | 版本不受支持。用户应升级到受支持的版本。 |
未来 | 预计的发布。为规划目的而显示。 |
Python 平台和库支持
Protobuf 致力于遵循Python 支持政策中描述的平台和库支持政策。有关具体支持的版本,请参阅基础 Python 支持矩阵。
Ruby
protoc 版本可以从 Protobuf Ruby 的次版本号推断出来。例如:Protobuf Ruby 版本 3.25.x 使用 protoc 版本 25.x。
未来计划以斜体显示,并可能发生变化。
发布支持日期
Protobuf Ruby | 发布日期 | 支持结束 |
---|---|---|
3.x | 2022年5月25日 | 2025年3月31日 |
4.x | 2024年3月13日 | 待定 |
发布支持图表
Protobuf Ruby | protoc | 23年第一季度 | 23年第二季度 | 23年第三季度 | 23年第四季度 | 24年第一季度 | 24年第二季度 | 24年第三季度 | 24年第四季度 | 25年第一季度 | 25年第二季度 | 25年第三季度 | 25年第四季度 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.x | 21.x-25.x | 3.22 | 3.23 | 3.24 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | 3.25 | |||
4.x | 26.x+ | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.33 |
图例
活跃 | 包含新功能、兼容性变更和错误修复的次版本和补丁版本。 |
---|---|
维护 | 包含关键错误修复的补丁版本。 |
生命周期结束 | 版本不受支持。用户应升级到受支持的版本。 |
未来 | 预计的发布。为规划目的而显示。 |
Ruby 平台和库支持
Protobuf 致力于遵循Ruby 支持政策中描述的平台和库支持政策。有关具体支持的版本,请参阅基础 Ruby 支持矩阵。
JRuby 未受官方支持,但我们尽最大努力为最新的 JRuby 版本提供非官方支持,目标是与我们的最低 Ruby 版本或更高版本兼容。