30. studenog 2010. David Collier je pisao:
Primijetio sam da su u busyboxu linkovi raspoređeni po ovim četiri direktorija.
Postoji li neko jednostavno pravilo za određivanje u kojem direktoriju koji od linkova treba biti…
Na primjer, kill se nalazi u /bin, a killall u /usr/bin… Ne vidim nikakvu logiku u toj podjeli.
Vjerojatno znate da su Ken Thompson i Dennis Ritchie kreirali Unix na PDP-7 1969. godine. Nakon toga, otprilike 1971. nadogradili su na PDP-11 s par diskova RK05 (po 1,5 megabajta svaki).
Kada je operativni sustav narastao i prestao stajati na prvom disku (na kojem je bila smještena korijenska FS), premjestili su dio na drugi, gdje su se nalazile korisničke direktorije (zato se točka montiranja zvala /usr — od riječi user). Tamo su duplicirali sve potrebne direktorije OS-a (/bin, /sbin, /lib, /tmp…) i počeli stavljati datoteke na novi disk, jer je na starom ponestalo mjesta. Nakon toga su dobili treći disk, montirali su ga u direktorij /home i premjestili tamo korisničke direktorije, kako bi OS mogao zauzeti cijelo preostalo mjesto na dva diska, a to je bilo čitava tri megabajta (wow!).
Naravno, morali su uvesti pravilo da "kada se operativni sustav učitava, mora imati mogućnost montiranja drugog diska u direktorij /usr, pa ne treba stavljati programe poput mount na drugi disk u /usr, inače ćemo imati problem kokoške i jajeta". Tako jednostavno. I to se odnosilo na Unix V6 prije 35 godina.
Podjela /bin i /usr/bin (i svih sličnih direktorija) je posljedica tih događaja, detalj implementacije iz 70-ih, koji se i dalje, tijekom desetljeća, kopira od strane birokrata. Nikada nisu postavljali pitanje zašto, jednostavno su to radili. Ova podjela izgubila je smisao još prije nego što je Linux nastao, iz nekoliko razloga:
- Tijekom učitavanja koristi se initrd ili initramfs, koji preuzima probleme poput "ova datoteka nam treba ranije od one druge". Tako da imamo već privremeni datotečni sustav koji se koristi za učitavanje svega ostalog.
- Dijeljene biblioteke (koje su dodali dečki iz Berkleyja u Unix) ne dopuštaju vam da neovisno mijenjate sadržaj /lib i /usr/lib. Ova dva dijela moraju biti usklađena, inače neće raditi. To se nije događalo 1974. godine, jer su tada imali određenu neovisnost zbog statičkog povezivanja.
- Jeftini tvrdi diskovi su prešli granicu od 100 megabajta negdje 1990. godine, i otprilike u isto vrijeme su se pojavili programi za promjenu veličine particija (Partition Magic 3.0 je izašao 1997. godine).
Naravno, budući da postoji podjela, neki ljudi su smislili pravila koja je opravdavaju. Tipično, korijenska particija je potrebna za razne zajedničke stvari OS-a, a u /usr se stavljaju vaši lokalni datoteke. Ili se u / postavlja ono što distribuira AT&T, a u /usr ono što je vaš distribucija, IBM AIX, ili Dec Ultrix, ili SGI Irix dodao, a u /usr/local su datoteke specifične za vaš sustav. A onda je netko odlučio da /usr/local nije prikladno mjesto za instalaciju novog softvera, pa hajde da dodamo još i /opt! Ne bih se iznenadio da se pojavi i /opt/local…
Naravno, tokom 30 godina zbog ove podjele su se javljala i nestajala razna interesantna pravila specifična za pojedine distribucije. Na primjer, „/tmp se čisti prilikom ponovnog pokretanja, a /usr/tmp – ne“. (I u Ubuntu /usr/tmp ne postoji uopće, dok je u Gentoo /usr/tmp simbolička veza na /var/tmp, na koji se sada ovo pravilo primjenjuje i ne čisti se pri ponovnom pokretanju. Da, sve je to bilo prije tmpfs-a. A takođe se događa da je korijenska FС dostupna samo za čitanje, i tada se u /usr također ne treba pisati, već u /var. Ili u / uglavnom ne može se pisati, osim što u /etc, koju su ponekad pokušavali premjestiti u /var…)
Birokrati kao što je Linux Foundation (koji su prije godina apsorbirali Free Standards Group tokom širenja) rado dokumentiraju i kompliciraju ova pravila, čak i ne pokušavajući razumjeti zašto su nastala. Ne shvaćaju da su Ken i Dennis jednostavno premjestili dio OS-a u svoju kućnu direktoriju, jer je disk RK05 na PDP-11 bio premalen.
U gotovo sam siguran da busybox jednostavno postavlja datoteke onako kako je to povijesno uspostavljeno. Nema stvarnog razloga da se to još uvijek radi na taj način. Osobno, jednostavno postavljam /bin, /sbin i /lib kao poveznice na odgovarajuće direktorije u /usr. Na kraju krajeva, ljudi koji rade s embedded softverom nastoje razumjeti i pojednostaviti…
Izvor: habr.com
