386BSD

386BSD는 William F. Jolitz와 Lynne Jolitz가 BSD를 Intel 80386 기반 IBM PC 호환 기종으로 이식하여 공개한 자유 재배포 유닉스 계열 운영체제이다. Jolix라고도 불리며, 특히 후기의 Release 1.0 계열을 가리키는 명칭으로 사용되었다.

분류유닉스 계열 운영체제, BSD, 자유 소프트웨어
개발자William F. Jolitz, Lynne Jolitz
기반BSD Net/2
최초 공개1992년 3월 17일
주요 공개판Release 0.0, Release 0.1, Release 1.0
후기 명칭Jolix
구현 언어C, 어셈블리어
커널 구조모놀리식 커널, 후기 공개판의 모듈형 구조
대상 플랫폼Intel 80386, IBM PC 호환 기종
라이선스BSD 계열 허가 라이선스
개발 상태역사적 프로젝트
주요 파생 운영체제NetBSD, FreeBSD

386BSD는 William F. Jolitz와 Lynne Jolitz가 BSD를 Intel 80386 기반 IBM PC 호환 기종으로 이식하여 공개한 자유 재배포 유닉스 계열 운영체제이다. Jolix라고도 불리며, 특히 후기의 Release 1.0 계열을 가리키는 명칭으로 사용되었다.

386BSD는 캘리포니아 대학교 버클리의 Computer Systems Research Group이 공개한 Net/2 소스에서 출발했다. Net/2는 AT&T의 독점 코드를 상당 부분 제거한 BSD 소스 배포판이었지만, 부팅 가능한 완전한 운영체제를 구성하는 데 필요한 커널 코드 일부가 빠져 있었다. William Jolitz는 누락된 부분을 구현하고 Intel 80386의 보호 모드, 페이징과 하드웨어 구조에 맞추어 BSD를 이식하였다.[1]

개발 과정은 1989년에 시작되었으며, 두 개발자는 1991년부터 《Dr. Dobb's Journal》에 연재한 Porting UNIX to the 386을 통해 프로세서 초기화, 가상 메모리, 프로세스 전환, 시스템 호출, 파일 시스템과 장치 입출력 등 이식 과정을 단계적으로 설명했다. 1992년 3월 17일 공개된 Release 0.0은 소스와 설치 파일을 여러 장의 플로피 디스크로 배포했으며, 뒤이어 나온 Release 0.1은 설치 가능성과 하드웨어 지원을 개선하여 더 널리 사용되었다.[2]

386BSD는 저렴한 개인용 컴퓨터에서 소스가 공개된 BSD 환경을 실행하고 운영체제 자체를 다시 빌드할 수 있게 했다는 점에서 의미가 있다. 당시 상용 워크스테이션이나 UNIX 라이선스 없이도 BSD 커널과 사용자 공간을 연구하고 수정할 수 있는 환경을 제공했으며, 인터넷을 통한 운영체제 소스 배포와 공동 개발이 확대되는 데 중요한 기반이 되었다.

Release 0.1 이후에는 여러 사용자가 오류 수정과 하드웨어 지원을 모은 비공식 386BSD Patchkit을 관리했다. 그러나 패치가 빠르게 증가한 데 비해 공식 소스에 변경 사항을 통합하는 과정은 원활하지 않았고, 프로젝트 운영과 개발 방향을 둘러싼 차이도 나타났다. 이러한 상황에서 1993년 NetBSD와 FreeBSD가 각각 별도의 프로젝트로 형성되었다. NetBSD는 코드 품질과 여러 하드웨어 아키텍처로의 이식성을 중심 목표로 삼았고, FreeBSD는 초기에는 Intel 80386 기반 PC에서의 완성도와 배포에 집중했다.[3][4]

386BSD 자체는 NetBSD나 FreeBSD처럼 장기간 지속되는 대규모 공동 개발 운영체제로 성장하지 않았지만, Net/2를 실제 PC에서 사용할 수 있는 운영체제로 연결하고 초기 자유 BSD 공동체가 형성되는 계기를 마련했다. 따라서 386BSD는 독립된 운영체제로서의 사용 기간보다 현대 오픈 소스 BSD 계통의 직접적인 출발점이자 1990년대 초 개인용 컴퓨터용 자유 유닉스 계열 운영체제의 발전을 촉진한 프로젝트로 평가된다.

명칭

386BSD

Jolix

BSD/386과의 구분

역사

BSD와 Intel 80386

Net/1과 Net/2

버클리 CSRG는 AT&T UNIX에 대한 의존을 제거한 BSD 소스 배포를 단계적으로 추진했다. 1989년의 Net/1은 네트워크 코드가 중심이었고, 1991년의 Net/2는 훨씬 넓은 운영체제 구성 요소를 포함했다. Net/2는 완전한 독립 운영체제로 부팅하기 위한 일부 코드가 빠져 있었으므로 386BSD의 작업은 누락 구현과 Intel PC용 이식을 함께 수행하는 것이었다.[5]

개발의 시작

Porting UNIX to the 386

William F. Jolitz와 Lynne Jolitz는 386BSD를 만드는 과정에서 Intel 80386으로 UNIX를 이식하는 문제를 《Dr. Dobb's Journal》 연재 기사로 설명했다. CPU의 보호 모드, 페이징, 인터럽트·예외 처리와 장치 입출력 등 저수준 시스템 구조가 다뤄졌다. 이는 기존 VAX BSD를 단순히 다시 컴파일하는 작업이 아니라 새로운 하드웨어에서 커널을 부팅하는 데 필요한 기계 의존 코드를 작성하는 과정이었다.

Release 0.0

1992년 3월 공개된 386BSD Release 0.0은 자유롭게 재배포 가능한 BSD 계열 시스템을 Intel 80386 PC에서 실행하는 초기 성과였다. 당시 컴퓨터의 BIOS와 플로피·하드 디스크 컨트롤러, 메모리 구조에 맞춰 구성되었다. 소스와 설치 파일은 초기 PC용 BSD 연구·사용 공동체의 기반이 되었다.

Release 0.1

Release 0.1은 초기 버전보다 설치와 시스템 사용을 개선해 더 널리 배포되었다. 기여자들은 커널과 라이브러리, 드라이버의 버그를 수정하고 새로운 하드웨어 지원을 추가하는 패치를 공유했다. 공식 소스와 패치킷의 통합을 둘러싼 어려움은 이후 독립된 BSD 개발 프로젝트가 등장하는 배경이 되었다.

비공식 386BSD Patchkit

비공식 386BSD Patchkit은 사용자와 개발자가 발견한 오류를 수정하고 운영체제 기능을 확장하기 위한 수정 모음이었다. 다양한 시스템 구성 요소를 개선했지만 패치의 유지·통합 방식은 중앙 집중적인 공식 릴리스와 차이가 있었다. 이러한 공동체 경험은 FreeBSD와 NetBSD의 독립적인 소스·릴리스 관리 방식에 영향을 주었다.

NetBSD의 분화

NetBSD는 1993년 386BSD의 소스와 패치 경험에서 출발하여 다양한 하드웨어로 이식할 수 있는 BSD 운영체제를 개발하는 방향을 택했다. 하나의 통합된 소스 트리와 기계 독립적 설계를 중시했으며 이후 여러 CPU 아키텍처의 포트를 발전시켰다.

FreeBSD의 분화

FreeBSD는 1993년 초기 386BSD 개발 공동체에서 별도의 운영체제 프로젝트로 출범했다. 초기에는 Intel PC 하드웨어에서 안정적이고 배포하기 쉬운 자유 BSD를 제공하는 데 집중했다. 이후 4.4BSD-Lite 기반 코드로 전환하고 서버·스토리지·가상화 등의 기능을 확장했다.

Release 1.0과 Jolix

Release 2.0과 후기 보존 활동

개발 목표

Intel 80386으로의 BSD 이식

Intel 80386은 32비트 보호 모드, 페이징과 특권 수준을 제공한다. 386BSD는 이 하드웨어의 메모리 관리, 예외·인터럽트, 프로세스 전환과 부팅 과정에 맞는 커널 코드를 구현해야 했다. 기존 BSD의 UNIX 프로세스와 파일 시스템 인터페이스를 유지하면서 PC 고유의 하드웨어 차이를 처리하는 것이 핵심이었다.

저비용 개인용 컴퓨터 지원

자유로운 소스 배포

자가 호스팅 개발 환경

386BSD는 운영체제 자체에서 C 컴파일러, 링커, 셸과 make를 실행해 시스템 프로그램을 빌드할 수 있는 UNIX 개발 환경을 제공했다. 소스 코드를 직접 읽고 커널이나 사용자 공간을 수정·재빌드할 수 있다는 점은 운영체제 연구와 교육에 의미가 있었다.

운영체제 설계 연구

시스템 구성

커널

사용자 공간

C 라이브러리

셸과 기본 명령어

개발 도구

시스템 설정

커널 구조

커널 초기화

프로세스와 스케줄링

시스템 호출

인터럽트와 예외 처리

장치 독립 계층

후기 공개판의 모듈형 구조

메모리 관리

Intel 80386 보호 모드

가상 주소 공간

페이징

80386의 페이징 장치는 가상 주소를 물리 주소에 연결하고 메모리 페이지별 접근 권한을 검사한다. 운영체제는 페이지 테이블 구성, 페이지 폴트와 주소 공간 전환을 처리해야 한다. 이 기초 기능은 BSD의 가상 메모리와 다중 프로세스 실행을 일반 PC에서 구현하는 데 사용되었다.

페이지 폴트

프로세스 이미지

메모리 매핑

프로세스와 실행 환경

프로세스 생성

프로그램 실행

문맥 교환

신호

사용자 모드와 커널 모드

멀티태스킹

파일 시스템

Fast File System

386BSD는 BSD에서 발전한 Fast File System 계열의 inode·블록 배치와 디렉터리 구조를 계승했다. 파일 시스템 계층은 사용자 공간의 파일 조작을 하드 디스크 등의 블록 장치와 연결한다. 당시의 저장 장치와 디스크 레이블 체계는 오늘날의 SATA·NVMe 환경과 달랐다.

가상 파일 시스템

vnode

버퍼 캐시

장치 파일

파일 시스템 검사와 복구

장치와 입출력

ISA 버스

디스크 컨트롤러

플로피 디스크

콘솔과 키보드

직렬 포트

네트워크 인터페이스

장치 드라이버의 한계

네트워크

BSD 소켓

TCP/IP

버클리 BSD의 소켓 API와 TCP/IP 구현은 386BSD에서도 네트워크 응용 프로그램을 위한 기반이 되었다. 프로세스는 네트워크 인터페이스의 세부 구현을 직접 다루지 않고 소켓으로 데이터를 송수신할 수 있다. 실제 통신 장치의 지원은 이식된 이더넷 드라이버와 네트워크 설정에 좌우되었다.

네트워크 인터페이스 계층

라우팅

네트워크 도구

인터넷을 통한 배포

지원 하드웨어

Intel 80386

IBM PC 호환 기종

메모리 요구 사항

저장 장치

디스플레이 어댑터

주변 장치

하드웨어 호환성의 한계

설치와 부팅

MS-DOS 기반 부트스트랩

설치 플로피

초기 배포판은 플로피 디스크 이미지와 소스 파일을 이용해 PC에 설치했다. 사용자는 부트 디스크로 시스템을 시작하고 파티션과 파일 시스템을 준비하여 기본 명령줄 환경을 구성했다. 현대 가상 머신에서 복원하려면 구형 디스크 컨트롤러 모델과 BIOS 환경을 적절히 선택해야 한다.

Tiny 386BSD

디스크 파티션 구성

파일 시스템 설치

초기 시스템 설정

현대 가상 머신에서의 실행

소프트웨어 개발 환경

C 컴파일러

어셈블러와 링커

make와 시스템 빌드

커널 재구성

자가 컴파일

응용 프로그램 이식

배포 방식

플로피 디스크 배포

FTP 배포

미러 사이트

패치킷 배포

386BSD Reference CD-ROM

소스 코드 보존

개발 체계와 공동체

Jolitz 중심의 개발

사용자와 기여자

비공식 패치 관리

패치 통합 문제

개발 방향의 차이

프로젝트 분화

라이선스

BSD 계열 라이선스

소스 코드 재배포

바이너리 배포

광고 조항

파생 저작물

법적 배경

Net/2의 코드 구성

UNIX System Laboratories와 BSDi의 소송

UNIX System Laboratories와 BSDi·캘리포니아 대학교 사이의 법적 분쟁은 1990년대 BSD 소스 코드의 공개와 배포에 영향을 미쳤다. 1994년 합의를 통해 4.4BSD-Lite가 배포되면서 후속 자유 BSD의 코드 기반을 정비하는 계기가 되었다. 상용 BSD/386·BSD/OS와 386BSD는 독립 프로젝트로 구별해야 한다.

386BSD와 소송의 관계

4.4BSD-Lite로의 전환

초기 BSD 파생 운영체제에 미친 영향

다른 운영체제와의 관계

Research UNIX

Berkeley Software Distribution

4.3BSD Net/2

BSD/386과 BSD/OS

Linux

4.4BSD-Lite

파생 운영체제

NetBSD

FreeBSD

OpenBSD

DragonFly BSD

간접적인 BSD 계통

영향

개인용 컴퓨터용 BSD

자유 유닉스 계열 운영체제

인터넷 기반 소프트웨어 배포

오픈 소스 운영체제 개발

현대 BSD 프로젝트의 형성

386BSD의 직접적인 후속 공동체에서는 FreeBSD와 NetBSD가 등장했다. OpenBSD는 NetBSD에서 분리되고 DragonFly BSD는 FreeBSD에서 분기했으므로 386BSD와는 간접적인 계보 관계다. BSD 운영체제마다 현재의 목표·코드 관리와 릴리스 체계는 다르다.

운영체제 교육과 연구

역사적 평가

기술적 의의

배포와 접근성

개발 체계의 한계

Linux와의 경쟁 환경

BSD 계통에서의 위치

보존과 현대적 실행

원본 소스와 배포 이미지

386BSD.org

소스 저장소

QEMU

QEMU를 이용한 구형 PC 에뮬레이션은 역사적인 386BSD 이미지와 소스를 시험하는 한 가지 방법이다. 당시 운영체제가 기대하는 BIOS, IDE·플로피 컨트롤러와 가상 메모리 등의 환경이 일치해야 하므로 실제 부팅 가능성은 개별 이미지와 에뮬레이션 설정에 따라 확인해야 한다.

VirtualBox

실제 구형 하드웨어

장점과 한계

관련 문서

  1. FreeBSD Documentation Portal: Explaining BSD ↩
  2. 386BSD: Running Light with 386BSD ↩
  3. The NetBSD Project: The History of the NetBSD Project ↩
  4. FreeBSD Documentation Archive: A Brief History of FreeBSD ↩
  5. FreeBSD: Explaining BSD ↩