版本支持

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

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

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

此新版本控制方案的第一个实例是 Python API 的 4.21.0 版本,它遵循之前的版本 3.20.1。同时发布的其他语言 API 发布为 3.21.0。

发布节奏

Protobuf 努力每季度发布更新。如果存在紧急需求(例如需要新 API 的安全修复),我们可能会添加一个版本。跳过版本应该是一个非常罕见的事件。

重大(破坏性)版本将针对 Q1 版本。如果存在紧急需求,我们可能会随时引入重大破坏性更改,但这应该非常罕见。

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

Protobuf *不* 认为执行其记录的语言、工具、平台和库支持策略是重大更改。例如,版本可能放弃对 EOL 语言版本的支持,而无需提升主版本。

版本更新内容?

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

**descriptor.proto 模式可能会更改。**在次版本或补丁版本中,我们可能会添加新的消息、字段、枚举、枚举值、版本、版本 特性 等。我们也可能将现有元素标记为已弃用。在主版本中,我们可能会删除已弃用的选项、枚举、枚举值、消息、字段等。

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

**Gencode 和运行时 API 可能会更改。**在次版本或补丁版本中,更改将纯粹是为新功能添加或源代码兼容的更新。只需重新编译代码即可。在主版本中,gencode 或运行时 API 可能会以不兼容的方式更改,这需要更改调用点。我们尽量减少这些。修复或以其他方式影响未定义行为的更改不被视为破坏性更改,并且不需要主版本发布。

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

一般来说

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

支持期限

始终支持最新的版本。当同一主版本下发布了新的次版本时,对早期次版本的支持将结束。对早期主版本的支持在引入破坏性版本后的四个季度结束。例如,当 Protobuf Python 5.26.0 于 2024 年第一季度发布时,这将 Protobuf Python 4.25.x 的支持结束时间设定为 2025 年第一季度末

以下部分提供了每种语言支持的指南。

C++

C++ 将目标每年在第一季度进行主版本更新。

可以从 Protobuf C++ 次版本号推断出 protoc 版本。例如: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 年第一季度2027 年 3 月 31 日

版本支持图表

Protobuf C++protoc23Q123Q223Q323Q424Q124Q224Q324Q425Q125Q225Q325Q4
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#

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

未来计划以*斜体*显示,如有更改,恕不另行通知。

版本支持日期

Protobuf C#发布日期支持结束日期
3.x2023 年 2 月 16 日待定

版本支持图表

Protobuf C#protoc23Q123Q223Q323Q424Q124Q224Q324Q425Q125Q225Q325Q4
3.x22.x-33.x3.223.233.243.253.263.273.283.293.303.313.323.33

图例

活跃具有新功能、兼容性更改和错误修复的次版本和补丁版本。
维护具有关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计版本。出于计划目的显示。

C# 平台和库支持

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

Java

Java 将目标每年在第一季度进行主版本更新。

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

未来计划以*斜体*显示,如有更改,恕不另行通知。

版本支持日期

Protobuf Java发布日期支持结束日期
3.x2023 年 2 月 16 日2026 年 3 月 31 日*
4.x2024 年 3 月 13 日2027 年 3 月 31 日
5.x2026 年第一季度*2028 年 3 月 31 日

**注意:**Protobuf Java 3.x 版本的维护支持窗口将为 24 个月,而不是主版本系列中最终版本的典型 12 个月。未来的主版本更新(5.x,计划于 2026 年第一季度)将采用改进的 “滚动兼容性窗口”,这应该允许恢复 12 个月的支持窗口。2025 年第一季度不会有主版本更新。

版本支持图表

Protobuf Javaprotoc23Q123Q223Q323Q424Q124Q224Q324Q425Q125Q225Q325Q4
3.x22.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

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

未来计划以*斜体*显示,如有更改,恕不另行通知。

版本支持日期

Protobuf Objective-C发布日期支持结束日期
3.x2023 年 2 月 16 日2026 年 3 月 31 日
4.x2025 年第一季度待定

版本支持图表

Protobuf Objective-Cprotoc23Q123Q223Q323Q424Q124Q224Q324Q425Q125Q225Q325Q4
3.x22.x-29.x3.223.233.243.253.263.273.283.293.293.293.293.29
4.x30.x+4.304.314.324.33

图例

活跃具有新功能、兼容性更改和错误修复的次版本和补丁版本。
维护具有关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计版本。出于计划目的显示。

PHP

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

未来计划以*斜体*显示,如有更改,恕不另行通知。

版本支持日期

Protobuf PHP发布日期支持结束日期
3.x2023 年 2 月 16 日2025 年 3 月 31 日
4.x2024 年 3 月 13 日待定

版本支持图表

Protobuf PHPprotoc23Q123Q223Q323Q424Q124Q224Q324Q425Q125Q225Q325Q4
3.x22.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

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

未来计划以*斜体*显示,如有更改,恕不另行通知。

版本支持日期

Protobuf Python发布日期支持结束日期
4.x2023 年 2 月 16 日2025 年 3 月 31 日
5.x2024 年 3 月 13 日2026 年 3 月 31 日
6.x2025 年第一季度待定

版本支持图表

Protobuf Pythonprotoc23Q123Q223Q323Q424Q124Q224Q324Q425Q125Q225Q325Q4
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+6.306.316.326.33

图例

活跃具有新功能、兼容性更改和错误修复的次版本和补丁版本。
维护具有关键错误修复的补丁版本。
生命周期结束版本不受支持。用户应升级到受支持的版本。
未来预计版本。出于计划目的显示。

Python 平台和库支持

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

Ruby

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

未来计划以*斜体*显示,如有更改,恕不另行通知。

版本支持日期

Protobuf Ruby

发布日期支持结束日期
3.x2023 年 2 月 16 日2025 年 3 月 31 日
4.x2024 年 3 月 13 日待定

版本支持图表

Protobuf Ruby

protoc23Q123Q223Q323Q424Q124Q224Q324Q425Q125Q225Q325Q4
3.x22.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 版本或更高版本兼容。