Hello gRPC C# Users!
In May 2021 we announced that Grpc.Core (the original C# implementation of gRPC) became "maintenance only" and that grpc-dotnet will be the recommended implementation going forward. We also announced that Grpc.Core will become deprecated in the future.
While all the above is still the plan, we are making some adjustments based on the user feedback we received. We also wanted to publish more details about the plan and its technical execution. All the important updates are summarized in the following sections of this announcement.
Originally we planned to deprecate the Grpc.Core implementation in May 2022, but the feedback we received from users has indicated that extending the maintenance period would make sense. Without going too much into the details, the main points of the feedback can be summarized as:
The main blocker for deprecating Grpc.Core is the lack of support of the legacy .NET Framework in grpc-dotnet. The desire to migrate off the legacy .NET framework is often there, but migrating workloads from .NET Framework to .NET Core / .NET 6 simply takes time and effort.
Grpc.Core is a very important technology for enabling migration off .NET Framework (since it enables piece-by-piece migration by interconnecting components on newer .NET platforms with components that remain on .NET Framework), so supporting it for a little longer can (somewhat paradoxically) help users migrate off it faster.
As a result, we are delaying the deprecation of Grpc.Core until May 2023 (1 year from now, and 2 years after the original announcement). Until then, Grpc.Core will remain to be supported in the "maintenance mode", as described below.
Since the plan to deprecate Grpc.Core has been now publicly known for a while and since the main reason we are extending the maintenance period is to deal with the issues related to the legacy .NET Framework (and migration off it), we also want to clarify what exactly will be covered by the "Grpc.Core maintenance" going forward:
The main goal of keeping Grpc.Core alive is to maintain the ability to run gRPC C# clients and servers on the legacy .NET Framework on Windows. This will be taken into account when considering issues / fixes.
We will only provide critical and security fixes going forward. This is to minimize the maintenance costs and reflects the fact that grpc-dotnet is the recommended implementation to use.
There will be no new features for Grpc.Core. Note that since Grpc.Core is moving to a maintenance branch (see section below), there will also be no new features coming from the native C-core layer.
There will be no new platform support and portability work. The focus will be on continuing support for the legacy .NET Framework on Windows (where there is no alternative implementation to use) and the list of supported platforms will not be expanded (e.g. we will not work towards better support for Unity, Xamarin, Alpine Linux etc.). We will likely drop support for platforms that have been so far considered as "experimental" (e.g. Unity and Xamarin), since they are also hard to test and maintain.
Work to support new .NET versions (.NET6, NET 7, …) will be kept to a minimum (or not done at all) since those .NET versions fully support grpc-dotnet.
No more performance work: Since the main purpose of Grpc.Core is to maintain interoperability with legacy .NET framework, there will be less focus on performance. We do not expect any significant performance drops, but performance may degrade over time if tradeoffs between performance vs maintainability are needed.
To simplify the maintenance of Grpc.Core, we decided to move the the Grpc.Core implementation to a maintenance branch (v1.46.x on the grpc/grpc repository), where it will continue to receive security and critical fixes, but will not be slowing down the development of the native C-core library it is based on (it will be based on a maintenance version of C-core in the same branch).
Since originally the grpc/grpc repository was a home to more NuGet packages than just Grpc.Core, we are actually doing a split: Grpc.Core and the related packages (e.g. Grpc, Grpc.Core, Grpc.Core.Testing, Grpc.Core.NativeDebug, ...) will be moved to the maintenance branch, while other packages (Grpc.Core.Api, Grpc.Auth, Grpc.HealthCheck, Grpc.Reflection and eventually also Grpc.Tools) will be moved to the grpc/grpc-dotnet repository where there will continue to be developed. This technical solution will ensure that Grpc.Core stays stable and maintainable and the other packages that are also used by grpc-dotnet will have a new home going forward and can continue to evolve (and they will already be in the right place once Grpc.Core actually goes out of support in the future).
More details about the solution we chose can be found in the csharp's README.
Feel free to reply to this announcement with follow up questions and requests for clarification. For major issues connected to the migration/deprecation plan, you can file an issue on github as usual.
On behalf of the gRPC team,
Jan
--Jan Tattermusch
Software Engineer
Google Germany GmbH
Erika-Mann-Straße 33
80636 München
Geschäftsführer: Paul Manicle, Liana Sebastian
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Diese E-Mail ist vertraulich. Falls sie diese fälschlicherweise erhalten haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter, löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen, dass die E-Mail an die falsche Person gesendet wurde.
This e-mail is confidential. If you received this communication by mistake, please don't forward it to anyone else, please erase all copies and attachments, and please let me know that it has gone to the wrong person.