IceRPC is a brand new RPC framework, that we wrote from scratch and then rewrote several times over. It is a spiritual successor to Ice since many ideas and designs in IceRPC are a direct result of our experience developing Ice and helping Ice users build all kinds of applications with Ice.

Ice and IceRPC are both RPC frameworks with similar names, but they are quite different:

Ice is a one-stop solution for building network applications. With Ice, you get an RPC framework and many other components to help you build portable, multi-language networked applications.

Ice includes:

  • an RPC framework
  • IDL and serialization format (Slice)
  • configuration (Ice properties)
  • logging (Ice logger)
  • metrics/telemetry (Ice metrics)
  • server deployment and monitoring (IceGrid)
  • pub/sub (IceStorm, DataStorm)
  • application gateway (Glacier2)

On the other hand, IceRPC has a single focus: RPCs (the name gave it away!). When building an application with IceRPC, you use IceRPC for your RPCs, and you need to look outside IceRPC for other functionalities. For example, you could select:

  • IceRPC for your RPCs
  • Slice or Protobuf to define your network APIs
  • YAML for configuration
  • Kubernetes for server deployment and monitoring
  • OpenTelemetry for distributed telemetry

Ice delivers a uniform set of components, features, APIs across platforms and languages. The same APIs are available in pretty much all programming languages and look the same. This uniformity is by design and enforced by the use of "local" Slice definitions. This way, when you port your code from one programming language to another, the Ice portion of your code can essentially remain the same.

A downside of this uniformity is the Ice API and APIs generated by the Slice compiler often don't follow standard naming conventions and patterns in the target programming language, and can look odd. For example, you create an Ice object adapter by calling createObjetAdapter on your communicator in all languages, even if methods are usually in Pascal-case (CreateObjectAdapter) or snake-case (create_object_adapter) in this particular language.

On the other hand, IceRPC aims to look completely native in each programming language, by following the normal conventions and patterns for the language. For IceRPC, language "native-ness" is more important than consistency between IceRPC implementations in different languages.

Ice and IceRPC are both fully open source but use different open source licenses.

For Ice, we selected GPLv2, a widely used and well understood reciprocal license. It's a good fit for for projects licensed under GPLv2, for evaluation, and for some internal use. For most other use-cases, you need to purchase a commercial license in order to use Ice in your application.

For IceRPC, we selected the Apache License version 2.0, a well-known permissive open source license. This license allows you to use IceRPC for any application, open source or closed source, free of charge.

Was this page helpful?