A razão, como muitas coisas no mundo da computação, é a história e a compatibilidade com versões anteriores.
De volta a 2.4. * kernels, antes de existir udev
(a atual solução de sistema de arquivos virtual para /dev
) no Linux, havia duas soluções concorrentes, a "maneira tradicional Unix" de ter os dispositivos em um diretório real um sistema de arquivos raiz e devfs
, a primeira solução de sistema de arquivos virtual para /dev
.
O problema era que o autor de devfs
tinha construído um esquema de nomenclatura completamente novo para vários dispositivos, e as pessoas se sentiam bastante strongs sobre isso: alguns queriam migrar para o novo esquema e abolir o antigo, outros não ver a necessidade de migração. Algumas distribuições usaram os dispositivos estáticos antigos, outras escolheram devfs
.
Nesse ponto, havia um número fixo de dispositivos pseudo-TTY criados no momento da instalação. (By the way, isso ainda é possível, se a opção CONFIG_LEGACY_PTYS
é definida durante a compilação de seu kernel.)
Em seguida, foram introduzidos os dispositivos PTY alocados dinamicamente no estilo Unix98. Implementá-los em um diretório /dev
estático exigia um sistema de arquivos virtual para /dev/pts
, e isso ficou conhecido como o sistema de arquivos devpts
. Além disso, ter isso como um sistema de arquivos separado provavelmente tornaria possível aplicá-lo sobre o dinâmico devfs
também sem duplicação de código.
Os dispositivos PTY dinamicamente alocados rapidamente se tornaram a escolha preferida, porque ter /dev
confuso com centenas de dispositivos PTY alocados estaticamente, a maioria dos quais nunca poderia ser usada na vida útil do sistema, era claramente sem sentido.
Depois veio o Linux 2.6 e udev
com ele. Ele rapidamente tornou obsoletos as duas soluções estáticas /dev
e devfs
. Por motivos de compatibilidade com versões anteriores, devpts
filesystem ainda existia, mas agora a mesma funcionalidade poderia ser movida de volta para o sistema de arquivos /dev
principal, já que agora ela era inteiramente baseada em RAM.
Hoje, por exemplo, o Debian 9 ainda monta devpts
filesystem para /dev/pts
para compatibilidade legada, mas atribui /dev/pts/ptmx
zero de permissões por padrão - isso é um sinal de que o sistema de arquivos devpts
está provavelmente sendo substituído e ser removido em algum momento futuro.
# ls -l /dev/ptmx /dev/pts/ptmx
crw-rw-rw- 1 root tty 5, 2 Nov 22 11:47 /dev/ptmx
c--------- 1 root root 5, 2 Nov 12 14:59 /dev/pts/ptmx
Se algum programa ainda precisar de /dev/pts/ptmx
, isso poderá ser permitido ajustando as permissões padrão, mas isso permitirá que as pessoas saibam quais programas ainda estão usando o nome de dispositivo obsoleto mais antigo.