Apache Wave Proposal (Apache Incubator)
Abstract
Apache Wave is the project where wave technology is developed at Apache. Wave in a Box (WIAB) is the name of the main product at the moment, which 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 Wave In a Box instances).
Proposal
A wave is a hosted, live, concurrent data structure for rich communication. It can be used like email, chat, or a document.
WIAB is a server that hosts waves. The best analogy for this is a mail server with a web client. WIAB is comprised of a few high-level components: the client and the server. They have the following major functionality (though this is not an exhaustive list):
- Client
*A dynamic web client for users to create, edit, and search waves. Users can access this client by directly visiting the server in a browser.- Gadgets provide the ability to insert, view, and modify the UI – exposing the Wave Gadgets API (http://code.google.com/apis/wave/extensions/gadgets/guide.html)
- A console client that can create and edit waves via a command-line-like interface.
- Server
- Hosts and stores waves. WIAB comes with a default storage mechanism. The administrators of the server may configure it to use alternative storage mechanisms.
- Indexing, allowing for searching the waves a user has access to.
- Basic authentication, configurable to delegate to other systems.
- Federation, allowing separate Wave in a Box servers to communicate with each other using the Wave Federation Protocol (http://www.waveprotocol.org/federation).
- Robots, using the Wave Robots API, (http://code.google.com/apis/wave/extensions/robots/) may interact with waves on a WIAB instance.
Background
Wave expresses a new metaphor for communication: hosted conversations. This was created by Lars and Jens Rasmussen after observation of people's use of many separate forms of communication to get something done, e.g, email, chat, docs, blogs, twitter, etc.
The vision has always been to better the way people communicate and collaborate. Building open protocols and sharing code available in an open and free way is a critical part of that vision. Anyone should be able to bring up their own wave server and communicate with others (much like SMTP).
We hope this project will allow everyone to easily gain the benefits of Wave with a standard implementation of Wave – in a box.
Rationale
Wave has shown it excels at small group collaboration when hosted by Google. Although Wave will not continue as a standalone Google product, there is a lot of interest from many organizations in both running Wave and building upon the technology for new products.
We are confident that with the community-centric development environment fostered by the Apache Software Foundation, WIAB will thrive.
Initial Goals
The initial goals of the project are:
- To migrate the codebase from code.google.com and integrate the project with the ASF infrastructure (issue management, build, project site, etc).
- To quickly reach a state where it is possible to continue the development of the Wave In a Box implementation under the ASF project.
- To add new committers to the project and grow the community in "The Apache Way".
Current Status
The open source Wave in a Box project has existed in various forms for approximately 16 months (starting out life as the FedOne open source project).
FedOne began in July 2009 in order to accelerate adoption of the wave federation protocol, and serve as a proof of concept that a non-Google implementation of the wave federation protocol could interoperate with the Google production instance. It worked. FedOne's existence lead to a prototype by Novell that demonstrated federation between Google Wave and Novell Pulse (now known as Vibe). In addition, in May of 2010, SAP unveiled a prototype version of SAP StreamWork that federated with both Novell Pulse and Google Wave. All three systems interoperated, sharing real-time state, and gadget updates. In May 2010 Google released significantly more code (including the cross-browser rich text editor) to connect with other components that were built from scratch, resulting in a simple web client.
The project has grown over the last year to include many Google and non-Google contributions. The project has picked up steam in recent months as the direction of the standalone Google Wave product has shifted. At this time the Wave in a Box project enjoys very active development, with new features and functionality being added almost daily. The first Wave Protocol Summit was recently held and included developers from a variety of countries, companies, and organizations.
The code base is a mixture of mature core code from Google Wave, and somewhat immature integration code forming WIAB. WIAB is quickly becoming highly functional and is already in a very "demoable" state. The development mailing lists are very active indicating wide community support. We recognize that now is a good time to migrate to the Apache Foundation while the codebase and community is a manageable size. Assuming the current momentum continues, we expect strong growth in the code and community in the near future.
Meritocracy
The initial set of committers includes many Google employees, and there is an active and growing community outside Google contributing to WIAB already today. Google culture itself encourages meritocracy, and the community has always grown – and will continue to grow – in this fashion.
As shown by the initial committers list below, several members from outside of Google have already demonstrated interest, skill, and commitment to contributing to the project. These individuals have been recognized on those merits by the initial committers. Their selection as the first wave of new committers is a sign of the burgeoning meritocracy.
Community
Wave currently has a healthy community around waveprotocol.org, with conversations hosted at http://groups.google.com/group/wave-protocol. We plan to move this community to the Apache Software Foundation incubator.
Core Developers
The initial committers comes from a variety of backgrounds and includes many from Google. There are a few existing Apache committers amongst this initial group. We anticipate early future committers coming from places like Novell, SAP, companies related to the US Navy's usage of wave, startups in the wave ecosystem, and many independent individuals.
Alignment
The developers of WIAB want to work with the Apache Software Foundation because Apache has proven to provide a strong foundation with good infrastructure and support for developing projects in an open community. As WIAB continues to grow, the community will look to both reuse available Apache projects as well as look for opportunities to contribute back to the larger Apache community.
Known Risks
Orphaned products
Wave is a new means for communication, and thus it is still maturing. While the initial implementation (Google Wave) did not gain sufficient traction for it to continue as a standalone Google product, there are other related projects (e.g. Novell Vibe, SAP StreamWork), and several startups in the space that are continuing to build on the technology. In addition, the US Navy has contracted with four companies as part of evaluating using wave technology on every ship. The community itself is still growing, with several new contributors recently added.
Inexperience with Open Source
The initial committers have varying degrees of experience with open source projects. Many from the community are familiar with open source.
Homogeneous Developers
The initial set of developers does include many from Google. However, the project has accepted many patches from independent individuals, and some have already gained committership. Several companies have expressed interest and forty individuals participated in the Wave Summit.
Reliance on Salaried Developers
Following Google's change of focus for Wave in August, some of Wave's Google developers have chosen to continue working on Wave, but it is imperative that we continue to grow the community larger in the coming months.
Relationships with Other Apache Products
We currently use the following libraries from Apache
- Commons CLI
- Commons Codec
- Commons HttpClient
- Commons Logging
- Velocity
- Ant
We've also contributed the Wave Gadget implementation into the Apache Shindig project.
Documentation
Entry point for documentation of all the specs and designs. http://waveprotocol.org/
Wave Robots API http://code.google.com/apis/wave/extensions/robots/
Wave Gadgets API http://code.google.com/apis/wave/extensions/gadgets/guide.html
Initial Source
The initial source will come from http://code.google.com/p/wave-protocol/source/browse/. This consists of the Java code necessary for the client and server. These are already open source repositories licensed under the Apache Public License.
Source and Intellectual Property Submission Plan
Beginning with the initial unveiling, Google published a liberal patent license:
Subject to the terms and conditions of this License, Google and its affiliates hereby grant to you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this License) patent license for patents necessarily infringed by implementation of this specification. If you institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the implementation of the specification constitutes direct or contributory patent infringement, then any patent licenses for the specification granted to you under this License shall terminate as of the date such litigation is filed.
http://www.waveprotocol.org/patent-license
Trademarks
Google retains all rights to the trademarks "GOOGLE WAVE" and the wave design logo, neither of which will be used in the Apache Wave project.
External Dependencies
In addition to the previously mentioned Apache dependencies, the initial code relies on the following libraries that have Apache compatible licenses:
antlr, aopalliance, asm, bouncycastle, cglib, dom4j, emma, gson, guava, guice, gwt, gxp, hamcrest, jackson, jdom, jetty, jline, jmock, joda_time, jsr305, junit, libidn, mockito, mongo-driver, oauth, protobuf, protobuf-format-java, protostuff, stringtemplate, websocket, whack, xpp3
Cryptography
We use standard crypto library methods available in java.security.*. Wave federation plans to uses encryption for sending deltas to remote Wave servers.
Required Resources
Mailing lists
- wave-dev
- wave-commits
- wave-private
It is possible that if the project does grown to include many sub project that we would split the mailing list up by sub project. Again we have flexibility.
Subversion Directory
https://svn.apache.org/repos/asf/incubator/wave
Issue Tracking
Please help us setup a JIRA instance for both issue tracking and code review.
Other Resources
- a wiki (for the sites pages) (http://incubator.apache.org/guides/sites.html or a wiki http://wiki.apache.org/incubator/)
- code review on reviews.apache.org
- a server to run a dogfood instance
- continuous build bot
Initial Committers
- Alex North (Google)
- Anthony Watkins (SESI)
- Christian Ohler (Google)
- Dan Danilatos (Google)
- Dan Peterson (Google) / dpeterson@apache.org
- David Hearnden (Google)
- David Wang (Google)
- Ian Roughley (Novell) / roughley@apache.org
- James Purser
- Joseph Gentle
- Lennard de Rijk
- Michael MacFadden (Solute)
- Soren Lassen (Google)
- Tad Glines
- Torben Weis (University Duisburg-Essen)
Sponsors
Champion
- Paul Lindner
Nominated Mentors
- Santiago Gala
- Upayavira
- Andrus Adamchik
- Vincent Siveton
- Ben Laurie
Sponsoring Entity
The Apache Incubator.