-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Description
With this issue, I’d like to propose continuing the effort started with grpc-zero, and replacing the current default implementation of GrpcCodeGen.
As a quick recap, grpc-zero works by compiling official protobuf sources(C++) to Wasm, and then from Wasm to Java bytecode using Chicory. This guarantees a 1:1 behavioral match without requiring architecture or OS specific binaries.
Key advantages:
- No native dependencies (for example, this section becomes obsolete)
- A small, self-contained build-time dependency
Implementation ideas
Possible approaches:
- Keep the current implementation available behind a
legacyflag
- Pros:
- Minimal breaking changes
- Straightforward backward compatibility for users
- Cons:
- Both implementations remain on the classpath, so we cannot remove the large transitive dependencies required by the current implementation significantly reducing the benefits of the new approach.
- Move the current implementation to a separate
-legacymodule
- Pros:
- New users benefit from the new setup by default
- Cons:
- Double maintenance
- Potentially more complex Maven setup to run integration tests across both implementations
- Move the current implementation to a Quarkiverse repository and fully replace it with grpc-zero
- Pros:
- Reduced maintenance
- Clear forward direction
- Cons:
- The most breaking option for users who rely on the current implementation. Restoring the previous behavior would require explicitly adding a different Maven dependency.
Additional considerations
grpc-zero currently passes 100% of the gRPC-related integration tests in this repository, with zero changes required aside from swapping in the new codegen.
I’ve received a few reports of successful migrations without issues or additional modifications needed.
I’d like to gather feedback on this proposal.
My preferred path forward is option 3, with the first release targeted for next year to ensure I have maximum availability to address any new issues and assist users during the transition.