Darwin

Darwin은 Apple의 운영체제 기반을 이루는 공개 소스 시스템 소프트웨어이자 유닉스 계열 운영체제의 기반 기술이다. Mach와 BSD 계통의 기능을 함께 사용하는 XNU 커널과 UNIX 사용자 공간 구성 요소를 중심으로 하며, macOS 등 Apple 운영체제의 저수준 기반을 형성...

분류공개 소스 UNIX 계열 운영체제 기반
개발Apple 및 공개 소스 기여자
첫 공개2000년 4월 5일
최초 공개판Darwin 1.0
기술 전신NeXTSTEP, Mach, BSD
커널XNU
커널 구성Mach·BSD·I/O Kit
사용자 공간BSD·UNIX 시스템 라이브러리 및 명령 도구
실행 파일 형식Mach-O
대표 상위 제품macOS, iOS, iPadOS, watchOS, tvOS, visionOS
주요 아키텍처PowerPC·Intel(역사적), ARM64
라이선스APSL 및 구성 요소별 라이선스
원본 소스Apple Open Source

Darwin은 Apple의 운영체제 기반을 이루는 공개 소스 시스템 소프트웨어이자 유닉스 계열 운영체제의 기반 기술이다. Mach와 BSD 계통의 기능을 함께 사용하는 XNU 커널과 UNIX 사용자 공간 구성 요소를 중심으로 하며, macOS 등 Apple 운영체제의 저수준 기반을 형성한다. Darwin 자체와 macOS를 동일하게 취급해서는 안 되며, 일반적인 macOS의 그래픽 인터페이스와 여러 프레임워크는 Darwin의 공개 소스 영역 밖에 있다.[1]

Darwin의 출발점은 Apple이 NeXT를 인수한 뒤 Macintosh 운영체제를 UNIX 기반으로 새롭게 구성한 과정에 있다. NeXTSTEP의 Mach 기반 시스템과 BSD 사용자 공간을 재사용하고 이를 Apple의 장치 관리·네트워크·시스템 도구와 결합했으며, 2000년 4월 5일 Darwin 1.0으로 일부 기반 소스 코드를 공개했다. 공개 당시 Darwin에는 PowerPC와 Intel 플랫폼용 구현이 포함되어 있었으며 외부 개발자가 운영체제의 저수준 코드를 검토·수정할 수 있는 기반을 제공했다.[2]

Darwin의 커널 XNU는 Mach에서 유래한 태스크·스레드·메시지 전달과 가상 메모리, BSD에서 발전한 프로세스·네트워크·파일 시스템 인터페이스, I/O Kit의 장치 관리 구조를 통합한다. Mach 3.0처럼 UNIX 서비스를 모두 독립적인 사용자 공간 서버로 분리하는 구조보다는 여러 주요 하위 시스템을 하나의 커널로 결합하는 방식이다. 이 특징은 Darwin을 Mach 기술을 계승한 별도 운영체제 기반이자 BSD의 시스템 인터페이스를 활용한 UNIX 계열로 이해하게 한다.[3]

Darwin에 포함된 공개 소스 구성 요소는 개발·배포 버전마다 범위가 다르며, Apple의 상위 제품을 그대로 재구성하는 데 필요한 모든 프레임워크와 드라이버가 제공되는 것은 아니다. 따라서 macOS의 Finder·Aqua 및 Cocoa 등과 Darwin 자체의 커널·사용자 공간을 구분하는 것이 중요하다. 외부 공동체는 OpenDarwin과 PureDarwin 등을 통해 공개된 시스템 기반을 독립적으로 구성하거나 유지하려는 활동을 전개했다.

같은 XNU·Darwin의 저수준 기술은 Mac의 macOS뿐 아니라 iPhone의 iOS, iPadOS, watchOS, tvOS와 visionOS에도 여러 형태로 이어진다. 하지만 각 운영체제는 제품별 사용자 인터페이스, 보안 정책, 실행할 수 있는 응용 프로그램과 지원되는 장치가 다르다. Darwin을 이러한 운영체제들의 공통 기반으로 설명할 수는 있지만 모든 제품을 동일한 운영체제 버전의 단순 재배포라고 보아서는 안 된다.

역사

NeXT 기술과 BSD

Darwin의 계보에는 Mach 기반 시스템과 BSD UNIX의 기술을 결합한 NeXTSTEP 및 이후의 OPENSTEP이 포함된다. Apple이 NeXT를 인수한 이후 차세대 운영체제 개발에 이들 기술을 사용하면서 기존 Mac OS와 별개의 현대적 커널·사용자 공간 구조를 마련했다.

Darwin 1.0

Apple은 2000년 4월 5일 Darwin 1.0을 공개 소스로 배포한다고 발표했다. Apple은 Mach 커널, BSD 계층과 관련 시스템 기술을 외부 개발자에게 공개하여 운영체제 기반 코드의 검토와 기여를 가능하게 했다.[4]

macOS의 기반

Mac OS X 출시 이후 Darwin은 Apple 데스크톱 운영체제의 저수준 기반으로 발전했다. Apple은 커널과 사용자 공간의 일부 소스 코드를 공개하면서 독점 그래픽 프레임워크와 응용 프로그램을 별도로 유지했다. 이후 Apple의 다양한 기기용 운영체제도 이 시스템 기반을 계승했다.

XNU 커널

Mach와 BSD의 결합

XNU는 Mach에서 유래한 태스크, 스레드, 가상 메모리와 메시지 전달 기능을 BSD의 프로세스, 파일 시스템, 네트워크와 UNIX API와 결합한다. 순수한 사용자 공간 서버형 마이크로커널과 달리 주요 시스템 구성 요소가 하나의 커널 주소 공간 안에서 동작한다. 따라서 일반적으로 하이브리드 커널로 분류된다.[5]

BSD 하위 시스템

BSD 계층은 UNIX 프로세스와 사용자·그룹 권한, 파일 디스크립터, 소켓, POSIX 인터페이스와 신호 처리 기능을 제공한다. macOS 개발자가 사용하는 여러 시스템 호출과 표준 C 라이브러리 인터페이스는 이 계층과 밀접하게 연결된다. Apple의 BSD 구현에는 FreeBSD에서 유래한 코드와 별도의 변경 사항이 포함된다.[6]

I/O Kit과 장치 관리

I/O Kit은 장치와 드라이버의 객체 모델을 제공하는 기술로, 커널의 플랫폼·버스·장치 계층을 구성하는 데 사용되었다. 하드웨어 지원과 드라이버 정책은 Apple의 제품 세대에 따라 변화한다. 단순히 FreeBSD용 드라이버를 Darwin에서 그대로 실행할 수 있는 것은 아니다.

프로세스와 실행 환경

Mach 태스크와 스레드 모델, BSD 프로세스 모델을 결합하여 멀티태스킹, 동기화, 가상 메모리와 프로세스 간 통신을 제공한다. BSD API를 사용하는 UNIX 프로그램뿐 아니라 Apple 자체 런타임과 프레임워크를 사용하는 프로그램의 기반도 이 위에서 제공된다.

실행 파일과 라이브러리

Darwin과 macOS에서 주로 사용하는 네이티브 실행 파일 형식은 Mach-O이며, 동적 라이브러리 로딩에는 dyld 등 Apple의 구성 요소가 관여한다. 일반적인 FreeBSD ELF 실행 파일을 동일한 CPU 아키텍처라는 이유만으로 그대로 실행할 수는 없다. 소스 코드 이식성, ABI와 런타임 호환성은 별도로 구분해야 한다.

네트워크와 파일 시스템

BSD 계통의 TCP/IP 구현, 소켓 API와 파일 시스템 인터페이스가 시스템 기반이다. 현대 Apple 운영체제는 플랫폼별 파일 시스템과 보안 정책을 추가하므로 공개 Darwin 소스 코드만으로 모든 상위 제품 기능이 제공되는 것은 아니다.

소스 코드 공개

Apple은 XNU와 여러 사용자 공간 구성 요소의 소스를 공개한다. 공개 범위는 버전마다 다를 수 있으며 배포된 코드에 적용되는 라이선스도 구성 요소별로 구분된다. Darwin 기반의 독립적인 시스템을 제작하거나 연구하려면 커널 소스와 도구 체인, 드라이버 및 비공개 구성 요소의 경계를 확인해야 한다.[7]

BSD와의 관계

Darwin은 BSD의 프로그래밍 인터페이스와 코드 일부를 계승하지만 현대 FreeBSD 또는 NetBSD의 단순한 변형 배포판은 아니다. Mach, NeXT와 Apple의 고유 기술이 결합된 별도 운영체제 계통이다. macOS는 Darwin에서 제공하는 기반 위에 추가 시스템 서비스와 응용 프로그램·그래픽 프레임워크를 포함한다.

  1. Apple: Kernel Architecture Overview ↩
  2. Apple: Darwin 1.0 공개 ↩
  3. Apple: Kernel Architecture Overview ↩
  4. Apple: Darwin 1.0 공개 보도자료 ↩
  5. Apple: Mach Overview ↩
  6. Apple: BSD Overview ↩
  7. Apple XNU 소스 트리 ↩