Le 30 novembre 2010, David Collier écrivait :
J'ai remarqué que dans busybox les liens sont répartis dans ces quatre répertoires.
Y a-t-il une règle simple pour déterminer dans quel répertoire chaque lien devrait se trouver…
Par exemple, kill se trouve dans /bin, tandis que killall se trouve dans /usr/bin… Je ne vois aucune logique dans cette séparation.
Vous savez probablement que Ken Thompson et Dennis Ritchie ont créé Unix sur PDP-7 en 1969. Eh bien, vers 1971, ils ont mis à niveau vers PDP-11 avec quelques disques RK05 (d'1,5 mégaoctet chacun).
Quand le système d'exploitation a grossi et n'a plus tenu sur le premier disque (où se trouvait le système de fichiers racine), ils ont transféré une partie sur le deuxième, où se trouvaient les répertoires personnels (c'est pourquoi le point de montage s'appelait /usr — de l'anglais user). Ils ont dupliqué tous les répertoires nécessaires du système d'exploitation (/bin, /sbin, /lib, /tmp…) et ont stocké des fichiers sur le nouveau disque, car l'ancien était plein. Puis, ils ont eu un troisième disque, qu'ils ont monté dans le répertoire /home et y ont transféré les répertoires personnels des utilisateurs, afin que le système d'exploitation puisse occuper tout l'espace restant sur les deux disques, ce qui représentait trois mégaoctets entiers (wow !).
Évidemment, ils ont dû établir la règle selon laquelle « lorsque le système d'exploitation démarre, il doit être capable de monter le deuxième disque dans le répertoire /usr, donc il ne faut pas mettre des programmes comme mount sur le deuxième disque dans /usr, sinon nous aurons le problème de la poule et de l'œuf ». C'est aussi simple que ça. Et cela s'appliquait à Unix V6 il y a 35 ans.
La séparation entre /bin et /usr/bin (et tous les répertoires similaires) est le résultat de ces événements, un détail d'implémentation des années 70, qui a été copié pendant des décennies par des bureaucrates. Ils ne se sont jamais posé la question pourquoi, ils faisaient simplement ainsi. Cette séparation n'avait plus de sens bien avant la création de Linux, pour plusieurs raisons :
- Lors du démarrage, initrd ou initramfs est utilisé, ce qui gère des problèmes tels que « ce fichier est nécessaire plus tôt que celui-là ». Ainsi, nous avons il existe déjà un système de fichiers temporaire, qui est utilisé pour démarrer tout le reste.
- Les bibliothèques partagées (qui ont été ajoutées à Unix par les gars de Berkeley) ne permettent pas de modifier indépendamment le contenu de /lib et /usr/lib. Ces deux parties doivent correspondre l'une à l'autre, sinon elles ne fonctionneront pas. Cela ne se produisait pas en 1974, car ils avaient une certaine indépendance grâce au lien statique.
- Les disques durs bon marché ont franchi la barrière des 100 mégaoctets quelque part en 1990 et à peu près à la même époque, des programmes de redimensionnement de partitions sont apparus (partition magic 3.0 est sorti en 1997).
Évidemment, puisque la séparation existe, certaines personnes ont inventé des règles justifiant cela. Par exemple, la partition racine est nécessaire pour toutes sortes de fichiers communs du système d'exploitation, et dans /usr, on doit mettre ses fichiers locaux. Ou dans / on met ce qui est distribué par AT&T, et dans /usr — ce que votre distribution, IBM AIX, ou Dec Ultrix, ou SGI Irix a ajouté, et dans /usr/local se trouvent des fichiers spécifiques à votre système. Puis quelqu'un a décidé que /usr/local n'était pas un endroit approprié pour installer de nouveaux logiciels, donc ajoutons également /opt ! Je ne serais pas surpris si un /opt/local apparaissait aussi…
Évidemment, au cours des 30 dernières années, en raison de cette séparation, diverses règles intéressantes spécifiques à certaines distributions ont émergé et disparu. Par exemple, « /tmp est nettoyé lors du redémarrage, tandis que /usr/tmp ne l'est pas ». (Et dans Ubuntu, /usr/tmp n'existe pas en principe, tandis que dans Gentoo, /usr/tmp est un lien symbolique vers /var/tmp, qui est maintenant soumis à cette règle, et il n'est pas nettoyé lors du redémarrage. Oui, tout cela était encore avant tmpfs. De plus, il arrive que le système de fichiers racine soit accessible uniquement en lecture, donc dans /usr, il ne faut rien écrire, mais plutôt écrire dans /var. Ou dans / principalement on ne peut pas écrire, à part dans /etc, qu'on a parfois essayé de déplacer vers /var...)
Les bureaucrates comme la Linux Foundation (qui a absorbé le Free Standards Group pendant l'expansion il y a des années) documentent et compliquent ces règles avec plaisir, sans même essayer de comprendre pourquoi elles sont apparues. Ils ne réalisent pas que Ken et Dennis ont simplement déplacé une partie du système d'exploitation dans leur répertoire personnel, parce que le disque RK05 sur PDP-11 était trop petit.
Je suis presque sûr que busybox place simplement les fichiers de la manière dont cela a historiquement été fait. Il n'y a aucune raison valable de continuer ainsi. Personnellement, je fais juste en sorte que /bin, /sbin et /lib soient des liens vers les répertoires similaires dans /usr. Après tout, les gens qui travaillent avec des logiciels intégrés cherchent à comprendre et à simplifier…
Source : habr.com
