Windows、Mac OS X、Linuxはどの言語で書かれていますか?


273

私は、Windows、Mac OS X、Linuxがどのプログラミング言語で構成され、OSの各部分(つまり、カーネル、プラグインアーキテクチャ、GUIコンポーネントなど)にどの言語が使用されているのか、誰が知っているのかと思っていました。

それぞれに複数の言語があると思いますが、LinuxカーネルがCで記述されていることは明らかです。

Mac OS XにはNeXTから派生したAppleの言語であるため、Mac OS Xには多くのObjective-Cコードが含まれていると私は完全に推測しています。

Windowsには、C、C ++、Intelアセンブリが含まれていると聞きました。LinuxまたはMac OSにはアセンブリコードが含まれていますか?

また、OSの一部をスクリプト化するためにOS開発者が使用するRuby、Pythonなどのスクリプト言語はありますか?OSのどの部分が各言語で記述されますか?



このSO交換は、質問の最後の部分への回答に役立つ場合があります。
Bikramjeet Singh

回答:


269
  • Windows:C ++、カーネルはC
  • Mac:目的C、カーネルはC(IO PnPサブシステムはEmbedded C ++)
  • Linux:ほとんどはCであり、多くのユーザーランドアプリはPythonであり、KDEはすべてC ++です

すべてのカーネルは、いくつかのアセンブリコードも使用します。


13
GnomeもほぼCであると付け加えておきます。
Nathan Osman、2011

17
GnomeもC#(Mono)でいちゃつきました。
Hristo Iliev

6
Linuxカーネルにもアセンブラーがあると思います。
GL2014 2013

9
確かに、すべてのカーネルには少なくともいくつかのアセンブラが含まれます
Ana Betts 2013

4
物事を明確にするために-AppleカーネルのIOKitサブシステム(ドライバー用)は(制限されたサブセットの)C ++を使用します。また、3つすべて、つまりWindows、Mac、Linuxでは、最も重要なユーザーランドアプリケーションの多くがCまたはC ++で記述されています。たとえば、MSは.NETでOfficeをやり直そうとしたが、C ++に戻ったとされている。Linuxカーネルは、多くのC ++に似たイディオムを使用しますが、Cで一緒に手作業で作成されます(ドライバーコードの継承など)。
ErikAlapää2015

94

Linux:C.アセンブリの一部。

[...]ほとんどはCですが、ほとんどの人は私がCと書いたものを呼ばないでしょう。これは、386について教えるプロジェクトでもあったため、見つけた386の考えられるすべての機能を使用しています。 、ページング(まだディスクではない)とセグメンテーションの両方にMMUを使用します。それは本当に386に依存するセグメンテーションです(すべてのタスクにはコードとデータ用の64Mbセグメントがあります-4Gbで最大64タスク。64Mb/タスク以上を必要とする人-タフなCookie)。[...]一部の「C」ファイル(特にmm.c)は、Cとほぼ同じアセンブラーです。[...] minixとは異なり、LIKE割り込みも発生するため、割り込みは非表示にせずに処理されますそれらの背後にある理由。(ソース)

Mac OS X:ほとんどがObjective-CのCocoa。カーネルはCで書かれ、一部はアセンブリに含まれています。

カーネルレイヤーのMac OS Xは、ほとんどがBSDと呼ばれる古い、無料のオペレーティングシステムです(具体的には、それはダーウィン、BSD、マッハ、およびその他のいくつかのハイブリッドの一種です)...ほぼ完全にC、少し投入されたアセンブラーの(ソース)

Cocoaの多くは、信じられないほどの速度で実行するようにコンパイルされたオブジェクト指向言語であるObjective-Cで実装されていますが、真に動的なランタイムを採用しているため、非常に柔軟です。Objective-CはCのスーパーセットであるため、CとC ++をCocoaアプリケーションに簡単に混在させることができます。 (ソース)

Windows:C、C ++、C#。アセンブラーの一部。

Windowsでは、ほぼ完全にC、C ++、およびC#を使用しています。コードの一部の領域は、手動で調整/手書きされたアセンブリです。(ソース)

Unix:C.アセンブリの一部。(ソース)


3
Darwin(IOKit)のドライバーサブシステムは、C ++のサブセットで記述されたCOMのようなオブジェクトモデルに大きく依存しています。
Hristo Iliev

@Tahlorはい。VBのカーネルのような低レベルのものを、ビットシフトのための演算子すら持たない場合、どのように書くことができますか?これがレイモンドチェンの言葉です。Windowsアプリは異なります
phuclv 2018

15

Mac OS Xは一部のライブラリ内で大量のC ++を使用しますが、ABIの破壊を恐れているため、公開されていません。


13
何?とにかく、プログラムの半分はすべての新しいリリースで機能しなくなります。
kinokijuf 2013年

7
「Mac OS Xは一部のライブラリ内で大量のC ++を使用しています」という記述について、ある種の引用を提供していただけませんか?私はただあなたの言葉を信じるのは難しいと思います!懐疑的でごめんなさい。
アニッシュラマスワミー2014年

5
@AnishRamaswamyに見てIOKitWebKitGLKit。また、を垣間見ることができdyldます。それらは非常にC ++が重いです。
Maxthon Chan

1
OSXカーネルはC ++ではなくCであると確信しています。実際、私が遭遇したすべてのオペレーティングシステムにはCカーネルがあります
twigg

10

これは古い投稿ですが、WindowsはC ++で書かれていません。C ++はたくさんありますが、オペレーティングシステムとして技術的に定義するものはC ++にはありません。Windows API、Windowsカーネル(これらは両方とも、本質的にはオペレーティングシステムと同じです)はCで記述されています。コードはカーネルまたはAPIをコンパイルするのに十分なほど完成していませんでしたが、個々のプログラムとサービスをコンパイルすることができました。たとえば、Notepad.exe、mspaint.exe、spoolsv.exeサービス(印刷スプーラー)を正常にコンパイルすることができました。すべてCで記述されています。もう一度見たわけではありませんが、リークされたコードがまだ利用可能なトレントファイルであるため、まだ残っていると思います。


9

Windows:ほとんどはCおよびC ++、一部はC#


1
.NETはWindowsに付属しています。.NETの多くはC#にあります。
ジョナサンパーカー、

Windowsの将来のバージョン(Windows 8の可能性があります)では、いくつかのC ++コードがC#/。NETに置き換えられるという噂があります。
ジョナサンパーカー、

彼らはすでに動作しているOSを(ほぼ)完全にC#で管理しています。それは特異点と呼ばれています。research.microsoft.com/en-us/projects/singularity
ランドルフォ

Luc M:はい、WindowsにはC#コードがあります。周りを突くと、それが見つかります。.NetはOSに同梱されていますが、OSが.Netを使用して記述されているという意味ではありません。Windowsは特異点ではありません。研究プロトタイプと実際のオペレーティングシステムには大きな違いがあります。
ReinstateMonica Larry Osterman、

2
@ 1800情報-C#はそこからマシンコードにコンパイルされます実行時にJITはマシンコードにコンパイルされますか?あなたは混乱していると思います。バイトコードと仮想マシンがあります:en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf

9
  • ウィンドウ:C ++
  • linux:C
  • mac:Objective C
  • android:JAVA、C、C ++
  • Solaris:C、C ++
  • iOS 7:Objective-C、Swift、C、C ++

AndroidはJavaで書かれていますか?本当に?
nirvanaswap


3
議論はオペレーティングシステムについてです。オペレーティングシステムは、システムプログラミング言語なしでは構築できません。Javaでシステムプログラミングを行うことはできません。
Jam Risser 2017

うん。システムの一部はJavaで構築でき、一部の例はJavaOSのようにすでに存在していますが、成功しませんでした。100%JavaでOSを構築できるとは言っていません。
Shukant Pal 2017

2
@JamRisser Androidは、CにあるLinuxカーネルを使用します。システムは、最深層までほぼJavaで記述されています。Dalvik VMは、Googleが作成したJava仮想マシンで、CまたはC ++を使用しています。
peterh-モニカを復活させる

7

ワオ!!!9年間の質問ですが、Windowsコマンドラインの履歴に関する一連の内部記事に遭遇しました。その一部は、Windows側の質問に関連している可能性があります。

そのようなことを気にする人のために:WindowsがCで書かれているかC ++で書かれているかを多くの人が尋ねました。その答えは、NTのオブジェクトベースの設計にもかかわらず、ほとんどのOSと同様に、Windowsはほぼ完全に「C」で書かれているということです。どうして?C ++では、メモリフットプリントとコード実行のオーバーヘッドの面でコストが発生します。今日でも、C ++で記述されたコードの隠れたコストは驚くべきものになる可能性がありますが、1990年代後半には、メモリのコストが約$ 60 / MBでした(はい…60ドルあたり)、vtableなどの隠しメモリコストが重要でした。さらに、仮想メソッド呼び出しの間接化とオブジェクト逆参照のコストにより、C ++コードのパフォーマンスとスケールが大幅に低下する可能性があります。まだ注意が必要ですが、最新のコンピューターでの最新のC ++のパフォーマンスオーバーヘッドはそれほど問題ではなく、多くの場合、そのセキュリティ、読みやすさ、保守性の利点を考慮して許容できるトレードオフです...コンソールのコードを最新のC ++に着実にアップグレードする。


6

そうですね、MacOSXはコアにObjective-Cを持っています。

Windows C ++

Linux C

スクリプト言語については、いいえ、かなり高いレベルです。


7
WindowsのC:カーネル、ドライバー、API。C ++のシステムアプリケーションとツールだけだと思います。したがって、Cとだけ言う方がより明確です
abatishchev

5

Mac OS Xは、ほとんどがObjective-Cで記述され、カーネルなどの下位レベルのパーツやCで記述されたハードウェアデバイスドライバーが含まれていることを読んだり聞いたりしました。Appleは独自のドッグフードを「食べている」と思います"、つまり、彼らは独自のXcode開発者ツールを使用してMac OS Xを記述していますGCC(GNUコンパイラコレクション)コンパイラ、リンカのXcodeは、そのコンパイルのほとんどのために使用され、および/または実行ファイルのリンクというUNIXのコマンドラインツールです。他の可能な言語の中で、GCCがC、Objective-C、C ++、およびObjective-C ++言語からのソースコードをコンパイルすることを知っています。


4

LinuxカーネルはほとんどCで書かれています(そして、私が想像するように、アセンブリ言語の一部です)が、重要なユーザースペースユーティリティ(プログラム)の一部は、Bashスクリプト言語で書かれたシェルスクリプトです。それを超えて、基本的に必要な小片を選んでそれらを組み立てることによってLinuxシステムを構築し、個々のLinuxユーザーが何を望んでいるかに応じて、ほとんどすべての言語を関与させることができるため、「Linux」を定義するのはちょっと難しいです。(ポールが言ったように、PythonとC ++は重要な役割を果たします)


3

Mac OS Xのコアに関する追加として、FinderはSnow Leopardより前のObjective-Cで作成されていませんでした。Snow Leopardでは、それはココア、Objective-Cで書かれました



1

Windowsは明らかにC#で書かれていません(!)

Windowsのソースコードを表示するだけで、表示されます...


36
「Windowsのソースコードを簡単に表示する」を実行できる、または実行できる数少ないユーザーの1人である場合
Joachim Sauer '25

1
急流でのWindowsのソースコードの部品、それのもいくつかのレビューがたくさんあります
abatishchev

4
Windowsコードの一部が数年前にリークされています。たとえば、この古いスレッド< kuro5hin.org/story/2004/2/15/71552/7795 >を参照してください。:)
リラックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.