On Linux, command line arguments are not guaranteed to be UTF-8. In particular, they can be pathnames, which can be encoded in any character set (that is why Path uses ~[u8] now). So, os::args() is wrong and should return ~[~[u8]] instead of ~[~str].