W jakich językach są napisane Windows, Mac OS X i Linux?


273

Zastanawiałem się tylko, kto wie, z jakich języków programowania składają się Windows, Mac OS X i Linux oraz jakie języki są używane w każdej części systemu operacyjnego (tj. Jądro, architektura wtyczek, komponenty GUI itp.).

Zakładam, że dla każdego istnieje wiele języków i oczywiście wiem, że jądro Linuksa jest napisane w C.

Zgaduję, że Mac OS X zawiera dużo kodu Objective-C, ponieważ jest to język Apple pochodzący z NeXT.

Windows, słyszałem, że zawiera C, C ++ i Intel Assembly. Czy Linux lub Mac OS zawiera kod asemblera?

Ponadto, czy istnieją języki skryptowe, takie jak Ruby, Python itp., Używane przez programistów systemu operacyjnego do tworzenia skryptów części systemu operacyjnego? Jakie części systemu operacyjnego zostałyby napisane w każdym języku?



Ta wymiana SO może pomóc odpowiedzieć na ostatnią część pytania.
Bikramjeet Singh

Odpowiedzi:


269
  • Windows: C ++, jądro znajduje się w C.
  • Mac: Cel C, jądro jest w C (podsystem IO PnP to Embedded C ++)
  • Linux: większość rzeczy jest w C, wiele aplikacji dla użytkowników jest w Pythonie, KDE to wszystko w C ++

Wszystkie jądra będą również korzystać z kodu asemblera.


13
Powinienem dodać, że Gnome jest również w przybliżeniu C.
Nathan Osman

17
Gnome flirtował również z C # (Mono).
Hristo Iliev,

6
Wierzę, że jądro Linuksa ma również asembler.
GL2014,

9
To prawda, że ​​każde jądro będzie miało przynajmniej jakiś asembler
Ana Betts,

4
Aby wszystko było jasne - podsystem IOKit jądra Apple (dla sterowników) używa (ograniczony podzbiór) C ++. I na wszystkich 3, tj. Windows, Mac i Linux, wiele najważniejszych aplikacji dla użytkowników jest napisanych w C lub C ++. Podobno MS próbował na przykład powtórzyć Office w .NET, ale wrócił do C ++. Jądro Linux używa wielu idiomów podobnych do C ++, ale ręcznie ugotowanych razem w C, np. Dziedziczenie w kodzie sterownika.
Erik Alapää

94

Linux: C. Niektóre części w zespole.

[...] Przeważnie jest w C, ale większość ludzi nie nazwałaby tego, co piszę. Wykorzystuje każdą możliwą cechę 386, jaką mogłem znaleźć, ponieważ był to również projekt, aby nauczyć mnie o 386. Jak już wspomniano , używa MMU zarówno do stronicowania (jeszcze nie na dysk), jak i do segmentacji. To segmentacja sprawia, że ​​NAPRAWDĘ jest zależny od 386 (każde zadanie ma segment 64 MB na kod i dane - maksymalnie 64 zadania w 4 Gb. Każdy, kto potrzebuje więcej niż 64 Mb / zadanie - twarde pliki cookie). [...] Niektóre z moich plików „C” (konkretnie mm.c) są prawie tak samo asemblerem jak C. [...] W przeciwieństwie do minix, zdarza mi się również lubić przerwania, więc przerwania są obsługiwane bez próby ukrywania się powód za nimi. (Źródło)

Mac OS X: Kakao głównie w Objective-C. Jądro napisane w C, niektóre części w zespole.

Mac OS X, w warstwie jądra, jest przeważnie starszym, wolnym systemem operacyjnym o nazwie BSD (konkretnie Darwin, rodzaj hybrydy BSD, Macha i kilku innych rzeczy) ... prawie całkowicie C, z odrobiną wrzuconego asemblera. (Źródło)

Znaczna część kakao jest zaimplementowana w Objective-C, języku zorientowanym obiektowo, który jest kompilowany do działania z niewiarygodną prędkością, ale wykorzystuje naprawdę dynamiczne środowisko uruchomieniowe, dzięki czemu jest wyjątkowo elastyczny. Ponieważ Objective-C jest nadzbiorem C, łatwo jest mieszać C, a nawet C ++ w swoich aplikacjach Cocoa. (Źródło)

Windows: C, C ++, C #. Niektóre części w asemblerze.

Używamy prawie całkowicie C, C ++ i C # dla Windows. Niektóre obszary kodu są ręcznie dostrojone / ręcznie napisane. (Źródło)

Unix: C. Niektóre części w zespole. (Źródło)


3
Podsystem sterowników w Darwin (IOKit) w dużej mierze opiera się na modelu obiektowym podobnym do modelu COM napisanym w podzbiorze C ++.
Hristo Iliev

@Tahlor tak. Jak napisać niskopoziomową rzecz, taką jak jądro w VB, skoro nie ma nawet operatora do przesuwania bitów? Tak powiedział Raymond Chen . Aplikacje Windows są różne
phuclv

15

Mac OS X używa dużych ilości C ++ w niektórych bibliotekach, ale nie jest narażony, ponieważ boją się złamania ABI.


13
Co? Połowa programów i tak przestaje działać przy każdym nowym wydaniu.
kinokijuf

7
Czy mógłbyś podać jakieś cytowanie dla stwierdzenia „Mac OS X używa dużych ilości C ++ w niektórych bibliotekach” ? Po prostu trudno mi uwierzyć na słowo! Przepraszam, że jestem sceptyczny.
Anish Ramaswamy

5
@AnishRamaswamy Look w IOKit, WebKiti GLKit. Rzuć też okiem na dyld. Są bardzo ciężkie w C ++.
Maxthon Chan

1
Jestem pewien, że jądro OSX to C, a nie C ++, w rzeczywistości wszystkie systemy operacyjne, z którymi się spotkałem, mają
jądro

10

Rozumiem, że to stary post, ale Windows zdecydowanie nie jest napisany w C ++. Jest w nim dużo C ++, ale to, co technicznie określamy jako system operacyjny, nie jest w C ++. Windows API, jądro systemu Windows (oba są w istocie tym, czym jest system operacyjny) są napisane w C. Przed laty dostałem wyciek kodu dla Windows 2000 i Windows XP. Kod nie był wystarczająco kompletny, aby skompilować jądro lub API, ale byliśmy w stanie skompilować poszczególne programy i usługi. Na przykład udało nam się skompilować Notepad.exe, mspaint.exe i usługę spoolsv.exe (bufor wydruku). Wszystkie napisane w C. Nie szukałem ponownie, ale jestem pewien, że wyciek kodu nadal istnieje, ponieważ pliki torrent, które mogą być nadal dostępne.


9

Windows: głównie C i C ++, niektóre C #


1
.NET jest dostarczany z systemem Windows. Wiele .NET jest w C #.
Jonathan Parker

Krążą plotki, że w przyszłych wersjach systemu Windows (być może Windows 8) część kodu C ++ zostanie zastąpiona przez C # / .NET.
Jonathan Parker

Udało im się już zarządzać działającym systemem operacyjnym (prawie) całkowicie w języku C #. To się nazywa Osobliwość. research.microsoft.com/en-us/projects/singularity
Randolpho

Luc M: Tak, w systemie Windows jest kod C #. Grzebać w kółko, a znajdziesz to. .Net jest dostarczany z systemem operacyjnym, ale nie oznacza to, że system operacyjny został napisany przy użyciu .Net. A Windows nie jest osobliwością. Istnieje ogromna różnica między prototypem badawczym a prawdziwym systemem operacyjnym.
Przywróć Monikę Larry Osterman

2
@ 1800Information - C # kompiluje się do kodu maszynowego Stąd JIT kompiluje się do kodu maszynowego po uruchomieniu? Myślę, że jesteś zdezorientowany. Tam jest bajtecode i jest wirtualna maszyna: en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf

9
  • Windows: C ++
  • linux: C
  • mac: Cel C
  • Android: JAVA, C, C ++
  • Solaris: C, C ++
  • iOS 7: Objective-C, Swift, C, C ++

Android napisany jest w Javie? Naprawdę?
nirvanaswap


3
Dyskusja dotyczy systemu operacyjnego. Nie można zbudować systemu operacyjnego bez systemowego języka programowania. Programowanie systemu za pomocą Java nie jest możliwe.
Jam Risser

Tak Niektóre części systemu można zbudować w Javie, a niektóre przykłady są już obecne, takie jak JavaOS, chociaż nie powiodło się. Nie mówię, że możesz zbudować system operacyjny ze 100% javą.
Shukant Pal

2
@JRRisser Android używa jądra Linux, które znajduje się w C. System, prawie do najgłębszych warstw, jest napisany w Javie. Dalvik VM, która jest wirtualną maszyną Java napisaną przez Google, jest w C lub C ++.
peterh - Przywróć Monikę

7

Łał!!! 9 lat pytania, ale właśnie natknąłem się na serię wewnętrznych artykułów na temat historii wiersza poleceń systemu Windows i myślę, że część z nich może być istotna z punktu widzenia Windows:

Dla tych, którzy dbają o takie rzeczy: Wielu pytało, czy Windows jest napisany w C czy C ++. Odpowiedź jest taka, że ​​- pomimo projektowania obiektowego NT - jak większość systemów operacyjnych, Windows jest prawie całkowicie napisany w „C”. Czemu? C ++ wprowadza koszty związane z powierzchnią pamięci i kosztami wykonania kodu. Nawet dzisiaj ukryte koszty kodu napisanego w C ++ mogą być zaskakujące, ale już pod koniec lat 90. XX wieku, kiedy pamięć kosztowała ~ 60 USD / MB (tak… 60 USD za MEGABYTE!), koszt ukrytej pamięci w tabelach itp. był znaczny. Ponadto koszt pośredniej metody wywoływania metody wirtualnej i dereferencji obiektów może spowodować bardzo znaczące kary za wydajność i skalowanie kodu C ++ w tym czasie. Podczas gdy nadal należy zachować ostrożność, narzut związany z wydajnością współczesnego C ++ na współczesnych komputerach jest znacznie mniejszy i jest często akceptowalnym kompromisem, biorąc pod uwagę jego bezpieczeństwo, czytelność i łatwość konserwacji ... dlatego jesteśmy stopniowe uaktualnianie kodu konsoli do nowoczesnego C ++.


6

Masz rację MacOSX ma Objective-C w rdzeniu.

Windows C ++

Linux C

Jeśli chodzi o języki skryptowe, nie, mają one dość wysoki poziom.


7
Windows w C: jądro, sterowniki, API. Sądzę, że tylko aplikacje i narzędzia systemowe w C ++. Bardziej jasne jest więc powiedzenie tylko C
abatishchev

5

Czytałem lub słyszałem, że Mac OS X jest napisany głównie w Objective-C z niektórymi częściami niższego poziomu, takimi jak jądro i sterowniki urządzeń sprzętowych napisanymi w C. Wierzę, że Apple „je (s) własne pożywienie dla psów ”, co oznacza, że ​​piszą Mac OS X przy użyciu własnych narzędzi programistycznych Xcode . GCC (GNU Compiler Collection) kompilator, linker jest narzędziem wiersza poleceń systemu UNIX, że Xcode używana przez większość jego kompilacji i / lub łączenie plików wykonywalnych. Wśród innych możliwych języków wiem, że GCC kompiluje kod źródłowy z języków C, Objective-C, C ++ i Objective-C ++.


4

Jądro Linux jest głównie napisane w C (i trochę w języku asemblera, wyobrażam sobie), ale niektóre z ważnych narzędzi (programów) w przestrzeni użytkownika to skrypty powłoki napisane w języku skryptowym Bash. Poza tym trudno jest zdefiniować „Linuksa”, ponieważ w zasadzie budujesz system Linux, wybierając odpowiednie części i łącząc je, a zależnie od tego, czego chce pojedynczy użytkownik Linuksa, możesz zaangażować praktycznie każdy język. (Jak powiedział Paul, Python i C ++ odgrywają ważną rolę)


3

Jako dodatek do rdzenia Mac OS X, Finder nie został napisany w Objective-C przed Snow Leopard. W Snow Leopard został napisany w Cocoa, Objective-C



1

Windows oczywiście nie jest napisany w C # (!)

Po prostu zobacz kod źródłowy systemu Windows, a zobaczysz ...


36
„Po prostu zobacz kod źródłowy systemu Windows”, jeśli jesteś jednym z niewielu, którzy mogą / mogą to zrobić ...
Joachim Sauer

1

4
Części kodu systemu Windows wyciekły wiele lat temu. Zobacz na przykład ten stary wątek: < kuro5hin.org/story/2004/2/15/71552/7795 >. :)
zrelaksuj się
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.