81 | | Implement a WebDAV front-end for Tahoe-LAFS so that files and directories stored in a distributed grid can be accessed by operating systems (including Windows, Mac, and Linux) and applications that speak the WebDAV protocol. For details see #451 which describes what the Tahoe-LAFS web server does now, how this differs from what a WebDAV web server does, and how to get started experimenting with the relevant source code. |
| 81 | Difficulty: medium to hard, depending on how much of an existing WebDAV implementation you are able to reuse |
| 82 | |
| 83 | Implement a WebDAV front-end for Tahoe-LAFS so that files and directories stored in a distributed grid can be |
| 84 | accessed by operating systems and applications that speak the WebDAV protocol. WebDAV is specified in |
| 85 | [http://tools.ietf.org/html/rfc2518.html RFC 2518] and [http://www.ics.uci.edu/~ejw/authoring/ a few other documents]; |
| 86 | it essentially extends HTTP to act as a filesystem access protocol. For details see #451 which describes what the Tahoe-LAFS web server does now, how this differs from what a WebDAV web server does, and how to get started experimenting with the relevant source code. |
| 87 | |
| 88 | The main attraction of implementing a WebDAV interface is that |
| 89 | several operating systems have bundled and somewhat integrated support |
| 90 | for it, including Windows, Mac OS X, and most distributions of Linux. |
| 91 | In fact WebDAV may turn out to be an easier alternative to |
| 92 | [http://en.wikipedia.org/wiki/Server_Message_Block SMB/CIFS] |
| 93 | for allowing filesystem access from Windows. |
| 94 | |
| 95 | However, there is currently no working WebDAV implementation in Twisted |
| 96 | Python. There used to be one (the {{{web2.dav}}} package), |
| 97 | [http://twistedmatrix.com/trac/ticket/3081 but it bitrotted]. |
| 98 | You'll have to decide whether to help fix that implementation, use a |
| 99 | non-Twisted implementation such as [http://code.google.com/p/wsgidav/ WsgiDAV] |
| 100 | that might be more difficult to integrate wth the existing Tahoe code, |
| 101 | or write your own. In any case, WebDAV is a complicated protocol and |
| 102 | you will need to decide what subset of it gives most "bang for the buck" |
| 103 | and is practical to support in the time available. For example, locking |
| 104 | is optional in the WebDAV spec; is it needed to interoperate with commonly |
| 105 | used WebDAV clients? |
| 106 | |
| 107 | Unlike most filesystems which are constrained to be trees, the structure |
| 108 | of a Tahoe is in general a cyclic graph. |
| 109 | [http://tools.ietf.org/html/draft-ietf-webdav-bind draft-ietf-webdav-bind] is |
| 110 | an Internet Draft that clarifies how WebDAV servers should handle cycles. |
| 111 | |
| 112 | [http://savannah.nongnu.org/projects/davfs2 davfs2] is a FUSE-based |
| 113 | WebDAV filesystem client for Linux. To ensure that this runs correctly |
| 114 | over your implementation of WebDAV, you'll probably need to adapt the |
| 115 | tests for the existing Tahoe |
| 116 | [source:contrib/fuse/impl_c/blackmatch.py "blackmatch"] FUSE interface |
| 117 | (this would not be redundant since the blackmatch implementation has |
| 118 | limitations, especially for write access, that davfs2 would not have). |
| 119 | |
| 120 | The [http://en.wikipedia.org/wiki/WebDAV#Microsoft_Windows WebDAV mini-redirector] |
| 121 | is the component of Windows providing its WebDAV filesystem support. It is |
| 122 | actually the less buggy of |
| 123 | [http://www.zorched.net/2006/03/01/more-webdav-tips-tricks-and-bugs/ two implementations], but it still has had |
| 124 | [http://greenbytes.de/tech/webdav/webdav-redirector-list.html bugs] and |
| 125 | [http://www.microsoft.com/technet/security/bulletin/MS08-007.mspx security vulnerabilities] |
| 126 | that you may need to take into account. |
| 127 | |
| 128 | [http://allmydata.org/trac/tahoe-lafs/query?status=!closed&order=priority&keywords=~webdav Tickets labelled 'webdav'] |
| 129 | |