有技术原因吗?这是Linux或Unix早期的人为产物吗?如果是这样,那么它持续存在的原因是什么?
我想不出技术原因-从历史上看,它只是ASCII。如何读入然后键入它在编码器手中。
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];
}
由于我花了一些时间浏览存档手册页(例如: 1BSD是Bill Joy的第一个Berkeley软件发行版),所以我什么也看不到指定用户名。这并不是说它不存在,但我还没有看到它。
因此,我们只剩下人类历史背景。早在1980年我开始从事技术工作时,我们始终使用真实姓名登录。除非有长度限制,否则通常为名字的全名。这很重要,因为您的登录名被用作您的电子邮件地址。后来没人再发送匿名电子邮件。当然必须有一些例外,我不记得他们了。总体而言,我认为情况确实如此。
而且根据rfc5321#page-63,对电子邮件“名称”以数字开头没有任何限制。gmail将创建所有数字用户名。(立即获取,他们进展很快)。
因此,如果有任何代码拒绝以[0-9]开头的用户名,则该代码可能在以后出现,并且某些程序员认为“为什么要使用数字作为名称?”。再一次,我不得不说,很有可能是历史悠久的Unix代码拒绝了以数字开头的用户名。我只是没看过。早期的密码表是手工编辑的,我当然记得经常这样做,即使在90年代初也是如此。
至于为什么它仍然存在,我将引用stroustrup,C ++ 11FAQ,新标准库何时可用?
为了使问题更加棘手,请记住,即使委员会同意它们是不好的,也要消除较旧的功能是不可行的:经验表明,用户强迫每个实施者在兼容性开关下(或默认情况下)继续提供不推荐使用和禁止使用的功能。数十年。