Updates on gRPC C# (Grpc.Core) support

2,903 views
Skip to first unread message

Jan Tattermusch

unread,
May 3, 2022, 5:25:07 AM5/3/22
to grpc.io

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.

Grpc.Core maintenance period will be extended by 1 more year (until May 2023)

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.


Grpc.Core moves to a maintenance branch in the grpc/grpc repository (while other actively developed packages move to grpc/grpc-dotnet repository)


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.

Benjamin Krämer

unread,
May 18, 2022, 3:46:59 AM5/18/22
to grpc.io
Hello gRPC C# users,

I also wanted to forward your attention to https://github.com/dotnet/aspnetcore/issues/35077 in case you are affected by the note that grpc-dotnet is not supporting Xamarin and that support for it in general will probably get dropped once Grpc.Core is EOL. It would be a good location to mention if you are also affected and to gather your use-cases. Daniel Roth is already gathering the use-cases there and wants to check how they could be covered in the future.

Thanks,
Benjamin

Ville Vainio

unread,
Aug 10, 2022, 9:13:50 AM8/10/22
to grpc.io
Just pitching in here that this is super important for us, as we are moving from WCF to gRPC specifically to allow gradual movement from legacy .NET to NET5+. I considered screaming loudly during the initial announcement, but apparently other people did that for me in the meantime ;).

After the maintenance period ends, it would be good to retain a way to make a release, in case there are some emergency changes that need to go in (and can be done without much effort). Or, there should be a natural way for people to make the builds on their own build machines if they need to use a self-patched version in their products. 

Benjamin Krämer

unread,
Mar 22, 2023, 11:30:42 AM3/22/23
to grpc.io
Since May is approaching fast, I just want to remind everyone again, that https://github.com/dotnet/aspnetcore/issues/35077 is still not considered for ASP.NET Core 8 and whoever is currently using Grpc.Core on Android or with MAUI will be left without a way forward.

We on our part are evaluating if it's possible to write a compatibility layer for our use-case (to not be blocked by the missing ASP.NET Framework for Android) or if we just stick with Grpc.Core, hoping, that no security relevant events make it necessary to fork and patch ourselves before Microsoft brings us gRPC support for Android.

Zaphod Stardust

unread,
Jun 7, 2023, 5:33:53 AM6/7/23
to grpc.io
@Jan Tattermusch:
I understand  that now the "maintenance mode" of Grpc.Core is over.
That means Grpc.Core is now officially deprecated, correct?

What are the rules / support policies that apply now?
-> No fixes (even for security) any more (besides contributed by open source community)?

Thanks for clarifying!

Jan Tattermusch schrieb am Dienstag, 3. Mai 2022 um 11:25:07 UTC+2:

Jan Tattermusch

unread,
Jul 4, 2023, 11:02:10 AM7/4/23
to grpc.io
FYI added some updates about the current status of Grpc.Core here: https://github.com/grpc/grpc/issues/32719#issuecomment-1620399357

Jan Tattermusch

unread,
Oct 2, 2023, 1:53:31 PM10/2/23
to grpc.io
Hello Everyone,

Please see the latest update on Grpc.Core deprecation.

Reply all
Reply to author
Forward
0 new messages