URI/File scheme/Plan of action

This is the plan of action for updating the 'file' URI scheme. It is part of the W3C URI Interest Group's 'file' URI scheme update project.

Approach
There is disagreement over how prescriptive the specification should be, but the general approach taken by the IETF in the past has always leaned toward document what works moreso than fix what's broken. The chapter "IETF and the RFC Standards Process", from The Art of Unix Programming by Eric Steven Raymond, emphasizes that Internet RFCs and standards tend to be based more on actual implementation than pie-in-the-sky theory.

Therefore, we are starting with a survey of implementations, and will then provide guidelines that emphasize interoperability.

Survey implementations of file: URIs
What do they implement? How do they map file: URIs to various operating system special situations, including handling of character set transformations, inclusion of drive letters, remote mount directories, individual mount points, symbolic links or redirections?

What is useful common practice for getting interoperable results when creating file: URIs?

Recommend useful practice based on implementations
Based on the survey of implementations, recommend action:


 * What should URI creators write for file: URIs to be interoperable with most current implementations
 * What should (new or updated) file: URI interpreters do to handle the diversity of file URIs likely to be seen
 * Update the Proposed Standard for file: URIs to be consistent with common current practice, such that progression to Draft Standard (multiple, independent, interoperable implementations) is likely.

Browsers
Here is a list of browsers that we should cover (add to it if you feel something is missing):


 * Firefox: Windows 8/7 (maybe Windows XP), Mac OS X, Linux
 * Version 26.0 on Windows XP:
 * empty authority: local file system
 * "localhost" authority: rewritten so authority is empty
 * authority is a drive letter: rewritten so authority is empty and drive letter is part of path
 * drive letter with a pipe: interpreted as drive letter
 * UNC:
 * file://///authority/path &rarr; \\authority\path, path must be non-empty
 * other: URL is ignored completely


 * Netscape : same as above


 * Mozilla Suite : same as above (future versions will be released as SeaMonkey, by an independent group from the Mozilla Foundation)
 * Version 1.8b on Windows XP:
 * empty authority: local file system
 * "localhost" authority: local file system
 * authority is a drive letter: rewritten so authority is empty and drive letter is part of path
 * other: treated like "localhost"


 * Opera: same as above
 * (see Opera URI note)
 * Version 12.16 on Windows XP:
 * empty authority: rewritten so authority is "localhost"
 * "localhost" authority: local file system
 * authority is a drive letter: rewritten so authority is "localhost" and drive letter is part of path
 * drive letter with a pipe: rewritten with a colon
 * UNC:
 * file://authority/path &rarr; \\authority\path, path must be non-empty
 * other: rewritten so authority is "localhost" and first path segment is "C:"


 * Lynx: character mode browser, same as above
 * Version 2.8.5rel.2 on Cygwin on Windows XP:
 * drive letters not understood on Cygwin, but /cygdrive/c is
 * note anomaly: if no trailing slash after authority, path is treated as "." rather than "/"
 * empty authority: local file system
 * "localhost" authority: local file system
 * other: file URI is treated as ftp URI


 * Links: character mode browser, same as above
 * Version 0.99pre14 on Cygwin on Windows XP:
 * drive letters not understood on Cygwin, but /cygdrive/c is
 * empty authority: local file system
 * other: error


 * W3m: character mode browser, same as above
 * Version 0.5.1 on Cygwin on Windows XP:
 * drive letters not understood on Cygwin, but /cygdrive/c is
 * empty authority: local file system
 * "localhost" authority: local file system
 * other: error


 * Internet Explorer: same Windows OSs as above; Internet Explorer on Macintosh. (No Linux)
 * Version 8.0 on Windows XP:
 * empty authority: local file system (opens in Windows Explorer)
 * "localhost" authority: local file system (opens in Windows Explorer)
 * authority is a drive letter: local file system (opens in Windows Explorer)
 * drive letter with a pipe: interpreted as drive letter
 * UNC:
 * file://authority/path &rarr; \\authority\path</tt>, path may be empty
 * file:////authority/path</tt> &rarr; \\authority\path</tt>, path may be empty
 * file://///authority/path</tt> &rarr; \\authority\path</tt>, \path may be empty
 * other: error


 * Safari: Mac OS X


 * Konqueror: Linux (KDE)


 * Galeon: Linux (Gnome)

The list above covers the major browsers and a few minor ones. We should focus on the latest of each; perhaps some older versions with a large installed base should be included.

Non-Browser Implementations

 * Windows API
 * PathCreateFromUrl function
 * UrlCreateFromPath function
 * libwww-perl
 * LWP::Protocol::file

File Systems
Here is a list of file systems we should acknowledge. Each has different limitations in what characters it can support and how it stores them; this may affect how file: URIs are constructed and interpreted. Perhaps a matrix of how each browser interacts with each file system native to its platform would be useful:


 * FAT32 (popular on older Windows systems)
 * NTFS (popular on newer Windows systems)
 * ext2, ext3, ReiserFS, Reiser4 (popular on Linux systems)
 * UFS (popular on BSD and Mac OS X systems)
 * ISO 9660, Joliet, Rock Ridge, ISO 13490 (popular on CD-ROMs)
 * HFS+ (popular on older Mac OS systems)