Return-Path: X-Original-To: apmail-couchdb-dev-archive@www.apache.org Delivered-To: apmail-couchdb-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id AE73210CE3 for ; Tue, 4 Jun 2013 23:42:07 +0000 (UTC) Received: (qmail 88328 invoked by uid 500); 4 Jun 2013 23:42:07 -0000 Delivered-To: apmail-couchdb-dev-archive@couchdb.apache.org Received: (qmail 88291 invoked by uid 500); 4 Jun 2013 23:42:07 -0000 Mailing-List: contact dev-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@couchdb.apache.org Delivered-To: mailing list dev@couchdb.apache.org Received: (qmail 88282 invoked by uid 99); 4 Jun 2013 23:42:07 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 04 Jun 2013 23:42:07 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=5.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: local policy) Received: from [203.216.7.223] (HELO www.atypical.net) (203.216.7.223) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 04 Jun 2013 23:42:03 +0000 Received: from joant by www.atypical.net with local (Exim 4.80) (envelope-from ) id 1Uk0rG-0004pQ-9d for dev@couchdb.apache.org; Wed, 05 Jun 2013 08:41:42 +0900 Date: Tue, 4 Jun 2013 19:41:42 -0400 From: Joan Touzet To: dev@couchdb.apache.org Subject: Re: [PROPOSAL] Capability identification Message-ID: <20130604234142.GA17174@atypical.net> References: <20130604224035.GA31324@atypical.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Virus-Checked: Checked by ClamAV on apache.org On Wed, Jun 05, 2013 at 03:03:04AM +0400, Alexander Shorin wrote: > +1 > > I'd like also add JIRA issue for reference: > https://issues.apache.org/jira/browse/COUCHDB-1285 Thanks, I'd missed that one. Looks like the plumbing is on the way there. > So your proposal is actually on-half is done. The only missed thing is > modules (CAPs) info which I believe be more actual after rcouch merge. There's a bit more to what I've said here. I think it might be useful to define a (very simple!) process by which the namespace is administered. Or, at the very least, some guidelines on how to document what advertising a given module means. In short, it should be possible to have two totally different implementations of the same functionality, agree on the CAPAB, but also indicate that they're supplide by different modules. I want to avoid the "everyone calls themselves Mozilla in the user-agent string" problem, but allow a way of saying, for example: "Yes, I also provide a view server that speaks JavaScript! No, I'm not actually couchjs." -Joan > -- > ,,,^..^,,, > > > On Wed, Jun 5, 2013 at 2:40 AM, Joan Touzet wrote: > > Today, if I GET http://localhost:5984/ , I get: > > > > {"couchdb":"Welcome","uuid":"b1b1dbe964914a9cb1467bfd4f297fed","version":"1.3.0","vendor":{"version":"1.3.0","name":"The > > Apache Software Foundation"}} > > > > If I GET from http://mozauto.iriscouch.com/ , I get: > > > > {"couchdb":"Welcome","uuid":"bac168113808f7ed357fb53f3a7a68bc","version":"1.3.0","vendor":{"version":"1.3.0r1","name":"Iris > > Couch"}} > > > > And if I GET http://wohali.cloudant.com/ , I get: > > > > {"couchdb":"Welcome","version":"1.0.2","cloudant_build":"1202"} > > > > I believe I get further still different responses from Pouch and Touch > > and other CouchDB-alikes, provided they even have an equivalent of > > GET /. > > > > Long ago, in a galaxy far far away, the developers of Internet Relay > > Chat daemons faced a similar problem. While they were bound by a single > > RFC (and later, its twin), each developer wanted to extend the program > > in interesting and unique ways. Some of those features became > > commonplace and built a shared understanding, others were unique > > capabilities of specific implementations, and yet others indicated > > specific incompatibilities introduced for nefarious purposes. > > > > While the sordid history of the IRC protocol is a topic for drinks after > > a meetup some night, one lesson learned has proved exceedingly useful: > > the CAPAB string. Documented in the TS6 specification[1] but universally > > adopted, server-to-server CAPAB/PROTOCTL provided a negotiation of both > > implemented functionality as well as services offered. A further > > extension was created for client-to-server capabiliity negotiation > > as a draft RFC[2][4] and is also widely implemented. > > > > To make this more tangible, reference this list[3] of IRC server > > CAPABilities. If you've ever used IRC, and especially different IRC > > networks, you should be able to intuitively understand how this up-front > > negotiation helps simplify server-to-server connection negotiation. > > > > --- > > > > I think CouchDB should extend its identification in the root-level > > document with a capability advertisement. This would help prevent the > > current anti-patterns in production use of CouchDB: > > > > 1. Client library negotiation based exclusively on "compatibility > > with >= version of Apache CouchDB," which is nebulously documented > > at best. > > > > 2. Provide a clear means by which CouchDB plugins and CouchDB-alike > > services can advertise their availability. > > > > 3. Provide a way for alternate implementations of similar > > functionality to indicate interoperability. > > > > 4. Possibly simplify the replicator (though this is a special case of > > 1 and 2 above). > > > > I've gotten no further than this in my thinking yet; I didn't want to > > start implementation before folks had a chance to say whether they > > thought it'd be a good idea or not. > > > > [1]: > > https://github.com/grawity/irc-docs/blob/master/server/ts6.txt#L205-L216 > > [2]: https://tools.ietf.org/html/draft-mitchell-irc-capabilities-01 > > [3]: https://github.com/grawity/irc-docs/blob/master/server/ts-capab.txt > > [4]: https://github.com/grawity/irc-docs/tree/master/client/CAP-drafts > > > > -- > > Joan Touzet | joant@atypical.net | wohali everywhere else -- Joan Touzet | joant@atypical.net | wohali everywhere else