¿Por qué hay diferentes representaciones para las nuevas líneas en Windows, Linux y Mac? ¿Por qué no hay un salto de línea común para todos los sistemas operativos?

Esta es una buena pregunta, aunque con una respuesta aburrida. Diferentes sistemas desarrollaron diferentes Codificaciones de conjuntos de caracteres para nuevas líneas de la misma manera que desarrollaron diferentes comportamientos para una miríada de otras cosas: cada sistema tenía que estandarizar algo e interoperabilidad en los días previos al correo electrónico y mucho menos Internet no era importante.

Hay varias formas de representar nuevas líneas. Los sistemas basados ​​en ASCII utilizan alguna combinación de retorno de carro y avance de línea . Estos se derivan de las máquinas de escribir: un retorno de carro (CR) restablece la posición horizontal del carro de la máquina de escribir en el extremo izquierdo y un avance de línea (LF) avanza el papel una línea vertical. Para una máquina de escribir, necesita ambos, por lo que algunos sistemas (DOS, Microsoft Windows, Palm OS) adoptaron CR + LF como representación de una nueva línea. Otros sistemas, como Unix, notaron que una computadora no tenía un carro para regresar, por lo que una alimentación de línea única era suficiente. Otros, como Mac OS Classic antes de macOS (sistema operativo), adoptaron solo un retorno de carro; posiblemente, esta opción no tiene ningún sentido, ya que un retorno de carro desnudo desplazaría el carro de la máquina de escribir hacia la izquierda pero no avanzaría la página. Otros sistemas utilizaron LF + CR, invirtiendo los caracteres ASCII utilizados en Windows.

Los sistemas no basados ​​en ASCII, por supuesto, hicieron lo suyo. Los mainframes de IBM (compañía) construidos alrededor de EBCDIC, por ejemplo, usaban un carácter especial de nueva línea (NL). Quizás lo más extraño de todo, VAX / VMS utilizó un sistema de archivos basado en registros donde las nuevas líneas eran ciudadanos de primera clase para el sistema operativo. Cada registro era implícitamente su propia línea y, por lo tanto, no había una representación explícita de nueva línea

Pero nada de esto importaba, porque estos sistemas nunca tuvieron que interactuar entre sí, o si lo hicieron, tuvieron que hacer tantas otras conversiones que la representación de la nueva línea era la menor de sus preocupaciones.

Hoy en día, la mayoría de los protocolos de Internet recomiendan CR + LF, pero dictan compatibilidad con LF (CR y LF + CR se dejan afuera). Dada la centralidad de Internet, la ubicuidad de Unix, que anuncia LF, la primacía de los lenguajes C y descendientes, que (de alguna manera) asignan su nueva línea a LF, y el hecho de que realmente solo necesitamos un personaje para representar una nueva línea, parece que LF El estándar claro en el futuro.

En general, debido a dos factores, terminales y evolución.

Algunas terminales tenían una forma de hacer las cosas, otras terminales tenían otras. Las alegrías de no tener especificaciones.

Luego, cuando aparecieron nuevos sistemas operativos, tenían especificaciones e ideas sobre cómo manejar las cosas “mejor” (YMMV).