Op 30 november 2010 schreef David Collier:
Ik merkte dat de links in busybox zijn verdeeld over deze vier mappen.
Is er een simpele regel om te bepalen in welke map welke link moet liggen…
Bijvoorbeeld, kill ligt in /bin, terwijl killall in /usr/bin ligt… Ik zie geen logica in deze indeling.
Je weet waarschijnlijk dat Ken Thompson en Dennis Ritchie Unix hebben gemaakt op de PDP-7 in 1969. In 1971 zijn ze geüpgraded naar de PDP-11 met een paar RK05-schijven (ieder 1,5 megabyte).
Toen het besturingssysteem groeide en niet meer op de eerste schijf paste (waar de root FS zich bevond), hebben ze een deel naar de tweede schijf verplaatst, waar de home-gedirecteuren zich bevonden (daarom werd de mount-locatie /usr genoemd, van het woord user). Ze hebben daar alle noodzakelijke OS-mappen gedupliceerd (/bin, /sbin, /lib, /tmp…) en bestanden op de nieuwe schijf geplaatst, omdat er geen ruimte meer op de oude schijf was. Toen kregen ze een derde schijf, gemonteerd in de /home-directory, en hebben ze de home-directory's van gebruikers daarheen verplaatst, zodat het besturingssysteem de resterende ruimte op de twee schijven kon gebruiken, wat drie megabytes was (wow!).
Uiteraard moesten ze de regel invoeren dat "wanneer het besturingssysteem opstart, het in staat moet zijn de tweede schijf in de /usr-directory te mounten, dus moet je programma's zoals mount niet op de tweede schijf in /usr plaatsen, anders krijgen we het kip-en-ei probleem." Zo simpel is het. Dit gold voor Unix V6 35 jaar geleden.
De opsplitsing van /bin en /usr/bin (en alle soortgelijke mappen) is een gevolg van die gebeurtenissen, een implementatiedetail uit de jaren '70 dat decennia lang door bureaucraten werd gekopieerd. Ze stelden nooit de vraag waarom, ze deden het gewoon zo. Deze opsplitsing verloor zijn zin nog vóór het ontstaan van Linux, om verschillende redenen:
- Bij het opstarten wordt initrd of initramfs gebruikt, wat de problemen aanpakt zoals "dit bestand hebben we eerder nodig dan dat bestand". Zo hebben we al een tijdelijk bestandssysteem dat wordt gebruikt voor het opstarten van de rest.
- Gedeelde bibliotheken (die door de jongens van Berkeley aan Unix zijn toegevoegd) staan je niet toe om de inhoud van /lib en /usr/lib onafhankelijk te wijzigen. Deze twee delen moeten met elkaar overeenkomen, anders werken ze niet. Dit was niet het geval in 1974, omdat zij toen enige onafhankelijkheid hadden vanwege statische linking.
- Goedkope harde schijven hebben in de jaren '90 de grens van 100 megabyte overschreden en ongeveer rond die tijd verschenen programma's om partities te vergroten (partition magic 3.0 werd in 1997 uitgebracht).
Natuurlijk, omdat er een scheiding is, hebben sommige mensen regels bedacht die deze rechtvaardigen. Bijvoorbeeld, de root-partitie is nodig voor verschillende algemene OS-elementen, en in /usr moeten je lokale bestanden worden geplaatst. Of in / zetten ze wat AT&T verspreidt, en in /usr komt wat jouw distributie, IBM AIX, of Dec Ultrix, of SGI Irix heeft toegevoegd, en in /usr/local liggen de systeem-specifieke bestanden. En dan besloot iemand dat /usr/local geen geschikte plek is om nieuwe software te installeren, dus laten we ook /opt toevoegen! Ik zou niet verbaasd zijn als er ook nog /opt/local komt...
Natuurlijk zijn er in 30 jaar, vanwege deze scheiding, allerlei interessante regels ontstaan en verdwenen, specifiek voor bepaalde distributies. Bijvoorbeeld, " /tmp wordt gewist bij het herstarten, terwijl /usr/tmp dat niet doet". (En in Ubuntu bestaat /usr/tmp in principe niet, en in Gentoo is /usr/tmp een symbolische link naar /var/tmp, waar nu die regel op van toepassing is, en het wordt niet gewist bij een herstart. Ja, dit was allemaal nog vóór tmpfs. En soms is het zo dat het root FS alleen-lezen is, en dan hoeft er ook niets in /usr te worden geschreven, maar moet het in /var worden geschreven. Of in / in wezen kan er niet worden geschreven, afgezien van dat wat in /etc, dat soms geprobeerd werd om naar /var te verplaatsen...)
Bureaucraten zoals de Linux Foundation (die jaren geleden de Free Standards Group hebben opgeslokt tijdens een uitbreiding) documenteren en compliceren deze regels met plezier, zonder zelfs maar te proberen te begrijpen waarom ze zijn ontstaan. Ze beseffen niet dat Ken en Dennis gewoon een deel van het OS naar hun thuismap hebben verplaatst, omdat de RK05-schijf op de PDP-11 te klein was.
Ik ben er bijna zeker van dat busybox bestanden gewoon opslaat zoals dat historisch zo is. Er is geen echte reden om dit nog steeds te doen. Persoonlijk maak ik gewoon /bin, /sbin en /lib koppelingen naar de overeenkomstige directories in /usr. Mensen die met embedded software werken, proberen het altijd uit te zoeken en te vereenvoudigen...
Bron: habr.com
