Aujourd'hui est 2018, et le message d'erreur nous envoie des salutations de 1974. Cette limitation, qui se trouve dans les dernières versions de Windows 10, remonte à l'époque où aucun épisode
de Star Wars n'a été tourné. Ce bug est aussi ancien que
Watergate . Quand il a été écrit, pas un seul produit n'avait de
code -
barres UPC car il venait d'être inventé. À cette époque, il n'y avait qu'une seule
compagnie de téléphone , qui n'était pas divisée.
Ted Bundy était libre. Le record de Beiba Ruta pour les home runs est
prêt à tomber .
La Roue de la Fortune n'avait pas encore été montrée, et personne n'avait vu le
Rocky Horror Horror Show .
Steven Spielberg était alors un réalisateur peu connu,
"Saturday Night Live" n'apparaissait pas sur les écrans.
"Edmund Fitzgerald" alors qu'il transportait du minerai de fer. C'était l'année de la première de la partie 2 de
The Godfather !
À l'époque, Unix, qui n'avait que
5 ans , avait la bonne idée que "tout est un fichier". Cela signifie que vous pouvez faire différentes choses, comme écrire sur des sockets, des tuyaux, une console, etc. en utilisant les mêmes commandes et instructions. Le concept a été transféré par
Gary Kildall au
CP / M en 1974. Vous pouvez copier des données du port série vers un fichier texte ou imprimer un fichier texte directement depuis la ligne de commande! Sous Unix, cela se fait à l'aide de fichiers spéciaux situés dans des répertoires spéciaux, par exemple, / dev / tty pour la console ou / dev / lp0 pour la première imprimante. Vous pouvez obtenir des zéros sans fin depuis / dev / zero, des octets aléatoires depuis / dev / random, etc.
Mais il y a un problème: CP / M est conçu pour les ordinateurs 8 bits avec une très petite quantité de mémoire et sans disque dur. Au mieux, ils avaient 8 "disquettes. Et les répertoires? Vous n'en avez pas besoin. Au lieu de répertoires, vous avez juste utilisé différents disques. Mais sans répertoires, vous ne pourriez pas mettre tous vos fichiers spéciaux dans / dev /. Par conséquent, en fait, ils étaient" partout ". Autrement dit, si vous aviez FOO.TXT et que vous deviez l'imprimer, vous pourriez faire PIP LST: = FOO.TXT pour copier FOO.TXT dans le fichier LST, qui est l'imprimante, et cela fonctionnait n'importe où, car que le répertoire n'existait pas.
Et les extensions? Tout n'est pas facile non plus: les programmes préfèrent ajouter les extensions correctes à leurs fichiers. Autrement dit, si vous exécutez le programme et qu'il dit «Entrez un nom de fichier pour enregistrer la liste», vous pouvez entrer LST pour l'imprimer ou PTP pour l'écrire sur la bande (parce que vous êtes en 1974, vous vous souvenez?). Mais le programme peut essayer d'ajouter .TXT à la fin du fichier! Mais LST.TXT n'est plus une imprimante, non? Peu importe comment. Ça y est. Les noms d'appareils sont reconnus indépendamment des extensions. Autrement dit, si "CON" est affecté au clavier, alors CON.TXT et CON.BUG sont également utilisés. Hm. C'est un hack, mais ça marche. De plus, dans tous les déchets avec 4 Mo de RAM, ne vous en souciez pas?
Eh bien, le CP / M s'est répandu à la fin des années 70 - au début des années 80. Elle est devenue l'un des principaux OS pour les entreprises, définissant une interface standard. Cela signifiait que vous pouviez écrire du code CP / M sur
NorthStar Horizon et l'exécuter sur
Seequa Chameleon . L'absence d'une norme graphique pour la plupart ne lui a pas permis d'entrer sur le marché des jeux (bien qu'il y ait eu des versions d'
Infocom ), se concentrant principalement sur les utilisateurs professionnels. Mais tout de même, il était important, donc le désir d'IBM de l'utiliser dans son projet PC au début des années 80 est devenu naturel. Ensuite, IBM allait lancer un PC IBM avec plusieurs systèmes d'exploitation, s'attendant à ce que CP / M devienne l'un des principaux. Mais CP / M pour x86 n'est pas sorti six mois après le lancement du PC IBM, et cela a coûté 240 $ contre 40 $ pour DOS.
En conséquence, la grande majorité des utilisateurs ont commencé à utiliser PC-DOS de Microsoft, ce qui est devenu l'évolution du nouveau système d'exploitation développé par
Seattle Computer Products . Microsoft a acheté le projet de Tim Paterson et a créé PC-DOS sur cette base, qui est devenu plus tard MS-DOS. Le système d'exploitation de Tim Paterson était appelé
«QDOS», ce qui signifiait «Système d'exploitation rapide et sale». Il était basé sur CP / M, qui n'avait pas de version x86, et tentait de résoudre certaines des limitations de CP / M. À bien des égards, il s'agissait de systèmes très similaires. L'une des caractéristiques communes était l'idée d'utiliser des fichiers spéciaux et le manque de répertoires. Par conséquent, QDOS et PC-DOS 1.0 avaient tous ces AUX, PRN, CON, LPT, etc.
Avec la sortie de PC-DOS 2.0 en 1983, Microsoft a considérablement repensé PC-DOS pour le nouveau IBM XT. Vous aviez évidemment juste besoin de répertoires pour garder en ordre vos énormes disques de 10 mégaoctets, qui sont ensuite apparus sur le marché. Et encore une fois, pas de chance: les utilisateurs travaillent avec leurs fichiers spéciaux depuis quelques années depuis la sortie de la version précédente de PC DOS 1.0. Des programmes et des scripts ont été écrits pour utiliser ces fichiers. Avec le support des répertoires, Microsoft a finalement pu tout supprimer dans C: \ DEV ... mais ne l'a pas fait. Comme cela se produira plus d'une fois, Microsoft a fait preuve de bon sens sur l'autel de la compatibilité descendante: des fichiers spéciaux sont restés dans chaque répertoire avec n'importe quelle extension. Cet héritage a été appliqué à toutes les versions jusqu'à Windows 95. Mais bon, maintenant nous n'utilisons pas Windows 95, car la branche moderne des OS est basée sur Windows NT. Mais elle avait également besoin de compatibilité avec les programmes DOS / Windows. Par conséquent, ces fichiers spéciaux fonctionnent toujours, après quarante-quatre putains d'années! Essayez-le vous-même: ouvrez l'explorateur, créez un nouveau fichier texte et nommez-le con.txt. aux.txt ou prn.txt. Ça y était.

C'est grâce à Gary Kildall, qui a dit: «Les fichiers spéciaux représentent l'équipement! Excellente idée, Unix. Je l'emprunte et j'essaye de l'implémenter dans mon OS jouet "il y a si longtemps que les personnes nées alors peuvent déjà avoir des enfants autorisés à boire de l'alcool ... nous ne pouvons toujours pas nommer les fichiers con.txt. Microsoft a même une
liste spéciale: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 et LPT9. Pour rendre les choses amusantes, rappelez-vous qu'essayer d'accéder à C: \ con \ con (ou C: \ aux \ aux) a immédiatement jeté Windows 95 dans le BSOD. C'était drôle en 1995, car alors ce bug avait déjà 21 ans!

ContexteJe suis tombé sur cela lorsque j'ai réalisé que j'avais un fichier qui ne pouvait pas être copié. Ces noms de fichiers spéciaux sont implémentés au niveau du système d'exploitation et non au niveau du système de fichiers. Par conséquent, ce sont des noms de fichiers valides dans NTFS. Et j'ai utilisé un disque NTFS sous Linux. Et apparemment, OS / 2 ne prend pas en charge ce système de noms spéciaux, à la suite duquel parmi les fichiers opengl se trouvait AUX.H sur l'un des lecteurs de Devcon.

Et aujourd'hui, j'ai essayé de sauvegarder ce disque NTFS sur mon ordinateur principal, et "oups, je ne peux pas copier tous les fichiers à cause du bogue, plus ancien que la plupart des gens qui lisent ceci."
ExplicationsDans CP / M, travailler avec des noms spéciaux n'est pas aussi simple que je l'ai décrit. Par exemple, pour accéder au périphérique, vous avez besoin de deux points dans le nom: PRN: est une imprimante, mais PRN ne l'est pas. De plus, dans CP / M, l'utilisation des fichiers de périphérique n'est pas implémentée au niveau du système d'exploitation, comme sous DOS. Cela fait partie de la commande PIP pour copier des fichiers. Autrement dit, vous ne pourrez pas lancer, comme sous DOS, une astuce demandant au programme d'enregistrer PRN.TXT afin de l'imprimer.
Et juste au cas où, je vais clarifier: je ne veux pas dire quelque chose comme "Windows est nul". La rétrocompatibilité est généralement une bonne chose. En fait, je veux PLUS de rétrocompatibilité, rien de moins. Je suis juste devenu fou, après avoir rencontré un bogue de 44 ans lors de l'exécution de Windows 10 lors de la tentative de copie d'un disque SSD USB 3.0 vers un autre SSD. C'est comme vivre sur une station spatiale et être piétiné par un cheval.