Em quais idiomas o Windows, Mac OS X e Linux são escritos?


273

Fiquei imaginando quem sabe de que linguagens de programação Windows, Mac OS X e Linux são constituídos e quais linguagens são usadas para cada parte do sistema operacional (ou seja: Kernel, arquitetura de plug-in, componentes da GUI, etc.).

Eu assumo que existem vários idiomas para cada um e, obviamente, eu sei que o kernel do Linux está escrito em C.

Estou totalmente adivinhando aqui que o Mac OS X contém muito código Objective-C, pois é o idioma da Apple derivado do NeXT.

Ouvi dizer que o Windows contém C, C ++ e Intel Assembly. O Linux ou Mac OS contém algum código de montagem?

Além disso, existem linguagens de script como Ruby, Python, etc, usadas pelos desenvolvedores do SO para criar partes do SO? Quais partes do sistema operacional seriam escritas em cada idioma?



Essa troca de SO pode ajudar a responder a última parte da sua pergunta.
Bikramjeet Singh

Respostas:


269
  • Windows: C ++, o kernel está em C
  • Mac: Objetivo C, o kernel está em C (o subsistema IO PnP é Embedded C ++)
  • Linux: A maioria das coisas está em C, muitos aplicativos de usuário estão em Python, o KDE é tudo em C ++

Todos os kernels também usarão algum código de montagem.


13
Devo acrescentar que o Gnome também é C.
Nathan Osman

17
O Gnome também flertava com C # (Mono).
Hristo Iliev

6
O kernel do linux também tem montador, eu acredito.
GL2014

9
É verdade, cada núcleo terá pelo menos alguns assembler
Ana Betts

4
Para deixar tudo bem claro - o subsistema IOKit do kernel da Apple (para drivers) usa (um subconjunto restrito de) C ++. E em todos os três, ou seja, Windows, Mac e Linux, muitos dos aplicativos mais importantes para o usuário são escritos em C ou C ++. Alegadamente, por exemplo, a MS tentou refazer o Office no .NET, mas voltou ao C ++. E o kernel do linux usa muitos idiomas semelhantes a C ++, mas é preparado manualmente em C, por exemplo, herança no código do driver.
Erik Alapää 23/02

94

Linux: C. Algumas peças em montagem.

[...] É principalmente em C, mas a maioria das pessoas não chama o que eu escrevo C. Ele usa todos os recursos imagináveis ​​dos 386 que pude encontrar, pois também foi um projeto para me ensinar sobre os 386. Como já mencionado , ele usa uma MMU, para paginação (ainda não em disco) e segmentação. É a segmentação que o torna REALMENTE dependente de 386 (cada tarefa possui um segmento de 64Mb para código e dados - máx. 64 tarefas em 4Gb. Qualquer pessoa que precise de mais de 64Mb / cookies resistentes a tarefas). [...] Alguns dos meus arquivos "C" (especificamente mm.c) são quase tão montadores quanto C. [...] Ao contrário do minix, também gosto de interrupções, então as interrupções são tratadas sem tentar ocultar a razão por trás deles. (Fonte)

Mac OS X: cacau principalmente no Objective-C. Kernel escrito em C, algumas peças em montagem.

O Mac OS X, na camada do kernel, é principalmente um sistema operacional gratuito e antigo chamado BSD (especificamente, é Darwin, um tipo de híbrido de BSD, Mach e algumas outras coisas) ... quase inteiramente C, com um pouco do montador jogado. (Fonte)

Grande parte do cacau é implementada no Objective-C, uma linguagem orientada a objetos que é compilada para executar em uma velocidade incrível, mas emprega um tempo de execução verdadeiramente dinâmico, tornando-o flexível de maneira única. Como o Objective-C é um superconjunto de C, é fácil misturar C e até C ++ em seus aplicativos de cacau. (Fonte)

Windows: C, C ++, C #. Algumas peças em montador.

Usamos quase inteiramente C, C ++ e C # para Windows. Algumas áreas do código são ajustadas manualmente / montagem escrita à mão. (Fonte)

Unix: C. Algumas peças em montagem. (Fonte)


3
O subsistema de driver no Darwin (IOKit) depende muito de um modelo de objeto semelhante ao COM, escrito em um subconjunto de C ++.
Hristo Iliev

@Tahlor yes. Como você pode escrever algo de baixo nível, como um kernel no VB, quando ele não tem nem um operador para troca de bits? Foi o que Raymond Chen disse . Os aplicativos do Windows são diferentes
phuclv

15

O Mac OS X usa grandes quantidades de C ++ em algumas bibliotecas, mas não é exposto, pois tem medo da quebra da ABI.


13
O que? Metade dos programas pára de funcionar em cada nova versão de qualquer maneira.
precisa saber é

7
Você poderia fornecer algum tipo de citação para a declaração "Mac OS X usa grandes quantidades de C ++ dentro de algumas bibliotecas" ? Só acho difícil aceitar sua palavra! Sinto muito por ser cético.
Anish Ramaswamy

5
@AnishRamaswamy Olhe em IOKit, WebKite GLKit. Também dê uma olhada no dyld. Esses são muito pesados ​​em C ++.
Maxthon Chan

1
Tenho certeza que o OSX Kernal é C e não C ++, na verdade todos os sistemas operacionais eu vim através de ter um C kernal
twigg

10

Entendo que este é um post antigo, mas o Windows definitivamente não está escrito em C ++. Há muito C ++ nele, mas o que definimos tecnicamente como um sistema operacional não está em C ++. A API do Windows, o kernel do Windows (ambos são essencialmente o que é um sistema operacional) está escrito em C. Anos atrás, recebi um código vazado para o Windows 2000 e o Windows XP. O código não estava completo o suficiente para compilar o kernel ou a API, mas conseguimos compilar programas e serviços individuais. Por exemplo, conseguimos compilar com êxito o Notepad.exe, o mspaint.exe e o serviço spoolsv.exe (spooler de impressão). Tudo escrito em C. Eu não olhei novamente, mas tenho certeza que o código vazado ainda sobrevive como arquivos torrent por aí que ainda podem estar disponíveis.


9

Windows: Principalmente C e C ++, alguns C #


1
O .NET é enviado com o Windows. Muitos .NET estão em C #.
24119 Jonathan Parker

Há rumores de que versões futuras (Windows 8 talvez) do Windows terão algum código C ++ substituído por C # /. NET.
24119 Jonathan Parker

Eles já gerenciaram um SO operacional (quase) completamente em C #. Isso se chama Singularidade. research.microsoft.com/en-us/projects/singularity
Randolpho

Luc M: Sim, há código C # no Windows. Vasculhe e você encontrará. .Net é enviado com o sistema operacional, mas isso não significa que o sistema operacional foi gravado usando .Net. E o Windows não é singularidade. Há uma enorme diferença entre um protótipo de pesquisa e um sistema operacional real.
ReinstateMonica Larry Osterman

2
@ 1800Information - C # compila para código de máquina a partir daí JIT compila para código de máquina quando executado? Eu acho que você é o confuso. HÁ bytecode e há uma máquina virtual: en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf

9
  • windows: C ++
  • linux: C
  • mac: objetivo C
  • android: JAVA, C, C ++
  • Solaris: C, C ++
  • iOS 7: Objective-C, Swift, C, C ++

O Android está escrito em Java? Realmente?
N


3
A discussão é sobre o sistema operacional. Um sistema operacional não pode ser construído sem uma linguagem de programação do sistema. Não é possível fazer a programação do sistema com Java.
Jam Risser

Yah. Algumas partes de um sistema podem ser construídas em Java e alguns exemplos já estão presentes como o JavaOS, embora não tenha sido bem-sucedido. Não estou dizendo que você pode criar um SO com 100% java.
Shukant Pal

2
@JamRisser Android usa o kernel do Linux, que está em C. O sistema, quase até as camadas mais profundas, é escrito em Java. A Dalvik VM, que é uma máquina virtual java criada pelo Google, está em C ou C ++.
peterh - Restabelece Monica 04/04

7

Uau!!! 9 anos de pergunta, mas acabei de encontrar uma série de artigos internos sobre o histórico da Linha de Comando do Windows e acho que parte disso pode ser relevante para o Windows:

Para quem se preocupa com essas coisas: muitos perguntaram se o Windows está escrito em C ou C ++. A resposta é que, apesar do design baseado em objetos do NT, como a maioria dos sistemas operacionais, o Windows é quase inteiramente escrito em 'C'. Por quê? O C ++ apresenta um custo em termos de espaço ocupado na memória e sobrecarga na execução do código. Ainda hoje, os custos ocultos do código escrito em C ++ podem ser surpreendentes, mas no final dos anos 90, quando a memória custava ~ $ 60 / MB (sim ... $ 60 por MEGABYTE!), o custo de memória oculta de vtables etc. foi significativo. Além disso, o custo da indireta de chamada do método virtual e da desreferenciação de objetos pode resultar em penalidades de desempenho e escala muito significativas para o código C ++ naquele momento. Embora ainda seja preciso tomar cuidado, a sobrecarga de desempenho do C ++ moderno em computadores modernos é muito menos preocupante e geralmente é uma troca aceitável, considerando seus benefícios de segurança, legibilidade e manutenção ... e é por isso que estamos atualizando constantemente o código do console para C ++ moderno.


6

Você está certo O MacOSX tem o Objective-C no núcleo.

Windows C ++

Linux C

Sobre as linguagens de script, não, elas são de alto nível.


7
Windows em C: kernel, drivers, API. Apenas aplicativos e ferramentas de sistema em C ++, eu acho. Portanto, é mais claro dizer apenas C #
abatishchev 25/02/09

5

Eu li ou ouvi dizer que o Mac OS X é escrito principalmente no Objective-C com algumas das partes de nível inferior, como o kernel e os drivers de dispositivos de hardware escritos em C. Acredito que a Apple "coma (s) sua própria comida de cachorro" ", o que significa que eles gravam o Mac OS X usando suas próprias Ferramentas para Desenvolvedor de Xcode . O compilador-linker do GCC (GNU Compiler Collection) é a ferramenta de linha de comando unix usada pelo xCode na maior parte de sua compilação e / ou vinculação de executáveis. Entre outras linguagens possíveis, eu sei que o GCC compila código fonte das linguagens C, Objective-C, C ++ e Objective-C ++.


4

O kernel do Linux é principalmente escrito em C (e um pouco de linguagem assembly, eu imagino), mas alguns dos importantes utilitários de espaço do usuário (programas) são shell scripts escritos na linguagem de script Bash. Além disso, é meio difícil definir "Linux", já que você basicamente constrói um sistema Linux escolhendo as partes que deseja e juntando-as, e dependendo do que um usuário individual do Linux deseja, é possível envolver praticamente qualquer idioma. (Como Paul disse, Python e C ++ desempenham papéis importantes)


3

Como complemento sobre o núcleo do Mac OS X, o Finder não havia sido escrito no Objective-C antes do Snow Leopard. No Snow Leopard, foi escrito em Cocoa, Objective-C



1

Obviamente, o Windows não está escrito em C # (!)

Basta ver o código fonte do Windows e você verá ...


36
"Simplesmente ver o código fonte do Windows" Se você é um dos poucos que é permitido / capaz de fazer isso ...
Joachim Sauer

1
Há uma grande quantidade do Windows partes do código fonte em Torrents, também alguns comentários de que
abatishchev

4
Partes do código do Windows vazaram, anos atrás. Veja, por exemplo, este tópico antigo: < kuro5hin.org/story/2004/2/15/71552/7795 >. :)
descontraia
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.