Windows, Mac OS X 및 Linux는 어떤 언어로 작성됩니까?


273

Windows, Mac OS X 및 Linux의 프로그래밍 언어와 OS의 각 부분에 사용되는 언어 (예 : 커널, 플러그인 아키텍처, GUI 구성 요소 등)를 아는 사람이 궁금합니다.

나는 각각에 대해 여러 언어가 있다고 가정하고 분명히 Linux 커널이 C로 작성되었음을 알고 있습니다.

Mac OS X에는 NeXT에서 파생 된 Apple의 언어이므로 많은 Objective-C 코드가 포함되어 있다고 생각합니다.

Windows에는 C, C ++ 및 Intel Assembly가 포함되어 있다고 들었습니다. Linux 또는 Mac OS에 어셈블리 코드가 포함되어 있습니까?

또한 OS 개발자가 OS의 일부를 스크립팅하는 데 사용하는 Ruby, Python 등의 스크립팅 언어가 있습니까? 각 언어로 OS의 어떤 부분이 작성됩니까?



SO 교환 은 질문의 마지막 부분에 답변하는 데 도움 이 될 수 있습니다.
Bikramjeet Singh

답변:


269
  • Windows : C ++, 커널은 C
  • Mac : 목표 C, 커널이 C에 있음 (IO PnP 하위 시스템은 Embedded C ++ 임)
  • 리눅스 : 대부분 C에 있고, 많은 유저 랜드 앱은 파이썬에 있고, KDE는 모두 C ++에 있습니다

모든 커널은 일부 어셈블리 코드도 사용합니다.


13
그놈도 거의 C라고 덧붙여 야합니다.
Nathan Osman

17
그놈도 C # (모노)으로 유혹했습니다.
Hristo Iliev

6
리눅스 커널은 어셈블러도 가지고 있다고 생각합니다.
GL2014

9
사실, 모든 커널에는 최소한 어셈블러가 있어야합니다.
Ana Betts

4
애플 커널의 IOKit 하위 시스템 (드라이버 용)은 C ++을 사용합니다 (제한된 하위 집합). 그리고 Windows, Mac 및 Linux의 3 가지 모두에서 가장 중요한 많은 사용자 응용 프로그램이 C 또는 C ++로 작성되었습니다. 예를 들어, MS는 .NET에서 Office를 다시 실행하려고 시도했지만 C ++로 돌아갔습니다. 그리고 리눅스 커널은 많은 C ++와 같은 관용구를 사용하지만 드라이버 코드에서의 상속과 같이 C로 직접 요리됩니다.
Erik Alapää

94

Linux : C. 어셈블리의 일부 부품.

[...] 대부분 C 언어이지만 대부분의 사람들은 내가 C라고 부르지 않을 것입니다. 그것은 386에 대해 가르쳐주는 프로젝트 였기 때문에 찾을 수있는 386의 모든 가능한 기능을 사용합니다. 페이징 (아직 디스크 아님) 및 세그먼트 화에 MMU를 사용합니다. 그것은 386에 의존하게 만드는 세분화입니다 (모든 작업에는 코드 및 데이터에 대한 64Mb 세그먼트가 있습니다-4Gb에서 최대 64 개의 작업. 64Mb / 작업 이상-힘든 쿠키가 필요한 사람). [...] 내 "C"파일 중 일부 (특히 mm.c)는 거의 C만큼 어셈블러입니다. [...] 미닉스와 달리 인터럽트와 마찬가지로 발생하므로 인터럽트를 숨기지 않고 처리합니다. 그들 뒤에 이유. (출처)

Mac OS X : 대부분 Objective-C의 코코아. C로 작성된 커널, 어셈블리의 일부.

커널 계층에서 Mac OS X은 주로 BSD라는 오래된 무료 운영 체제입니다 (특히, BSD, Mach 및 기타 몇 가지 하이브리드 인 Darwin입니다). 던져진 어셈블러. (소스)

Cocoa의 대부분은 놀라운 속도로 실행되도록 컴파일 된 객체 지향 언어 인 Objective-C로 구현되었지만, 매우 동적으로 런타임을 사용하여 고유하게 유연합니다. Objective-C는 C의 상위 집합이므로 C와 C ++를 Cocoa 응용 프로그램에 쉽게 혼합 할 수 있습니다. (출처)

Windows : C, C ++, C # 어셈블러의 일부 부품.

우리는 거의 전적으로 C, C ++ 및 C # for Windows를 사용합니다. 일부 코드 영역은 수동 조정 / 수동 작성 어셈블리입니다. (출처)

유닉스 : C. 어셈블리의 일부 부품. (출처)


3
Darwin (IOKit)의 드라이버 하위 시스템은 C ++의 하위 집합으로 작성된 COM과 유사한 개체 모델에 크게 의존합니다.
Hristo Iliev

@Tahlor 예. 비트 시프트를위한 ​​연산자가 없을 때 VB에서 커널과 같은 저수준을 작성하는 방법은 무엇입니까? 이것이 레이몬드 첸의 말이다 . Windows 앱이 다릅니다
phuclv

15

Mac OS X은 일부 라이브러리에서 많은 양의 C ++을 사용하지만 ABI 중단을 두려워하므로 노출되지 않습니다.


13
뭐? 어쨌든 프로그램의 절반이 새로운 릴리스에서 작동하지 않습니다.
kinokijuf

7
"Mac OS X은 일부 라이브러리 내에서 다량의 C ++을 사용합니다" 문장 에 대한 인용을 제공해 주 시겠습니까? 나는 단지 당신의 말을 받아들이 기가 어려워요! 회의적인 것에 대해 유감입니다.
Anish Ramaswamy

5
@AnishRamaswamy에 봐 IOKit, WebKit그리고 GLKit. 또한을 살펴보십시오 dyld. 그것들은 매우 C ++ 무겁습니다.
Maxthon Chan

1
나는 건너가 모든 운영 체제는 C 커널 인이 확인 OSX 커널 인 사실, C ++이 아닌 C입니다 해요
트위그

10

이 게시물은 오래된 게시물이지만 Windows는 C ++로 작성되지 않았습니다. 많은 C ++이 있지만 운영 체제로 기술적으로 정의한 것은 C ++에 없습니다. Windows 커널 인 Windows 커널 (둘 다 운영 체제가 무엇인지)은 C로 작성되었습니다. 몇 년 전에 Windows 2000과 Windows XP 모두에 대해 유출 된 코드가있었습니다. 코드는 커널이나 API를 컴파일하기에 충분하지 않았지만 개별 프로그램과 서비스를 컴파일 할 수있었습니다. 예를 들어 Notepad.exe, mspaint.exe 및 spoolsv.exe 서비스 (인쇄 스풀러)를 성공적으로 컴파일 할 수있었습니다. 모두 C로 작성되었습니다. 나는 다시 보지 않았지만 유출 된 코드가 여전히 사용 가능한 토런트 파일로 여전히 살아남을 것이라고 확신합니다.


9

Windows : 대부분 C 및 C ++, 일부 C #


1
.NET은 Windows와 함께 제공됩니다. 많은 .NET이 C #에 있습니다.
Jonathan Parker

차기 버전 (Windows 8)의 C ++ 코드가 C # /. NET으로 대체 될 것이라는 소문이 있습니다.
Jonathan Parker

그들은 이미 C #에서 작동하는 OS (거의)를 완전히 관리했습니다. 이를 특이점이라고합니다. research.microsoft.com/ko-kr/projects/singularity
Randolpho

Luc M : 예. Windows에는 C # 코드가 있습니다. 주위를 찌르면 찾을 수 있습니다. .Net은 OS와 함께 제공되지만 OS가 .Net을 사용하여 작성된 것은 아닙니다. 그리고 Windows는 특이점이 아닙니다. 연구 프로토 타입과 실제 운영 체제 간에는 큰 차이가 있습니다.
ReinstateMonica Larry Osterman

2
@ 1800Information-C #이 거기에서 기계 코드로 컴파일 JIT가 실행될 때 기계 코드로 컴파일? 난 당신이 혼란스러워 생각합니다. 바이트 코드가 있으며 가상 머신이 있습니다. en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf

9
  • 창 : C ++
  • 리눅스 : C
  • 맥 : 목표 C
  • 안드로이드 : 자바, C, C ++
  • 솔라리스 : C, C ++
  • iOS 7 : 오브젝티브 -C, 스위프트, C, C ++

안드로이드는 Java로 작성 되었습니까? 정말?
nirvanaswap


3
운영 체제에 대한 설명입니다. 시스템 프로그래밍 언어가 없으면 운영 체제를 구축 할 수 없습니다. Java로 시스템 프로그래밍을 수행 할 수 없습니다.
Jam Risser

야아. 시스템의 일부는 Java로 빌드 할 수 있으며 일부 예제는 JavaOS와 같이 이미 존재하지만 성공적이지 않습니다. 100 % Java로 OS를 빌드 할 수 있다고 말하는 것은 아닙니다.
Shukant Pal

2
@JamRisser Android는 C에있는 Linux 커널을 사용합니다. 시스템은 거의 가장 깊은 계층까지 Java로 작성됩니다. Google이 작성한 Java 가상 머신 인 Dalvik VM은 C 또는 C ++로되어 있습니다.
peterh-복 직원 모니카

7

와!!! 9 년 동안의 질문이지만 Windows 명령 줄 기록에 대한 일련의 내부 기사 를 보았 으며 그중 일부는 Windows의 관련 질문 일 수 있습니다.

그러한 것들에 관심이있는 사람들을 위해 : 많은 사람들이 Windows가 C 또는 C ++로 작성되었는지 물었습니다. 대답은 NT의 객체 기반 설계에도 불구하고 대부분의 OS와 마찬가지로 Windows는 거의 모두 'C'로 작성되었다는 것입니다. 왜? C ++은 메모리 풋 프린트 및 코드 실행 오버 헤드 측면에서 비용을 발생시킵니다. 오늘날에도 C ++로 작성된 숨겨진 코드 비용은 놀라 울 수 있지만 메모리 비용이 ~ $ 60 / MB (예 : MEGABYTE 당 $ 60) 인 1990 년대 후반으로 거슬러 올라갑니다 .), vtables 등의 숨겨진 메모리 비용이 상당했습니다. 또한 가상 메서드 호출 간접 및 개체 역 참조의 비용으로 인해 C ++ 코드에 대한 성능 및 규모가 크게 저하 될 수 있습니다. 여전히주의해야 할 필요가 있지만 최신 컴퓨터에서 최신 C ++의 성능 오버 헤드는 훨씬 덜 중요하며 보안, 가독성 및 유지 보수 이점을 고려할 때 종종 허용되는 절충입니다 ... 우리가 이유입니다. 꾸준히 콘솔 코드를 최신 C ++로 업그레이드합니다.


6

MacOSX의 핵심은 Objective-C입니다.

윈도우 C ++

리눅스 C

스크립팅 언어에 관해서는 아닙니다.


7
C의 Windows : 커널, 드라이버, API C ++의 시스템 응용 프로그램 및 도구 만 생각합니다. 그냥 C 말을 더 분명 그래서
abatishchev

5

Mac OS X은 대부분 Objective-C로 작성되었으며 커널과 같은 하위 레벨 부분과 C로 작성된 하드웨어 장치 드라이버를 사용하여 작성되었다고 들었습니다. "는 자체 Xcode 개발자 도구를 사용하여 Mac OS X을 작성한다는 의미입니다 . GCC (GNU 컴파일러 컬렉션) 컴파일러 링커 엑스 코드는 대부분 사용하는 유닉스 명령 행 도구의 컴파일 및 / 또는 실행 파일의 연결. 다른 가능한 언어 중에서도 GCC가 C, Objective-C, C ++ 및 Objective-C ++ 언어의 소스 코드를 컴파일한다는 것을 알고 있습니다.


4

리눅스 커널은 대부분 C (그리고 약간의 어셈블리 언어)로 작성되지만 중요한 사용자 공간 유틸리티 (프로그램) 중 일부는 Bash 스크립팅 언어로 작성된 쉘 스크립트입니다. 그 외에도 "리눅스"를 정의하는 것은 어려운 일이다. 기본적으로 원하는 비트와 조각을 골라 조합하여 리눅스 시스템을 구축하고 개별 리눅스 사용자가 원하는 것에 따라 거의 모든 언어를 사용할 수 있기 때문이다. (Paul이 말했듯이 Python과 C ++은 중요한 역할을합니다)


3

Mac OS X의 핵심에 대한 추가 사항으로서, Finder는 Snow Leopard 이전의 Objective-C로 작성되지 않았습니다. Snow Leopard에서는 Objective-C 인 Cocoa로 작성되었습니다.



1

Windows는 분명히 C # (!)으로 작성되지 않았습니다.

간단히 Windows의 소스 코드를 보면 다음과 같은 내용을 볼 수 있습니다.


36
당신은 / 허용되는 몇 가지 수의있는 거 하나가 그렇게 할 경우 ... "간단하게 윈도우의 소스 코드를 볼"
요아힘 사우어에게

1
토렌트에는 Windows 소스 코드 파트가 많이 있으며, 그에 대한 리뷰도 있습니다.
abatishchev

4
몇 년 전에 Windows 코드의 일부가 유출되었습니다. 예를 들어이 오래된 스레드를 참조하십시오 : < kuro5hin.org/story/2004/2/15/71552/7795 >. :)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.