30 listopada 2010 roku David Collier pisał:
Zauważyłem, że w busybox linki są rozłożone po tych czterech katalogach.
Czy istnieje jakieś proste zasada, aby określić, w którym katalogu powinien znajdować się dany link…
Na przykład, kill znajduje się w /bin, a killall — w /usr/bin… Nie widzę żadnej logiki w takim podziale.
Pewnie wiesz, że Ken Thompson i Dennis Ritchie stworzyli Unix na PDP-7 w 1969 roku. Otóż, około 1971 roku przeszli na PDP-11 z parą dysków RK05 (po 1,5 megabajta każdy).
Kiedy system operacyjny rozrósł się i przestał się mieścić na pierwszym dysku (na którym była umieszczona główna FS), przenieśli część na drugi, gdzie znajdowały się katalogi domowe (dlatego punkt montowania nazywał się /usr — od słowa user). Skopiowali tam wszystkie niezbędne katalogi systemu operacyjnego (/bin, /sbin, /lib, /tmp…) i przechowywali pliki na nowym dysku, ponieważ na starym zabrakło miejsca. Potem pojawił się trzeci dysk, zamontowali go w katalogu /home i przenieśli tam katalogi domowe użytkowników, aby system operacyjny mógł zająć całe pozostałe miejsce na dwóch dyskach, a to były całe trzy megabajty (wow!).
Oczywiście musieli wprowadzić zasadę, że "kiedy system operacyjny jest uruchamiany, musi być w stanie zamontować drugi dysk w katalogu /usr, więc nie należy wkładać programów typu mount na drugi dysk w /usr, bo wtedy napotkamy problem jajka i kury". Tak to prosto. I dotyczyło to Unix V6 35 lat temu.
Podział /bin i /usr/bin (i wszystkich podobnych katalogów) — to następstwo tych wydarzeń, detal implementacji z lat 70-tych, który przez dekady był kopiowany przez biurokratów. Nigdy nie zadawali pytania dlaczego, po prostu tak robili. Ten podział stracił sens jeszcze przed powstaniem Linuxa, z kilku powodów:
- Przy uruchamianiu używa się initrd lub initramfs, który zajmuje się problemami typu "ten plik potrzebujemy wcześniej niż tamten". Tak więc mamy więc z pomocą tej kolekcji certyfikatów można zbudować łańcuch i uwierzytelnić witrynę internetową. tymczasowy system plików, który jest używany do załadowania reszty.
- Biblioteki współdzielone (które zostały dodane do Uniksa przez facetów z Berkley) nie pozwalają na niezależną zmianę zawartości /lib i /usr/lib. Te dwie części muszą być ze sobą zgodne, w przeciwnym razie nie będą działać. Tak nie działo się w 1974 roku, ponieważ wtedy miały pewną niezależność ze względu na statyczne wiązanie.
- Tanie dyski twarde przekroczyły barierę 100 megabajtów gdzieś w 1990 roku, a mniej więcej w tym samym czasie pojawiły się programy do zmiany rozmiarów partycji (partition magic 3.0 ukazał się w 1997 roku).
Oczywiście, ponieważ nastąpiło podział, niektórzy ludzie wymyślili zasady, które go uzasadniają. Na przykład, partycja root jest potrzebna do różnych wspólnych rzeczy systemu operacyjnego, a w /usr należy umieszczać swoje lokalne pliki. Lub w / umieszcza się to, co dystrybuuje AT&T, a w /usr – to, co dodał twój dystrybucja, IBM AIX, lub Dec Ultrix, lub SGI Irix, a w /usr/local znajdują się pliki specyficzne dla twojego systemu. A potem ktoś postanowił, że /usr/local to nieodpowiednie miejsce do instalowania nowego oprogramowania, więc dodajmy jeszcze /opt! Nie zdziwię się, jeśli powstanie jeszcze /opt/local…
Oczywiście, przez 30 lat z powodu takiego podziału pojawiały się i znikały różne interesujące, specyficzne dla poszczególnych dystrybucji zasady. Na przykład: „/tmp jest czyszczone przy ponownym uruchomieniu, a /usr/tmp – nie”. (A w Ubuntu /usr/tmp zasadniczo nie ma, a w Gentoo /usr/tmp to symboliczne łącze do /var/tmp, na które teraz rozciąga się ta zasada, i nie jest czyszczone przy ponownym uruchomieniu. Tak, to wszystko działo się jeszcze przed tmpfs. Bywa też, że główny system plików jest dostępny tylko do odczytu, a wtedy w /usr także nie trzeba nic pisać, tylko pisze się w /var. Lub w / głównie nie można pisać, nie licząc tego, co w /etc, którą czasami próbowano przenieść do /var…)
Biurokraci, tacy jak Linux Foundation (którzy przejęli Free Standards Group podczas ekspansji lata temu), z radością dokumentują i komplikują te zasady, nawet nie próbując zrozumieć, dlaczego one powstały. Nie zdają sobie sprawy, że Ken i Dennis po prostu przenieśli część systemu operacyjnego do swojej domowej katalogii, ponieważ dysk RK05 na PDP-11 był zbyt mały.
Jestem praktycznie pewien, że busybox po prostu umieszcza pliki w taki sam sposób, jak to historycznie się ukształtowało. Nie ma żadnego rzeczywistego powodu, by robić to do tej pory. Osobiście po prostu tworzę /bin, /sbin i /lib jako linki do podobnych katalogów w /usr. W końcu ludzie, którzy pracują z oprogramowaniem wbudowanym, starają się rozumieć i upraszczać…
Źródło: habr.com
