No GNU / Linux, os dois modos sempre produzem o mesmo resultado
Sim, explicitamente. De man md5sum
:
Nota: Não há diferença entre as opções de modo binário e de texto no sistema GNU [sic].
Isto é da md5sum
implementação que acompanha o GNU coreutils 8.21; Percebo que uma versão mais antiga (8.12) não possui esse aviso, mas presumo que o mesmo seria verdade de qualquer maneira.
Embora o AFAICT md5sum
não seja oficialmente padronizado (por exemplo, pelo POSIX), ele está disponível em várias plataformas em várias implementações e, obviamente, há algum esforço para torná-los compatíveis entre si para facilitar o uso nos sistemas.
Em relação a isso, o padrão ISO / ANSI C inclui funções de fluxo de alto nível para acessar arquivos. Como parte do padrão, eles estão disponíveis em qualquer sistema operacional que implemente o ISO C por meio de uma biblioteca compartilhada ou de um compilador. Como praticamente todos os sistemas operacionais têm esse recurso disponível (e são escritos com mais frequência em C), é um tipo de linguagem universal usada para implementar software potencialmente muito portátil.
Considerando o que faz, seria totalmente possível escrever um md5sum
que compile e funcione em qualquer sistema operacional. Não estou afirmando que isso seja verdade na versão GNU coreutils, mas uma das funções de fluxo de arquivos de alto nível mencionadas anteriormente é a fopen()
que é exigida pela ISO C para incluir uma b
opção usada na abertura de um arquivo para indicar que ele está sendo aberto "como binário Arquivo". O que isso pode significar ou exigir do sistema não é estipulado pelo padrão, é apenas necessário que exista para que possa ser usado no sistema em que possa haver algum ( qualquer ) motivo para isso.
Não existe esse motivo nos sistemas operacionais linux / POSIX / * nix, portanto o switch não faz nada. Na especificação POSIX (um superconjunto de ISO C) para fopen () :
O caractere 'b' não terá efeito, mas é permitido para conformidade com o padrão ISO C.
Portanto, uma md5sum
implementação totalmente portátil pode usar as funções de fluxo de arquivos de alto nível ISO, uma vez que não há outros métodos para acessar arquivos no ISO C (a maioria das plataformas, incluindo as queixas com POSIX, também têm seus próprios métodos de nível inferior, mas usá-los não pode ser portável porque não está na ISO C) e também deve implementar os sinalizadores -b
e -t
para adicionar ou não a b
opção ao fopen()
ler o arquivo. Em sistemas onde isso não tem sentido, não fará diferença.
Novamente, não estou dizendo que o md5sum do GNU é escrito de uma maneira totalmente portátil ou derivado de um que é, mas obviamente ele está tentando cumprir, em sua operabilidade, um que seja. Observe que ter um sinalizador que não faz nada não é o mesmo que não ter o sinalizador - no primeiro caso, ele é especificado para ser bom, mas não faz nada, enquanto no caso posterior usá-lo pode ser um erro ou levar a um comportamento indefinido .