In quali lingue sono scritti Windows, Mac OS X e Linux?


281

Mi stavo solo chiedendo chissà da quali linguaggi di programmazione sono costituiti Windows, Mac OS X e Linux e quali sono i linguaggi utilizzati per ogni parte del sistema operativo (es .: kernel, architettura plug-in, componenti GUI, ecc.).

Presumo che ci siano più lingue per ognuna e ovviamente so che il kernel Linux è scritto in C.

Immagino assolutamente che Mac OS X contenga molto codice Objective-C poiché è il linguaggio di Apple derivato da NeXT.

Windows, ho sentito, contiene C, C ++ e Intel Assembly. Linux o Mac OS contengono codice Assembly?

Inoltre, esistono linguaggi di scripting come Ruby, Python, ecc. Utilizzati dagli sviluppatori del sistema operativo per lo scripting di parti del sistema operativo? Quali parti del sistema operativo verrebbero scritte in ciascuna lingua?



Questo scambio di SO può aiutarti a rispondere all'ultima parte della tua domanda.
Bikramjeet Singh

Risposte:


279
  • Windows: C ++, il kernel è in C
  • Mac: Objective C, il kernel è in C (il sottosistema IO PnP è Embedded C ++)
  • Linux: la maggior parte delle cose sono in C, molte app userland sono in Python, KDE è tutto in C ++

Tutti i kernel useranno anche del codice assembly.


13
Dovrei aggiungere che anche Gnome è più o meno C.
Nathan Osman

17
Gnome ha anche flirtato con C # (Mono).
Hristo Iliev

6
Credo che anche il kernel Linux abbia l'assembler.
GL2014

9
È vero, ogni kernel avrà almeno un assemblatore
Ana Betts il

4
Per rendere le cose più chiare, il sottosistema IOKit del kernel Apple (per i driver) utilizza (un sottoinsieme limitato di) C ++. E su tutti e 3, cioè Windows, Mac e Linux, molte delle più importanti applicazioni userland sono scritte in C o C ++. Presumibilmente, ad esempio, MS ha provato a rifare Office in .NET ma è tornato a C ++. E il kernel di Linux usa molti idiomi simili al C ++ ma cucinati insieme in C, ad esempio l'ereditarietà nel codice del driver.
Erik Alapää

94

Linux: C. Alcune parti in assembly.

[...] È principalmente in C, ma la maggior parte delle persone non chiamerebbe ciò che scrivo C. Utilizza tutte le caratteristiche immaginabili del 386 che ho trovato, poiché era anche un progetto per insegnarmi il 386. Come già accennato , utilizza una MMU, sia per il paging (non ancora su disco) che per la segmentazione. È la segmentazione che lo rende DAVVERO 386 dipendente (ogni attività ha un segmento di 64 Mb per codice e dati - max 64 attività in 4 Gb. Chiunque abbia bisogno di più di 64 Mb / attività - cookie difficili). [...] Alcuni dei miei file "C" (in particolare mm.c) sono assemblatori quasi quanto C. [...] A differenza di minix, mi capitano anche interruzioni LIKE, quindi le interruzioni vengono gestite senza cercare di nasconderle il motivo dietro di loro. (Fonte)

Mac OS X: Cocoa principalmente in Objective-C. Kernel scritto in C, alcune parti in assembly.

Mac OS X, a livello del kernel, è per lo più un vecchio sistema operativo libero chiamato BSD (in particolare, è Darwin, una sorta di ibrido di BSD, Mach e poche altre cose) ... quasi interamente C, con un po ' di assemblatore lanciato. (Fonte)

Gran parte di Cocoa è implementata in Objective-C, un linguaggio orientato agli oggetti compilato per funzionare a velocità incredibile, ma che utilizza un runtime veramente dinamico che lo rende straordinariamente flessibile. Poiché Objective-C è un superset di C, è facile combinare C e persino C ++ nelle tue applicazioni Cocoa. (Fonte)

Windows: C, C ++, C #. Alcune parti in assembler.

Usiamo quasi interamente C, C ++ e C # per Windows. Alcune aree del codice sono sintonizzate a mano / assemblaggio scritto a mano. (Fonte)

Unix: C. Alcune parti in assembly. (Fonte)


3
Il sottosistema dei driver in Darwin (IOKit) si basa in gran parte su un modello a oggetti simile a COM scritto in un sottoinsieme di C ++.
Hristo Iliev

@Tahlor sì. Come puoi scrivere una cosa di basso livello come un kernel in VB quando non ha nemmeno un operatore per lo spostamento di bit? Questo è ciò che ha detto Raymond Chen . Le app di Windows sono diverse
phuclv

16

Mac OS X utilizza grandi quantità di C ++ all'interno di alcune librerie, ma non è esposto poiché temono che l'ABI si interrompa.


13
Che cosa? La metà dei programmi smette comunque di funzionare su ogni nuova versione.
kinokijuf

7
Potresti fornire una sorta di citazione per l' affermazione "Mac OS X utilizza grandi quantità di C ++ all'interno di alcune librerie" ? È solo che è difficile crederci sulla parola! Mi dispiace essere scettico.
Anish Ramaswamy

5
@AnishRamaswamy Guarda dentro IOKit, WebKite GLKit. Dai anche un'occhiata a dyld. Quelli sono molto pesanti in C ++.
Maxthon Chan

1
Sono sicuro che OSX Kernal sia C e non C ++, infatti tutti i sistemi operativi che ho incontrato hanno un
kernel

10

Capisco che questo sia un vecchio post ma Windows non è sicuramente scritto in C ++. C'è molto C ++ in esso, ma quello che definiamo tecnicamente come sistema operativo non è in C ++. L'API di Windows, il kernel di Windows (entrambi sono essenzialmente ciò che è un sistema operativo) sono scritti in C. Anni fa mi è stato dato del codice trapelato sia per Windows 2000 che per Windows XP. Il codice non era abbastanza completo per compilare il kernel o l'API, ma siamo stati in grado di compilare singoli programmi e servizi. Ad esempio, siamo stati in grado di compilare correttamente Notepad.exe, mspaint.exe e il servizio spoolsv.exe (spooler di stampa). Tutto scritto in C. Non ho cercato di nuovo ma sono sicuro che il codice trapelato sopravvive ancora come file torrent che potrebbero essere ancora disponibili.


9

Windows: principalmente C e C ++, alcuni C #


1
.NET viene fornito con Windows. Molto .NET è in C #.
Jonathan Parker

Ci sono voci che le versioni future (forse Windows 8) di Windows avranno del codice C ++ sostituito con C # /. NET.
Jonathan Parker

Hanno già gestito un sistema operativo funzionante (quasi) completamente in C #. Si chiama Singolarità. research.microsoft.com/en-us/projects/singularity
Randolpho

Luc M: Sì, c'è codice C # in Windows. Dai un'occhiata e lo troverai. .Net viene fornito con il sistema operativo, ma non significa che il sistema operativo sia scritto utilizzando .Net. E Windows non è Singularity. C'è un'enorme differenza tra un prototipo di ricerca e un vero sistema operativo.
ReinstateMonica Larry Osterman

2
@ 1800Information - C # compila in codice macchina da lì JIT compila in codice macchina quando viene eseguito? Penso che tu sia quello confuso. C'è il bytecode e c'è una macchina virtuale: en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf

8

Wow!!! 9 anni di domande, ma mi sono appena imbattuto in una serie di articoli interni sulla cronologia della riga di comando di Windows e penso che una parte di esso potrebbe essere rilevante dal lato Windows della domanda:

Per coloro che hanno a cuore queste cose: molti hanno chiesto se Windows è scritto in C o C ++. La risposta è che, nonostante il design basato su oggetti di NT, come la maggior parte dei sistemi operativi, Windows è quasi interamente scritto in "C". Perché? Il C ++ introduce un costo in termini di footprint di memoria e overhead di esecuzione del codice. Anche oggi, i costi nascosti del codice scritto in C ++ possono essere sorprendenti, ma alla fine degli anni '90, quando la memoria costava ~ $ 60 / MB (sì ... $ 60 per MEGABYTE!), il costo della memoria nascosta di vtables ecc. era significativo. Inoltre, il costo dell'indirizzamento indiretto delle chiamate al metodo virtuale e dell'annullamento dei riferimenti agli oggetti potrebbe comportare notevoli penalizzazioni in termini di prestazioni e scalabilità per il codice C ++ in quel momento. Sebbene sia ancora necessario fare attenzione, il sovraccarico delle prestazioni del C ++ moderno sui computer moderni è molto meno preoccupante ed è spesso un compromesso accettabile considerando i suoi vantaggi in termini di sicurezza, leggibilità e manutenibilità ... motivo per cui siamo aggiornare costantemente il codice della console al moderno C ++.


7
  • finestre: C ++
  • linux: C
  • mac: Obiettivo C
  • Android: JAVA, C, C ++
  • Solaris: C, C ++
  • iOS 7: Objective-C, Swift, C, C ++

Android è scritto in Java? Veramente?
nirvanaswap


3
La discussione riguarda il sistema operativo. Un sistema operativo non può essere creato senza un linguaggio di programmazione di sistema. Non è possibile eseguire la programmazione di sistema con Java.
Jam Risser

Yah. Alcune parti di un sistema possono essere costruite in Java e alcuni esempi sono già presenti come JavaOS, sebbene non abbia avuto successo. Non sto dicendo che puoi creare un sistema operativo con Java al 100%.
Shukant Pal

2
@JamRisser Android utilizza il kernel Linux, che si trova in C. Il sistema, quasi fino agli strati più profondi, è scritto in Java. La Dalvik VM, che è una macchina virtuale java scritta da Google, è in C o C ++.
peterh - Ripristina Monica il

6

Hai ragione MacOSX ha Objective-C nel core.

Windows C ++

Linux C

Per quanto riguarda i linguaggi di scripting, no, sono praticamente di alto livello.


7
Windows in C: kernel, driver, API. Solo applicazioni e strumenti di sistema in C ++, immagino. Quindi è più chiaro dire solo C
abatishchev

5

Ho letto o sentito che Mac OS X è scritto principalmente in Objective-C con alcune delle parti di livello inferiore, come il kernel e i driver dei dispositivi hardware scritti in C. Credo che Apple "mangi il proprio cibo per cani ", il che significa che scrivono Mac OS X utilizzando i propri strumenti per sviluppatori Xcode . Il compilatore-linker GCC (GNU Compiler Collection) è lo strumento a riga di comando unix che xCode ha utilizzato per la maggior parte della sua compilazione e / o collegamento di eseguibili. Tra gli altri linguaggi possibili, so che GCC compila il codice sorgente dai linguaggi C, Objective-C, C ++ e Objective-C ++.


4

Il kernel Linux è scritto principalmente in C (e un po 'di linguaggio assembly, immagino), ma alcune delle importanti utilità (programmi) dello spazio utente sono script di shell scritti nel linguaggio di scripting Bash. Oltre a ciò, è un po 'difficile definire "Linux" dal momento che fondamentalmente costruisci un sistema Linux scegliendo i pezzi che vuoi e mettendoli insieme, ea seconda di ciò che un singolo utente Linux vuole, puoi coinvolgere praticamente qualsiasi linguaggio. (Come ha detto Paul, Python e C ++ svolgono ruoli importanti)


3

Come aggiunta al nucleo di Mac OS X, Finder non era stato scritto in Objective-C prima di Snow Leopard. In Snow Leopard è stato scritto in Cocoa, Objective-C



1

Windows ovviamente non è scritto in C # (!)

Guarda semplicemente il codice sorgente di Windows e vedrai ...


37
"Guarda semplicemente il codice sorgente di Windows" se sei uno dei pochi a cui è consentito / in grado di farlo ...
Joachim Sauer

1
Ci sono molte parti di codice sorgente di Windows in Torrents, anche alcune recensioni di esso
abatishchev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.