Generalmente no me gusta re-postear artículos vistos en digg, reddit o similares, pero hoy haremos una excepción para transmitirles un artículo bastante interesante para todos aquellos que, como yo, dieron sus primeros pasos en DOS. El artículo original es un poco más largo, dando un par de detalles técnicos que hemos omitido para facilitar la lectura. Comienza con una pregunta: ¿Por qué DOS usa “\” para separar directorios? He aquí la respuesta, cortesía del blog de Larry Osterman (quien, incidentalmente, es desarrollador de Microsoft):

Hace muchos, muchos meses, Declan Eardly preguntó por qué el caracter “\” fue elegido como el separador para los paths. La respuesta es anterior a mi tiempo, pero sí recuerdo las razones originales.

Todo se inicia con la relación de Microsoft con IBM. Para DOS 1.0, DOS solamente soportaba diskettes.

Muchas de las utilidades de DOS (excepto command.com) fueron escritas para IBM, y utilizaban el caracter “/” como el caracter de “switch”. El caracter de “switch” es el caracter que se utiliza para distinguir opciones de línea de comando – en *nix es “-”, en los sistemas operativos DEC (incluyendo VMS, DECSystem-20 y DECSystem-10) es “/”. Nota: no estoy seguro de si el caracter “/” vino de IBM o de Microsoft – muchos de los desarrolladores originales de MS-DOS eran antiguos programadores de DEC-20, así que es posible que lo hayan traído de su experiencia con DEC.

El hecho de que el caracter “/” creara conflicto con el caracter de path de otro sistema operativo relativamente popular no era demasiado relevante para los desarrolladores originales – después de todo, DOS no soportaba directorios, solamente archivos en un único directorio raíz.

Luego vino DOS 2.0. DOS 2.0 estaba ligado a la PC/XT, cuya principal característica era un disco rígido de 10Mb. IBM pidió a Microsoft que agregara soporte para discos rígidos, y los desarrolladores de MS-DOS lo vieron como una oportunidad para agregar soporte para una API moderna de archivos – agregaron toda una serie de APIs basadas en manejadores al sistema (DOS 1.0 se basaba en una estructura de aplicación controlada llamada una FCB). Agregaron también soporte para paths jerárquicos.

Ahora, históricamente han existido diversos mecanismos para proveer paths jerárquicos. Para MS-DOS 2.0, los diseñadores eligieron una versión híbrida – ya utilizaban el soporte de letras de disco en DOS 1.0, así que debían seguir utilizándolas. Y eligieron mantener el sistema *nix de especificar una jerarquía – en vez de proveer un nombre especial para el directorio (como en las VMS y DEC-20), simplemente hicieron que el directorio y nombre de archivo fueran partes indistinguibles del path.

Pero había un problema. No podían utilizar el separador de paths de *nix “/”, porque “/” estaba siendo utilizado como el caracter de switch. Tampoco podían utilizar el caracter “.” como en las máquinas DEC, porque ya lo estaban utilizando para diferenciar entre archivo y extensión. Así que eligieron la siguiente mejor opción – el caracter “\”, que era similar visualmente al caracter “/”.

Y así es como el caracter “\” fue elegido.

Y he aquí un secreto poco conocido acerca de MS-DOS. Los desarrolladores de DOS no estaban muy felices con esta forma de hacer las cosas – de hecho, todos utilizaban máquinas Xenix para email y cosas así, así que estaban familiarizados con la semántica de comandos de *nix. Así que programaron al SO para que aceptara tanto “/” como “\” como caracter de path (esto se mantiene aún en XP). Y fueron un paso más allá. Agregaron una llamada al sistema no documentada para cambiar el caracter de switch. Y actualizaron las utilidades para respetar esto.

Y para dar el toque final, agregaron una opción a config.sys, SWITCHAR= que permite setear el caracter de switch a “-”, lo cual convertía a MS-DOS en un sistema *nix donde las líneas de comando utilizaban “-switch” y los paths se delimitaban con “/”.

No sé qué ocurrió con la API switchar, ha desaparecido hace ya muchos años.

Así que esa es la razón por la cual el caracter de path es “\”. Es porque “/” estaba ocupado.

Nota: si les interesó el artículo no se pierdan los comentarios del artículo original, que proveen más detalles sobre el tema, incluso de la mano de los desarrolladores originales.

Leave a comment

Idioma – Language

Archivo

Dijimos en Twitter...

  • Trust me, I'm an engineer! http://t.co/9jhAAQAyG3
  • NSA, if you are reading my tweets: 1995 called, and said he wants his Powerpoint design back.
  • DHL: "Estimado cliente: ya generamos su tarjeta y tratamos de enviarla, pero la perdimos. Por favor, contacte al remitente." *facepalm*
  • Me di de alta en un servicio del correo que evita demoras por pérdidas de paquetes. La llave del servicio se perdió en el correo *facepalm*
  • Debe ser un nuevo record: el SDK para Windows Phone 8 no funciona con *ninguna* versión anterior de Windows. Ni siquiera Windows 7.