Por que o / etc / fstab não usa XML ou JSON?

22

Isso é mais como uma questão geral de Linux / programação, mas estou programando há um tempo e estou acostumado a usar um formato como XML ou JSON em qualquer arquivo usado para fins de configuração.

Sendo novo no Linux, percebi que o primeiro arquivo de configuração em que encontrei ( /etc/fstab) usa algum tipo de formato de tabela. Então, por que não XML ou JSON?

jzeus
fonte
7
O que aconteceria se, digamos, tivéssemos a biblioteca de análise XML dentro /usr/lib/libxml.soe /usrem uma partição separada? Para analisar o /etc/fstabsistema, é necessário montar o /usrz in order to load libxml , but to do so it would have to parse / etc / fstab` para saber qual sistema de arquivos montar. Para evitar isso, o analisador XML provavelmente teria que fazer parte do kernel, o que não parece uma idéia fantástica.
el.pescado
4
@ V0R73X, se você acha que essa pergunta é uma pergunta mais geral sobre Linux, existe outro site da Stack chamado UNIX & Linux Stack Exchangeunix.stackexchange.com. Ambos provavelmente estariam bem, e já existem respostas aqui, mas apenas jogá-lo fora para o futuro.
trysis
8
XML e similares nem sempre são o melhor formato. Uma tabela é uma tabela e deve ser armazenada como tal. Na verdade, algumas pessoas pensam que XML não é bom para qualquer coisa plus.google.com/+LinusTorvalds/posts/X2XVf9Q7MfV
ALFC
2
JSON não deve ser usado para arquivos de configuração. Ele não suporta comentários, essenciais para explicar as opções de configuração e para testar as coisas comentando partes da configuração.
Artbristol # 18/14
2
XML é um formato de transporte de documento, não um formato de arquivo de configuração.
Matthew Ife

Respostas:

82

/etc/fstab é muito mais antigo que XML e JSON e, como muitos programas o utilizam, alterar seu formato seria um pesadelo.

Além disso, ele /etc/fstabprecisa ser analisado antes que exista um sistema funcional, pois ele é usado para montar todos os sistemas de arquivos essenciais. Portanto, o formato de /etc/fstabdeve ser o mais simples possível, pois o analisador não deve depender de nenhuma biblioteca externa.

A análise de XML é bastante difícil e você realmente deseja evitá-lo se não puder retransmitir bibliotecas externas. JSON é um pouco mais fácil, mas ainda bastante difícil.

A semântica de /etc/fstabé bastante simples, não inclui nenhuma estrutura de dados semelhante a uma árvore ou qualquer outra coisa sofisticada. Tudo que você precisa é de registros consistindo em seis valores.

Valores separados por espaço em branco são bons o suficiente para isso e são fáceis de analisar, mesmo se tudo o que você tiver são as bibliotecas padrão C.

Portanto, não há razão para usar JSON, XML ou algo semelhante.

Florian Diesch
fonte
campos separados por branco são suficientes para o que o fstab precisa fazer. não quero tornar as coisas mais complicadas simplesmente por fazê-lo.
Michael Martinez
um CSV seria ainda mais simples e mais fácil
Sled
3
@ArtB Por que você acha que alterar o delimitador mudaria a complexidade de analisar o arquivo?
Dan Neely
Dependendo das regras de cotação, escape etc. O CSV pode ser um pouco mais fácil de analisar, pois o delimitador é sempre um caractere em vez do delimitador de comprimento variável usado atualmente. Mas o formato atual permite uma melhor legibilidade humana, que também é um valor importante.
Florian Diesch 18/03/2014
32

Você deveria ler The Art of Unix Programming de Eric Raymond algum dia. Você parece estar assumindo que os designers do Unix usariam XML /etc/fstabse soubessem disso. Pelo contrário, embora o XML especificamente não tenha sido inventado, eles estavam cientes de seus antecessores similares e os rejeitaram deliberadamente em arquivos de configuração como /etc/fstab.

Citando sua subseção em XML :

O XML é adequado para formatos de dados complexos (o tipo de coisa para a qual a tradição antiga do Unix usaria um formato de estrofe semelhante ao RFC-822), embora exagere nos formatos mais simples. É especialmente apropriado para formatos que possuem uma estrutura aninhada ou recursiva complexa, do tipo que o metaformato RFC 822 não lida bem.

e mais abaixo:

O problema mais sério com XML é que ele não funciona bem com as ferramentas tradicionais do Unix. O software que deseja ler um formato XML precisa de um analisador XML; isso significa programas volumosos e complicados. Além disso, o XML é bastante volumoso; pode ser difícil ver os dados em meio a toda a marcação.

A filosofia do Unix é tornar a configuração facilmente programável e legível por humanos sempre que possível. Você deve poder processar arquivos de configuração com ferramentas como awk, grep, sed, tr e cut e analisá-los facilmente em linguagens de script sem bibliotecas volumosas. Esta é uma enorme razão por trás do sucesso do Unix e não deve ser subestimada.

Embora Eric Raymond elogie o XML por sua capacidade de lidar com "formatos que possuem uma estrutura aninhada ou recursiva complexa", /etc/fstabcertamente não precisa deles e, portanto, o formato de arquivo mais simples possível foi escolhido.

Portanto, embora o XML certamente tenha seus usos, você pode considerar que alguns dos programadores mais inteligentes do planeta que foram pioneiros no campo talvez soubessem o que estavam fazendo. Talvez o XML nem sempre seja o melhor para seus próprios arquivos de configuração.

Karl Bielefeldt
fonte
18

A principal razão pela qual posso pensar agora é:

Radu Rădeanu
fonte
4
Na verdade, essa resposta não mostra que o fstabarquivo / formato é tão antigo quanto o mountque você parece sugerir. De acordo com man fstab" O ancestral deste formato de arquivo fstab apareceu no 4.0BSD. " (Os BSDs o denominam " O formato do arquivo fstab apareceu no 4.0BSD. "). 4.0BSD foi lançado em 1980 .
Daniel Beck
@DanielBeck Então, meu palpite estava felizmente verdade, antes de 1985.
Radu Rădeanu