Il 30 novembre 2010, David Collier scrisse:
Ho notato che in busybox i collegamenti sono distribuiti tra queste quattro directory.
C'è qualche regola semplice per determinare in quale directory dovrebbe trovarsi ciascun collegamento…
Ad esempio, kill si trova in /bin, mentre killall è in /usr/bin… Non vedo alcuna logica in questa suddivisione.
Probabilmente saprete che Ken Thompson e Dennis Ritchie crearono Unix sul PDP-7 nel 1969. Circa nel 1971, fecero l'upgrade al PDP-11 con un paio di dischi RK05 (da 1,5 megabyte ciascuno).
Quando il sistema operativo crebbe e non poteva più stare nel primo disco (dove era collocato il file system root), trasferirono parte di esso nel secondo, dove si trovavano le directory home (per questo il punto di montaggio era chiamato /usr, dall'inglese user). Duplicarono tutte le directory necessarie del sistema operativo (/bin, /sbin, /lib, /tmp…) e posizionarono i file sul nuovo disco, poiché sul vecchio era finito lo spazio. Poi, arrivò un terzo disco, che montarono nella directory /home e vi trasferirono le directory home degli utenti, affinché il sistema operativo potesse occupare tutto lo spazio rimanente sui due dischi, che erano ben tre megabyte (wow!).
Naturalmente, hanno dovuto introdurre la regola secondo cui «quando il sistema operativo si avvia, deve essere in grado di montare il secondo disco nella directory /usr, quindi non bisogna mettere programmi come mount sul secondo disco in /usr, altrimenti ci troviamo di fronte al problema dell'uovo e della gallina». È così semplice. E questo valeva per Unix V6 35 anni fa.
La separazione di /bin e /usr/bin (e di tutte le directory simili) è una conseguenza di quegli eventi, un dettaglio di implementazione degli anni '70, che è stato copiado per decenni dai burocrati. Non si sono mai posti la domanda perché, hanno semplicemente fatto così. Questa separazione ha smesso di avere senso anche prima che Linux fosse creato, per vari motivi:
- Durante l'avvio viene utilizzato initrd o initramfs, che si occupa di problemi come «questo file ci serve prima di quest'altro». Così, abbiamo è già presente un file system temporaneo che viene utilizzato per avviare tutto il resto.
- Le librerie condivise (che sono state aggiunte a Unix dai ragazzi di Berkley) non ti permettono di modificare indipendentemente il contenuto di /lib e /usr/lib. Queste due parti devono corrispondere tra loro, altrimenti non funzioneranno. Questo non accadeva nel 1974, poiché all'epoca avevano una certa indipendenza grazie al linking statico.
- I dischi rigidi economici hanno superato la barriera dei 100 megabyte intorno al 1990 e circa in quel periodo sono apparse le prime applicazioni per il ridimensionamento delle partizioni (partition magic 3.0 è stata rilasciata nel 1997).
Naturalmente, poiché esiste un partizionamento, alcune persone hanno inventato delle regole che lo giustificano. Ad esempio, la partizione root è necessaria per vari elementi comuni del sistema operativo, mentre in /usr dovrebbero andare i tuoi file locali. Oppure in / si mette ciò che distribuisce AT&T, mentre in /usr c'è ciò che il tuo distributore, IBM AIX, o Dec Ultrix, o SGI Irix hanno aggiunto, e in /usr/local si trovano file specifici per il tuo sistema. E poi qualcuno ha deciso che /usr/local non fosse un posto adatto per installare nuovo software, quindi abbiamo aggiunto anche /opt! Non mi stupirei se apparisse anche /opt/local...
Naturalmente, in 30 anni, a causa di questa suddivisione, sono emerse e scomparse varie regole interessanti specifiche per ciascuna distribuzione. Ad esempio, «/tmp viene svuotato al riavvio, mentre /usr/tmp no». (E in Ubuntu non c'è affatto /usr/tmp, mentre in Gentoo /usr/tmp è un collegamento simbolico a /var/tmp, al quale ora si applica quella regola, e non viene svuotato al riavvio. Sì, tutto ciò è accaduto prima di tmpfs. Inoltre, talvolta il filesystem radice è accessibile solo in modalità di sola lettura, e quindi non è necessario scrivere nulla in /usr, ma è necessario scrivere in /var. O in / per lo più non si può scrivere, a parte il fatto che in /etc, che a volte è stata tentata di essere spostata in /var…)
Burocrati come la Linux Foundation (che ha assorbito il Free Standards Group durante l'espansione anni fa) documentano e complicano volentieri queste regole, senza nemmeno tentare di capire perché siano emerse. Non si rendono conto che Ken e Dennis hanno semplicemente spostato parte del sistema operativo nella loro directory home, dato che il disco RK05 sul PDP-11 era troppo piccolo.
Sono praticamente sicuro che busybox posizioni i file proprio come è avvenuto storicamente. Non c'è davvero alcuna ragione per continuare a farlo in questo modo. Personalmente, creo dei link da /bin, /sbin e /lib alle rispettive directory in /usr. Le persone che lavorano con software embedded cercano di capire e semplificare…
Fonte: habr.com
