NetBSD

NetBSD는 BSD에서 파생된 자유·오픈 소스 유닉스 계열 운영체제이다. 커널뿐만 아니라 시스템 라이브러리, 명령줄 도구, 네트워크 서비스, 장치 관리 도구, 개발 도구와 설명서를 하나의 베이스 시스템으로 함께 개발하며, 서버와 워크스테이션부터 임베디드 장치와 과거의 컴퓨터 시스템까지...

분류BSD, 유닉스 계열 운영체제, 자유 소프트웨어, 오픈 소스 소프트웨어
개발 주체NetBSD 프로젝트
관리 법인The NetBSD Foundation, Inc.
창시자크리스 디미트리우, 테오 드 라트, 애덤 글래스, 찰스 M. 해넘
최초 공개NetBSD 0.8, 1993년 4월 20일
기반4.3BSD Net/2, 386BSD, 4.4BSD-Lite
커널 구조모놀리식 커널, 적재 가능 커널 모듈
핵심 구현 언어C, 어셈블리어
사용자 공간NetBSD 베이스 시스템
패키지 시스템pkgsrc
초기화 시스템BSD init, rc.d
주요 파일 시스템FFS, LFS, tmpfs, ZFS
지원 플랫폼amd64, i386, ARM, AArch64, MIPS, PowerPC, SPARC, m68k, Alpha, VAX, SH3 등
릴리스 계열정식 릴리스, 안정 브랜치, NetBSD-current
현재 정식 릴리스NetBSD 10.1
차기 릴리스 후보NetBSD 11.0 RC7
주요 라이선스BSD 계열 라이선스
표어Of course it runs NetBSD
공식 사이트netbsd.org
데스크톱 환경CLI

NetBSD는 BSD에서 파생된 자유·오픈 소스 유닉스 계열 운영체제이다. 커널뿐만 아니라 시스템 라이브러리, 명령줄 도구, 네트워크 서비스, 장치 관리 도구, 개발 도구와 설명서를 하나의 베이스 시스템으로 함께 개발하며, 서버와 워크스테이션부터 임베디드 장치와 과거의 컴퓨터 시스템까지 다양한 환경에서 실행할 수 있도록 설계되었다.[1]

NetBSD 프로젝트는 4.3BSD Net/2와 386BSD를 기반으로 1993년에 시작되었다. 크리스 디미트리우, 테오 드 라트, 애덤 글래스와 찰스 M. 해넘은 당시 여러 경로로 배포되던 386BSD 패치의 품질과 통합 문제를 개선하고, 특정 하드웨어에 종속되지 않는 일관된 운영체제를 개발하기 위해 프로젝트를 창립했다. 초기부터 코드 품질과 아키텍처 독립성을 주요 목표로 삼았으며, 이후 4.4BSD-Lite의 변경 사항과 다른 BSD 및 자유 소프트웨어 프로젝트의 기술을 통합했다.[2]

NetBSD의 가장 대표적인 특징은 이식성이다. 프로젝트는 각각의 지원 하드웨어 계열을 포트라고 부르며, 여러 프로세서 아키텍처와 시스템 버스, 펌웨어 및 장치 구성을 하나의 소스 트리에서 관리한다. 커널과 장치 드라이버의 공통 부분을 머신 독립 계층으로 분리하고, 플랫폼별 차이는 머신 의존 계층에 한정하는 구조를 사용한다. 이러한 구조는 새로운 플랫폼으로 운영체제를 이식하거나 서로 다른 시스템 사이에서 장치 드라이버와 커널 기능을 공유하는 데 이용된다.[3]

소스 트리에 포함된 build.sh는 호스트 운영체제와 대상 아키텍처가 서로 다른 환경에서도 전체 베이스 시스템, 커널과 설치 이미지를 교차 컴파일할 수 있도록 구성되어 있다. 따라서 실제 대상 장치에서 직접 운영체제를 빌드하기 어려운 저성능 임베디드 시스템과 오래된 컴퓨터도 현대적인 개발 시스템에서 빌드할 수 있다.[4]

NetBSD의 기본 시스템 밖에서 제공되는 응용 소프트웨어는 주로 pkgsrc를 통해 설치한다. pkgsrc는 소스 패키지와 바이너리 패키지를 모두 지원하며 NetBSD뿐 아니라 Linux, macOS, illumos, FreeBSD와 다른 유닉스 계열 운영체제에서도 사용할 수 있다. 운영체제와 패키지 시스템을 분리한 구조는 하나의 패키지 정의를 여러 플랫폼에서 공유하고, 설치 경로와 라이선스 정책, 컴파일 옵션을 중앙 설정으로 관리할 수 있게 한다.[5]

NetBSD는 정기적인 정식 릴리스와 각 릴리스에서 파생된 안정 브랜치, 다음 주요 버전을 개발하는 NetBSD-current로 구분된다. 2026년 8월 2일을 기준으로 최신 정식 릴리스는 2024년 12월 16일 공개된 NetBSD 10.1이며, 다음 주요 버전인 NetBSD 11.0은 2026년 7월 21일 공개된 RC7 단계에 있다.[6][7]

역사

BSD와 386BSD

NetBSD는 386BSD와 버클리의 Net/2 코드에서 출발한 BSD 계열 운영체제다. 당시 386BSD의 비공식 패치가 늘어나자 개발자들은 변경 사항을 통합하고 다양한 하드웨어에서 실행할 수 있는 BSD를 독립적으로 관리하기로 했다. 이렇게 시작된 1993년 NetBSD의 역사는 개인용 PC에서 출발한 자유 BSD를 다수의 CPU 아키텍처로 확대하는 과정과 밀접하게 연결된다.[8]

NetBSD 프로젝트의 창립

NetBSD는 Chris Demetriou, Theo de Raadt, Adam Glass와 Charles Hannum 등이 1993년에 창립했다. 프로젝트의 목표는 공개 소스의 일관된 통합과 이식성, 코드 품질에 있었다. 초기 386BSD 계보와 버클리 BSD의 변경 사항을 수용하면서 별도의 개발 공동체와 릴리스 체계를 형성했다.

NetBSD 0.8과 초기 공개

1993년 4월 20일 발표된 NetBSD 0.8은 프로젝트의 초기 공개판이다. 커널과 사용자 공간을 함께 제공했으며, 뒤이은 릴리스에서 더 많은 플랫폼과 개발 도구, 네트워크 기능을 통합했다. 당시의 설치 매체와 지원 하드웨어는 현대 릴리스의 환경과 구별된다.

NetBSD 1.x와 4.4BSD-Lite 통합

지원 플랫폼의 확장

멀티프로세서와 64비트 아키텍처 지원

NetBSD 2.x부터 5.x까지

NetBSD 6과 7

NetBSD 8과 9

NetBSD 10

NetBSD 11 개발

프로젝트의 분화와 변화

설계 목표와 특징

이식성

NetBSD의 이식성은 단순한 다중 CPU 목록이 아니라 코드 조직과 빌드 시스템의 기본 원칙이다. 여러 시스템이 동일한 커널·사용자 공간 소스 코드를 공유하도록 설계하고, CPU·버스·펌웨어에 따른 차이는 기계 의존적인 구현으로 한정한다. 새로운 하드웨어로 포트할 때 공통 모듈을 재사용할 수 있다는 점이 특징이다.

아키텍처 독립성

코드 품질과 일관성

통합된 베이스 시스템

소스 코드 중심의 개발

교차 컴파일

NetBSD는 호스트와 대상 아키텍처가 서로 달라도 전체 커널과 베이스 시스템을 빌드할 수 있도록 build.sh 기반의 교차 빌드 도구를 제공한다. 타깃 장치가 느리거나 저장 공간이 작을 때 현대 개발 컴퓨터에서 운영체제를 컴파일하고 설치 이미지를 생성할 수 있다. 이러한 방식은 임베디드 시스템과 역사적 플랫폼의 유지보수에도 유용하다.[9]

안정성과 호환성

보안

연구 환경과 실사용 환경

시스템 구성

베이스 시스템

커널

사용자 공간

시스템 라이브러리

명령줄 도구

시스템 서비스

개발 도구

매뉴얼과 문서

릴리스 세트

서드파티 소프트웨어와의 구분

커널 아키텍처

모놀리식 커널

적재 가능 커널 모듈

머신 독립 계층

커널의 파일 시스템, 네트워크와 상당수 장치 드라이버에는 특정 CPU 명령어 집합과 직접 연결되지 않는 공통 코드가 사용된다. 인터럽트 컨트롤러, 메모리 관리 장치, 부팅 프로토콜과 예외 처리처럼 플랫폼별로 다른 기능은 머신 의존 계층에 구현한다. 이 구분은 코드 중복을 줄이고 여러 컴퓨터에서 같은 시스템 동작을 유지하는 기반이다.

머신 의존 계층

커널 객체와 내부 인터페이스

시스템 호출

인터럽트 처리

커널 동기화

시간 관리와 타이머

커널 설정

프로세스와 실행 관리

프로세스 모델

커널 스레드와 사용자 스레드

스케줄러

프로세스 생성과 종료

신호

프로세스 간 통신

실행 파일 형식

동적 링커

호환성 실행 환경

자원 제한과 회계

메모리 관리

가상 메모리

UVM

UVM은 NetBSD의 가상 메모리 시스템으로, 가상 주소 공간, 페이지 할당과 회수, 파일 매핑, 공유 메모리 및 스왑을 처리한다. CPU별 메모리 관리 장치 코드와 결합해 사용자 공간 프로세스의 주소 변환과 보호를 구현한다. 대규모 시스템뿐 아니라 제한된 메모리를 가진 장치에서도 중요한 커널 구성 요소다.

주소 공간

페이지 관리

물리 메모리 관리

메모리 매핑

공유 메모리

스왑

커널 메모리 할당

아키텍처별 메모리 관리

파일 시스템과 저장 장치

파일 시스템 계층

Fast File System

NetBSD는 버클리 BSD에서 유래한 Fast File System 계열의 디스크 저장 기능을 제공한다. inode와 블록 할당 구조를 사용하며 파일·디렉터리와 메타데이터를 관리한다. 파일 시스템 보호와 충돌 후 복구를 위한 WAPBL 등의 기능은 파일 시스템 버전과 설정에 따라 함께 사용된다.

WAPBL 저널링

Log-structured File System

tmpfs

ZFS

CD와 광학 매체 파일 시스템

네트워크 파일 시스템

PUFFS

PUFFS는 사용자 공간에서 파일 시스템 처리를 구현할 수 있게 하는 NetBSD의 프레임워크다. 커널에서 발생한 파일 연산을 사용자 공간 서버로 전달하여 개발자가 파일 시스템을 시험하거나 특수한 데이터 원천에 연결할 수 있도록 한다. 전통적인 커널 내부 파일 시스템과 비교하여 개발·디버깅의 유연성을 제공한다.

FUSE 호환 계층

가상 파일 시스템

디스크 장치

파티션과 디스크 레이블

논리 볼륨과 소프트웨어 RAID

암호화 저장 장치

파일 시스템 검사와 복구

장치와 드라이버

장치 모델

자동 구성

버스 계층

장치 드라이버의 머신 독립성

PCI와 PCI Express

USB

저장 장치 컨트롤러

네트워크 장치

그래픽 장치

입력 장치

오디오 장치

센서와 환경 모니터링

펌웨어 로딩

의사 장치

장치 드라이버 개발

네트워크

TCP/IP 스택

IPv4와 IPv6

소켓 인터페이스

네트워크 인터페이스

라우팅

브리지와 VLAN

터널링

무선 네트워크

블루투스

NPF

NetBSD Packet Filter(NPF)는 방화벽 규칙과 연결 상태 검사에 사용하는 네트워크 패킷 필터링 프레임워크다. 관리자 도구로 주소, 인터페이스, 프로토콜과 포트에 따른 네트워크 정책을 적용할 수 있다. 커널 네트워크 처리와 사용자 공간 관리 기능이 함께 동작한다.

IPsec

네트워크 서비스

네트워크 성능과 확장성

보안

사용자와 그룹

파일 권한

인증

권한 분리

Kernel Authorization

Veriexec

PaX 기능

주소 공간 배치 난수화

실행 메모리 보호

암호화 기능

보안 감사

보안 권고와 수정 배포

기본 보안 정책

가상화와 커널 활용

Xen

Xen 호스트

Xen 게스트

NVMM

NVMM은 NetBSD의 하드웨어 지원 가상화 인터페이스다. 가상 머신 모니터가 CPU 가상화 기능을 활용하여 게스트 시스템의 실행을 관리하도록 지원한다. QEMU 등 사용자 공간 가상화 구성 요소와 결합될 수 있으며, 호스트 및 CPU별 기능 지원을 확인해야 한다.

QEMU와 하드웨어 에뮬레이션

가상 네트워크

가상 저장 장치

rump 커널

rump 커널은 NetBSD의 커널 구성 요소를 일반 커널 이외의 실행 환경에서 재사용하도록 하는 기술이다. 파일 시스템과 네트워크 등의 코드를 사용자 공간에서 실행하거나 테스트할 수 있으며, 커널 기능의 독립적인 검증과 응용 연구에 활용된다. NetBSD의 코드 이식성이 운영체제 밖의 실행 모델로 확장되는 사례다.

Anykernel 아키텍처

사용자 공간에서의 커널 구성 요소 실행

테스트와 임베디드 환경에서의 활용

하드웨어 플랫폼과 포트

포트의 개념

포트의 지원 상태

amd64

i386

AArch64

ARM

MIPS

PowerPC

SPARC와 SPARC64

m68k

Alpha

VAX

SH3

그 밖의 아키텍처

개인용 컴퓨터

서버와 워크스테이션

임베디드 보드

휴대용 장치

게임기

과거의 컴퓨터 시스템

에뮬레이터와 가상 머신

플랫폼 이식

새로운 포트의 구성

부트로더 이식

머신 의존 코드

메모리 관리 장치 지원

인터럽트 컨트롤러

버스와 장치 열거

콘솔과 초기 입출력

장치 드라이버 재사용

교차 빌드 환경

설치 매체 생성

포트 유지보수

부팅과 초기화

펌웨어와 부트 환경

BIOS

UEFI

Open Firmware

플랫폼별 펌웨어

부트로더

커널 로딩

루트 파일 시스템

init

rc.d

다중 사용자 모드

단일 사용자 모드

종료와 재시작

시스템 관리

sysinst

기본 설치

시스템 구성 파일

사용자와 그룹 관리

서비스 관리

장치 관리

디스크 관리

네트워크 설정

시간과 로케일

시스템 로그

주기적 작업

백업과 복원

장애 진단

원격 관리

소프트웨어와 패키지 관리

pkgsrc

pkgsrc는 NetBSD의 외부 소프트웨어 포트·패키지 프레임워크이며, NetBSD 외에도 여러 UNIX 계열 시스템을 지원한다. 원본 소스 다운로드, 패치, 컴파일 옵션과 의존성 처리를 표준화해 같은 소프트웨어를 여러 플랫폼에 배포할 수 있게 한다. 바이너리 패키지의 설치와 소스 기반 빌드는 별개의 작업 흐름이지만 공통된 패키지 메타데이터를 활용한다.[10]

패키지 소스 트리

바이너리 패키지

pkg_add와 pkg_delete

pkgin

패키지 빌드

빌드 옵션

의존성 관리

패키지 라이선스 정책

보안 취약점 관리

분기별 pkgsrc 릴리스

다른 운영체제에서의 pkgsrc

소프트웨어 저장소

그래픽과 데스크톱 환경

wscons

X Window System

X.Org

그래픽 드라이버

윈도 관리자

데스크톱 환경

GTK와 Qt 응용 프로그램

글꼴과 국제화

오디오와 멀티미디어

프린터와 스캐너

노트북 지원

절전과 전원 관리

데스크톱 운영체제로서의 활용

NetBSD에서는 X Window System과 지원되는 윈도 관리자, 데스크톱 환경을 설치하여 그래픽 워크스테이션을 구성할 수 있다. 실제 지원되는 드라이버와 응용 프로그램은 CPU 아키텍처별로 다르며, 특히 과거의 컴퓨터에서는 현대 그래픽 스택과 성능 요건을 고려해야 한다. NetBSD의 통합된 사용자 공간은 CLI와 GUI 환경 모두에서 공통 기반을 제공한다.

개발 환경

소스 트리

CVS 저장소

Git 미러

build.sh

build.sh는 NetBSD 소스 트리의 표준화된 빌드 진입점으로, 도구 체인·커널·사용자 공간과 설치 매체를 순서에 맞게 생성한다. 빌드의 목적지와 대상 플랫폼을 명시해 네이티브 빌드와 교차 빌드를 같은 구조로 처리할 수 있다. 개발자는 포트별 커널 구성 파일과 함께 사용해 다양한 하드웨어용 출력을 생성한다.

네이티브 빌드

교차 컴파일

커널 빌드

사용자 공간 빌드

컴파일러와 도구 체인

디버거

정적 분석

자동화된 시험

ATF와 Kyua

커널 디버깅

크래시 덤프

코딩 규칙

매뉴얼 페이지

릴리스와 유지보수

정식 릴리스

주요 릴리스

유지보수 릴리스

안정 브랜치

NetBSD-stable

NetBSD-current

NetBSD-current는 개발 중인 운영체제 소스 코드가 통합되는 브랜치로, 새로운 기능과 변경이 정식 릴리스보다 먼저 나타난다. 시스템 개발과 테스트에는 유용하지만 운영 중인 서버나 임베디드 장치에서는 안정된 릴리스의 지원 정책과 구분해야 한다. 보안 갱신과 릴리스 정비는 별도의 브랜치 운영 체계에서 이루어진다.

자동 빌드

릴리스 엔지니어링

지원 수명

보안 업데이트

소스 기반 업데이트

바이너리 업그레이드

이전 버전과의 호환성

표준과 상호 운용성

POSIX

Single UNIX Specification

ISO C

BSD 인터페이스

네트워크 표준

파일 형식 호환성

외부 운영체제 바이너리 실행

Linux 바이너리 호환성

SunOS와 다른 UNIX 호환성

32비트와 64비트 호환성

소스 코드 이식성

활용 분야

서버

네트워크 장비

저장 장치와 어플라이언스

임베디드 시스템

산업용 장치

연구와 운영체제 개발

교육

보안 연구

레거시 하드웨어 보존

데스크톱과 워크스테이션

가상화 환경

프로젝트와 개발 공동체

NetBSD 프로젝트

The NetBSD Foundation

코어 팀

개발자와 커밋 권한

기술 책임자

릴리스 엔지니어링 팀

보안 팀

포트 유지관리자

기여 절차

메일링 리스트

개발자 회의와 행사

기부와 재정

프로젝트 인프라

라이선스

BSD 계열 라이선스

2조항 BSD 라이선스

소스 파일별 라이선스

외부 코드의 라이선스

재배포와 상용 이용

상표와 로고

다른 운영체제와의 관계

Research UNIX와 BSD

386BSD

FreeBSD

OpenBSD

DragonFly BSD

BSD/OS

Darwin과 macOS

Linux

Solaris와 illumos

MINIX

다른 유닉스 계열 운영체제

영향과 파생 기술

다른 운영체제에 제공된 코드

상용 제품에서의 활용

네트워크 장비와 임베디드 제품

pkgsrc의 확산

rump 커널의 영향

운영체제 이식성 연구

레거시 플랫폼 보존

BSD 생태계에서의 위치

장점과 한계

관련 문서

  1. The NetBSD Project ↩
  2. The History of the NetBSD Project ↩
  3. NetBSD: Portability and supported hardware platforms ↩
  4. The NetBSD Guide: Crosscompiling NetBSD with build.sh ↩
  5. The pkgsrc Guide: What is pkgsrc? ↩
  6. NetBSD Releases ↩
  7. Announcing NetBSD 11.0 RC7 ↩
  8. The NetBSD Project: History ↩
  9. NetBSD Guide: Building the system ↩
  10. NetBSD pkgsrc Guide ↩