Linux – Why doesn’t the Linux vfat driver allow certain characters

fatfilesystemslinuxvfat

The Linux vfat driver seems to disallow certain characters in vfat long file names: ?<>\:*|". I understand that Windows doesn't support these characters, but Wikipedia seems to indicate that the filesystem, itself, supports any non-null 16-bit unicode character. If that is this the case, why does the Linux driver restrict the usable characters? Is it simply for compatibility, or is there actually a technical limitation that's not mentioned on the Wikipedia page? If the former, is there anyway to override this limitation?

NTFS-3g supports writing these characters to NTFS, which is very nice when I'm moving files between Linux systems with my external hard drive. It'd be great if I could do the same with VFAT.

Best Answer

If I'm not mistaken any filesystem supported by Windows (FAT/VFAT/FAT32/NTFS) should meet some standard naming conventions for valid file and directory names. The aforementioned list of characters are reserved characters which can't be used even with Unicode characters.

I would say that Linux implementation of fat/vfat filesystems tries to be compliant with this kind of "Windows standard". Perhaps, this article can bring more details regarding it.

Related Question