In welchen Sprachen sind Windows, Mac OS X und Linux geschrieben?

273

Ich habe mich nur gefragt, wer weiß, aus welchen Programmiersprachen Windows, Mac OS X und Linux bestehen und welche Sprachen für jeden Teil des Betriebssystems verwendet werden (z. B. Kernel, Plug-In-Architektur, GUI-Komponenten usw.).

Ich gehe davon aus, dass es für jede Sprache mehrere Sprachen gibt und ich weiß natürlich, dass der Linux-Kernel in C geschrieben ist.

Ich vermute hier völlig, dass Mac OS X viel Objective-C-Code enthält, da es sich um Apples Sprache handelt, die von NeXT abgeleitet ist.

Ich habe gehört, dass Windows C, C ++ und Intel Assembly enthält. Enthält Linux oder Mac OS Assembly-Code?

Gibt es auch Skriptsprachen wie Ruby, Python usw., die von den Betriebssystementwicklern zum Skripten von Teilen des Betriebssystems verwendet werden? Welche Teile des Betriebssystems würden in jeder Sprache geschrieben?

Brock Woolf
quelle
Dieser SO-Austausch kann helfen, den allerletzten Teil Ihrer Frage zu beantworten.
Bikramjeet Singh

Antworten:

269
  • Windows: C ++, Kernel ist in C.
  • Mac: Ziel C, Kernel ist in C (IO PnP-Subsystem ist Embedded C ++)
  • Linux: Die meisten Dinge sind in C, viele Userland-Apps sind in Python, KDE ist alles C ++

Alle Kernel verwenden auch Assembler-Code.

Ana Betts
quelle
13
Ich sollte hinzufügen, dass Gnome auch so ziemlich C ist.
Nathan Osman
17
Gnome flirtete auch mit C # (Mono).
Hristo Iliev
6
Ich glaube, der Linux-Kernel hat auch Assembler.
GL2014
9
Es stimmt, jeder Kernel wird mindestens einen Assembler haben
Ana Betts
4
Um die Dinge kristallklar zu machen - das IOKit-Subsystem des Apple-Kernels (für Treiber) verwendet (eine eingeschränkte Teilmenge von) C ++. Und auf allen drei, dh Windows, Mac und Linux, sind viele der wichtigsten Userland-Anwendungen entweder in C oder C ++ geschrieben. Angeblich hat MS beispielsweise versucht, Office in .NET zu wiederholen, ist jedoch zu C ++ zurückgekehrt. Und der Linux-Kernel verwendet viele C ++ - ähnliche Redewendungen, die jedoch in C von Hand zusammengestellt wurden, z. B. Vererbung im Treibercode.
Erik Alapää
94

Linux: C. Einige Teile in Montage.

[...] Es ist meistens in C, aber die meisten Leute würden nicht nennen, was ich schreibe. Es verwendet alle denkbaren Merkmale des 386, die ich finden konnte, da es auch ein Projekt war, um mich über den 386 zu unterrichten. Wie bereits erwähnt verwendet eine MMU sowohl für das Paging (noch nicht auf der Festplatte) als auch für die Segmentierung. Es ist die Segmentierung, die es WIRKLICH 386 abhängig macht (jede Aufgabe hat ein 64-MB-Segment für Code und Daten - maximal 64 Aufgaben in 4 GB. Jeder, der mehr als 64 MB / Aufgabe benötigt - harte Cookies). [...] Einige meiner "C" -Dateien (speziell mm.c) sind fast so viele Assembler wie C. [...] Im Gegensatz zu Minix habe ich auch LIKE-Interrupts, sodass Interrupts behandelt werden, ohne zu versuchen, sie zu verbergen der Grund hinter ihnen. (Quelle)

Mac OS X: Kakao hauptsächlich in Objective-C. Kernel in C geschrieben, einige Teile in Assembly.

Mac OS X auf der Kernel-Ebene ist meistens ein älteres, freies Betriebssystem namens BSD (insbesondere Darwin, eine Art Hybrid aus BSD, Mach und ein paar anderen Dingen) ... fast ausschließlich C, mit ein bisschen des Assemblers geworfen. (Quelle)

Ein Großteil von Cocoa ist in Objective-C implementiert, einer objektorientierten Sprache, die so kompiliert wurde, dass sie mit unglaublicher Geschwindigkeit ausgeführt werden kann, jedoch eine wirklich dynamische Laufzeit verwendet, die sie einzigartig flexibel macht. Da Objective-C eine Obermenge von C ist, ist es einfach, C und sogar C ++ in Ihre Cocoa-Anwendungen zu mischen. (Quelle)

Windows: C, C ++, C #. Einige Teile im Assembler.

Wir verwenden fast ausschließlich C, C ++ und C # für Windows. Einige Codebereiche sind handabgestimmte / handgeschriebene Assemblierungen. (Quelle)

Unix: C. Einige Teile in Montage. (Quelle)

Pacerier
quelle
3
Das Treibersubsystem in Darwin (IOKit) basiert stark auf einem COM-ähnlichen Objektmodell, das in einer Teilmenge von C ++ geschrieben ist.
Hristo Iliev
@ Tahlor ja. Wie kann man ein Low-Level-Ding wie einen Kernel in VB schreiben, wenn es nicht einmal einen Operator für die Bitverschiebung gibt? Das hat Raymond Chen gesagt . Windows Apps sind anders
phuclv
15

Mac OS X verwendet in einigen Bibliotheken große Mengen an C ++, wird jedoch nicht verfügbar gemacht, da sie befürchten, dass der ABI beschädigt wird.

Alex seltsam
quelle
13
Was? Die Hälfte der Programme funktioniert ohnehin nicht mehr bei jeder neuen Version.
Kinokijuf
7
Könnten Sie bitte eine Art Zitat für die Anweisung "Mac OS X verwendet große Mengen an C ++ in einigen Bibliotheken" angeben? Es fällt mir nur schwer, einfach dein Wort dafür zu nehmen! Es tut mir leid, dass ich skeptisch bin.
Anish Ramaswamy
5
@AnishRamaswamy Blick in IOKit, WebKitund GLKit. Werfen Sie auch einen Blick auf dyld. Die sind sehr C ++ schwer.
Maxthon Chan
1
Ich bin sicher, dass der OSX-Kernal C und nicht C ++ ist. Tatsächlich haben alle Betriebssysteme, auf die ich
gestoßen
10

Ich verstehe, dass dies ein alter Beitrag ist, aber Windows ist definitiv nicht in C ++ geschrieben. Es gibt viel C ++, aber was wir technisch als Betriebssystem definieren, ist nicht in C ++. Die Windows-API, der Windows-Kernel (beide sind im Wesentlichen das, was ein Betriebssystem ist) sind in C geschrieben. Vor Jahren erhielt ich einen durchgesickerten Code für Windows 2000 und Windows XP. Der Code war bei weitem nicht vollständig genug, um den Kernel oder die API zu kompilieren, aber wir konnten einzelne Programme und Dienste kompilieren. Zum Beispiel konnten wir Notepad.exe, mspaint.exe und den Dienst spoolsv.exe (Druckerspooler) erfolgreich kompilieren. Alles in C geschrieben. Ich habe nicht noch einmal nachgesehen, aber ich bin sicher, dass durchgesickerter Code immer noch als Torrent-Dateien da draußen überlebt, die möglicherweise noch verfügbar sind.

Herzog Bischof
quelle
9

Windows: Meistens C und C ++, einige C #

ReinstateMonica Larry Osterman
quelle
1
.NET wird mit Windows ausgeliefert. Viel .NET ist in C #.
Jonathan Parker
Es gibt Gerüchte, dass in zukünftigen Versionen (möglicherweise Windows 8) von Windows C ++ - Code durch C # /. NET ersetzt wird.
Jonathan Parker
Sie haben bereits ein funktionierendes Betriebssystem (fast) vollständig in C # verwaltet. Es heißt Singularität. research.microsoft.com/en-us/projects/singularity
Randolpho
Luc M: Ja, es gibt C # -Code in Windows. Stöbern Sie herum und Sie werden es finden. .Net wird mit dem Betriebssystem ausgeliefert, bedeutet jedoch nicht, dass das Betriebssystem mit .Net geschrieben wurde. Und Windows ist keine Singularität. Es gibt einen großen Unterschied zwischen einem Forschungsprototyp und einem echten Betriebssystem.
ReinstateMonica Larry Osterman
2
@ 1800Information - C # kompiliert von dort zu Maschinencode JIT kompiliert zu Maschinencode, wenn es ausgeführt wird? Ich denke du bist der Verwirrte. Es gibt Bytecode und es gibt eine virtuelle Maschine: en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf
9
  • Windows: C ++
  • Linux: C.
  • mac: Ziel C.
  • Android: JAVA, C, C ++
  • Solaris: C, C ++
  • iOS 7: Ziel-C, Swift, C, C ++
Sonsha
quelle
Android ist in Java geschrieben? "Ja wirklich?"
Nirvanaswap
3
Android: Java (Benutzeroberfläche). Quelle: en.wikipedia.org/wiki/Android_(operating_system)
Nitesh Borad
3
In der Diskussion geht es um das Betriebssystem. Ein Betriebssystem kann nicht ohne eine Systemprogrammiersprache erstellt werden. Mit Java ist keine Systemprogrammierung möglich.
Jam Risser
Yah. Einige Teile eines Systems können in Java erstellt werden, und einige Beispiele wie JavaOS sind bereits vorhanden, obwohl dies nicht erfolgreich war. Ich sage nicht, dass Sie Betriebssystem mit 100% Java erstellen können.
Shukant Pal
2
@ JamRisser Android verwendet den Linux-Kernel in C. Das System ist fast bis zu den tiefsten Schichten in Java geschrieben. Die Dalvik VM, eine von Google geschriebene Java Virtual Machine, ist in C oder C ++.
Peter - Wiedereinsetzung Monica
7

Beeindruckend!!! 9 Jahre Frage, aber ich bin gerade auf eine Reihe interner Artikel zum Windows-Befehlszeilenverlauf gestoßen, und ich denke, ein Teil davon könnte für die Windows-Seite der Frage relevant sein:

Für diejenigen, die sich für solche Dinge interessieren: Viele haben gefragt, ob Windows in C oder C ++ geschrieben ist. Die Antwort ist, dass Windows - trotz des objektbasierten Designs von NT - wie die meisten Betriebssysteme fast vollständig in "C" geschrieben ist. Warum? C ++ verursacht Kosten in Bezug auf den Speicherbedarf und den Aufwand für die Codeausführung. Noch heute können die versteckten Kosten für in C ++ geschriebenen Code überraschend sein, aber in den späten 1990er Jahren, als der Speicher ~ 60 USD / MB kostete (ja… 60 USD pro MEGABYTE!) waren die versteckten Speicherkosten von vtables etc. signifikant. Darüber hinaus könnten die Kosten für die Indirektion von Aufrufen virtueller Methoden und die Objekt-Dereferenzierung zu sehr erheblichen Leistungs- und Skalierungseinbußen für C ++ - Code führen. Obwohl man immer noch vorsichtig sein muss, ist der Leistungsaufwand von modernem C ++ auf modernen Computern viel weniger besorgniserregend und angesichts seiner Vorteile in Bezug auf Sicherheit, Lesbarkeit und Wartbarkeit oft ein akzeptabler Kompromiss. Deshalb sind wir es Kontinuierliches Upgrade des Konsolencodes auf modernes C ++.

adem
quelle
6

Sie haben Recht, MacOSX hat Objective-C im Kern.

Windows C ++

Linux C.

Über die Skriptsprachen, nein, sie sind ziemlich hoch.

OscarRyz
quelle
7
Windows in C: Kernel, Treiber, API. Ich denke, nur Systemanwendungen und Tools in C ++. Es ist also klarer, nur C
abatishchev
5

Ich habe gelesen oder gehört, dass Mac OS X hauptsächlich in Objective-C geschrieben ist, wobei einige der untergeordneten Teile wie der Kernel und Hardware-Gerätetreiber in C geschrieben sind. Ich glaube, dass Apple sein eigenes Hundefutter "isst" ", was bedeutet, dass sie Mac OS X mit ihren eigenen Xcode Developer Tools schreiben . Der GCC- Compiler-Linker (GNU Compiler Collection) ist das Unix-Befehlszeilentool, das xCode zum Kompilieren und / oder Verknüpfen von ausführbaren Dateien verwendet. Ich weiß, dass GCC unter anderem Quellcode aus den Sprachen C, Objective-C, C ++ und Objective-C ++ kompiliert.

Patrick Cassell
quelle
4

Der Linux-Kernel ist meistens in C geschrieben (und ein bisschen Assemblersprache, wie ich mir vorstellen kann), aber einige der wichtigen Userspace-Dienstprogramme (Programme) sind Shell-Skripte, die in der Bash-Skriptsprache geschrieben sind. Darüber hinaus ist es schwierig, "Linux" zu definieren, da Sie im Grunde genommen ein Linux-System erstellen, indem Sie die gewünschten Teile auswählen und zusammenfügen. Je nachdem, was ein einzelner Linux-Benutzer wünscht, können Sie so ziemlich jede Sprache einbeziehen. (Wie Paul sagte, spielen Python und C ++ wichtige Rollen)

David Z.
quelle
3

Als Ergänzung zum Kern von Mac OS X war Finder vor Snow Leopard noch nicht in Objective-C geschrieben worden. In Snow Leopard wurde es in Cocoa, Objective-C geschrieben

Çağatay Gürtürk
quelle
1

Windows ist offensichtlich nicht in C # (!) Geschrieben

Sehen Sie einfach den Quellcode von Windows und Sie werden sehen ...


quelle
36
"Sehen Sie einfach den Quellcode von Windows", wenn Sie einer der wenigen sind, die das dürfen / können ...
Joachim Sauer
1
Es gibt viele Windows-Quellcode-Teile in Torrents, auch ein paar Bewertungen davon
abatishchev
4
Teile des Windows-Codes sind vor Jahren durchgesickert. Siehe zum Beispiel diesen alten Thread: < kuro5hin.org/story/2004/2/15/71552/7795 >. :)
Entspannen Sie