FreeBSD

FreeBSD는 BSD 계통의 자유·오픈 소스 유닉스 계열 운영체제이다. 캘리포니아 대학교 버클리에서 개발된 BSD와 386BSD를 계승하며, 1993년에 시작된 FreeBSD 프로젝트가 커널과 기본 사용자 공간, 시스템 관리 도구, 문서와 빌드 체계를 함께 개발하고 배포한다.

분류유닉스 계열 운영체제, BSD, 자유 소프트웨어, 오픈 소스 소프트웨어
개발FreeBSD 프로젝트
계통Research UNIX → BSD → 386BSD → FreeBSD
최초 공개1993년 11월
최신 안정판15.1-RELEASE
커널FreeBSD 커널
커널 구조모놀리식 커널, 적재 가능 커널 모듈
기본 사용자 공간FreeBSD 기본 시스템
구현 언어C, 어셈블리어, 셸 스크립트
기본 파일 시스템UFS, OpenZFS
패키지 관리pkg, Ports Collection
가상화와 격리Jail, bhyve
보안 체계Capsicum, MAC, 감사, 보안 수준
주요 플랫폼AMD64, ARM64, RISC-V, PowerPC
소스 모델기본 시스템과 커널을 하나의 소스 트리에서 개발
주요 라이선스BSD 2-Clause License, 기타 호환 라이선스
개발 상태개발 중
데스크톱 환경CLI
FreeBSD

FreeBSD는 BSD 계통의 자유·오픈 소스 유닉스 계열 운영체제이다. 캘리포니아 대학교 버클리에서 개발된 BSD와 386BSD를 계승하며, 1993년에 시작된 FreeBSD 프로젝트가 커널과 기본 사용자 공간, 시스템 관리 도구, 문서와 빌드 체계를 함께 개발하고 배포한다.

FreeBSD는 Linux처럼 운영체제 커널만을 가리키는 이름이 아니다. FreeBSD라는 이름은 커널, 시스템 라이브러리, 명령줄 도구, 부팅 체계, 네트워크 도구, 서비스 관리 체계와 기본 설명서를 포함하는 통합된 기본 운영체제를 가리킨다. 웹 서버, 저장 장치, 네트워크 장비, 클라우드 기반 시설과 임베디드 시스템에 사용되며, 데스크톱 운영체제로도 구성할 수 있다.

운영체제의 기본 시스템은 하나의 프로젝트와 소스 트리를 중심으로 개발되지만, 일반 응용 프로그램은 바이너리 패키지를 관리하는 pkg와 소스 기반 빌드 체계인 Ports Collection을 통해 설치한다. 이러한 구분은 운영체제 자체와 외부 응용 프로그램의 생명 주기, 빌드와 유지보수를 분리하면서도 일관된 시스템 관리 환경을 제공한다.

FreeBSD는 네트워크 스택과 저장 장치 기능, 대칭형 다중 처리, 가상 메모리, 보안과 시스템 관리를 주요 기반으로 발전해 왔다. UFS와 OpenZFS를 지원하며, OpenZFS를 루트 파일 시스템으로 사용하거나 스냅샷과 복제, 저장소 풀, 부팅 환경을 구성할 수 있다. 프로세스와 네트워크, 파일 시스템을 격리하는 Jail, 가상 머신을 실행하는 bhyve, 파일 디스크립터를 capability로 사용하는 Capsicum도 FreeBSD의 대표적인 시스템 기능이다.

FreeBSD 프로젝트는 전 세계 개발자와 기여자가 참여하는 공동체 방식으로 운영된다. 커미터가 소스 코드와 Ports, 문서를 관리하며, 선출된 Core Team과 릴리스 엔지니어링, 보안, Ports 관리, 문서와 기반 시설을 담당하는 여러 팀이 프로젝트의 방향과 운영을 조정한다. 소스 코드는 허용적인 BSD 계열 라이선스를 중심으로 배포되어 자유 소프트웨어와 상용 제품 모두에서 사용할 수 있다.

역사

UNIX와 BSD

FreeBSD의 운영체제 계보는 벨 연구소의 Research UNIX와 버클리에서 확장된 Berkeley Software Distribution으로 거슬러 올라간다. 버클리의 4.2BSD와 4.3BSD는 TCP/IP와 소켓 API를 정착시키는 데 중요한 역할을 했으며, 4.4BSD-Lite는 이후 자유 BSD 운영체제의 법적·기술적 토대가 되었다. FreeBSD는 이 역사에서 직접 이어지는 독립 프로젝트로, 오늘날에는 커널뿐 아니라 통합된 사용자 공간과 배포·문서 체계를 함께 관리한다.[1]

386BSD와 비공식 패치킷

William Jolitz의 386BSD는 Net/2 계열의 BSD를 Intel 80386 PC에서 실행할 수 있게 만든 배포판이었다. 사용자들은 장치 지원과 안정성을 개선하는 비공식 패치킷을 공유했지만 변경 사항을 하나의 공식 릴리스로 통합하기가 쉽지 않았다. 이러한 배경에서 독립적인 유지보수와 배포 체계를 갖춘 NetBSD와 FreeBSD가 1993년 각각 출범했다.

FreeBSD 프로젝트의 창설

Jordan Hubbard, Nate Williams, Rod Grimes를 비롯한 초기 개발자들이 1993년 FreeBSD 프로젝트를 시작했다. PC 호환 시스템에서 사용할 수 있는 BSD 운영체제를 제공하고 인터넷 기반 공동 개발과 배포를 추진했다. 초기에는 386BSD와 패치킷의 계보를 기반으로 발전했으며 이후 4.4BSD-Lite 소스의 수용과 함께 독자적인 운영체제 프로젝트로 자리잡았다.

FreeBSD 1과 법적 전환

1993년의 FreeBSD 1.x는 초기 공개 BSD의 PC 이식 계보를 사용했다. 그러나 UNIX System Laboratories와 BSDi 사이의 법적 분쟁과 1994년 합의를 거치며 코드 기반을 재정비해야 했다. FreeBSD 2.x는 4.4BSD-Lite를 기반으로 이전 소스에서 벗어난 새로운 장기 개발 계통을 형성했다.

FreeBSD 2와 초기 보급

FreeBSD 3과 4

FreeBSD 3.x에서는 대칭형 다중처리와 64비트 플랫폼 지원 등 현대적인 서버 운영체제에 필요한 기능을 확장했다. FreeBSD 4.x 시기에는 네트워크 성능과 안정성에 대한 평가가 높았으며 Jail을 비롯한 운영체제 수준의 격리 기능이 등장했다. 이 시기의 커널 설계는 이후 FreeBSD 5.x의 동시성 구조 개편과 연결된다.

FreeBSD 5와 현대적 커널 구조

FreeBSD 5는 SMPng 작업을 통해 거대한 전역 커널 잠금에 대한 의존을 줄이고 여러 CPU가 커널 기능을 동시에 수행할 수 있게 하는 구조로 전환했다. GEOM 저장 장치 프레임워크, 새로운 스레드 처리와 파일 시스템 개선도 이 세대의 중요한 과제였다. 커널 하위 시스템별 잠금과 동기화가 발전하면서 확장 가능한 서버 운영체제의 기반이 강화되었다.

FreeBSD 6부터 9까지

FreeBSD 10부터 12까지

FreeBSD 13과 14

FreeBSD 13과 14 계열은 현대적인 CPU와 서버 플랫폼 지원, LLVM 도구 체인, OpenZFS와 네트워크·가상화 기능을 지속적으로 갱신했다. 정식 릴리스와 보안 업데이트를 구분하는 개발 체계가 유지되며, 사용자에게는 동일 주요 버전 내 업데이트와 주요 버전 업그레이드에 서로 다른 절차가 제공될 수 있다.

FreeBSD 15 이후

명칭과 범위

FreeBSD라는 이름

커널과 완전한 운영체제

FreeBSD 프로젝트는 커널만을 배포하지 않고 시스템 라이브러리, 기본 UNIX 명령줄 도구, 네트워크 데몬, 부트로더, 설정 파일과 설명서를 포함한 베이스 시스템을 배포한다. 외부 응용 프로그램 패키지는 별도의 포트·패키지 인프라로 관리한다. 이러한 모델은 리눅스 커널과 별도의 배포판 프로젝트가 조합되는 일반적인 Linux 배포 방식과 조직 구조에서 차이가 있다.

기본 시스템과 외부 소프트웨어

BSD 계통에서의 위치

UNIX 상표와 유닉스 호환성

시스템 구성

기본 시스템

FreeBSD 베이스 시스템은 커널, 부트로더, 표준 라이브러리, 셸, 필수 명령, 시스템 서비스와 개발·관리 도구를 포함한다. 기본 시스템은 FreeBSD의 소스 관리와 릴리스 공정에서 통합적으로 시험된다. 외부 패키지는 주로 /usr/local 이하에 설치되어 베이스 시스템과 파일 배치 및 갱신 정책을 구분할 수 있다.

커널

시스템 라이브러리

사용자 공간 도구

부트 로더와 부팅 환경

시스템은 플랫폼의 펌웨어에서 시작하여 FreeBSD 로더가 커널과 필요한 모듈을 메모리로 적재하는 과정을 거친다. 이후 커널이 장치를 초기화하고 루트 파일 시스템을 마운트한 다음 사용자 공간의 초기화 프로세스를 시작한다. ZFS 루트 구성을 사용하는 경우 부팅 환경을 통해 서로 다른 시스템 상태를 선택할 수 있다.

초기화와 서비스 관리

시스템 설정

매뉴얼 페이지와 문서

커널 구조

모놀리식 커널

FreeBSD 커널은 프로세스, 가상 메모리, 네트워크와 파일 시스템 등 핵심 기능을 하나의 커널 주소 공간에서 실행하는 모놀리식 설계를 따른다. 하위 시스템은 모듈화되어 있고 일부 기능은 실행 중 커널 모듈로 적재할 수 있다. 모듈형 구성은 마이크로커널처럼 모든 주요 서비스를 사용자 공간 서버로 분리한다는 뜻은 아니다.

커널 모듈

시스템 호출 인터페이스

프로세스와 스레드

스케줄러

가상 메모리

장치 모델과 드라이버

인터럽트와 타이머

SMP와 NUMA

커널 객체와 자원 관리

파일 시스템과 저장 장치

가상 파일 시스템

UFS

UFS는 BSD 전통의 Fast File System 계열을 계승하는 파일 시스템이다. inode, 디렉터리, 블록 그룹 배치 등으로 파일과 메타데이터를 관리하며 FreeBSD에서는 오랫동안 시스템 저장소로 이용되었다. 최신 스토리지에서는 OpenZFS가 대안으로 널리 사용되지만 UFS도 운영 목적에 따라 선택할 수 있는 지원 파일 시스템이다.

OpenZFS

OpenZFS는 저장 장치 풀과 파일 시스템을 통합하는 스토리지 플랫폼으로, 체크섬, 스냅샷, 복제, 압축과 다양한 중복성 구성을 제공한다. FreeBSD에서는 루트 파일 시스템과 서버 저장소에 활용할 수 있으며 Jail을 위한 데이터셋 분리와 부팅 환경 관리에도 이용한다. 스냅샷과 디스크 중복성은 다른 위치에 보관하는 백업과 서로 다른 목적을 가진다.[2]

다른 파일 시스템

GEOM 저장 장치 프레임워크

GEOM은 블록 장치에 계층형 변환·관리 기능을 제공하는 FreeBSD 프레임워크다. 디스크 파티션, 암호화 및 소프트웨어 RAID 등 여러 저장 장치 처리를 공통된 블록 계층으로 다룰 수 있다. 파일 시스템은 GEOM이 노출하는 논리 장치를 사용하여 물리 장치의 배치와 독립적으로 데이터를 저장한다.

소프트웨어 RAID

디스크 암호화

스냅샷과 복제

ZFS 부팅 환경

네트워크 파일 시스템

네트워크

네트워크 스택

소켓 인터페이스

IPv4와 IPv6

라우팅과 게이트웨이

방화벽

네트워크 인터페이스와 드라이버

무선 네트워크

네트워크 가상화

고성능 네트워크 처리

프로세스와 시스템 관리

사용자와 그룹

파일과 권한

프로세스 관리

서비스 관리

시스템 로그

자원 제한

작업 예약

시스템 조정

전원 관리

소프트웨어 설치와 관리

기본 시스템과 응용 프로그램의 구분

pkg

pkg는 FreeBSD의 바이너리 패키지 설치·조회·업그레이드·제거 도구다. 패키지 저장소의 메타데이터와 의존성 정보를 바탕으로 응용 프로그램 및 필요한 라이브러리를 관리한다. 베이스 시스템 전체를 갱신하는 작업과 서드파티 패키지를 업그레이드하는 작업은 구분해야 하며, 지원 버전에 따라 기본 시스템을 패키지로 제공하는 접근도 발전하고 있다.

Ports Collection

FreeBSD Ports Collection은 외부 소프트웨어를 빌드하고 패키지화하기 위한 이식·빌드 정의를 모은 저장소다. 포트는 원본 소스 다운로드와 검증, 패치 적용, 빌드 옵션, 의존성 및 설치 메타데이터를 기술한다. 바이너리 패키지가 빠른 설치에 적합하다면 포트는 컴파일 옵션을 변경하거나 패키징 방식을 이해할 때 유용하다.

포트의 구성과 빌드

패키지 저장소

소프트웨어 업데이트

기본 시스템 업데이트

소스 기반 빌드와 world

교차 빌드

Jail과 컨테이너

Jail의 개념

Jail은 하나의 FreeBSD 커널을 공유하면서 프로세스, 파일 시스템, 사용자와 네트워크 자원을 논리적으로 분리하는 운영체제 수준의 격리 기능이다. 서로 다른 운영체제 커널을 부팅하는 전체 가상 머신과 구분된다. Jail 내부에서 실행되는 프로세스에는 호스트가 허용한 접근 범위와 관리 인터페이스가 제공된다.[3]

chroot와의 차이

전통적 Jail

Thin Jail

VNET Jail

VNET Jail은 Jail마다 독립적인 가상 네트워크 스택을 제공해 네트워크 인터페이스, 주소, 라우팅과 방화벽 정책을 별도로 구성할 수 있게 한다. 전통적인 Jail의 제한된 네트워크 뷰보다 유연한 네트워크 분리가 가능하다. Jail 간 연결이나 외부 네트워크 연결은 가상 인터페이스와 브리지·라우팅 정책으로 구성할 수 있다.

서비스 Jail

Linux Jail

자원 제한

ZFS와 Jail

ZFS 데이터셋을 Jail에 할당하여 파일 시스템 경계를 명확하게 하고 스냅샷·복제와 저장소 할당을 관리할 수 있다. 설정에 따라 Jail 관리자에게 특정 데이터셋 하위 트리의 관리 권한만 위임할 수도 있다. 이렇게 하면 호스트의 전체 저장소를 공개하지 않고도 Jail 안에서 파일 시스템 작업을 수행할 수 있다.[4]

Jail 관리 도구

다른 컨테이너 기술과의 관계

가상화

bhyve

bhyve는 FreeBSD에서 하드웨어 지원 가상화를 이용하는 하이퍼바이저다. 게스트 가상 머신에 가상 CPU, 메모리, 스토리지와 네트워크 장치를 제공하며, Jail처럼 호스트 커널을 공유하는 구조와 달리 게스트 운영체제의 커널을 별도로 실행한다. FreeBSD를 가상화 호스트로 활용할 때 중요한 구성 요소다.

vmm 커널 인터페이스

가상 머신 구성

네트워크와 저장 장치 가상화

bhyve와 Jail의 결합

Xen 지원

다른 하이퍼바이저의 게스트로서 FreeBSD

클라우드 이미지

보안

UNIX 권한 모델

사용자와 특권 분리

보안 수준

Mandatory Access Control

Capsicum

Capsicum은 FreeBSD의 capability 기반 보안 메커니즘으로, 프로그램이 가진 파일 디스크립터의 권한을 제한하고 새 전역 자원에 접근하는 능력을 축소할 수 있게 한다. 이를 통해 권한이 넓은 프로그램의 일부 코드를 제한된 작업 영역으로 분리하는 보안 설계를 구현할 수 있다. 애플리케이션이 이러한 API를 실제로 사용하도록 설계되어야 효과를 얻을 수 있다.

Jail 기반 격리

시스템 감사

디스크와 파일 암호화

패킷 필터링

보안 권고와 수정 배포

보안 대응 조직

호환성과 이식성

POSIX 호환성

UNIX 응용 프로그램 호환성

Linux 바이너리 호환 계층

FreeBSD는 일부 Linux 사용자 공간 바이너리를 실행할 수 있도록 Linux 시스템 호출과 동작을 흉내 내는 호환 계층을 제공한다. 이는 Linux 커널 전체를 실행하는 가상화와 구별되며, 라이브러리 및 ABI 조건을 만족하는 응용 프로그램에 적합하다. 지원되는 기능과 시스템 호출은 FreeBSD 버전과 프로그램의 요구 사항에 따라 달라진다.

외부 소프트웨어 이식

응용 프로그램 바이너리 인터페이스

커널 모듈 인터페이스

이전 릴리스와의 호환성

지원 플랫폼

AMD64

AMD64는 현대 FreeBSD의 대표적인 범용 서버·데스크톱 플랫폼이다. UEFI와 여러 PC·서버 장치, SMP, 64비트 가상 메모리 및 다양한 네트워크·스토리지 드라이버를 활용할 수 있다. 실제 지원 장치와 그래픽 기능은 FreeBSD 릴리스 및 드라이버 상태를 기준으로 확인한다.

ARM64

RISC-V

PowerPC

이전에 지원한 플랫폼

Tier 분류

서버와 워크스테이션

단일 보드 컴퓨터

임베디드 시스템

그래픽과 데스크톱 환경

콘솔 환경

그래픽 스택

X Window System

Wayland

데스크톱 환경

오디오와 멀티미디어

입력 장치

데스크톱 운영체제로서의 FreeBSD

개발 환경

기본 컴파일러와 도구 체인

LLVM과 Clang

FreeBSD의 기본 도구 체인에는 LLVM 프로젝트의 Clang 컴파일러와 LLVM 기반 링커·개발 도구가 중요한 역할을 한다. 운영체제의 C·C++ 구성 요소를 빌드하고 대상 플랫폼별 실행 파일을 생성하는 데 사용한다. 컴파일러, 링커, 어셈블러와 디버거의 조합은 릴리스 및 아키텍처에 따라 달라질 수 있다.

링커와 디버거

make와 빌드 체계

C와 시스템 프로그래밍

프로그래밍 언어 지원

개발 도구와 편집기

커널 모듈 개발

시스템 호출과 드라이버 개발

FreeBSD 개발

소스 트리

src, ports와 doc

CURRENT, STABLE과 RELEASE

CURRENT는 새로운 기능과 큰 구조 변경이 먼저 통합되는 개발 흐름이며 STABLE은 해당 주요 버전의 유지·개선 브랜치다. RELEASE는 특정 시점의 코드를 시험하고 정식 배포 이미지와 패키지·문서로 제공하는 결과물이다. 사용자는 개발 브랜치와 정식 릴리스의 안정성·업데이트 방식을 구분해 배포 목적에 맞는 체계를 선택한다.

릴리스 브랜치

코드 검토

테스트와 지속적 통합

커미터와 기여자

릴리스 엔지니어링

보안 지원 주기

프로젝트와 거버넌스

FreeBSD 프로젝트

커미터 제도

Core Team

관리 팀

FreeBSD Foundation

FreeBSD Foundation은 FreeBSD 프로젝트와 생태계를 지원하는 비영리 조직으로 개발 후원, 인프라, 교육, 행사와 보급 활동에 참여한다. 그러나 FreeBSD의 모든 코드 결정을 Foundation이 직접 단독으로 수행하는 것은 아니다. 개발 공동체와 Core Team, 커미터 및 여러 기술 담당 팀이 프로젝트 운영에 관여한다.

의사 결정과 선거

메일링 리스트와 개발 공동체

회의와 개발자 행사

문서화 프로젝트

라이선스

BSD 라이선스

BSD 2-Clause License

기본 시스템의 라이선스 구성

외부 구성 요소의 라이선스

상용 제품에서의 이용

파생 운영체제와 소스 공개

주요 파생 운영체제와 제품

데스크톱 계열

GhostBSD, PC-BSD, TrueOS, DesktopBSD와 NomadBSD는 FreeBSD를 사용자 친화적인 그래픽 환경 또는 휴대용 데스크톱으로 재구성한 프로젝트들이다. 각 프로젝트의 지원 상태와 운영체제 기반은 서로 다르다. 특히 PC-BSD는 TrueOS로 계승되었고, NomadBSD는 라이브 USB 사용 사례를 중심으로 발전했다.

방화벽과 네트워크 장비

m0n0wall에서 분기한 pfSense와, 다시 pfSense에서 독립한 OPNsense는 FreeBSD 기반의 방화벽·라우터 운영체제 계보를 형성한다. 이들 시스템은 웹 UI와 네트워크 정책 관리, VPN, 라우팅 및 주소 변환을 통합한다. 계보의 순서는 기술적 분기를 뜻하며 각 제품의 라이선스·관리 기능·업데이트 정책이 동일하다는 의미는 아니다.

저장 장치 운영체제

FreeNAS와 후속 TrueNAS CORE는 FreeBSD의 스토리지 및 네트워크 기능을 기반으로 NAS 운영체제를 구성한 프로젝트다. ZFS 저장 풀, 스냅샷, 네트워크 파일 공유와 웹 관리 UI를 통합했다. 최신 TrueNAS의 일부 제품 계열은 Linux 기반으로 전환했으므로 FreeBSD 기반 CORE와 현재의 Linux 제품을 구분해야 한다.

서버와 클라우드 제품

게임기와 상용 시스템

FreeBSD 기반 전용 운영체제

다른 운영체제와의 관계

Research UNIX

BSD

NetBSD

OpenBSD

DragonFly BSD

Linux

illumos

macOS와 Darwin

상용 UNIX

활용 분야

웹과 네트워크 서버

저장 장치와 파일 서버

방화벽과 라우터

클라우드 기반 시설

콘텐츠 전송 네트워크

가상화 호스트

임베디드 시스템

데스크톱과 워크스테이션

연구와 운영체제 교육

영향

BSD 운영체제 계통

네트워크 기술

Jail과 운영체제 수준 가상화

Capsicum과 capability 보안

OpenZFS 생태계

상용 운영체제와 제품

오픈 소스 운영체제 개발 방식

장점과 한계

  1. FreeBSD: Explaining BSD ↩
  2. FreeBSD Handbook: ZFS ↩
  3. FreeBSD Handbook: Jails and Containers ↩
  4. FreeBSD Handbook: Jails ↩