diff --git a/README.md b/README.md index 31796ad18ed..96d4d3e175a 100644 --- a/README.md +++ b/README.md @@ -1,112 +1,117 @@ -[![Join the chat at https://gitter.im/zeroc-ice/ice](https://badges.gitter.im/zeroc-ice/ice.svg)](https://gitter.im/zeroc-ice/ice?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -# Ice - Comprehensive RPC Framework - -Ice helps you network your software with minimal effort. By taking care of all -interactions with low-level network programming interfaces, Ice allows you to focus -your efforts on your application logic. When using Ice, there is no need to worry -about details such as opening network connections, serializing and deserializing -data for network transmission, or retrying failed connection attempts (to name just -a few of dozens of such low-level details). - -You can download Ice releases from [ZeroC's website](https://zeroc.com/downloads/ice). -Use this GitHub repository to build from source; see [branches](#branches) for more -information. - -## Languages - -Ice supports the following programming languages: - -- C# -- C++ -- Java -- JavaScript -- MATLAB -- Objective-C -- PHP -- Python -- Ruby -- Swift -- TypeScript - -## Platforms - -Ice runs on a wide range of platforms: - -- Android -- iOS -- Linux -- Linux on embedded devices -- macOS -- Node.js -- Unix systems such as AIX -- Web Browser -- Windows - -## Features - -- Efficient, high-performance binary protocol -- Supports a wide range of programming languages and platforms -- Easy to use and type-safe API, with your own interfaces and types defined in - a programming language neutral IDL, Slice -- Supports secure, encrypted communications by taking advantage of your - platform's native SSL/TLS stack -- Familiar object-oriented programming model, with the ability to transmit - proxies (references to remote objects) to remote applications -- Supports synchronous and asynchronous calls, for both client-side invocations - and server-side dispatches -- Automatic discovery of remote objects through UDP multicast -- Comes with a number of optional services: - - [IceGrid](https://zeroc.com/products/ice/services/icegrid) - a DNS-like - service for Ice objects, with support for server deployment, replication, - monitoring, load-balancing and more - - [IceStorm](https://zeroc.com/products/ice/services/icestorm) - a - lightweight topic-based pub-sub service - - [Glacier2](https://zeroc.com/products/ice/services/glacier2) - a - sysadmin-friendly solution for routing Ice communications through firewalls - -## Branches - -- `master` - Primary development branch (unstable, frequently updated) - -- `3.7` - Ice 3.7.x plus various patches (stable, frequently updated) - -- `3.6` - Ice 3.6.x plus various patches (stable) - -- `3.5` - Ice 3.5.1 plus various patches (stable) - -- `3.4` - Ice 3.4.2 plus various patches (stable) - -## Copyright and License - -Ice is a single-copyright project: all the source code in this [ice -repository](https://github.com/zeroc-ice/ice) is Copyright © ZeroC, Inc., -with very few exceptions. - -As copyright owner, ZeroC can license Ice under different license terms, and -offers the following licenses for Ice: -- GPL v2, a popular open-source license with strong -[copyleft](https://en.wikipedia.org/wiki/Copyleft) conditions (the default -license) -- Commercial or closed-source licenses +[![Join the chat at https://gitter.im/zeroc-ice/ice](https://badges.gitter.im/zeroc-ice/ice.svg)][gitter] + +# The Ice framework + +Ice helps you build networked applications with minimal effort. By taking care of all interactions with low-level +network programming interfaces, Ice allows you to focus your efforts on your application logic. You don't need to +worry about details such as opening network connections, encoding and decoding data for network transmission, +or retrying failed connection attempts (to name just a few of dozens of such low-level details). + +[Downloads][downloads] | [Examples][examples] | [Documentation][docs] + +## RPCs with Ice + +Remote procedure calls ([RPCs][rpcs]) are at the heart of the Ice framework. + +You create RPCs with an easy 2-step process: +1. Define the contract between your client and your server with the [Slice][slice] languageā€”Ice's [IDL][idl]. +2. Run the Slice compiler on these Slice definitions to generate stubs in the programming language(s) of your choice. + +For example: + +```slice +// The contract specified using Slice. +interface Hello +{ + // The caller says "hello". + void sayHello(); +} +``` + +```shell +# Compile the Slice contract with the Slice compiler for C++ (slice2cpp) +slice2cpp Hello.ice +``` + +```c++ +// C++ client -If you license Ice under GPL v2, there is no license fee or signed license -agreement: you just need to comply with the GPL v2 terms and conditions. See -[ICE_LICENSE](./ICE_LICENSE) and [LICENSE](./LICENSE) for further information. +// Call operation sayHello on a remote object that implements +// interface Hello using the generated proxy class (HelloPrx). +helloPrx->sayHello(); +``` -If you purchase a commercial or closed-source license for Ice, you must comply -with the terms and conditions listed in the associated license agreement; the -GPL v2 terms and conditions do not apply. +```c++ +// C++ server -The Ice software itself remains the same: the only difference between an open-source -Ice and a commercial Ice are the license terms. +// Implement the Hello interface by deriving from the generated +// Hello abstract base class. +class HelloImpl : public Hello +{ +public: -## Documentation + virtual string sayHello(const Ice::Current&) override + { + cout << "Hello World!" << endl; + } +}; +``` + +You can use any supported programming language for your client and server. For example, a Python client could call a C++ +server; neither side knows the programming language used by the other side. + +## Complete solution with a uniform API + +The Ice framework provides everything you need to build networked applications: +- RPCs with a compact binary [protocol][protocol] over a variety of network transports (TCP, UDP, WebSocket, +Bluetooth...) +- Secure communications ([IceSSL][icessl]) +- Configuration ([Ice Properties][properties]) +- Logging ([Ice Logger][logger]) +- Instrumentation and metrics ([IceMX][icemx]) +- Pub-sub ([IceStorm][icestorm]) +- Server deployment, replication and monitoring ([IceGrid][icegrid]) +- Session management and firewall traversal ([Glacier2][glacier2]) + +The Ice API is defined almost entirely using Slice; as a result, it is essentially the same in all programming +languages. + +## Building Ice from source + +[C++](cpp) | [C#](csharp) | [Java](java) | [JavaScript/TypeScript](js) | [MATLAB](matlab) | [Objective-C](objective-c) | [PHP](php) | [Python](python) | [Ruby](ruby) | [Swift](swift) + +## Copyright and license + +Ice is a single-copyright project: all the source code in this [ice repository][ice-repo] is +Copyright © ZeroC, Inc., with very few exceptions. + +As copyright owner, ZeroC can license Ice under different license terms, and offers the following licenses for Ice: +- GPL v2, a popular open-source license with strong [copyleft][copyleft] conditions (the default license) +- Commercial or closed-source licenses -- [Ice Release Notes](https://doc.zeroc.com/rel/ice-releases/ice-3-7/ice-3-7-9-release-notes) -- [Ice Manual](https://doc.zeroc.com/ice/3.7/) +If you license Ice under GPL v2, there is no license fee or signed license agreement: you just need to comply with the +GPL v2 terms and conditions. See [ICE_LICENSE](ICE_LICENSE) and [LICENSE](LICENSE) for further information. + +If you purchase a commercial or closed-source license for Ice, you must comply with the terms and conditions listed in +the associated license agreement; the GPL v2 terms and conditions do not apply. + +The Ice software itself remains the same: the only difference between an open-source Ice and a commercial Ice are the +license terms. + +[copyleft]: https://en.wikipedia.org/wiki/Copyleft +[docs]: https://doc.zeroc.com/ice/3.7 +[downloads]: https://zeroc.com/downloads/ice +[examples]: https://github.com/zeroc-ice/ice-demos +[gitter]: https://gitter.im/zeroc-ice/ice?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge +[glacier2]: https://doc.zeroc.com/ice/3.7/ice-services/glacier2 +[ice-repo]: https://github.com/zeroc-ice/ice +[icegrid]: https://doc.zeroc.com/ice/3.7/ice-services/icegrid +[icemx]: https://doc.zeroc.com/ice/3.7/administration-and-diagnostics/administrative-facility/the-metrics-facet +[icessl]: https://doc.zeroc.com/ice/3.7/ice-plugins/icessl +[icestorm]: https://doc.zeroc.com/ice/3.7/ice-services/icestorm +[idl]: https://en.wikipedia.org/wiki/Interface_description_language +[logger]: https://doc.zeroc.com/ice/3.7/administration-and-diagnostics/logger-facility +[properties]: https://doc.zeroc.com/ice/3.7/properties-and-configuration +[protocol]: https://doc.zeroc.com/ice/3.7/ice-protocol-and-encoding +[rpcs]: https://en.wikipedia.org/wiki/Remote_procedure_call +[slice]: https://doc.zeroc.com/ice/3.7/the-slice-language