¿Hay alguna razón técnica por qué? ¿Es esto un artefacto de los primeros días de Linux o Unix, y si es así, hay una razón por la que persiste?
No puedo pensar en una razón técnica: históricamente, es solo ASCII. Cómo se lee y luego se escribe está en manos del codificador.
Unix-history-repo / usr / src / cmd / passwd.c
char *uname;
insist = 0;
if(argc < 2) {
if ((uname = getlogin()) == NULL) {
printf ("Usage: passwd user\n");
goto bex;
} else {
printf("Changing password for %s\n", uname);
}
} else {
uname = argv[1];
}
Como pasé algún tiempo navegando por las páginas de manual del archivo (por ejemplo: 1BSD fue la primera distribución de software de Berkeley de Bill Joy ), no he visto nada que especifique los nombres de usuario. Eso no quiere decir que no exista, pero no lo he visto.
Entonces nos quedamos con el contexto humano histórico. Cuando comencé en tecnología en 1980, siempre usábamos nuestro nombre real para los inicios de sesión. Por lo general, la primera inicial y el apellido completo a menos que haya algún límite de longitud. Esto fue importante ya que su nombre de usuario se utilizó como su dirección de correo electrónico. Nadie en ese entonces envió un correo electrónico anónimo. Por supuesto, debe haber algunas excepciones, no las recuerdo. En general, creo que este es el caso.
Y de acuerdo con el rfc5321 # page-63, no hay ninguna restricción para que un "nombre" de correo electrónico comience con un número. gmail creará todos los nombres de usuario numéricos. (Consíguelo ahora, van rápido).
Entonces, si hay algún código que rechaza un nombre de usuario que comienza con [0-9], entonces probablemente surgió más tarde con algún programador pensando "¿por qué tendrías un número como nombre?". Una vez más, debo decir que puede haber un código histórico de Unix que rechaza un nombre de usuario que comienza con un número. Simplemente no lo he visto. Las primeras tablas de contraseñas fueron editadas a mano, ciertamente recuerdo haberlo hecho con frecuencia, incluso a principios de los 90.
En cuanto a por qué persiste, citaré stroustrup, C ++ 11FAQ, ¿ Cuándo estarán disponibles las nuevas bibliotecas estándar?
Para hacer que el problema sea más difícil, recuerde que no es factible eliminar las funciones antiguas, incluso si el comité acepta que son malas: la experiencia muestra que los usuarios obligan a todos los implementadores a seguir proporcionando funciones obsoletas y prohibidas bajo los interruptores de compatibilidad (o por defecto) por décadas.