版本支持
当前支持的版本
| 语言 | 积极支持 | 仅维护 |
|---|---|---|
| Protoc | 33.x | 29.x, 25.x (Java) |
| C++ | 6.33.x | 5.29.x |
| C# | 3.33.x | |
| Java | 4.33.x | 3.25.x |
| ObjC | 4.33.x | 3.29.x |
| PHP | 4.33.x | |
| Python | 6.33.x | 5.29.x |
| Ruby | 4.33.x |
编号方案
protoc 和各种语言的支持窗口在本主题后面的表格中有所说明。本主题中的版本号遵循 SemVer 约定;在版本“3.21.7”中,“3”是主版本号,“21”是次版本号,“7”是微版本号或补丁号。
Protobuf 的发布只使用 minor.point 号,例如 29.5。
每个单独的语言运行时都使用相同的 minor.point 进行版本控制,但具有特定于语言的主版本号。例如,29.5 版本对应 Java 运行时版本 4.29.5 和 C# 运行时版本 3.29.5。我们建议使用 protoc 29.5 配合 Java 4.29.5 和 C# 3.29.5。
此编号方案允许为所有语言的特定版本使用一个数字,同时避免了不同语言之间主版本号的耦合。例如,30.0 版本在 Python 中包含破坏性更改,但在 Java 中不包含,因此 Python 版本从 5.29.0 变为 6.30.0,而 Java 版本从 4.29.0 变为 4.30.0。
此版本控制方案于 2022 年随 21 版本推出。在引入分离式版本控制方案之前,所有语言的主版本号均为 3。
发布周期
Protobuf 努力做到每季度发布一次更新。如果存在紧急需求(例如需要新 API 的安全修复),我们可能会添加一次发布。跳过发布应非常罕见。
主版本(破坏性)发布将以每年的第一季度为目标。如果存在紧急需求,我们可能会随时引入主版本破坏性更改,但这应该是非常罕见的。
我们的支持窗口由我们的 库破坏性更改策略 定义。
Protobuf **不**认为强制执行其文档的语言、工具、平台和库支持策略属于破坏性更改。例如,一个发布可能在不增加主版本的情况下放弃对已过 EOL 的语言版本的支持。
发布中包含哪些内容?
二进制线协议格式不会改变,即使在主版本更新时也是如此。您将继续能够从新版本的 Protocol Buffers 中读取旧的二进制线协议格式 proto 数据。新生成的序列化到二进制线协议格式的 protobuf 绑定将可被旧二进制文件解析。这是 Protocol Buffers 的基本设计原则。请注意,JSON 和 textproto 格式 **不** 提供相同的稳定性保证。
descriptor.proto 模式可能会改变。 在次要版本或补丁版本发布中,我们可能会添加新的消息、字段、枚举、枚举值、版本、版本 特性 等。我们也可能将现有元素标记为已弃用。在主版本发布中,我们可能会移除已弃用的选项、枚举、枚举值、消息、字段等。
.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年4月4日 | 2027年3月31日 |
| 7.x | 2026年第一季度 | 待定 |
发布支持图表
| Protobuf C++ | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x | 3.21 | |||||||||||
| 4.x | 22.x-25.x | 4.23 | 4.24 | 4.25 | 4.25 | ||||||||
| 5.x | 26.x-29.x | 5.26 | 5.27 | 5.28 | 5.29 | 5.29 | |||||||
| 6.x | 30.x-33.x | 6.30 | 6.31 | 6.32 | 6.33 | 6.33 | |||||||
| 7.x | 34.x+ | 7.34 | |||||||||||
图例
| 积极支持 | 次要版本和补丁版本包含新功能、兼容性更改和错误修复。 |
|---|---|
| 维护 | 补丁版本包含关键错误修复。 |
| 生命周期结束 | 发布版本不受支持。用户应升级到受支持的版本。 |
| 未来 | 计划发布。出于规划目的显示。 |
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 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x+ | 3.23 | 3.24 | 3.25 | 3.26 | 3.27 | 3.28 | 3.29 | 3.30 | 3.31 | 3.32 | 3.33 | 3.34 |
图例
| 积极支持 | 次要版本和补丁版本包含新功能、兼容性更改和错误修复。 |
|---|---|
| 维护 | 补丁版本包含关键错误修复。 |
| 生命周期结束 | 发布版本不受支持。用户应升级到受支持的版本。 |
| 未来 | 计划发布。出于规划目的显示。 |
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 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x-25.x | 3.23 | 3.24 | 3.25 | 3.25 | ||||||||
| 4.x | 26.x+ | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.33 | 4.34 | |||
图例
| 积极支持 | 次要版本和补丁版本包含新功能、兼容性更改和错误修复。 |
|---|---|
| 维护 | 补丁版本包含关键错误修复。 |
| 生命周期结束 | 发布版本不受支持。用户应升级到受支持的版本。 |
| 未来 | 计划发布。出于规划目的显示。 |
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年4月4日 | 2027年3月31日 |
| 5.x | 2026年第一季度 | 待定 |
发布支持图表
| Protobuf Objective-C | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x-29.x | 3.23 | 3.24 | 3.25 | 3.26 | 3.27 | 3.28 | 3.29 | 3.29 | ||||
| 4.x | 30.x - 33.x | 4.30 | 4.31 | 4.32 | 4.33 | 4.33 | |||||||
| 5.x | 34.x+ | 5.34 | |||||||||||
图例
| 积极支持 | 次要版本和补丁版本包含新功能、兼容性更改和错误修复。 |
|---|---|
| 维护 | 补丁版本包含关键错误修复。 |
| 生命周期结束 | 发布版本不受支持。用户应升级到受支持的版本。 |
| 未来 | 计划发布。出于规划目的显示。 |
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日 | 2026年3月31日 |
| 5.x | 2026年第一季度 | 待定 |
发布支持图表
| Protobuf PHP | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x-25.x | 3.23 | 3.24 | 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 | 4.33 | |||
| 5.x | 34.x+ | 5.34 | |||||||||||
图例
| 积极支持 | 次要版本和补丁版本包含新功能、兼容性更改和错误修复。 |
|---|---|
| 维护 | 补丁版本包含关键错误修复。 |
| 生命周期结束 | 发布版本不受支持。用户应升级到受支持的版本。 |
| 未来 | 计划发布。出于规划目的显示。 |
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年4月4日 | 2027年3月31日 |
| 7.x | 2026年第一季度 | 待定 |
发布支持图表
| Protobuf Python | protoc | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4.x | 21.x-25.x | 4.23 | 4.24 | 4.25 | 4.25 | ||||||||
| 5.x | 26.x-29.x | 5.26 | 5.27 | 5.28 | 5.29 | 5.29 | |||||||
| 6.x | 30.x-33.x | 6.30 | 6.31 | 6.32 | 6.33 | 6.33 | |||||||
| 7.x | 34.x+ | 7.34 | |||||||||||
图例
| 积极支持 | 次要版本和补丁版本包含新功能、兼容性更改和错误修复。 |
|---|---|
| 维护 | 补丁版本包含关键错误修复。 |
| 生命周期结束 | 发布版本不受支持。用户应升级到受支持的版本。 |
| 未来 | 计划发布。出于规划目的显示。 |
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 | 23Q2 | 23Q3 | 23Q4 | 24Q1 | 24Q2 | 24Q3 | 24Q4 | 25Q1 | 25Q2 | 25Q3 | 25Q4 | 26Q1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.x | 21.x-25.x | 3.23 | 3.24 | 3.25 | 3.25 | ||||||||
| 4.x | 26.x+ | 4.26 | 4.27 | 4.28 | 4.29 | 4.30 | 4.31 | 4.32 | 4.33 | 4.34 | |||
图例
| 积极支持 | 次要版本和补丁版本包含新功能、兼容性更改和错误修复。 |
|---|---|
| 维护 | 补丁版本包含关键错误修复。 |
| 生命周期结束 | 发布版本不受支持。用户应升级到受支持的版本。 |
| 未来 | 计划发布。出于规划目的显示。 |
Ruby 平台和库支持
Protobuf 致力于遵循 Ruby 支持政策 中描述的平台和库支持政策。有关支持的具体版本,请参阅 基础 Ruby 支持矩阵。
JRuby 未获官方支持,但我们会在最佳努力的基础上,为支持我们最低 Ruby 版本或以上版本的最新 JRuby 版本提供非官方支持。