版本支持

各语言实现的提供支持期限列表。

本主题后面表格中涵盖了 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 的安全修复程序),我们可能会增加一次发布。跳过发布的情况应该非常罕见。

主要(破坏性)发布将以第一季度发布为目标。如果出现紧急情况,我们可能随时引入主要的破坏性更改,但这应该非常罕见。

我们的支持期限由我们的库破坏性更改政策定义。

Protobuf 认为强制执行其文档化的语言、工具、平台和库支持政策是破坏性更改。例如,发布可能会放弃对 EOL 语言版本的支持,而无需增加主版本。

发布中会改变什么?

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

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

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

生成代码和运行时 API 可能会更改。在次版本或补丁版本中,更改要么是纯粹为了新功能而进行的增补,要么是源兼容的更新。简单地重新编译代码应该即可。在主要版本中,生成代码或运行时 API 可能会以不兼容的方式更改,需要更改调用点 (callsite)。我们尽量减少这些情况。修复或以其他方式影响未定义行为的更改不被视为破坏性更改,并且不需要主要版本发布。

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

总体而言

  • 根据我们的跨版本运行时保证,次版本或补丁版本应仅包含纯粹的增补或源兼容的更新。
  • 主要版本可能会移除功能、特性或以需要更新调用点 (callsite) 的方式更改 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++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#

protoc 版本可以从 Protobuf C# 的次版本号推断出来。示例: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 计划每年在第一季度进行主版本升级。

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

未来计划以斜体显示,并可能会有所更改。

发布支持日期

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

发布支持图表

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

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

未来计划以斜体显示,并可能会有所更改。

发布支持日期

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

发布支持图表

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

protoc 版本可以从 Protobuf PHP 的次版本号推断出来。示例: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

protoc 版本可以从 Protobuf Python 的次版本号推断出来。示例: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 年 3 月 4 日待定

发布支持图表

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

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

未来计划以斜体显示,并可能会有所更改。

发布支持日期

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

发布支持图表

Protobuf Rubyprotoc23Q123Q223Q323Q424Q124Q224Q324Q425Q125Q225Q325Q4
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 版本或更高版本。