@sshannin publicó una URL del blog de Raymond Chen, pero ya no funciona. El blog ha cambiado su software interno, por lo que las URL cambiaron.
Después de rastrear las publicaciones antiguas en el nuevo blog, lo encontré aquí .
Cita del blog:
¿Por qué el terminador de línea es CR + LF?
Este protocolo se remonta a la época de los teletipos. CR significa "retorno de carro": el carácter de control CR devolvió el cabezal de impresión ("carro") a la columna 0 sin hacer avanzar el papel. LF son las siglas de "linefeed": el carácter de control LF avanzó el papel una línea sin mover el cabezal de impresión. Entonces, si desea regresar el cabezal de impresión a la columna cero (listo para imprimir la siguiente línea) y hacer avanzar el papel (para que imprima en papel nuevo), necesita tanto CR como LF.
Si accede a los diversos documentos de protocolo de Internet, como RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) o RFC 2616 (HTTP), verá que todos especifican CR + LF como secuencia de terminación de línea. Entonces, la pregunta real no es "¿Por qué CP / M, MS-DOS y Win32 usan CR + LF como terminador de línea?" sino más bien "¿Por qué otras personas optaron por diferir de estos documentos de estándares y utilizar algún otro terminador de línea?"
Unix adoptó LF simple como secuencia de terminación de línea. Si observa las opciones stty, verá que la opción onlcr especifica si un LF debe cambiarse a CR + LF. Si se equivoca en esta configuración, obtendrá un texto de escalón, donde
each
line
begins
donde se quedó la línea anterior. Entonces, incluso unix, cuando se deja en modo sin formato, requiere CR + LF para terminar líneas. El CR implícito antes de LF es una invención de Unix, probablemente como economía, ya que ahorra un byte por línea.
La ascendencia Unix del lenguaje C llevó esta convención al estándar del lenguaje C, que requiere solo "\ n" (que codifica LF) para terminar líneas, poniendo la carga en las bibliotecas de tiempo de ejecución para convertir datos de archivos sin procesar en líneas lógicas.
El lenguaje C también introdujo el término "nueva línea" para expresar el concepto de "terminador de línea genérico". Me dijeron que el comité ASCII cambió el nombre del carácter 0x0A a "nueva línea" alrededor de 1996, por lo que el nivel de confusión se ha elevado aún más.
Aquí hay otra discusión sobre el tema, desde una perspectiva de Unix.
Cambié este segundo enlace a una instantánea en The Wayback Machine, ya que la página real ya no está disponible.
Espero que esto responda tu pregunta.