O Linux sempre permitiu qualquer byte diferente de /
e null em nomes de arquivos, como a maioria das outras variantes do Unix (incluindo o original).
Para mudar isso, você precisaria modificar o código do sistema de arquivos no kernel. Não tenho conhecimento de nenhum patch existente para fazer isso. Não há nem mesmo um código de erro padrão para tentativas de criar um nome de arquivo que não seja suportado, apenas ENAMETOOLONG, que é especificamente para casos em que o tamanho do nome do arquivo ou caminho é muito grande. O EINVAL seria uma escolha razoável; é o que o driver FAT do Linux usa, entre outros.
O POSIX define um conjunto de caracteres de nome de arquivo portátil que consiste em letras, dígitos e caracteres ASCII os três caracteres de pontuação .-_
. No entanto, muitos aplicativos unix esperam que outros caracteres funcionem: vários programas têm um nome contendo +
(ex. c++
), X11 e Perl querem :
, CVS quer ,
, Emacs quer #
, Gnome quer %
(para gconf), muitos programas querem ~
para arquivos de backup, alguns programas querem %
para codificação de URL, alguns programas querem =
e +
para Base64, etc.