>> (correct me if I'm wrong) unicode filenames are illegal in *nix.
In Linux (and other *nix are probably similar), most file systems deal with filenames as a stream of bytes and don't care about the encoding. So the encoding ultimately comes from the app creating the file. If your locale is UTF8, then it is possible to have UTF8 filenames. (If you mount an NTFS/FAT partition, there are mount options on how to handle filename encoding.)
>> Also, the L"blah blah" is not a unicode string ...
A more accurate statement would be:
"The encoding used for wide strings is implementation defined. On Windows, the encoding is UTF16LE. On *nix, the encoding is typically UTF32 in native byte order."
If using gcc or MSVC, wide strings are Unicode strings (of some encoding). But only a C++11 compiler can give you a guaranteed Unicode encoding of a string literal using u8/u/U.