diff --git a/GSoCIdeas/Notes.md b/GSoCIdeas/Notes.md index a6f8acf..e29086a 100644 --- a/GSoCIdeas/Notes.md +++ b/GSoCIdeas/Notes.md @@ -23,16 +23,62 @@ Students: you don't have to use one of the following Ideas. You can come up wi * Tahoe-LAFS Cryptography: * Help us author a paper proving the security of the crypto that will be used to implement new shorter caps (such as the [Elk Point protocol](NewCaps)/WhatCouldGoWrong or the "Semi-Private Key" construction from ). [Tickets labelled 'newcaps'](http://allmydata.org/trac/tahoe-lafs/query?status=!closed&order=priority&keywords=~newcaps) -## Free The Windows Client - * Make the [Windows client](http://allmydata.org/trac/tahoe-w32-client) use only free open-source software. (Implementing WebDAV is an alternative that would achieve a similar effect.) -## Connecting Tahoe-LAFS To Other Things - * Filesystem access: - * improve the FUSE frontend ([source code]source:contrib/fuse). [Tickets labelled 'fuse'](http://allmydata.org/trac/tahoe-lafs/query?status=!closed&order=priority&keywords=~fuse) - * support WebDAV for access from Windows and various filesystem browsers. [Tickets labelled 'webdav'](http://allmydata.org/trac/tahoe-lafs/query?status=!closed&order=priority&keywords=~webdav) - * integrate Tahoe-LAFS with the GVFS Gnome virtual filesystem - * Explore running a Tahoe-LAFS grid over [Tor](https://torproject.org) or [I2P](https://i2p2.de) to provide anonymity to servers and/or clients. - * Rescue the neglected C client library [libtahoeclient_webapi](http://allmydata.org/trac/libtahoeclient_webapi). +## WebDAV support + +Difficulty: medium - hard + +[Tickets labelled 'webdav'](http://allmydata.org/trac/tahoe-lafs/query?status=!closed&order=priority&keywords=~webdav) + +WebDAV is a set of extensions to HTTP, specified in +[RFC 2518](http://tools.ietf.org/html/rfc2518.html) and +[a few other documents](http://www.ics.uci.edu/~ejw/authoring/), +that allow it to be used as a filesystem access protocol. +Supporting WebDAV in Tahoe would mean extending the +[webapi frontend]source:/src/frontends/webapi.txt to implement this +protocol. + +The main attraction of implementing a WebDAV interface is that +several operating systems have bundled and somewhat integrated support +for it, including Mac OS X, Windows, and some Linux distributions. +In fact WebDAV may turn out to be an easier alternative to +[SMB/CIFS](http://en.wikipedia.org/wiki/Server_Message_Block) +for allowing filesystem access from Windows. + +However, there is currently no working WebDAV implementation in Twisted +Python. There used to be one (the `web2.dav` package), +[but it bitrotted](http://twistedmatrix.com/trac/ticket/3081). +You'll have to decide whether to help fix that implementation, use a +non-Twisted implementation such as [WsgiDAV](http://code.google.com/p/wsgidav/) +that might be more difficult to integrate wth the existing Tahoe code, +or write your own. In any case, WebDAV is a complicated protocol and +you will need to decide what subset of it gives most "bang for the buck" +and is practical to support in the time available. For example, locking +is optional in the WebDAV spec; is it needed to interoperate with commonly +used WebDAV clients? + +Unlike most filesystems which are constrained to be trees, the structure +of a Tahoe is in general a cyclic graph. +[draft-ietf-webdav-bind](http://tools.ietf.org/html/draft-ietf-webdav-bind) is +an Internet Draft that clarifies how WebDAV servers should handle cycles. + +[davfs2](http://savannah.nongnu.org/projects/davfs2) is a FUSE-based +WebDAV filesystem client for Linux. To ensure that this runs correctly +over your implementation of WebDAV, you'll probably need to adapt the +tests for the existing Tahoe +["blackmatch"]source:contrib/fuse/impl_c/blackmatch.py FUSE interface +(this would not be redundant since the blackmatch implementation has +limitations that davfs2 would not). + +The [WebDAV mini-redirector](http://en.wikipedia.org/wiki/WebDAV#Microsoft_Windows) +is the component of Windows providing its WebDAV filesystem support. It is +actually the less buggy of [two implementations](http://www.zorched.net/2006/03/01/more-webdav-tips-tricks-and-bugs/) +, but it still has had +[bugs](http://greenbytes.de/tech/webdav/webdav-redirector-list.html), +and +[security vulnerabilities](http://www.microsoft.com/technet/security/bulletin/MS08-007.mspx) +that you may need to take into account. + ## Server Selection *Which servers are connected to your client, and which of them have which shares of your files?* @@ -85,6 +131,19 @@ jumping-off point for health is #778. * Optimize upload/download transfer speed. [Tickets labelled 'performance'](http://allmydata.org/trac/tahoe-lafs/query?status=!closed&order=priority&keywords=~performance) * Implement storage server protocol over HTTP. #510 + +## Free The Windows Client + * Make the [Windows client](http://allmydata.org/trac/tahoe-w32-client) use only free open-source software. (Implementing WebDAV as described earlier is an alternative that would achieve a similar effect.) + + +## Connecting Tahoe-LAFS To Other Things + * Filesystem access: + * improve the FUSE frontend ([source code]source:contrib/fuse). [Tickets labelled 'fuse'](http://allmydata.org/trac/tahoe-lafs/query?status=!closed&order=priority&keywords=~fuse) + * integrate Tahoe-LAFS with the GVFS Gnome virtual filesystem + * Explore running a Tahoe-LAFS grid over [Tor](https://torproject.org) or [I2P](https://i2p2.de) to provide anonymity to servers and/or clients. + * Rescue the neglected C client library [libtahoeclient_webapi](http://allmydata.org/trac/libtahoeclient_webapi). + + ## Building Things On Top Of Tahoe Difficulty: easy to hard, depending on project choice and how far you want to push it