Welcome to Chameleon's page.

What is this all about?

Chameleon is a Group Communication framework for smartphones. If you don't know what a group communication is, consider a following problem: Suppose you want to build a multi-user application with some kind of interaction between the users. It could be a multi-player game, a chat app or maybe some kind of content sharing application. The generally accepted approach for such needs would probably be client-server. The always-on server resides in a well-known location, clients tell it what they "do", the server aggregates the actions of all clients, decides on the new state and disseminates it to clients, tells them what they "see".

Sometimes, however, you can't, or don't want to use a server. It's expensive, it's not convenient to your users, especially if all they need is connectivity to each other. In such case you might be tempted to try and do without, utilizing only the local Ad-Hoc, or local LAN connectivity. However, this might turn out not be so trivial, as many communication properties that come free in a client-server model become not so easy to achieve in a fully distributed model. Especially if you want to avoid having a single point of failure, and thus allow your users to connect and disconnect at will. Just think, how would you monitor who's currently connected? How do you maintain this connection knowledge consistent between peers? How do you enforce properties on message ordering? If you don't, then different peers might receive messages in different orders, making it hard to maintain an illusion of a single consistent state. When we had the server it performed all these tasks. But, luckily, all these problems can be solved with appropriate distributed algorithms. Better yet, the problems are rather generic, so it makes sense to build a library to solve them. And this is what Group Communication is all about - allowing easy, reliable, consistent communication in distributed environment.