@sshannin postou uma URL do blog de Raymond Chen, mas não funciona mais. O blog mudou seu software interno, então os URLs mudaram.
Depois de rastejar pelos posts antigos no novo blog, eu o encontrei aqui .
Citação do blog:
Por que o terminador de linha é CR + LF?
Este protocolo remonta à época dos teletipoquistas. CR significa “retorno do carro” - o caractere de controle CR retornou o cabeçote de impressão (“carro”) para a coluna 0 sem avançar o papel. LF significa “alimentação de linha” - o caractere de controle LF avançou o papel uma linha sem mover a cabeça de impressão. Portanto, se você quiser retornar o cabeçote de impressão à coluna zero (pronto para imprimir a próxima linha) e avançar o papel (para que ele imprima em papel novo), você precisa de CR e LF.
Se você acessar os vários documentos de protocolo da Internet, como RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) ou RFC 2616 (HTTP), verá que todos especificam CR + LF como o seqüência de terminação de linha. Portanto, a verdadeira questão não é “Por que CP / M, MS-DOS e Win32 usam CR + LF como terminador de linha?” mas sim "Por que outras pessoas optaram por diferir desses documentos de padrões e usar algum outro terminador de linha?"
O Unix adotou o LF simples como a seqüência de terminação de linha. Se você olhar as opções stty, verá que a opção onlcr especifica se um LF deve ser alterado para CR + LF. Se você errar essa configuração, obterá o texto da escada, onde
each
line
begins
onde a linha anterior parou. Portanto, mesmo unix, quando deixado em modo bruto, requer CR + LF para encerrar linhas. O CR implícito antes do LF é uma invenção do Unix, provavelmente como uma economia, uma vez que salva um byte por linha.
A ancestralidade unix da linguagem C transportou esta convenção para o padrão da linguagem C, que requer apenas “\ n” (que codifica LF) para encerrar linhas, sobrecarregando as bibliotecas de tempo de execução para converter dados de arquivo brutos em linhas lógicas.
A linguagem C também introduziu o termo “nova linha” para expressar o conceito de “terminador de linha genérico”. Disseram-me que o comitê ASCII mudou o nome do caractere 0x0A para “nova linha” por volta de 1996, então o nível de confusão aumentou ainda mais.
Aqui está outra discussão sobre o assunto, de uma perspectiva unix
Eu mudei este segundo link para um instantâneo em The Wayback Machine, uma vez que a página real não está mais disponível.
Espero que isso responda a sua pergunta.