TL;DR

  • rust-bhyve는 Rust로 작성된 illumos용 사용자 공간 가상 머신 모니터(VMM)로, x86_64 SmartOS 및 기타 illumos 배포판에서 실행되지만 실험 단계이며 프로덕션 지원 대상이 아님.
  • rshyve는 SmartOS bhyve 영역 브랜드가 생성하는 명령줄을 받아 UEFI·Linux 직접 부팅, virtio·NVMe·AHCI CD-ROM·VNC·vTPM·PCI 패스스루·제어 소켓·라이브 마이그레이션을 제공함.
  • firehyve는 Linux 커널 직접 부팅과 virtio 장치·직렬 콘솔만 제공하는 마이크로VM이며, fhrun은 그 안에서 Linux 바이너리를 자식 프로세스처럼 실행함.
  • 바이너리는 illumos에서만 실행되고 illumos 호스트에서 빌드되며, 단위 테스트는 Linux와 macOS에서도 실행됨.
  • 라이브 마이그레이션 인증 부재와 FPU·XSAVE 상태 미전송 등 보안상 제약이 있으며, Propolis에서 파생된 코드와 libtpms를 포함하고 라이선스는 MPL-2.0임.

rust-bhyve

  • rust-bhyve는 Rust로 작성된 illumos bhyve용 사용자 공간 가상 머신 모니터(VMM)임.
  • SmartOS 및 기타 illumos 배포판의 x86_64에서 실행됨.
  • 실험 단계이며 프로덕션 지원 소프트웨어가 아니고 공개 릴리스가 없음.
  • 라이브 마이그레이션은 인증되지 않으며 FPU/XSAVE 상태를 전달하지 않음.
  • 신뢰할 수 없는 게스트를 실행하기 전에 SECURITY.md 확인이 필요함.

바이너리

  • rshyve
  • SmartOS bhyve 영역 브랜드가 구성하는 명령줄을 사용하므로, 영역에서 /usr/sbin/bhyve 대신 실행 가능함.
  • UEFI 펌웨어 또는 Linux 커널을 직접 부팅함.
  • virtio, NVMe, AHCI CD-ROM, VNC 프레임버퍼, vTPM, PCI 패스스루, 제어 소켓, 라이브 마이그레이션을 제공함.
  • bhyve의 모든 기능을 포함하지 않으며, 일부 플래그와 장치 옵션은 거부되고 일부는 수락 후 무시됨.
  • firehyve
  • 동일한 크레이트를 기반으로 하는 마이크로VM임.
  • Linux 커널을 직접 부팅하고 virtio 장치와 직렬 콘솔만 제공함.
  • 펌웨어, 마이그레이션, 제어 소켓은 제공하지 않음.
  • 처리할 수 없는 옵션 대부분을 시작 시 거부함.
  • bhyve 영역 브랜드가 모든 영역에 지정하는 부트 롬, 추가 직렬 백엔드, 프레임버퍼, xHCI 태블릿은 수락하고 로그를 남긴 뒤 무시함.
  • fhrun
  • firehyve 마이크로VM 내부에서 Linux 바이너리를 자식 프로세스처럼 실행함.
  • docs/features.md에서 각 바이너리가 지원하는 기능과 제한을 확인할 수 있음.

빠른 시작

  • 다음 구성으로 rshyve를 실행할 수 있음.
  • 가상 CPU 2개와 메모리 2GiB를 지정함.
  • /dev/zvol/rdsk/zones/disk0virtio-blk 디스크로 연결함.
  • net0virtio-net-viona 네트워크 장치로 연결함.
  • /usr/share/bhyve/uefi-rom.bin을 부트 롬으로 지정함.
  • 첫 번째 직렬 포트를 표준 입출력에 연결하고 myvm이라는 가상 머신을 실행함.

빌드

  • 바이너리는 illumos에서만 실행되므로 illumos 호스트에서 빌드해야 함.
  • 소스 저장소는 https://github.com/TritonDataCenter/rshyve에서 서브모듈과 함께 복제함.
  • cargo build --workspace --locked --release로 워크스페이스의 릴리스 바이너리를 빌드함.
  • cargo test --workspace --locked --no-fail-fast로 전체 테스트를 실행함.
  • 단위 테스트는 Linux와 macOS에서도 실행됨.
  • docs/testing.md에서 사전 요구 사항, 테스트 게스트 부팅 방법, 테스트 하네스 스크립트를 설명함.
  • SmartOS 노드의 영역에 rshyve를 사용하려면 노드에 설치한 뒤 영역이 해당 바이너리를 가리키도록 설정해야 함.
  • 플랫폼 이미지 사전 빌드는 공개되지 않음.
  • 플랫폼 설정 방법은 docs/platform.md에서 설명함.

상태

  • SmartOS의 bhyve API v18에서 테스트됨.
  • 테스트된 구성과 알려진 주의 사항은 docs/features.md에 정리됨.
  • 미해결 작업은 docs/roadmap.md에 정리됨.

문서

  • 아키텍처: 워크스페이스 구성, 핵심 타입, 데이터 흐름
  • 기능 참고: 각 바이너리의 지원 기능과 제한
  • 명령줄 참고: 플래그와 제어 명령
  • 장치: PCI, LPC, 커널 에뮬레이션 장치
  • 라이브 마이그레이션: 프로토콜, 상태, 오케스트레이터 계약
  • 메타데이터 에이전트: COM2를 통한 게스트 구성
  • 플랫폼 통합: SmartOS 영역에서 rshyve 실행
  • UEFI 펌웨어: FreeBSD edk2 펌웨어와 변수 저장소
  • fhrun: 매니페스트와 종료 코드
  • 테스트: 빌드, 단위 테스트, 테스트 게스트, 하네스
  • 로드맵: 미해결 작업
  • firehyve 부팅 측정: 초안 측정 보고서
  • 공개 보안 문제

Propolis 기반

  • 이 프로젝트는 Oxide Computer Company의 bhyve VMM인 Propolis의 코드를 사용함.
  • bhyveviona ioctl 바인딩, 주소 공간 관리자, PS/2 장치 모델은 변경 사항이 거의 없는 상태로 Propolis에서 가져옴.
  • PCI, UART, VM 종료 처리 계층의 일부도 Propolis에서 파생됨.
  • 두 프로젝트 모두 MPL-2.0을 사용함.
  • 파생된 각 파일에는 원본 상위 파일을 명시하는 헤더가 포함됨.
  • THIRD_PARTY.md에는 측정된 유사도가 기록되며, tools/propolis-derivation.py는 Propolis 체크아웃을 기준으로 유사도를 다시 측정함.

기여

  • CONTRIBUTING.md에서 빌드, CI가 검증하는 항목과 검증하지 않는 항목, 저장소 게이트, 커밋 형식을 설명함.
  • 운영자가 확인할 수 있는 변경 사항은 CHANGELOG.md에 기록됨.

보안

  • 취약점은 비공개 방식으로 신고해야 함.
  • 신고 절차는 SECURITY.md에서 확인할 수 있음.

라이선스

  • 라이선스는 MPL-2.0이며 전체 내용은 LICENSE에 포함됨.
  • 코드 일부는 MPL-2.0에 따라 Oxide Computer Company의 저작권이 적용되는 Propolis에서 복사되거나 파생됨.
  • libtpms는 3조 BSD 라이선스로 벤더링됨.
  • 저작권 및 출처 표시는 NOTICE에 있으며, 정확한 출처 정보는 THIRD_PARTY.md에 기록됨.