Windows Vista WebDAV support
In the middle of upgrading HTTP chunked stream support to Marmot, I switched to Windows Vista. I edited some photos from my US Election 2008 party and uploaded them to WebDAV using Vista. Once finished with the HTTP support improvement, I used MarmotMirror to back up up my data to WebDAV, and realized that Vista WebDAV support is different and cool, but its extensions are sadly ill-thought-out.
The first difference I noticed was that, instead of going to "My Network Places" as was done in Windows XP, Windows Vista simply allows you to go to "Computer" and select "Map network drive." Cool. The interface is a little awkward, though. You specify a drive letter so that your WebDAV drive looks like a normal drive. But it seems as though just entering the WebDAV address doesn't work right away—you have to first click "different user name" and specify your WebDAV credentials. Otherwise, login doesn't work, even though a dialog pops up asking for your credentials.
Once the drive is mounted, the drive is accessible like any other drive through its letter, even from the command prompt—very cool! Once I started using Marmot, I realized that Microsoft had added certain extensions to store certain attributes not natively available in WebDAV. The properties Microsoft added are in the urn:schemas-microsoft-com:
namespace:
urn:schemas-microsoft-com:Win32CreationTime
urn:schemas-microsoft-com:Win32LastAccessTime
urn:schemas-microsoft-com:Win32LastModifiedTime
urn:schemas-microsoft-com:Win32FileAttributes
Added properties is a completely valid thing to do—Marmot does something very similar to keep track of things like content last modified time, and it could have been possible for Marmot to take advantage of this metadata support built in to Vista. But take a look at the actual values Vista uses:
<ns1:Win32CreationTime>Sat, 08 Nov 2008 18:41:38 GMT</ns1:Win32CreationTime>
<ns1:Win32LastAccessTime>Sat, 08 Nov 2008 18:41:38 GMT</ns1:Win32LastAccessTime>
<ns1:Win32LastModifiedTime>Sat, 08 Nov 2008 18:41:38 GMT</ns1:Win32LastModifiedTime>
<ns1:Win32FileAttributes>00000010</ns1:Win32FileAttributes>
The date format used is an HTTP-date as defined in RFC 2068 section 3.3.1, specifically the format specified in RFC 1123. Microsoft is following standards—what can be bad about that? First of all, this standard is completely behind the time. RFC 1123 is from 1989! This format has numerous shortcomings, including an unnecessary verboseness (the day of the week is pointless for a timestamp), English language-specific names, and the inability to sort alphabetically and chronologically at the same time.
But on top of all this, RFC 1123 does not provide for milliseconds! NTFS, Microsoft's decent file system, keeps track of modified times with millisecond precision, unlike FAT and FAT32 (which has caused difficulties synchronizing between FAT32 and NTFS). While Microsoft went to a lot of work even to include the last access time from NTFS, they threw away the millisecond precision of that value, through no technological necessity.
Instead, Microsoft should have used a profile of ISO 8601, for example that specified by RFC 3339, Date and Time on the Internet: Timestamps from 2002. Even WebDAV istelf, although it uses RFC 1123 for one of its dates for backwards-compatibility with HTTP, uses a form of ISO 8601 compatible with RFC 3339. Here is one area that Microsoft could have chosen to innovate within standards and create something truly useful: a transparent network drive with NTFS-level attributes on top of WebDAV. But by choosing outdated standards they ensured that files on their first-class file system, NTFS, would sink to the depths of FAT32 when transferred to a WebDAV-mounted drive.