Tanto quanto eu sei, cada sistema operacional tem uma maneira diferente de marcar o caractere de fim de linha (EOL). Sistemas operacionais comerciais usam 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, usa apenas alimentação de linha para EOL.
Por que o Linux não usa o retorno de carro para EOL (e apenas alimentação de linha)?
O Windows usa CRLFporque herdou do MS-DOS.
O MS-DOS usa CRLFporque foi inspirado no CP/M que já usava CRLF.
O CP/M e muitos sistemas operacionais dos anos 80 e anteriores eram usados CRLFporque era a maneira de terminar uma linha impressa em um teletipo (voltar ao início da linha e pular para a próxima linha, 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 personagem fosse utilizável. Pode ser necessário algum tempo para permitir que o carro retorne e o cilindro gire.
Gnu/Linux usa LFporque é um clone do Unix . 1
O Unix usou um único caractere, LF, desde o início para economizar espaço e padronizar até um final de linha canônico, usar dois caracteres era ineficiente e ambíguo. Essa escolha foi herdada da Multics, que a usava já em 1964. Memória, armazenamento, potência da CPU e largura de banda eram muito escassos, então valeu a pena economizar um byte por linha. Quando um arquivo era impresso, o driver estava convertendo a alimentação de linha (nova linha) nos caracteres de controle exigidos pelo dispositivo de destino.
LFfoi preferido CRporque o último ainda tinha um uso específico. Ao reposicionar o caractere impresso no início da mesma linha, permitia sobrepor os caracteres já digitados.
A Apple inicialmente decidiu também usar um único caractere, mas por algum motivo escolheu o outro: CR. Quando mudou para uma interface BSD, mudou 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 à sua pergunta.
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 nessa escolha em relação ao CR-LF: economia de espaço e independência do dispositivo.
A principal alternativa, CR-LF, origina-se nos códigos de controle usados para mover fisicamente o carro de papel em uma máquina de teletipo, onde CR retornaria o carro à sua posição inicial e LF giraria o rolo de papel para mover a posição de impressão para baixo. linha. Os dois caracteres de controle aparecem no código ITA2 que data de 1924 e que aparentemente ainda está em uso (ver Wikipedia); aparentemente ITA2 os tirou 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 comprimento variável; registros de comprimento 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 sequência de registros de comprimento variável, cada um contendo conteúdo binário arbitrário, convertê-lo sem perdas em um arquivo de estilo UNIX pode ser uma conversão complicada.
O Linux, é claro, foi apenas uma reimplementação do Unix, e o Unix tomou muitas de suas decisões de design do Multics, então parece que a decisão-chave foi tomada em 1964.
Outras respostas traçaram a cadeia de herança até a década de 1960 e teletipos. Mas aqui está um aspecto que eles não cobriram.
Na época dos teletipos, havia momentos em que era desejável fazer algo chamado overstriking. O overstriking às vezes era usado para ocultar uma senha, porque apagá-la simplesmente não era possível. Outras vezes, overstriking foi feito para obter um símbolo que não estava na fonte. Por exemplo, a letra O e uma barra produzem um novo símbolo.
O overstriking foi obtido colocando um retorno de carro sem alimentação de linha, embora o backspace às vezes fosse usado. Por esse motivo, o pessoal do unix decidiu contra o retorno de carro como separador de linha e optou pelo avanç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 se torna o separador.
Embora você possa traduzir a questão histórica em uma questão sobre a linguagem C, a razão pela qual o Linux e todos os sistemas em conformidade com POSIX ou POSIX-ish devem usar
LF
(ou pelo menos qualquer que seja o'\n'
caractere C) 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 em uma sequência de registros de linha, além de coisas menos exóticas como ter'\n'
traduzido de/paraCR
/LF
como no DOS/Windows ), o POSIX exige que o modo texto e binário se comportem da mesma forma. Esta é em grande parte a razão pela qual as ferramentas de linha de comando comocat
são poderosos/úteis; eles seriam muito menos se trabalhassem apenas com binário, ou apenas com texto, mas não ambos.