Por que o Linux usa o LF como o caractere de nova linha?

84

Até onde eu sei, todo sistema operacional tem uma maneira diferente de marcar o caractere de fim de linha (EOL). Os sistemas operacionais comerciais usam o retorno de carro para EOL (retorno de carro e alimentação de linha no Windows, retorno de carro somente no Mac). O Linux, por outro lado, apenas usa o avanço de linha para o EOL.

Por que o Linux não usa o retorno de carro para o EOL (e somente o feed de linha)?

    
por Bagas Sanjaya 19.12.2017 / 14:48

4 respostas

329

O Windows usa CR LF porque o herdou do MS-DOS.

O MS-DOS usa CR LF porque foi inspirado em CP / M que já estava usando CR LF .

CP / M e muitos sistemas operacionais dos anos oitenta e anteriores usavam CR LF porque era a maneira de terminar uma linha impressa em um teletipo (voltar ao começo da linha e pule para a próxima linha, assim como as máquinas de escrever comuns). Isso simplificou a impressão de um arquivo porque havia menos ou nenhum pré-processamento necessário. Também havia requisitos mecânicos que impediam que um único caractere fosse utilizável. Algum tempo pode ser necessário para permitir que o carro retorne e o cilindro gire.

O Gnu / Linux usa LF porque é um clone do Unix . 1

O Unix usou um único caractere, LF , desde o início para economizar espaço e padronizar para um fim-de-linha canônico, usando dois caracteres que eram ineficientes e ambíguos. Essa escolha foi herdada da Multics, que a usava já em 1964. A memória, o armazenamento, a potência da CPU e a largura de banda eram muito escassos, por isso vale a pena fazer um byte por linha. Quando um arquivo foi impresso, o driver estava convertendo o avanço de linha (nova linha) para os caracteres de controle exigidos pelo dispositivo de destino.

O

LF foi preferido para CR porque o último ainda tinha um uso específico. Ao reposicionar o caractere impresso no início da mesma linha, ele permitia ultrapassar os caracteres digitados.

A Apple inicialmente decidiu usar também um único caractere, mas por algum motivo escolheu o outro: CR . Quando ele mudou para uma interface BSD, ele foi movido para LF .

Essas escolhas não têm nada a ver com o fato de um sistema operacional ser comercial ou não.

1 Esta é a resposta para sua pergunta.

    
por 19.12.2017 / 16:11
16

O artigo da wikipedia sobre "Newline" traça a escolha de NL como um terminador de linha (ou separador) para Multics em 1964; infelizmente, o artigo tem poucas citações de fontes, mas não há razão para duvidar que isso esteja correto. Há dois benefícios óbvios para essa escolha em relação ao CR-LF: economia de espaço e independência do dispositivo.

A principal alternativa, CR-LF, é originada nos códigos de controle usados para mover fisicamente o carro de papel em uma máquina de teletipo, onde CR retornaria o carro para sua posição inicial e LF giraria o rolo de papel para mover a impressão. posicione uma linha abaixo. Os dois caracteres de controle aparecem no código ITA2, que data de 1924 e que aparentemente ainda está em uso (veja Wikipedia); aparentemente o ITA2 os pegou da variante Murray do código Baudot, que data de 1901.

Para os leitores mais jovens, vale a pena notar que na tradição do mainframe, não havia nenhum caractere de nova linha; em vez disso, um arquivo era uma sequência de registros que tinham comprimento fixo (geralmente 80 caracteres, com base em cartões perfurados) ou tamanho variável; Registros de tamanho variável eram normalmente armazenados com uma contagem de caracteres no início de cada registro. Se você tiver um arquivo de mainframe que consiste em uma seqüência de registros de comprimento variável contendo cada um deles conteúdo binário arbitrário, converter isso sem perdas em um arquivo no estilo UNIX pode ser uma conversão complicada.

Linux, é claro, foi apenas uma reimplementação do Unix, e o Unix tomou muitas de suas decisões de design da Multics, então parece que a decisão chave foi tomada em 1964.

    
por 20.12.2017 / 12:03
11

Outras respostas rastrearam a cadeia de herança até os anos 60 e os teletipos. Mas aqui está um aspecto que eles não abordam.

Nos dias dos teletipos, houve momentos em que era desejável fazer algo chamado overstriking. Overstriking às vezes era usado para obscurecer uma senha, porque apagar a senha simplesmente não era possível. Outras vezes, foi feito um overstriking para obter um símbolo que não estava na fonte. Por exemplo, a letra O e uma barra produzem um novo símbolo.
Foi alcançado o overstriking colocando um retorno de carro sem avanço de linha, algumas vezes o backspace era usado. Por esse motivo, as pessoas unix decidiram contra o retorno de carro como o separador de linha e optaram pela alimentação de linha. Isso também funcionou bem para a leitura de textos produzidos usando a convenção CRLF. O CR é engolido e o LF torna-se o separador.

    
por 21.12.2017 / 19:48
6

Enquanto você poderia traduzir a questão histórica em uma pergunta sobre a linguagem C, o motivo pelo qual o Linux e todos os sistemas POSIX-conformes ou POSIX-ish devem usar LF (ou pelo menos C '\n' character is) como a nova linha é uma consequência da interseção dos requisitos de C e POSIX. Enquanto C permite que "arquivos de texto" e "arquivos binários" sejam diferentes (na verdade arquivos de texto podem ser baseados em registros consistindo de uma seqüência de registros de linha, além de coisas menos exóticas como ter '\n' traduzido como / de CR / LF como no DOS / Windows), o POSIX exige que o texto e o modo binário se comportem da mesma forma. Esta é, em grande parte, a razão pela qual as ferramentas de linha de comando como cat são poderosas / úteis; eles seriam muito menos se eles trabalhassem apenas com binários, ou apenas com texto, mas não ambos.

    
por 20.12.2017 / 05:43