4P by GN⁺ 11달전 | ★ favorite | 댓글 1개
  • 브라우저에서 Linux와 Windows NT를 실행할 수 있는 JavaScript/WASM 기반 PC 에뮬레이터로, Fabrice Bellard가 2011년 최초 x86 JS 에뮬레이터로 시작해 현재까지 발전시켜 온 프로젝트
  • TinyEMU 기반 C 코드를 emscripten으로 컴파일하며, VirtIO 디바이스를 활용해 파일시스템·네트워크·블록 디바이스를 지원
  • x86 64비트 CPU 에뮬레이션은 AVX-512, APX 등 최신 확장 명령어까지 포함하는 높은 완성도
  • RISC-V 32/64비트 CPU 에뮬레이션도 지원하며, Alpine Linux, Buildroot 등 다양한 배포판 실행 가능
  • JavaScript 엔진의 성능 벤치마킹, 브라우저 내 Unix 학습, 레거시 PC 소프트웨어 실행 등 실용적 활용 사례 보유

역사

  • 2011년 최초 버전은 JavaScript로 작성된 최초의 PC/x86 에뮬레이터로, QEMU의 x86 헬퍼와 디바이스 코드를 재활용
  • 2015년 asm.js 서브셋을 적용해 이를 지원하는 브라우저에서 속도 향상 달성
  • 2016년 RISC-V 에뮬레이터인 TinyEMU를 작성한 후, C 코드를 emscripten으로 JavaScript 변환
    • jor1k(Sebastian Macke)에서 영감받은 VirtIO 9P 파일시스템을 추가해 원격 파일시스템 접근 및 파일 import/export 용이
  • VirtIO 디바이스를 x86 JS 에뮬레이터에도 재활용하기 위해, JSLinux asm.js 코드를 C로 변환 후 다시 emscripten으로 JavaScript로 재변환하는 과정을 거침
    • 세밀한 튜닝을 통해 수작업 asm.js 버전보다 더 빠른 성능 달성
  • Windows NT 실행을 위해 초기에는 에뮬레이트된 Linux 내부에서 QEMU를 중첩 실행하는 방식 사용
    • x86 에뮬레이터가 AMD SVM 가상화 확장을 지원하므로 중첩 실행에서도 사용 가능한 수준
  • 현재 버전은 PS/2 키보드/마우스, IDE 디스크, 더미 VGA 등 누락된 PC 디바이스를 직접 에뮬레이션하여 Windows NT를 네이티브로 실행

x86 CPU 에뮬레이션

  • x86 CPU 에뮬레이션으로, 다음 기능 지원:
    • 펜티엄 클래스 CPU
    • x87 80비트 부동소수점(bit exact)
    • PAE
    • CMOV 명령들
    • MMX, SSE2 지원
    • AMD SVM 가상 머신 확장(Nested Page Table 지원)
    • RDPMC를 통한 명령어 카운트 읽기
  • 알려진 제한사항:
    • 메모리 접근 시 세그먼트 제한 및 권한 검사 미수행
    • 디버그 미지원(DRx 레지스터)

에뮬레이트 디바이스

  • 8259 PIC(Programmable Interrupt Controller)
  • 8254 PIT(Programmable Interrupt Timer)
  • 16450 UART(디버그 전용)
  • Real Time Clock
  • PCI 버스
  • VirtIO 콘솔, 9P 파일시스템, 네트워크, 블록 디바이스, 입력
  • Simple framebuffer
  • IDE 컨트롤러, PS/2 키보드/마우스, 더미 VGA 디스플레이(각각 선택사항)

RISC-V CPU 에뮬레이션

  • 32비트 또는 64비트 RISC-V CPU 에뮬레이션, 64비트 FPU 및 압축 명령어(compressed instructions) 지원
  • 현재 RISC-V 64비트 Buildroot 및 Fedora 배포판 제공
  • RISC-V 32비트 이미지는 여전히 사용 가능하나 더 이상 적극 유지보수되지 않음
    • buildroot-riscv32 콘솔 버전 및 X Window 버전 제공

성능

  • 2017년 기준 일반 데스크톱 PC에서 Firefox 브라우저 사용 시, x86 에뮬레이터가 약 100 MIPS로 실행
  • 내장 vmtime 유틸리티를 통해 상세 벤치마크 수행 가능

JavaScript 터미널

  • 원래 JSLinux 터미널의 개선 버전으로, 스크롤바URL 하이라이팅 지원

Linux 배포판

  • Alpine LinuxBuildroot 배포판 사용
  • vfsync, qemacs, tcc 등 커스텀 패키지 추가
  • Fluxbox 윈도우 매니저를 통한 선택적 X Window 지원

네트워킹

  • 에뮬레이터 내부에서 인터넷 접속 가능
  • Benjamin Burns가 제공하는 websocket VPN 사용
  • 대역폭 40 kB/s 제한, 공용 IP당 최대 2개 연결 허용

용도

  • JavaScript 엔진 벤치마킹(예: Linux 부팅 소요 시간 측정) 및 asm.js, WASM 등 새로운 브라우저 기술 활용
  • 브라우저를 벗어나지 않고 커맨드 라인 Unix 도구 학습
  • 브라우저 내 안전한 파일 접근(vfsync)
  • 레거시 PC 소프트웨어 실행

소스 코드 및 유사 프로젝트

  • RISC-V 버전 소스 코드는 TinyEMU 프로젝트에서 제공, 사전 컴파일된 설치 용이한 데모도 제공
  • 유사 프로젝트:
    • jor1k: OpenRISC OR1K CPU 에뮬레이터
    • v86: PC 에뮬레이터
    • angel: RISC-V CPU 에뮬레이터

CORS 설정이 잘못돼있어서 링크의 https://www.bellard.org/jslinux/ 가 아니라 https://bellard.org/jslinux/ 로 들어가야 정상적으로 작동하네요.