Title: About Apache Wave Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at . http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. # Overview Wave a real-time communication and collaboration tool. Wave in a Box (WIAB) is a server that hosts and federates waves, supports extensive APIs, and provides a rich web client. This project also includes an implementation of the Wave Federation Protocol, to enable federated collaboration systems, such as multiple interoperable WIAB instances. - Wave is equal parts conversation and document. People can communicate and work together with richly formatted text, gadgets, robots and more. - Wave is shared. Any participant can reply anywhere in the message, edit the content and add participants at any point in the process. - Wave is live. With live transmission as you type, participants on a wave can have faster conversations, see edits and interact with extensions in real-time. ## History ### Pre-history One of the fundamentally technologies that enables the Wave Protocol to work is the idea of “[Operational Transformations][1]” Essentially a method to keep document changes in sync while spread over a network, invented by C. Ellis and S. Gibbs. While it is not the intention of this document to explain how OT works, or its full history, you can read a good technical explanation [here][2]; ### Google Wave (2009) Originally unveiled at a [Google I/O][3] conference in May 2009, Google Wave was Google's attempt to create an integrated messaging system allowing real-time sharing of messages between selective groups of people. It communicated using the open “Wave Federation Protocol” with the intention that it could one day replace email, with many companies hosting their owns servers and exchanging messages with each-other seamlessly. This being a distinct advantage over other systems to selective share information, which almost all require the people communicating to hold accounts with the same company's server. (eg, Facebook, Google Plus) Google Wave was technically composed of 3 main parts, much of which was open source; ### The Wave Federation Protocol The server to server protocol by which the messages were exchanged. Only the changes necessary to reproduce the new document were exchanged - making it somewhat more efficient then email for larger documents. (especially as traditional email systems keep a copy of each reply inline below with each new post, duplicating the total storage required by the servers many times). The other important difference when comparing WFP to traditional communication systems is that the user is granted access to the information- the messages arnt literally sent between users. (ie, a message “sent” to 10 users still only has one copy - as apposed to 10 different copies on 10 different user accounts). The WFP is built upon XMPP, itself an already well established protocol. It uses Operational Transformations to keep in realtime sync with other servers hosted elsewhere. ### “Google Wave” (client) The client end of Google Wave was a web based interface to connect to a Wave server. It was built using aspects of HTML5, a new version of Google GWT, as well as relatively new technologies such as WebSockets. A combination of these things produced a pretty impressive...but sadly initially unstable, end client for the users to work with. This front end of Google Wave is what most people came to think of as the Wave project, but it is important to understand this was just one possible interface - and the underlying Wave Federation Protocol, and servers that supported it, were in many ways the more revolutionary part of the project. ###FedOne Allthough Googles own server was never released as Open Source itself, they did release “FedOne” as a reference implementation of it. It was open source, and allowed people to both run and federate their own wave servers together. It did not connect to Googles main “wave.google.com” server, but did connect to a special “sandbox” server allowing testing of the protocol, server and clients. At the time of writing there are still a few amateur FedOne servers in operation, although many have switched to Wave In a Box, which is the new Apache lead server based on its code. Google Wave received much praise for potential uses and technical innovation, however bugs in early versions combined with many people not quite understanding the advantages also lead to much criticism. Google Wave was never advertised much by Google beyond their own blog, which possibly also contributed to it not catching on as well as they had hoped. Google stopped developing Wave On August 4, 2010, citing slow uptake amongst users as the reason. ### Apache Wave (2010) After Google announced they were going to stop developing Wave, it was handed over to the Apache Software Foundation, with the intention of continuing to develop it into a usable protocol with easy to implement servers - hopefully sparking a whole ecosystem of wave based clients and servers all using the WFP protocol. Apache Wave's main focus has been developing the Wave-In-A-Box project, designed to be a wave server that is relatively easy to install and run. While it is based on the FedOne source code released by Google, there has since been a lot of development. The WIAB has a working webclient, an example of which can be found at [http://waveinabox.net][4]. [1]: http://en.wikipedia.org/wiki/Operational_transformation [2]: http://www.codecommit.com/blog/java/understanding-and-applying-operational-transformation [3]: http://en.wikipedia.org/wiki/Google_I/O [4]: http://waveinabox.net