Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions content/news/2026-10-15.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@


+++
title = "Changes Announced on October 15, 2026"
linkTitle = "October 15, 2026"
toc_hide = "true"
description = "Changes announced for Protobuf on October 15, 2026."
type = "docs"
+++

The following sections cover additional planned breaking changes in the v38
release, expected in 2027 Q1. These describe changes as we anticipate them being
implemented, but due to the flexible nature of software some of these changes
may not land or may vary from how they are described in this topic.

## Changes in C++ {#cpp}

### Remove NULL Termination in Descriptor Names

Descriptor APIs that return `absl::string_view` will no longer guarantee null
termination. The null terminators are being removed to achieve memory savings in
descriptors.

This change applies to descriptor methods that return `absl::string_view`.
Callers must not assume that the pointer returned by `.data()` is
null-terminated. If a null-terminated C-style string is required, callers should
explicitly construct a `std::string` (for example, `std::string(desc->name())`)
or migrate to APIs that accept `absl::string_view` directly.

## Changes in Protoc {#protoc}

### Disallow Conflicting Descriptors in `--descriptor_set_in`

Protoc will error when conflicting file descriptors are provided via
`--descriptor_set_in`.

Protoc introduced a warning when conflicting descriptors are detected across
input sets. In the v38 release, this warning becomes an error. Build systems and
callers must ensure that descriptor sets fed to `--descriptor_set_in` do not
provide conflicting definitions for the same `.proto` file.

## Changes in Python {#python}

### Align `__eq__()` with `Any` Fields on Pure Python with Py-upb Behavior

Align pure PythonProto `__eq__()` behavior to upb by only comparing the
serialized bytes. There are some edge cases where two `Any` fields may contain
different bytes which are equal only when parsed. These cases used to return
`true`, but will now return `false`.

## Changes in UPB {#upb}

### Align Default Value Float and Double Formatting with C++ `FileDescriptor::CopyTo`

In `upb_FileDef_ToProto`, `float` and `double` default values in
`FieldDescriptorProto.default_value` were previously formatted using hardcoded
`"%.9g"` and `"%.17g"`. This could produce more digits than C++
`FieldDescriptor::DefaultValueAsString()` (`io::SimpleFtoa` / `io::SimpleDtoa`),
causing `upb_FileDef_ToProto` output to differ from C++ `FileDescriptor::CopyTo`
(for example, `"0.10000000000000001"` vs `"0.1"` for `double`, and
`"7.77777779e+35"` vs `"7.777778e+35"` for `float`).

In v38, `upb_FileDef_ToProto` will format `float` and `double` default values
using round-trip formatting matching `io::SimpleFtoa` and `io::SimpleDtoa`.
2 changes: 2 additions & 0 deletions content/news/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ New news topics will also be published to the
The following news topics provide information in the reverse order in which it
was released.

* [October 15, 2026](/news/2026-10-15) - Additional
breaking changes in the upcoming 38.x release
* [September 22, 2026](/news/2026-09-22) - Breaking
changes in the upcoming 38.x release
* [July 13, 2026](/news/2026-07-13) - Edition 2026
Expand Down
Loading