NUL
e /
tem suas funções de sistema designadas. Outros personagens não.
Esse é o básico disso - o resto é opiniões, especulações e história. Ouvimos, lemos, etc. e só incluímos como um preenchimento não um debate ou argumento:
- Ao proibir determinados caracteres, você abre a complexidade no próprio sistema de arquivos, o que é o mesmo que comprometê-lo.
- E quais bytes constituem uma nova linha em vários sistemas?
<CR>
vs<LF>
etc. - E se um sistema remoto decidir criar um arquivo com nova linha em um NFS?
- E se o nome do arquivo for corrompido enquanto o conteúdo do arquivo estiver intacto?
- E se um aplicativo codificar informações no nome do arquivo?
E lá vai
- É o trabalho dos sistemas para corrigir erros no software do usuário?
- Um sistema, no nível da raiz, deve proteger os usuários de si mesmos?
- O modo como as várias camadas são implementadas internamente regula uma decisão sobre quais nomes de arquivos são considerados legais?
O sistema operacional básico não define limitações. Informações de e para o sistema são fluxos de bytes. Se um byte não tiver um significado especial, não crie sobrecarga adicionando verificações que devem ser manipuladas no espaço do usuário.
De qualquer forma, o maior problema provavelmente seria o longo histórico em que a nova linha e outros caracteres de controle foram permitidos.
Outro caso é o que proibir. Você menciona a nova linha, mas em discussões da era da pedra do UNIX, isso foi debatido, depois incluindo também outros personagens. O *
deve ser proibido? E quanto aos nomes de arquivos que começam com -
? E quanto a DEL
e ESC
? Todos os personagens de controle devem ser proibidos? E assim por diante e assim por diante.
Eu infelizmente não consigo relembrar quaisquer citações sobre esse tópico feitas pelos fundadores ou mantenedores de código.