Skąd pochodzi Mac OS X?

43

Dyskutując z właścicielami komputerów Mac, otrzymałem kilka wersji skąd pochodzi Mac OS X. Wiadomo, że ma pewne korzenie w BSD, ale ile i gdzie?

Niektórzy twierdzą, że Mac OS X ma jądro FreeBSD, a wszystkie powyższe narzędzia sprawiają, że jest to system operacyjny specyficzny dla komputerów Mac. (Nie mówiąc o aplikacjach użytkowników tutaj, tylko wszystkich init, ls, cdi innych. Binutils? )

Inni twierdzą, że Mac OS X to jądro Darwina, czyli czysty Mac, a narzędzia OS pochodzą z BSD.

Gdzie jest prawda

Didier Trosset
źródło
11
Tytuł tego pytania powinien naprawdę brzmieć „Skąd pochodzi Mac OS X”, ponieważ wszystkie wersje Mac OS przed X są zupełnie innym systemem operacyjnym niż Unix.
Sandy,
1
@Sandy: naprawiono Xes
Warren Young
Zamierzałem zasugerować „piekło”, ale potem miałem nieprzyjemną pamięć o Microsoft i ich upiornym „Windowsie” ... Poza tym? NeXTSTEP i BSD, jeśli pamięć dobrze mi służy i jestem pewien, że odpowiedzi to zauważają.
Pryftan

Odpowiedzi:

67

Historia MacOS jest nieco bardziej skomplikowana. Byłem bardzo zainteresowany tym pod koniec lat 90., ponieważ Mach był rozrzucony po całym świecie jako szybszy sposób budowania systemu uniksowego.

Pochodzenie jądra jest nieco bardziej skomplikowane.

Wszystko zaczyna się od bezpłatnej dystrybucji systemu operacyjnego przez AT&T na niektóre uniwersytety. Ten uniks został znacznie ulepszony w Berkeley i stał się podstawą dla odmian uniksowych BSD i wprowadził kilka nowych innowacji, takich jak „Fast File System” (UFS), wprowadził dowiązania symboliczne i API gniazd. AT&T poszło własną drogą i jednocześnie zbudowało System V.

W międzyczasie kontynuowano badania, a niektórzy przyjęli pracę BSD jako podstawę. W CMU jądro BSD posłużyło jako podstawa do prototypowania kilku nowych pomysłów: wątków, interfejsu API do sterowania systemem pamięci wirtualnej (poprzez wtykowe „pager” - mmapa na poziomie użytkownika), systemu zdalnego wywoływania procedur na poziomie jądra i większości co ważne, pomysł przeniesienia niektórych operacji na poziomie jądra do przestrzeni użytkownika. To stało się jądrem Macha.

Nie jestem w 100% pewien, czy mmap pochodzi od Macha, a później został przyjęty przez BSD, czy też Mach po prostu był pionierem pomysłu, a BSD dodała własną mmapę w oparciu o idee Macha.

Chociaż jądro Macha zostało opisane jako mikro-jądro, do wersji 2.5 był to tylko system, który zapewniał wątek, mmap, funkcje przekazywania wiadomości, ale pozostał jądrem monolitycznym, wszystkie usługi działały w trybie jądra.

W tym czasie Rick Rashid (obecnie w Microsoft) i Avie Tevanian (teraz w Apple) wpadli na nowatorski pomysł, który może przyspieszyć Uniksa. Pomysł polegał na wykorzystaniu wywołania systemowego mmap do przekazania danych do skopiowania z przestrzeni użytkownika na „serwery” implementujące system plików. Pomysł ten był w zasadzie odmianą próby uniknięcia kopiowania tych samych danych, ale został uznany za korzyść z mikro jąder, nawet jeśli ta funkcja mogłaby zostać odizolowana od mikro jądra.

Benchmark tego szybszego systemu uniksowego wspieranego przez VM jest tym, co skłoniło ludzi z NeXT i FSF do wybrania Macha jako podstawy dla swoich jąder.

NeXT współpracował z jądrem Mach 2.5 (opartym na BSD 4.2 lub 4.3), a GNU faktycznie nie zacząłby pracy przez lata. Właśnie tego używali systemy operacyjne NeXTSTEP.

W międzyczasie w CMU prace nad Machem były kontynuowane i ostatecznie zrealizowali wizję posiadania wielu serwerów działających na mikro jądrze z wersją 3.0. Nie wiem, czy ktokolwiek na wolności mógł uruchomić Mach 3.0, ponieważ wszystkie interesujące serwery na poziomie użytkownika korzystały z kodu AT&T, więc zostały uznane za obciążone, więc pozostał to produkt badawczy.

Mniej więcej w tym czasie zespół Jolitz wykonał port 4,3+ BSD do architektury 386 i opublikował swoje wysiłki związane z portowaniem na DrDobbs. 386BSD nie było aktywnie utrzymywane i pojawiła się grupa, aby utrzymywać i przesuwać 386BSD, zespół NetBSD. Walki wewnętrzne w grupie NetBSD spowodowały pierwszy podział i na tej podstawie powstał FreeBSD. NetBSD w tym czasie chciał skupić się na posiadaniu wieloplatformowego BSD, a FreeBSD chciał skupić się na uniksowym systemie, który świetnie sobie radził na platformach x86. Nieco później NetBSD rozpadł się ponownie z powodu innych sporów, co doprowadziło do powstania OpenBSD.

Rozwidlenie BSD 4.3 dla platform x86 poszło na rynek komercyjny z firmą BSDi i pracowali tam różni członkowie oryginalnego zespołu Berkeley i utrzymywali dobre relacje z zespołem BSD na Uniwersytecie.

AT&T nie był rozbawiony i rozpoczął proces AT&T przeciwko BSDi, który został później rozszerzony na pozew uniwersytecki. Sprawa dotyczyła BSDi korzystającego z zastrzeżonego kodu AT&T, który nie został przepisany przez Berkeley. To cofnęło BSD w porównaniu z nadchodzącym systemem operacyjnym Linux.

Chociaż sprawy nie wyglądały dobrze dla oskarżonych, w pewnym momencie ktoś zdał sobie sprawę, że SystemV wprowadził duże fragmenty kodu BSD na podstawie licencji BSD, a AT&T nie wywiązało się ze swoich obowiązków wynikających z licencji. Osiągnięto porozumienie, w którym AT&T nie będzie musiał wyciągać swojego produktu z rynku, a uniwersytet zgodził się wydrzeć każdy kod, który nadal mógłby być oparty na kodzie AT&T.

Następnie uniwersytet wydał dwie wersje BSD 4.4 obciążone i 4.4 lite. Wersja obciążona uruchamiałaby się i działała, ale zawierała kod AT&T. Wersja Lite nie zawierała kodu z AT&T, ale nie działała.

Różne wysiłki BSD ponownie wykonały pracę nad nową wersją 4.4 lite i miały system rozruchowy w ciągu kilku miesięcy.

Tymczasem mikro jądro Mach 3.0 pozostało niezbyt przydatne bez żadnego z serwerów użytkowników.

Student ze skandynawskiego uniwersytetu (myślę, że mogłem się mylić) był pierwszym, który stworzył pełny system Mach 3.0 z kompletnym systemem operacyjnym opartym na wersji 4.4 lite, wierzę, że to się nazywało „Lites”. System działał, ale był powolny.

W latach 1992-1996 i do tej pory BSD miało już wywołanie systemowe mmap (), a także większość innych systemów uniksowych. „Zaleta mikrądra”, której nie było, nigdy tak naprawdę nie przyniosła rezultatu. NeXT wciąż miał monolityczne jądro. FSF wciąż starał się zmusić Macha do zbudowania i nie chcąc dotykać kodu BSD ani brać udziału w żadnym wysiłku BSD typu open source, wciąż próbowali zarzucić słabo określoną wizję jądra i topili się w protokołach RPC dla swoich własnych jądro. Mikro-jądro wyglądało świetnie na papierze, ale okazało się, że jest przerobione i po prostu spowolniło wszystko.

W tym momencie odbyliśmy również debatę Linus vs Andy na temat mikro-jąder vs monolitycznych jąder, a świat zaczął zdawać sobie sprawę, że dodanie wszystkich tych dodatkowych cykli do mikro-jądra jest po prostu niemożliwe i wciąż wyprzedza dobrze zaprojektowane monolityczne jądro. .

Apple nie nabyło jeszcze NeXTSTEP, ale zaczęło też postrzegać Macha jako potencjalne jądro dla swoich przyszłych systemów operacyjnych. Wynajęli Open Software Foundation do przeniesienia Linuksa do jądra Macha, a zrobiono to z ich biur w Grenoble, myślę, że to się nazywało „mklinux”.

Kiedy Apple kupił NeXT, to, co mieli na rękach, było stosunkowo starym fundamentem Uniksa, Unixem opartym na 4.2 lub 4.3, a do tej pory nawet wolne oprogramowanie nie działało dobrze na tych systemach. Wynajęli Jordana Hubbarda od FreeBSD, aby ulepszyć swój uniksowy stos. Jego zespół był odpowiedzialny za aktualizację obszaru użytkownika i nic dziwnego, że obszar użytkownika MacOS został zaktualizowany do najnowszych wersji dostępnych na BSD.

Apple w pewnym momencie zmieniło Macha z 2.5 na 3.0, ale zdecydowało się nie stosować podejścia opartego na mikro-jądrze i zamiast tego utrzymało wszystko w toku. Nigdy nie byłem w stanie potwierdzić, czy Apple użył Lites, zatrudnił skandynawskiego hakera, czy też przyjęli 4.4 lite jako swój system operacyjny. Podejrzewam, że tak, ale już przeszedłem na Linuksa i przestałem śledzić świat BSD / Mach.

Pod koniec lat 90. pojawiła się plotka, że ​​Avie w Apple próbował zatrudnić Linusa (który był już sławny w tym momencie) do pracy nad swoim dzieckiem, ale Linus postanowił kontynuować pracę nad Linuksem.

Poza historią ta strona opisuje obszar użytkownika i jądro Mach / Unix:

http://developer.apple.com/mac/library/documentation/Darwin/Conceptual/KernelProgramming/Architecture/Architecture.html#//apple_ref/doc/uid/TP30000905-CH1g-CACDAEDC

Znalazłem tę grafikę historii OSX: alternatywny tekst

miguel.de.icaza
źródło
Rozumiałem, że głównym powodem, dla którego Stallman w FSF dążył do Macha, nie była wydajność, ale łatwość użycia debugera: mógł użyć debugera do debugowania serwerów Macha znacznie łatwiej niż debugowania kodu działającego w przestrzeni jądra. Chociaż może to wydajność przekonała go, że jest to realny sposób na wdrożenie.
skiphoppy
4
Jeśli naprawdę chcesz zobaczyć prawdziwe mikrojądro w akcji, wypróbuj QNX. W QNX4 jądro miało tylko 32 K bajtów i obsługiwało tylko przekazywanie wiadomości, planowanie CPU i przerwania. Wszystkie inne części systemu operacyjnego QNX można było zamienić bez wyłączania lub ponownego uruchamiania systemu, i był on wyjątkowo solidny. Kiedyś istniał emulator okna dla QNX o nazwie Willows, który uruchamiał aplikacje Windows szybciej niż rodzime okna. Chociaż nie ma to nic wspólnego z OS-X per se, QNX udowodnił, że mikrojądra są rzeczywiście wykonalne, jeśli są odpowiednio wykonane.
20
obraz nie jest już dostępny.
Hermann Ingjaldsson,
7
Obraz nadal niedostępny
Sildoreth,
Steve Jobs zaoferował Linusowi pracę w 2000 roku. Linus mówi o tym tutaj. wired.com/2012/03/mr-linux/all/1
Alistair McMillan
24

Po stronie Uniksa OS X jest potomkiem NeXTSTEP , który został wyprowadzony z 4.3BSD z podstawowymi częściami jądra zamienionymi na Mach .

Interfejs API programowania NeXT, który ostatecznie został nazwany OpenStep , jest podstawą dzisiejszego API Cocoa dla OS X. Dwa API znacznie się różniły od czasu zakupu NeXT w Apple w 1997 roku, choć trwają starania o zapewnienie kompatybilnych z API open source klonów Cocoa .

Dodaj do tego klasyczny interfejs API kompatybilności z MacOS, zwany Carbon, i masz interfejs programowania OS X.

(System OS X oferuje wiele innych funkcji, ale oprócz tego są to aplikacje: Finder, narzędzia użytkownika BSD i GNU itp.)

Jeśli chodzi o ideę jądra FreeBSD, jest to trochę poprawne, ale jest to niewyszukany sposób, aby na to spojrzeć. Oryginalne jądro pochodzi, jak powiedziałem, z NeXT, który skompilował swoje pierwsze jądro z 4.3BSD i Macha. Oznacza to, że zarówno FreeBSD, jak i NeXTSTEP współdzielą część kodu przez 4.3BSD.

Mem, że OS X opiera się na FreeBSD, ma dwa nowsze źródła. Po pierwsze, Apple nadal pożycza innowacje ze świata BSD, zwykle FreeBSD. Po drugie, Apple zatrudnił Jordana Hubbarda, współzałożyciela projektu FreeBSD, wkrótce po wydaniu pierwszej publicznej wersji OS X. Pracował dla Apple do czerwca 2013 r.

Warren Young
źródło
0

Kiedy powiedziano Ci, że OSX ma swój własny smak Uniksa, są one technicznie poprawne.

Elementy BSD + z NeXTSTEP + Apple Tweaks = DARWIN

Innymi słowy. Zamawianie tylko Hot Fudge / lodów (BSD) dodaj Orzechy (NeXTStep) plus bicz śmietany i wiśni (dodatek Apple i poprawki) = A Hot Fudge Sundae (Darwin)

Ale BSD jest bazą, do której inni zostali dodani i dlatego wiele z BSD będzie działać w Darwin (z drobnymi poprawkami tu i tam)

Tweety Bird
źródło