Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Complicated versioning schema between various languages #12062

Closed
georgthegreat opened this issue Feb 25, 2023 · 6 comments
Closed

Complicated versioning schema between various languages #12062

georgthegreat opened this issue Feb 25, 2023 · 6 comments

Comments

@georgthegreat
Copy link
Contributor

As I see, at the time the following rules apply:

  • C++ protobuf releases version numbered {major}.{minor}
  • Python protobuf adds 4. prefix to the versions (so git tag v21.12 becomes 4.21.12 on pypi).
  • Java add 3. prefix to the versions (hence git tag v21.12 becomes 3.21.12.

In order to correspond to various versioning schemas, git tags also get multiplied, i. e. v22.0, v3.22.0 and v4.22.0 do actually point to the same commit a847a8d.

Is there any rationale behind this schema?
Do you have plans to unify the versioning?

@georgthegreat georgthegreat added the untriaged auto added to all issues by default when created. label Feb 25, 2023
@fowles fowles added documentation discussion and removed untriaged auto added to all issues by default when created. labels Feb 25, 2023
@fowles
Copy link
Contributor

fowles commented Feb 25, 2023

This was a deliberate shift to allow language bindings to evolve independently. This was announced at https://protobuf.dev/news/2022-05-06/#versioning

The alternatives were

  • bump major versions when any language needed a breaking change
  • not bump major versions when some language did have a breaking change.
  • never making breaking changes

All of these were unacceptable for various reasons, so here we are.

We should give this a dedicated space in our docs (not just the announcement section), so I will leave this bug open to track that.

@georgthegreat
Copy link
Contributor Author

georgthegreat commented Feb 25, 2023

The problem is that making per-language versioning independent actually did not achieved this.

Code generation is still being done by C++ version of protoc which get released according to C++ versioning schema (i. e. every release is a breaking change).

Python bindings for protobuf still depend on a pyext (and have harsh performance if build without one).
As I am maintaining protobuf updates in our monorepo, I will indeed appreciate a doc section on this .

@Logofile
Copy link
Member

https://protobuf.dev/support/version-support/ covers our versioning schema. If this doesn't fully address the things raised in this issue, please reopen this and provide a delta so that I know what you'd like to see added/changed. Thanks.

@acecilia
Copy link

acecilia commented Jun 22, 2023

Doing the following in a M1 mac:

curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v23.3/protoc-23.3-osx-universal_binary.zip
unzip protoc-23.3-osx-universal_binary.zip -d protobuf
./protobuf/bin/protoc --version

Results in:

libprotoc 23.3

@Logofile is this expected?

@Logofile
Copy link
Member

Logofile commented Nov 1, 2023

That output seems correct, yes. Were you expecting something different? If so, what and why?

@georgthegreat
Copy link
Contributor Author

@Logofile, it is out internal problem, everything is correct with the protobuf.
However it would be more convenient for us, if protoc binary was produced by the linker, and protoc-${version} would be symlinked to it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants